植物大战僵尸秘籍,手把手教你如何用代码秒杀僵尸

前言:

外挂的本质其实就是找到进程中的某个变量或者某行代码的内存地址,然后进行修改,完成其想要完成的功能。这是最基本的要求,当然如果想要深入去学习制作外挂的话,还有很多东西很多内容,首先,你要懂得汇编,其次如果是制作Windows平台上的外挂的话,要深入了解PE文件格式,Windows内核等相关知识,再次如果应用程序中的代码或者变量是加密的话,或者是加壳的话,你要深入学习解密和脱壳方面的知识,最后应用程序如果是加了检测的话,还要懂得如何过检测。今天,我们通过实现在植物大战僵尸中秒杀僵尸的这样一个小小的例子,去学习一下如何找到某内存地址然后修改该内存地址中的内容,完成秒杀僵尸的功能。

思路:

我们先要盲猜一下植物大战僵尸游戏设计者的思路:植物打一下僵尸,僵尸是会减少血量的,当血量减少到0的时候,僵尸就挂掉。

因此,关键找到植物打一下僵尸然后所执行的扣除血量的指令,我们可以先找到某一只僵尸的血量值所在的内存地址,然后让植物打一下僵尸,接着看一下是进程中哪一条指令修改了这个内存地址,而这一行指令很有可能是植物打一下僵尸,然后执行的扣掉僵尸血量的指令。

1.找到某个僵尸血量值的内存地址

打开CE工具,附加一下植物大战僵尸的进程,然后等某一只僵尸出现时,使用CE工具首次扫描一下,扫描类型选择未知的初始数值。

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

然后种下一棵植物,让这个植物打僵尸,打一次,我们就在原先的扫描基础上,把扫描类型换成减少的数值,然后点击再次扫描。一直打一直扫,扫到差不多,看一下比较像血量值的。

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

发现这个数值有点像,上次的数值是植物还没打到的数值,为130,然后植物打了一下,这个数值变成110了,扣了20点血量,因此,我们尝试着把这个值当成这个僵尸的血量值,其内存地址为0x29C10840

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

2.找到扣僵尸血量的指令

我们再让植物打一下僵尸,然后查看一下修改该内存地址(0x29C10840)的指令代码,我们找到了,是这一条指令修改了该内存地址的值,很明显,[edi+000000C8]是该只僵尸的血量内存地址值,ebp是即将需要赋的值。

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

我们再看仔细一点,发现ebp首先会减掉一个值(内存地址为0x0054D0BA的指令sub ebp,[esp+20]),然后再把相减的结果赋值给僵尸血量(mov [edi+000000C8],ebp),那我们是不是可以在相减的这一行代码做一下手脚呢?当然可以,直接让其相减的结果为0,就能做到直接秒杀僵尸了。怎么让其相减结果为0呢,只需要改成sub,ebp,ebp即可。

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

我们直接改一下,之前这一条sub指令是四个字节的,但是更改为sub ebp,ebp之后,只占两个字节,为了不影响后续的指令,再加上两个空指令nop填充。

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

最后神奇地发现,僵尸只要被打了一炮就死了,至此,我们从CE工具的角度完成了该功能的调试,紧接着我们做一个小程序实现这个功能,这个程序的要完成的任务很简单,就是直接修改内存地址为0x0054D0BA的指令修改为sub ebp,ebp, 然后再用两个nop填充即可,如上图,即把0x29,0xED,0X90,0X90这四个字节填充到0x0054D0BA处。

实现代码:

手把手教你用20行代码实现植物大战僵尸秒杀僵尸的功能

原创文章,作者:,如若转载,请注明出处:https://www.webacg.com/game/gl/357736.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注