游戏辅助制作核心----植物大战僵尸逆向之加速出僵尸(十)

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

一.效果

二.思路

我们在上一篇中实现了召唤僵尸,但是在测试的时候需要等一段时间,并不是一直调用的,那么我们猜想他肯定是有定时器,会一直在判断,只有这个定时器置0或者最大值的时候才会进入。所以找到这个定时器就可以实现加速出僵尸。

三.实现

来到上一篇召唤僵尸的call的地址

 

我们上下看下 发现有很多跳转 因为不知道哪个是 那最暴力 也是最简单的办法是头部下断

然后回到游戏 发现并没有实时断下,因为如果有计时器在的话 他一定会实时断下,因为他需要一直访问和修改。所以可能这个不是我们要的计时器的地方 那么等断下就直接执行到返回 再看看

当我们一出来就发现一个jnz 而且就在这个召唤僵尸call的上方 那么这个call极有可能就是召唤僵尸用的call

我们在413FD2处下断

我们发现 和我们要的效果是一样的 只要一回到游戏继续 他就会断下 说明这个就是计时器 那么这个edi+559c应该就是计时器的值 按照前面几篇的原理来说 我们只要修改了这个edi+559c的值 就可以做到加速生产僵尸

那么首先 我们要先修改这个值 好让他重置 来下断 这样就可以快速定位到 他是哪里进行了赋值

我们这里赋值为0 代码就可以执行进去 与此同时 在这个内存位置下断

在第一个内存地址下硬件写入断点

执行之后发现在这里断下 我们可以看到 是eax给edi+559c进行的赋值 同时也赋值给了edi+55a0

如果没有清除硬件断点的话 可以再执行一次 看看 还有哪里对他进行的赋值

我们看到 他又有一个地方进行了减操作 而且上图中的这个减操作是在靠前的代码段 而赋值的代码段是靠后的 正好比较的代码段在这两个代码段的中间

这样正好是下面赋值 上面减 当减到0了 就又会重新赋值 正好是和前面的计时器的用法是一模一样的

那么我们修改就省事了

在4140c9的地方 我们直接给mov eax,1 这样 就可以实现加速

当时 当修改之后 我们发现 他到这里就不会再出僵尸了 也就是说 他还有一个值在控制着

我们发现执行一段时间以后 edi+559c的值 会被重置赋值成一个比较大的值 也就是说 还有其他的地方会对他进行赋值 那么我们向上找

发现这里两个地方都会对edi+559c进行赋值 可能就是跟那地图上的两个标志有关系 解决的方法有很多 第一个是改跳转 第二是直接改mov指令

我们这里采用第二种方式 直接赋值为1

这样就结束了 以开局所有的僵尸都会出现 然后小推车直接搞定

 

猜你喜欢

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