本帖最后由 涛之雨 于 2019-2-23 19:51 编辑
上一贴:
植物大战僵尸年度版-之-去后台暂停
顺便说一句。。
这些可不是什么复杂的、让人眼前一亮的地方。。。
之前有一部分之前录的屏
呃。。。为了防止某些人说我贴里发qq号。。。
文末有几个gif动画。。。画质就。。将就吧。毕竟小而且能看明白啥意思就是OK的。。
反正我又不是多厉害。。怕啥~~
qq空间的短连接,掩耳盗铃。。。已经被老大骂了
我也不想啊。。。论坛没法传视频。。。
我总不至于发个百度云的链接吧
准备
老规矩,CE附加,两次搜索,搞出阳光的地址
左侧双击该地址,放到下部编辑区(姑且这么称呼)
数值改为900,游戏中正常显示。
右键,查找什么写入了数据
因为数据是发生变化的,所以是写入
(如果是想找基址,用来写脚本,是要选择访问)
我收集一次阳光,又种植了一棵豌豆
就成了酱紫
上一行为收集阳光,下一行是种植物
建议先不要把这个窗口关掉,一会还有用。
收集部分
第一种改法
双击第一行,用OD附加PVZ
注:这一步要先脱钩
不然就是酱紫:
因为被ce调试了
所以要先按箭头点击(重新附加)
Ctrl+G来到第一处关键代码
按F2下断点,再次拾取阳光,在断点处断下
分析该句,
[Asm] 纯文本查看 复制代码 add dword ptr ds:[edi+0x5578],eax
是把eax的值加到[edi+0x5578]里
所以在寄存器视图窗口双击eax,发现就是每个阳光所对应的25点
那随便找个大的数据就能改了
但是因为eax在机器码中对应的代码是000
所以如果改大就会占用下行因此可以尝试改为大一点的寄存器的值
比如此处我改为ebp,反正比eax大就行
效果呢?
呃。。因为gif我嫌太大。。就压缩、删了几帧,就是那个意思。。。
ok了
第二种改法
那有人想说,那我要是想把阳光值改为一个特定的数值或是比如每个阳光改为100点呢
好吧,麻烦一点。
既然地址不够,那就找地址写
ctrl+B,输入一大串00,然后搜索。就像酱紫:
找到一大块都是00,也就是没有代码的地方来改。
比如,我想让阳光增加100,就把之前那个代码后面的eax换成16进制的100=》0x64(0x表示16进制)
【注:如果不知道,可以在系统计算器(calc)里转换】
那代码就如下:
[Asm] 纯文本查看 复制代码 add dword ptr ds:[edi+0x5578],0x64
但是这里执行不到
于是要从上面执行下来
无条件的执行其他地方的代码有两种
一个是jmp无条件跳转;一个是call调用
理论上都行,没测试call的
在这一行ctrl+c复制,
按【-】返回上一次光标所在的地方,
把地址改为
[Asm] 纯文本查看 复制代码 jmp {这里是复制来的地址}
注:要把后面多余的代码去掉,只要地址
然后编辑完成,复制下一行,双击这个jmp跳转到之前的地方(ctrl+B)也能来到刚才的地方
然后再在刚才改过的地方改为[Asm] 纯文本查看 复制代码 jmp {这里是复制来的地址}
上个图吧。语言说的有点复杂
大概的执行流程就是酱紫。
还是上gif吧。
流程就是酱紫,从上面jmp来,执行完改掉的代码,在跳回去
如果是用的call(理论上可行)后面应该直接用ret(吧)。。
【如有不正确的地方请斧正】
种植部分
那阳光已经够多了。。
那种植物还是要花阳光的。
那就来改这个吧
找到刚才的第二行
【注】:如果已经关掉了,要记得在od右键-StrongOD-detach(吾爱版本的很好用其他版本的有时候会脱钩失败)
【另】:脱钩后,刚才的修改将无效,所以,该保存保存,该备份备份
接着分析代码。。。
一个是判断是否阳光足够,然后接着就是sub做减法了
那如果减去一个负的。。。
把sub改为add也是加上。。
nop掉也行,不过不好玩,就懒得截图和弄gif了
ok~~
终于发完了。。。
下面还有植物的玩法、僵尸的玩法、和特殊关卡的玩法。。。
有空再说吧~
补上之前的流弊的gif
其实也是改了一部分的判断代码。。。但是有些遗忘了。。。所以可能会暂时没法投稿。。。 |