游戏外挂原理解析与制作 - [内存数值修改类 篇四]

  前三篇的博文结合了C#的Demo对内存数据修改一类的挂剖析了原理,利用C#语言调用Windows API我们其实已经写出了一个简单的内存扫描工具,但是它存在一些缺陷,比如说只能所搜索单一类型数值(整型),只能搜索确定的数值,比如10002000,而不能进行模糊搜索,比如搜索某个值变小了,或者在某某区间内变化了等。

 

  我一直认为语言只是一种工具,只要能够达到修改数值的目的,用什么语言都可以,甚至可以配合着多种语言和工具来完成一项数值的修改。其实实际中通常都是这样,因为每种语言有自己的优势,比如C语言/易语言这类非托管的语言对底层操作的权限非常之大,特别是易语言,容易上手加上不少人已经封装了大量的操作底层的模块,而C#Java等优势就表现在应用层的封装,API的灵活调用。合理的利用语言的优势在它们擅长的领域,对技术保持开放的心态,不被拘束在语言层面才能对各种游戏进行剖析。

  

接下来的几篇文章重点教学[Cheat Engine]这款内存修改器,类似的还有OD、金山游侠(这款工具没有研究的意义,功能单一化、对于指针和汇编的理解帮助颇少),我们自己封装工具耗费时间的成本实际上是很高的,而且这些工具已经拥有很强大的功能了,我们可以利用这些工具更好的理解原理。

 

  本章先讲一下简单的使用,我们这次就不写Demo了,直接找一个小游戏进行测试。

 

  这个是三目童子,我小时候在小霸王游戏上玩的。

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第1张图片游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第2张图片

  

  我们目前看到的信息有:

   6格血          0个金币         2条命

 

  这就是我们肉眼能看到的一些信息,还有人物坐标、装备道具等是目前无法看到但真实存在的数值。

  

  现在我们打开CE:

  下图是它的主界面:  

       游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第3张图片

  

  我这个是比较老的版本了,首先点击图标,打开选择进程的界面。

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第4张图片

  从图标或者进程名称中可以看到,我用绿色框出来的这个进程就是我们三目童子的游戏进程。

     游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第5张图片

  这一步的目的很明显就是获取该游戏进程的PID和句柄Handle

  

  我们点击打开,打开之后可以看到右侧控件已经变为可用状态了。

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第6张图片

 

  接下来我们就来尝试搜索一下血量(6)这个数值

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第7张图片

  

  我们在值中输入6,点击首次扫描,在左侧显示如下的列表,可以看到整个内存块中有2801个值为6 的地址。

   游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第8张图片

  

  现在采用上一章节提到的方法,使得6这个值发生变化,我们去撞一下小兵:

   游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第9张图片

  可以看到血量变成5格了

 

  此时把值修改成5后,点击再次扫描:

  

  

  下图是搜索结果,没有找到对应的地址, 可以看到数量是 0

  

  这就尴尬了,其实是因为我们的数值类型选择的是4字节,CE打开默认4字节搜索就是整形数,而以前的游戏机不比现在有那么高的存储容量,一般能以字节存放的变量就定义为BYTE,所以我们重新开始搜索,点击新的扫描,然后下拉扫描类型为字节

   游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第10张图片

  

  此时按下首次扫描,得到以下扫描结果

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第11张图片

  可以看到 字节形式存放的变量高达68696个,我们继续撞一下小兵

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第12张图片

  好了,这下变成4格血量了,我们把CE需要扫描的值改为4,然后点击再次扫描

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第13张图片

  

  找到4个结果

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第14张图片

  其中 地址0x2D00044 的值一直在变化,我们可以排除这个地址

 

  那么在剩下的三个地址中有没有存放血量的地址呢,我们继续改变血量

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第15张图片

  血量变成三个格子了,我们对3再次进行搜索

  

  

  结果如下图:

   

 

  现在就剩下一个地址0x2D00092中存放的字节值为3,我们来确定下这个地址是否是血量存放的地址,我们点击该地址

  

  

  然后点击箭头图标把他添加到待操作的地址列表中

  

  

  双击此记录的值

  游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第16张图片

  

  我们把值修改为6,我们再来看下游戏中的血量是否跟着变化了,注意界面上的血量可能没有立刻跟着变化,因为这类游戏只有在血量发生变化的时候才会去读取显示它的值,所以我们需要再去撞一下怪。

   游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第17张图片

  可以看到血量变成5格了,这说明修改成功了(修改6格血量后,撞一下怪减了一格血量,所以剩5),我们再来看下CE的界面

   游戏外挂原理解析与制作 - [内存数值修改类 篇四]_第18张图片

  没有问题,数值显示5,这样的话我们就跟着CE这款工具完成了一次最基础数据的修改。大家看其实和我们写代码修改用的原理是一样的,就像破解WIFI密码一样,穷举对比,找到正确的地址或密码。

  

  下一节讲解动态地址指针和偏移的查找。

  

  PS:转载请附带原文路径:http://www.cnblogs.com/lene-y/p/7252446.html  。

 

你可能感兴趣的:(游戏外挂原理解析与制作 - [内存数值修改类 篇四])