游戏辅助制作核心--植物大战僵尸逆向之太阳花加速生产阳光(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33958297/article/details/82352173

一.效果

二.思路

因为太阳花生产阳光,他不是一直生产的说明内部是有一个计时器在控制着,当到达一定的时间会吐一个,所以我们只需要找到那个定时器就可以让太阳花无限吐。

三.实现

其实第4篇是先写的 这篇是后写的 如果看过第4篇的朋友 可以直接跳过这个找定时器的步骤,直接看下面的修改代码的部分。

(1)获得定时器.

首先进游戏先种一个太阳花,然后使用ce搜索未知的值 这里的步骤就不演示这么详细了,请看第四篇文章

搜索到这里可以看到 最后一个值是最像的

(2)获得修改定时器的代码.

我们双击这个值之后,右键点击是谁修改了这个地址

可以看到是这个地址一直在修改 那么这个代码段附近一定就有重置计时器的代码

(3)修改代码实行无限生产阳光.

首先进入od会来到这个页面可以看到esi+58这个值被多出修改

第一处是add 也就是减的

第二处是一个eax赋值

在图中可以看到 这个eax的值 是从esi+5c中获得的 然后进过一个函数再加上一些值 重新赋值给esi+58的 初步可以断定这个5c可能是这个太阳花定时器的上限。(我当初也不知道这个值是不是 后来就通过找到这个查找前面CE搜到的那个地址 查找到的基质,然后比较一下是跟edi的值是一样的 才推断可能edi就是植物的对象,我当时的思路是 既然他是对象肯定就有一个赋值的操作,那么这个5c肯定也需要一个地方来赋值,所以我就在这个5c的位置上下了一个硬件写入断点,然后再走到这里看58的值是和5c是一样的,于是推测他应该就是上限)

那么好 既然知道是上限 这就好办了

这里两个方法 一个是通过修改这里的45fa98的位置的eax来实现定时器的修改

另一个是修改他的初始化的位置,把他的初始化的值修改成1 这样不管他怎么获得 他永远都是1

这里我们使用第一种方法来修改

这里为了保证他的字节一样 不增加或者减少字节 这里直接将eax的值改成了0

有的朋友可能会问 为什么不改成1呢 如果改成1的话 第一暂用的字节比较多 就打乱了他原先的一些逻辑,毕竟我们也不知道 他每个值的含义,所以最好就是修改成0 这样值需要修改一个地方就可以实现 ,而且即使是下次减法操作之后会变成FFFFFFFF 也不会有特别大的问题

因为他前面的是jg 也就是说大于才跳 但是FFFFFFFF表示-1,而且他每次还会继续增加-1,这样需要2147483647次操作以后才会变成正数,我相信那个时候这关已经通关了,或者游戏已经崩溃了(哭笑脸)

所以如果懂汇编的朋友可以用其他的方法进行修改 来完善这样的一个BUG 只是那样修改的步骤会增加很多

 

猜你喜欢

转载自blog.csdn.net/qq_33958297/article/details/82352173