一.效果
二.思路
我们在上一篇中实现了召唤僵尸,但是在测试的时候需要等一段时间,并不是一直调用的,那么我们猜想他肯定是有定时器,会一直在判断,只有这个定时器置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
这样就结束了 以开局所有的僵尸都会出现 然后小推车直接搞定