注意 这是做的破解版而不是外挂 用到的工具 找代码地址需要 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...即可 ![]() |