游戏辅助制作核心--植物大战僵尸逆向之召唤僵尸call(九)

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

一.效果

二.思路

我们通过在场上的僵尸的数量来定位记录僵尸数量的一个地址,因为召唤僵尸或者结束战场肯定是需要这个变量来进行判断的,由此就可以定位到召唤僵尸call

三.实现

(1)获得僵尸数量的地址.

首先搜索未知的值,然后等待僵尸出现搜索增加的值,僵尸死了 可以搜索减少的值,如果数量没有变化,可以搜索未变动的值。然后几番搜索完成之后会出现和我这个图差不多的

会有很多相似的 当场上的僵尸有3个的时候 0f2ecab8显示为3 此时我们选择这个地址 右键是谁修改了这个值

这个时候等一会 不要急 一定要等有僵尸出来以后变动的值才是 不然就去错地方了

像这样 再最右上方出现了一个僵尸 这个时候 出现了一个地址 那么这个地址 应该就和召唤僵尸的call离的不远

(2)获得召唤僵尸call.

来到这里 可以看到esi+0x10就是计算在场有多少僵尸的地址

如果按照正常逻辑来说 在这里应该不会有调用函数 因为这里是计数的 那么这个函数内部可能就只是计数而已

我们直接返回到上一层去看看

出来之后 看到下面就有一个函数 非常像 于是我试了一下

但是发现几个问题 里面有几个参数对不上 比如那个ebx 就一直在加 我怀疑应该是在场的僵尸数量 而ecx压根不知道是什么东西 虽然其他的值都是可以知道的 而且上下看了下 几乎都是同一个函数地址 那么我们继续向上 执行到返回

然后来到这里 发现 这里有2个参数 和一个值 其实很想调用call

如果召唤僵尸 肯定需要几个参数

1.y坐标

2.僵尸的类型

3.僵尸的对象

而这个函数正好满足我们所以的要求

我们来分析一下这个参数

我们刚在这里下断就发现被断下了 一开始肯定是不知道参数的

他压入两个参数 0 1 eax看了一下 好像是怪物的对象

然后我们放行 进游戏看看 他到底哪一行出来的僵尸 这样就可以判断 那个参数是坐标了

我们发现 他是第2行出来的 也就是说 传入的参数是1 这样就确定了 传入的eax就是坐标

当我们再次断下的时候发现传入的参数是 0 4 我们知道 这个4应该是坐标 那么这个0 也会是坐标吗 我们改一下看看

给他改成1 0

我们发现 在第一行出来一个带小旗子的僵尸

那么由此可以断定 这个esi是僵尸的类型 根据数字判断会出现不同的僵尸

(3)测试召唤僵尸call

在测试之前 最好先搜一下edi的基质 具体实现 就不多说了 大家应该都知道了 反正就是那个逻辑 传入的edi就是他最后的值 只要用ce搜几下很快就出来了

我这里就直接发基质了

6a9f38 + 768

我们就先在第一行召唤10个僵尸吧 都是带小旗子的这种吧

四.总结

至于如果想让僵尸只走一条线 那也很容易 只要修改y坐标就可以 ,如果只让他出光头僵尸。反正参数知道什么意思了 想怎么改都行

 

 

 

猜你喜欢

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