下你所需,载你所想!
IT技术源码资料下载网站

植物大战僵尸一击必杀的基址搜索及辅助制作

:其他软件 2019-08-06 11:23:15

植物大战僵尸一击必杀的基址搜索及辅助制作教程

上CE找当僵尸出现的时候,先搜索未知值,然后每当一个豌豆打在僵尸身上的时候搜索,减少的值,然后没打的时候搜索未变动的值,通过这样不断的搜索筛选,找到了这样一个地址,可以看到每当一个豌豆打在僵尸身上的时候,这个值都在减少,修改此值为0后,僵尸立马死去,说明这个地址存储的就是僵尸的血量。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
通过这个地址,右键,find out what accesses this address,可以看到这几处地方,我们重点关注一下比较的地方,把地址记下来。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
上OD,寻找刚才CE中看到的CMP的地方。下一个断点,发现在豌豆还未打到僵尸身上就断了下来(主要看的是54D525处的比较,因为这里和0做比较,猜测是检测僵尸血量是否为0,为0为死亡),看一下这里是僵尸血量和0作比较,我们修改条件,让JG不要跳转。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
修改过后发现僵尸立马死掉,直接出了动画效果。说明这里就是判断僵尸血量的地方。
植物大战僵尸一击必杀的基址搜索及辅助制作教程

修改此处的跳转就可以实现僵尸的一击必杀了,但是出现了新的问题,就是当出现路障僵尸的时候,并不会秒杀它,这是为什么呢?
植物大战僵尸一击必杀的基址搜索及辅助制作教程
那么应该是路障僵尸的血量并不在这里进行判断,我们执行出去,在外面给这个函数下个断,当植物攻击路障僵尸都不会断下来,路障僵尸的血量的判断都不在这个函数中。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
我们在函数头部下断,当攻击路障僵尸的时候断了下来,顺序执行,这部分只有四个CALL,发现两个个call不会执行,会跳过去,只会执行下面的两个call,最后一个call里面是我们实现击杀普通僵尸的地方。继续单步执行,发现54D60F处的跳转会跳过最后一个call,所以我们刚才的修改无法实现击杀路障僵尸。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
继续动态调试,发现当路障僵尸头上的路障被打掉的时候,程序断在了最后一个call的地方,之后路障僵尸直接死了。正常打路障僵尸应该是先把头上的路障打掉,然后他变成一个普通僵尸继续打,然后僵尸被打死。猜测一下,我们的僵尸其实是由两部分组成,僵尸本体,和护甲,像路障僵尸,铁桶僵尸这种,都是普通的僵尸不过加上了护甲而已,54D608的call应该是判断僵尸护甲值的,当护甲减到0,被打掉后,jle不再跳转,才开始调用54D613处的call,计算僵尸血量值。无护甲的僵尸只是血量的不同,比如小鬼僵尸,跳跳僵尸这些,但是应该都是要调用54D613的call的,我自己测试了一些,可以自己去动态调试验证。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
我们可以通过CE来验证一下我们的猜测,打路障僵尸,然后通过CE寻找一下路障僵尸的血量。还是先搜索未知值,然后通过不断的搜索减少的值和未变动的值。最终确定下来一个地址。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
我们尝试修改值为0,发现僵尸并没有死,但是他头上的路障不见了。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
右键find out what accesses this address之后,记下这几个地址,换OD
植物大战僵尸一击必杀的基址搜索及辅助制作教程
在OD中找到地址,下断,回到游戏里当攻击到路障的僵尸的时候程序断了下来。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
执行出去发现就是我们刚才说的那个call,这验证了我们的猜测。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
我们大致看一下刚才下断那里,当前ebp+0xD0存的就是僵尸的护甲值,通过赋值到ecx中经过一些计算,计算伤害,然后再重写进地址中,最后54CDF4处test ecx,ecx(上一条语句,ecx的值是存储护甲这个地址赋值的)比较判断是否为0,来看一下护甲值是否为0,来决定一个返回值,这个返回值出去决定是否跳过下面的那个call,也就是僵尸本身血量的那个call,到这里流程基本就清楚了,修改也比较好改了。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
这里可以有两种修改方式第一,修改那个函数里面对于护甲值得判断,也就是先实现一击必打破护甲,再像刚才那样修改本体的血量的判断,实现对于本体的一击必杀。但是这样对于带护甲的僵尸来说,不是一击必杀,需要两击,所以这不行。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
第二,完美的一击必杀,第一必须要像刚才的那样,把僵尸的血量那里修改了,这样只针对无护甲僵尸,然后对于有护甲的僵尸,可以直接修改外面的判断条件,把这里直接nop掉,因为不管你护甲多高,最终都是要进入下面这个call的,只要你本体死亡,那就是死亡。这样对于任何僵尸都是一击必杀。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
直接把植物种在前面,反正僵尸永远过不来。
植物大战僵尸一击必杀的基址搜索及辅助制作教程
巨人僵尸也是一下秒杀
植物大战僵尸一击必杀的基址搜索及辅助制作教程
可以下断看看,发现会直接断在刚才分析的那个非护甲僵尸的call那里(OD中写的是普通其实不太严格,应该写非护甲僵尸的),可以进去看看僵尸血量地址里的值,会发现只不过是值比较大,因为巨人僵尸血比较厚。这验证了我们刚才的猜测。