本帖最后由 千钧 于 2022-10-5 02:51 编辑
使用的植物大战僵尸版本:http://www.downyi.com/downinfo/156124.html
测试系统:win10 64
最近在学习如何调用游戏内部CALL,分享一下自己的心得与体验,希望大家少走弯路
个人理解:CALL对会编程的人来说非常容易理解,就是一个子程序和有没有带参数,然而在汇编里面一般是用CALL来代表,有参数的CALL功能多,没参数的CALL感觉实现功能不强,其实这种东西是需要自己去调试几遍才能去理解的....实践才是最好的老师!
先不废话了,先给你们看看我搞出来的成果,这个是全自动搜索地址的,一劳永逸~想自己写成软件也是可以的,我是利用CE自带的自动汇编功能,毕竟植物大战僵尸这种游戏是学习举一反三用的没必要写特别的修改器
效果:
想必大家已经看到了,说难也不难,说简单也不简单,但是很有学习价值,举一反三
然后告诉大家这个CALL的找法,以场上有的植物数量来搜索,种植一个植物搜索1,2个就2,差不多几次排除下来还剩下几个的时候一个个去测(一般是第一个)
然后右键这个地址什么改写了这个地址,然后再跟出2个retn的时候那个就是植物CALL(PlantsVsZombies.exe+10A9C)了
接下来就好办了用自带的工具测试几遍就行了,我自己测试了好几遍发现jne(PlantsVsZombies.exe+10A8C )下面2条可有可无....所以代码注入里就没有加上jne(PlantsVsZombies.exe+10A8C )下面2条了
[JavaScript] 纯文本查看 复制代码
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
aobscan(EBP_CODE,00 69 D2 00 00 D8 5C 65 00)
alloc(zz,1000)
createthread(zz)
zz:
pushad
push FFFFFFFF
push 0 //植物代码
mov eax,0 //Y轴
push 0 //X轴
push EBP_CODE-12F //动态寄存器地址
call 0040D120 //CALL的地址
push FFFFFFFF
push 0
mov eax,1
push 0
push EBP_CODE-12F
call 0040D120
push FFFFFFFF
push 0
mov eax,2
push 0
push EBP_CODE-12F
call 0040D120
push FFFFFFFF
push 0
mov eax,3
push 0
push EBP_CODE-12F
call 0040D120
push FFFFFFFF
push 0
mov eax,4
push 0
push EBP_CODE-12F
call 0040D120
popad
retn
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
说实在的CE自带的aobscan函数搜索特征码感觉好垃圾,只能找出第一个就算有第二个也不管...只以第一个为准所以后面我只能采用减去偏移来定位了不然游戏重开就不行了
这段脚本搞上去然后就完事了,其他的功能以此类推,这种东西脑洞越大,功能越奇葩...
|