从今天开始会开更C/C++写游戏外挂的教程,本系列教程需要掌握一定的C/C++和MFC的基础,并且以实例为主,前面几个DEMO初步定位单机游戏和简单的网络游戏,也就是通过模拟鼠标键盘就能完成的,后面的不出意外应该是某射击游戏(XF),某RPG游戏,等等。。
好了,进入今天的正题,写外挂大部分时候是要找出游戏的数据,分析数据是干嘛,然后直接操作这块数据,找数据(内存地址)有个比较好的工具,叫做Cheat Engine 简称CE,网上可以下载到,我的工具包里面也有,不过是6.1的英文版,大家可以自行下载最新的中文版
CE的界面如下所示 我们先点击红色箭头处指向的按钮,表示我们要附加一个进程 我们要找一个进程的内存必须先运行它 然后用ce附加
点了附加以后,会出现如下图所示的对话框,我们选中我们要附加的进程,这里拿扫雷做例子
选中扫雷后点 Open(打开) ,找数据之前我们考虑下,如果是我们设计这个游戏的话 怎么存雷比较靠谱,我们先假设他是存在数组里面的,那么我们找到数组的第一个元素就行了,因为数组的第一个元素就是数组的首地址,那么我们先在扫雷的第一格点一下,如下图,扫雷的游戏帮我们把那几格显示出来了,我们在CE 扫描类型(scan type)哪一行 选中 未知的值(unknown initial value) 值类型(value type)我们先选byte(自己) 然后点首次扫描(first scan)
CE显示 它找到978944个值,
我们在游戏几面随便点一个地方。我这里选的右下角
当2显示出来以后,游戏的部分数据变了,但是第一个格子的数据肯定没变,所以扫描类型我们选 未变化的值(unchanged value) 然后点继续扫描(next scan)
我们看到 已经少了一点了 还有975942个,我们继续在游戏界面瞎点 然后点继续扫描
又少了几个。我们继续瞎点,这次运气不太好,点到个雷,没关系 我们先点继续扫描
由于我们点了一个雷,必须得重新开始游戏,点那个笑脸重新开始游戏以后我们点下第一格,
这次第一格是1了,之前是空的,由于第一格值已经发生变化了,所以 扫描类型这里选择 改变的值(changed value) 然后点继续扫描
一下子少了一堆了。只有120个了,我们在游戏界面继续瞎点 然后选择未改变的值,继续扫描
由于刚才点到雷了,所以得重新开始游戏,我们点下笑脸 重新开始,开始以后点下第一格,发现还是1,那就选择未改变的值 然后继续扫描
只剩下5个了,而且都是基址(在CE中 绿色显示的就是基址)
我们把这五个地址选中,然后点下那个红箭头
所有选中的地址都到下面的框框里面去了,我们可以查下它附近的内存,然后判断是不是游戏的数据,不是就得换个方法重新找
我们单击某个地址,然后右键,浏览内存地址(Browse this memory) 这里我们选第一个地址就行了,第二个地址跟第一个地址很近 应该是后面的某个地方,其他的地址应该也在雷这个数组里面
可以看到 弹出这个对话框了
我们跟扫雷窗口比较下 40正好是0的ASCII码 41是1的 看前几个能对上,后面8F是什么鬼,我们点一下
中雷了。那么8F应该就是表示是个雷 而且 0x1005361就是雷的基址 我们记住这个地址,编程的时候需要用到
好了 今天的教程到此为止,主要是介绍怎么找数据 下一篇教程我们将编程实现秒杀的功能