1、license校验的进一步破解
通过前文的破解,AMESim可以正常运行,在加载PlanarMechanical目录下的Demo时也不会报license错误(Shooters提供的license缺少planar_mechanical_assistant模块)。但如文章最后所述,这种破解的方法有一定的不稳定因素,比如此时将license文件删除或改名,则AMESim启动时会有一空白警告跳出来。经过近几天的摸索,目前已找到一种比前面的方法要完善的破解方法。
通过分析,可以发现AMESim主程序模块许可的校验关键处在734FA0处(OD中下ReadFile断点,断下后Alt+F9返回主程序领空,不停按Ctrl+F9,并在返回处下断寻找各个模块许可校验时共同调用的函数,经过数次后可发现该处),因此,可通过修改正确模块的license为错误,查看返回值的不同来确定关键跳转处,经过层层深入的排查方式,最终找到了关键处:
007359E8:test eax,eax
007359EA:jnz short 007359F1
发现将007359EA处改为jmp short 007359F1后,即使license文件中的模块密码不正确程序仍然认为其为正确。因此用Ultra Edit打开AMESim.exe,按Ctrl+G组合键,输入地址0x3359EA,将从3359EA开始的75改EB即破解完毕。之后打开license.dat文件,任意复制其中的一个模块license,粘贴后将模块名改为planar_mechanical_assistant,再启动加载PlanarMechanical目录下的Demo,就不会报错了。
2、接口license的破解
有了上面的破解,理论上只要知道接口的Feature名称,然后填入到license文件中就能实现接口的可见,但Feature名称(即类似于上面提到的planar_mechanical_assistant这个字符串)不易获得,我试了下直接Simulink和Adams是可以的,但填入SimuCosim后,该接口仍然不可见。因此还是需要进一步破解。方法仍然类似,有了前面的734FA0断点,通过比较正确与错误license的返回值及后面的跳转来寻找爆破点。由于Shooters提供的license文件中discrete接口可用,这为快速找到关键点节省了很多时间(需注意的是包含库的Feature和单独接口的Feature校验方法并不同,本文略过)。最终找到如下处:
0048DA40:cmp dword ptr [ebp-C],0
0048DA44:je short 0048DA78
将0048DA44处改为nop,即可实现加载所有接口。因此用Ultra Edit打开AMESim.exe,按Ctrl+G组合键,输入地址0x8DA44,将从8DA44开始的74 32改9090即破解完成。保存后启动AMESim,新建一文件,点击菜单Modeling-Interface block-Create interface icon可以看到一共12个接口可供选择。
至此,AMESim V7.0a破解告一段落,主程序一共需修改2处3字节。AMELic70.dll的修改见前文。
补丁下载:
http://www.cnitblog.com/Files/torch/amesim.v7.0a-patch-new.rar
补记:通过分析,发现Shooters提供的license文件只可供建模,不能供仿真(从模块名称build_...也能看出一些端倪),而AMELic70.dll中也有本文第1条所述的校验函数,因此得到另一破解思路:将原始AMELic70.dll中的相应处进行修改(0x14C2A处75改为EB,可通过搜索搜索8b 55 1c 52 8b 45 e0 50 8b 4d进行定位),然后点仿真,看报错的是什么模块,按照本文第1条所述的方法添加该模块的license即可。