从0开始在代码层制作一份改版,并非贴图动画资源修改
所需软件,工具:
cheat engine7.5中文版(下文简称ce)
x32dbg
植物大战僵尸中文第二版(下文简称游戏)
植物大战僵尸偏移表(下文简称偏移表)
植物大战僵尸函数表(下文简称函数表)
1.打开游戏,打开ce 附加到游戏,打开x32dbg附加到游戏
2.查询函数表可得知发射子弹函数为40D620 使用x32dbg在40D620处下断
3.返回游戏 种植一棵卷心菜投手 等待卷心菜投手发射子弹后程序被断下
4.删除断点 然后利用调用堆栈窗口 跳转到调用函数40D620处 如图
对比函数表可得push eax为子弹的id
5.在push eax处下断 f9运行程序等待程序断下
程序断下后 修改右上寄存器窗口eax的值为0 然后f9运行游戏
此时发现游戏内卷心菜投手刚刚发射的子弹变为了普通豌豆
这就证明这个地方的push就是子弹的id传参 我们只需要取一个随机数 然后判断随机数后push玉米炮子弹id进去即可实现随机投出炮弹
6.取消断点 f9运行游戏 打开ce反汇编窗口 选择 工具,扫描代码洞 取消勾选只读内存 搜索256字节大小的代码洞
7.右键扫描到的代码洞 复制 保存好 然后在x32dbg中修改push eax为jmp 代码洞起始地址 将程序跳转到空白区域
8.双击jmp指令 进入代码洞内
根据函数表可得游戏内自带一个随机数函数
我们直接调用这个随机数函数 用来进行概率计算
在代码洞内汇编编码:
9.返回游戏查看效果
注:此处代码为公共代码段,会导致所有植物都随机发射出玉米加农炮 查询寄存器可知此处ebp为植物指针 所以可以在代码洞写代码前加入如下两行进行植物判断
此时 只有植物为卷心菜投手时才会进行随机发射玉米炮
至此修改结束 在x32dbg中ctrl+p修补文件名PlantsVsZombies.exe到桌面 然后关闭游戏 移动桌面上修改过的游戏执行文件到游戏目录内进行替换 启动后即是修改过后的程序
x32dbg下载链接:https://sourceforge.net/projects/x64dbg/files/snapshots/
植物大战僵尸汉化第二版下载链接:https://pvz.lanzoux.com/iau42bc
ce修改器 偏移表 函数表:https://bxwl.lanzouw.com/b028kik1lc
密码:c72i