这个比之前的可能稍微难那么一点点...

(一)看调用函数后回到了哪里

一般而言,调用函数、方法,只是为了实现一个目的。这里的目的就是扣除阳光,执行完之后就会回到主流程里。我们跟进去,看看种植阳光的流程是什么。ret就是返回的意思,我们在这里下一个断点,右键或者 F5 快捷键下断点。

popcapgame1.exe+1F63F - ret

回到游戏后重新种一个植物,发现游戏暂停了,打开CE,发现断在了刚刚打在ret的地方。我们按下F8继续走,看去了什么地方
CE修改植物大战僵尸(3)植物重叠建造

(二)继续

发现跳转到了test与运算

popcapgame1.exe+13D97 - test al,al

上面的call就是调用扣阳光方法的

popcapgame1.exe+13D92 - call popcapgame1.exe+1F620

我们不需要关心下面发生了什么,因为植物已经种上了,我们需要知道的是按下鼠标——植物种下之间发生了什么,所以鼠标滚轮向上走(PS:要走很久)
CE修改植物大战僵尸(3)植物重叠建造

(三)找到函数起始

停,看见了这三个int int int 了没有,大部分函数起始都是定一堆变量的,这里很可能就是函数起始的地方

popcapgame1.exe+1324D - int 3 
popcapgame1.exe+1324E - int 3 
popcapgame1.exe+1324F - int 3 
popcapgame1.exe+13250 - push -01 { 255 }

我们在这里打下断点,按下F9执行游戏,回到游戏 正常 种下一个植物,发现断到了上面。
CE修改植物大战僵尸(3)植物重叠建造

(四)看看正常种植物流程是什么

F8继续向下走,看见 j 开头的,比如 je jne jnl 之类的就停下来,这些指令的意思是进行跳转,我们看看正常流程具体是怎么跳的。出现箭头说明会跳转,我们写下注释 1 ,标记 正常 种植物这里会跳转。
第一个碰到的就是这里

popcapgame1.exe+13286 - jnl popcapgame1.exe+132E0

我们写下注释 1
CE修改植物大战僵尸(3)植物重叠建造

(五)标记不会跳转的地方

照着之前的流程继续走,发现没有箭头,说明不跳转,写下 2
CE修改植物大战僵尸(3)植物重叠建造

(六)回到种完阳光的地方

一直走一直走,发现回到了刚刚种完阳光的地方。现在可以停下了,按下F9执行游戏,发现刚刚种下的植物出现了。
CE修改植物大战僵尸(3)植物重叠建造

(七)看看不正常种植物流程是什么

在种不了植物的地方,比如另一个植物上,再次种下植物,又触发了上面的断点。重新走,看看这次跳转和正常走有什么不同。
之前的都一路正常,到了这里就突然不对了

popcapgame1.exe+1334F - je popcapgame1.exe+13C75

看,之前这里写了注释 1,说明 正常 种植物,在这里会进行跳转,而现在 不正常 种植物却没有跳转。这里肯定有东西。je的意思是相等就跳转,我们把它改成jmp,意思是不管怎样都跳转,这样就和 正常 种植物是一样的流程了。
CE修改植物大战僵尸(3)植物重叠建造

(八)修改

这里会提示修改的代码和之前的长度不符,要用nop代替,同意就可以,改完后是这样

popcapgame1.exe+1334F - jmp popcapgame1.exe+13C75 { 1 }
popcapgame1.exe+13354 - nop 

CE修改植物大战僵尸(3)植物重叠建造

CE修改植物大战僵尸(3)植物重叠建造

CE修改植物大战僵尸(3)植物重叠建造

(九)结束

F9执行游戏,发现本来种失败的植物,现在竟然出来了!我们再试试,在泥土地里也能种植物。修改成功。
CE修改植物大战僵尸(3)植物重叠建造

CE修改植物大战僵尸(3)植物重叠建造

目录

1. 修改阳光
2. 种植物加阳光
3. 植物重叠建造
4. 种植物无冷却
5. 一击必杀

标签: CE, pvz

添加新评论