植物大战僵尸外挂

  • 内容
  • 评论
  • 相关

外挂是之前写的,现在为了写博客,把之前的内容再翻上来。

来看看植物大战僵尸的界面:

有没有一种怀恋的感觉。

哈哈,好了,来讲一下外挂原理。

所有的游戏的关键数据都保存在内存中,比如生命值、血量等, 然后 找到它修改掉,就是外挂了。

是不是感觉很简单,其实在实际操作中,倒是麻烦一点。

最关键的是,如何找到这个内存地址。我们现在就开始找吧,我们要用到的工具Cheat Engine(简称CE)。

首先我们打开它:

首先要点那个小电脑的按钮,然后打开植物大战僵尸的游戏。

然后在value文本框中输入,阳光数值,点First scan。

这就找到所有值是50的内存地址了,这个时候出现很多地址,但是还不知道那一个是阳光的地址。

所以我们这个时候要切换进游戏收集下阳光,改变一下阳光的数值。

再来搜索一遍。

直接就出来了,这个时候我们第这个地址任意改个值试试。

看到没有,阳光值直接被改变了,说明找到的值是对的。

这个时候是不是就要直接去写外挂代码了呢,并不是。

因为这个地址是不固定的,每次打开游戏后,这个地址就会改变。

那我们怎么动态确定 这个地址的位置呢。首先,按照原理来讲,游戏本身总要知道这个内存的位置吧,不然游戏本身怎么访问这个地址。

那个它是怎么访问的呢,其实就是要找到一个 内存基址,这个地址是不变的,在这个基址的基础上偏移几次,就能找到这个位置。

嗯,有点抽象,来演示一波。

在这个内存地址上,右击选择 Find out what accesses this address。寻找所有访问这个地址的代码。

找到一个地址,来看一眼。

寻找类似这样的语句,mov eax,[esi+XXXX] 的。这里解释一下,esi是变址寄存器,嗯,相当于存放指针的值。


这里记录下,esi的寄存器的值。

接下来搜索esi的值,看看内存中有哪些内存中保存了esi的值。

嗯,找到很多个,接下来就是苦力活了,要不停的重复上述的步骤,寻找有哪些代码访问了这个地址,这个要试很多次,要有一定耐心。

找到了第二个偏移地址。还要继续。

直到这一步,看右边的地址是绿色的,代表静态地址,然后再看访问他的代码,直接mov esi一个值,没错,这个值就是内存基址了。


找到这里,内存寻找结束。可能还是不是很明白原理,我就再来讲一下。

找到的基址是0x6A9EC0,偏移量1是0x768,偏移量2是0x5560。

那么需要怎么找到最终地址呢。首先要读取基址的内容,他保存的是下一个 地址 的指针。

把这个指针加上 偏移量 0x768 ,再读取这个地址的内容。

这个内容还是个指针,这个指针再加上 偏移0x5560 ,成为另外一个指针。

这个指针就是 阳光值的地址。

希望我说的不要太绕。如果解释太麻烦,就来看代码:

代码并不是很长。最后,来看下最终激动人心的结果把。

不过每个游戏不同版本的基址和偏移量不一样,需要自己调试。