植物大战僵尸 - 植物无视防具秒杀僵尸
本帖最后由 iTruth 于 2020-2-15 19:49 编辑记一次练习的过程
注意
这是做的破解版而不是外挂
用到的工具
找代码地址需要 CE6.7(CheatEngine)
修改代码需要 Ollydbg
解决方案
使用CE找到各个扣血代码的地址使用OD分析修改
具体步骤
首先打开游戏和CE,然后CE载入植物大战僵尸进程
新开一把游戏,然后改阳光
因为改阳光的教程实在太多了所以我就不再赘述了,找不到的话可以去看大神的帖子https://www.52pojie.cn/thread-863501-1-1.html
现在需要收集必要的数据以辅助我们破解
根据网络上公布的数据看一只僵尸的血量是270,一只路障僵尸防具血量为370,铁栅门僵尸的铁栅门血量为1100
因为根据实际测试结果看铁栅门防具扣血和一般僵尸的防具扣血不是一处代码处理的所以我们也需要知道铁栅门僵尸的铁栅门血量
现在我们等一只僵尸出现然后搜索它的血量值
然后我们种一株豌豆射手来攻击一次僵尸之后查找减少的数值
可以看到只有一个值,它正是这个僵尸的血量
我们把这个值添加到记录中之后右击这个值选找出是什么改写了这个地址
返回游戏让豌豆射手再次攻击僵尸,这时你能在CE上看到一次记录
这正是让僵尸扣血的代码,我们把这条指令的地址记录下来
然后我们需要路障僵尸防具的扣血代码
现在我们等一只路障僵尸出现
然后返回CE搜索370(这是路障僵尸防具的血量)
再次返回植物大战僵尸种下一株豌豆射手来攻击路障僵尸然后返回CE查找减小的值
一般重复几次就能找到然后按照刚刚的步骤找到防具的扣血代码
同理我们到有铁栅门僵尸的关卡去找铁栅门的扣血代码
现在所有的扣血代码的地址都已经找到了,让我们整理一下
0054D0C4 - 僵尸扣血
0054CDDA - 僵尸防具扣血
0054CA31 - 铁栅门僵尸防具扣血
注意:不同版本的PVZ这些代码的位置可能不同
现在关闭CE打开OD,然后让OD附加到植物大战僵尸上
这里找到植物大战僵尸的进程点Attach即可
现在我们按F9让植物大战僵尸继续跑起来,然后按Ctrl+G输入僵尸扣血的地址
点击Follow expression即可转到那条指令处
我们观察代码发现血量在EBP里然后上面有一条指令减了EBP
那么事情就好办了,把减少EBP的指令改成XOR EBP,EBP即可
这里XOR EBP,EBP就是把EBP清零
然后我们往上翻找到函数头,在函数头上下断点
返回植物大战僵尸,攻击一只普通僵尸
攻击到之后OD应该断在这个函数头,这时我们观察堆栈信息来找到调用者在哪里
在这里按回车即可找到
我们可以在上面找到一个可疑的跳转,它直接跳过了僵尸扣血的函数
那么我们直接用nop填充它即可
现在我们去看在0054D608处那条可疑的call,就是在刚刚nop掉的跳转的上方
因为这个地址比较接近 "0054CDDA - 僵尸防具扣血"
果然发现里面包含僵尸防具扣血的指令
那么这时就可以知道大概的扣血逻辑是
if(防具有血量)
{
扣防具的血量;
}
else
{
扣僵尸的血量;
}
有了这个逻辑后我们继续往上分析,再次发现了一个可疑跳转
这个跳转也跳过了僵尸扣血的代码,我们还注意到这个跳转上面的那个call的目标地址和 "0054CA31 - 铁栅门僵尸防具扣血"很近
进去一看结果非常的amazing,这个函数里面正包含了铁栅门僵尸防具扣血的那条指令
那么我们可以知道那个跳转正是判断是否要扣铁栅门僵尸血量的关键
我们还是直接用nop填充那个跳转即可
现在我们返回游戏尝试一下
成功了,只要一发即可无视防具秒杀僵尸
现在我们只需要把我们修改好的程序保存即可
右击选Edit然后选择Copy all modifications to executable
在弹出的窗口里右击选择Save File...即可
虽然没看懂,也要顶一个。 zw8204 发表于 2020-2-16 09:34
教程很详细,出一只新怪物就分析一次血量,有点麻烦,是否修改之后记下那些数据以后直接可以按数据修改呢
在扣僵尸血之前会先扣防具的血量,所以有必要知道防具扣血的地方来达到无视防具秒杀的效果 新人发帖,不知道为什么下面为什么会出现多余的图片.有人会解决这个问题吗? 给力哦哦哦{:1_937:} 帮楼主顶一下,好东西 顶一个,现在正在学c,植物大战僵尸确实好玩,一起加油 这是高手,学习了 向楼主学习~ 很详细的修改教程。。学到了。。{:1_887:} 学习一下,哈哈哈