上一期教程中,我们学习了修改植物大战僵尸的单卡片无CD、全卡片无CD、豌豆射手射速修改以及实现豌豆射手发射“玉米加农炮”。PS:上篇链接:【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇_Fly1ng.M的博客-CSDN博客
本次教程中,我们将学习寻找僵尸距离基址、实现“秒杀”僵尸的方法。
1.寻找僵尸位置基址
思路:我们可以利用僵尸距离房子的距离不断减少这一特性来搜索表示僵尸位置的基址。
首先,用CE打开植物大战僵尸。
进入游戏,注意看:此时僵尸来袭,我们搜索“未知的初始值”。
返回游戏,让游戏运行一会,待僵尸往前走了,我们搜索“减少的数值”。
此时看到值太多了,而且有些值长达十位数,一看就不是我们想要的值。此时可以用一个小技巧:扫描类型选择“值介于...两者之间”,数值就填个0~10000吧。
可以看到结果瞬间就少了很多,我们继续从前的步骤:切换到游戏状态->搜索减少的数值...
很快就只剩下两个数值。
此时我们运行游戏,通过观察可知,当第二个僵尸出现的时候,第一个地址的当前值增大了,由此推断第一个地址是我们要找的地址。双击添加到CT表。
找出是什么访问了这个地址。
寻找基址...(具体过程可以参考前几篇,有详细介绍)
成功了,此时我们把该数值改为1并锁定,就可以看到所有僵尸同时出现在草坪右边。
2.实现“秒杀”僵尸(修改僵尸血量)
分析:首先,我们可以通过豌豆射手打僵尸后搜索减少的数值对僵尸血量的地址进行查找,在通过反汇编代码达到实现秒杀僵尸的效果。
重新开始游戏。(记得把僵尸位置锁定1关了,要不然一开始就会出来很多僵尸,不方便查找)
第一只僵尸出来时,种植一颗豌豆射手,首先搜索“未知的初始值”。
搜索范围修改一下,方便查找。
切回游戏,待豌豆打到僵尸之后,切回CE,搜索“减少的数值”,以此类推。(当然也可以在僵尸没被打到之前,连续搜两次“未变动的数值”,思维要开阔)
最终我们找到了想要的结果。
“找出是什么访问了这个地址”,如果没有搜索出来切回游戏让僵尸被打一下。
通过观察,我们重点分析下面这行代码:
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00
它的意思是在判断现在的值是否等于0,我们猜测它是在对僵尸的血量进行判断。
点击这行代码,“显示反汇编程序”。
我们看cmp下一行代码,jg表示大于则跳转,可以推断应该是判断僵尸血量大于0就跳转,换句话说,僵尸血量为0时是不会发生跳转的。于是我们可以采用“使用空指令替换”来抹除掉这个跳转指令,让僵尸在血量不为0时也执行僵尸血量为0时的操作。
此时我们在返回游戏,可以发现豌豆射手只要打到僵尸一发,就直接毙命了,实现“秒杀”僵尸,成功!
往期文章回顾:
【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇_Fly1ng.M的博客-CSDN博客
【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之阳光篇_Fly1ng.M的博客-CSDN博客
【CE入门教程】使用Cheat Engine(CE)查找“扫雷”中“雷数”、“旗子”、“笑脸”和“计时器”的内存地址以及“初级”、“中级”和“高级”的棋盘内存地址范围_Fly1ng.M的博客-CSDN博客
版权归原作者 Fly1ngM0nkey 所有, 如有侵权,请联系我们删除。