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

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

一.效果

二.思路

思路就很简单了,从前面几篇文章可以得知,只要搜索到计时器,然后通过计时器就可以定位到他的代码执行段。

三.实现

之所以写这篇的目的是因为植物攻击加速的代码和太阳花快速生产的不是一个地方,因为太阳花他不需要判断前方是否有怪物,也不需要发射子弹等问题,所以太阳花的执行流程还是蛮简单的,几乎可以说是一目了然。

(1)获得豌豆射手的发射子弹的计时器。

最好是获得一个攻击速度比较慢的植物 好找一点 因为本身豌豆射手的攻击速度就比较快 比较麻烦

其实这里的豌豆射手的计时器和太阳花的用的同一个偏移 这里是经过测试的 不信的话可以自己找下试试。

那么我们直接进入太阳花 找到过阳光计时器的基质的话 我们这里就可以直接使用了

附上地址:0x6a9f38 + 0x768 + 0xac + 0x58

(2)判断是什么地方对这个地址进行了写入或者修改

可以使用ce 我们这里偷个懒直接使用od进行操作. 记得操作之前先种植一个植物

我这里使用的豌豆射手。第一个地址右键硬件写入断点dword 因为他有计时器每次都会修改这个地址所以就可以直接定位到代码段

我们可以看到 这里的逻辑要比太阳花的逻辑复杂的多。

我们注意45f8bf到45f8ca这几段代码 可以看到 ecx是从esi+5c的地方 赋值过来的 然后进行一段运算 赋值给esi+58的 前面我们操作太阳花的时候知道 5c好像是计时器的上限,那么我们直接修改这个上限 和太阳花的修改方式一样 是不是就可以实现子弹加速了呢

但是当我们吧5c的值修改了以后 发觉游戏里并没有发射一发子弹。这样就说明 他还有一个地方进行判断。那么就只有分析代买喽。

(3)获得另一个判断地址.

这里我们先将esi+58的值修改成1 好让他进入赋值的代码中。然后再45F8CA的位置下断。

我们发现代码执行到了这个call 不知道这个call 是不是会跟发射子弹有关系.

进来后我们看到第一个call 然后下面跳转成功了,而且发现eax返回了一个很像对象的地址。后来经过反复测试 认定这个call是判断前方是否有怪物的,当有eax是值的时候会跳转。否则就返回了。 然后一直向下走

我们看到这里有一个大跳

这里看到有3个call 为了测试这3个call是不是跟发射子弹有关系 我们把这3个call全部retn 就是进入函数再首部直接ret 这样函数就不会执行了 就可以判断出来是不是跟发射子弹有关系

但是不幸的是 这3个call 跟发射子弹没有任何关系 好像跟动画有关,当这个几个函数没有执行成功时,游戏里的植物会出现轻度乱码。

然后此时我们调整思路,看看这里的代码哪里有可用的

我们发现这个esi+90的位置 有好几处都在赋值 而且都是在跳转附近 那么我们观察这个值的变化

同时我们修改一下计时器上限的值 虽然不可以修改成1但是最低可以修改成50 这样子弹会加速 这样可以方便的跟踪这个流程

当我们执行完45F04F这段代码之后 我们在这个下面的这个内存中下一个硬件访问断点

来到这段访问他的函数 一直向下执行 看他是这么个流程 根据多次执行 我们发觉在esi+58的同时esi+90的值都在减 说明这个90的值可能也是一个定时器

我们在上面的那张图的地址附近上下翻动可以看到 cmp esi+90的代码 只有几处 0x13 , 1 ,0 只有这三处 也就是说 esi+90的值只有可能是这其中之一才会执行call 那么我们测试一下 把esi+90的值直接赋值为1

然后我们发现这个地方 确实有一个call 执行了 因为我们要判断是否会发射子弹 所以不可能nop nop的话就更看不到效果了 我们直接放行 回到游戏看到植物确实发射子弹了 而且同时58的值也并没有为1 那么我们是不是得出结论这里不需要置58的值为0呢 那我们试试

 

因为我们发现这里只有值为1的时候 他才会执行那段代码 那么这里附近又没有可以修改的地方

那么我们向上找 在前面那张图中 可以看到 有往esi+90的地址中赋值的 我们在46487B那里进行修改 因为那段代码使用了6个字节 如下图

当这段执行完成之后 esi+90的值就是1了 那么下面的cmp就成立了

然后回到游戏 发现豌豆疯了。

至此 分析也就完成了 可能分析的不是特别到位 如果哪个朋友有更好的方法可以分享出来 大家交流学习

四.总结

最后执行的那个call 可能是子弹call 因为子弹应该也是一个对象 因为我们只是修改了esi+90就实现了无限发射子弹 虽然中间曲折很多,但是重在思路 不要放过任何一点可用的东西。当一筹莫展的时候换个思路可能会有另一番结果。

同时附上发射子弹的call

mov edi,dword ptr ds:[6a9f38]

mov edi,dword ptr ds:[edi+768]

mov edi,dword ptr ds:[edi+0xac] //植物对象地址

push 0

push 2 //y轴的索引

push 0

push edi

call 00466E00

 

猜你喜欢

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