什么是游戏基址?
游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址)。
补充说明:对于单机游戏 ,游戏基址是不变的;对网络游戏, 更新时可能会变。(因此才会有某游戏版本更新后,对应的辅助工具变得无效了。其本质可能是基址改变的。)
另外,所谓的游戏的基址存在于虚拟内存中,比如基址为0x006A9EC0。
问题:基址无非就是一块内存,同时基址又不可以改变,如果计算机中该块内存被占用了,然后再安装基址为0x006A9EC0的游戏,此时会不会写入失败,造成无法安装呢?
解析:不会,基址0x006A9EC0是虚拟内存,会经过页面地址重地位,将虚拟地址转换成本机的物理地址,即不存在地址冲突问题。即使十个游戏的基址都是0x006A9EC0都不会存在冲突问题。
温故而知新
先来回顾下【计算机组成原理】的寻址方式:
blog.csdn.net/qq_43714332…
在本例中使用的是:间接寻址
指令的地址字段不是操作数的真实地址,而是操作数的有效地址所在的存储单元的地址。即操作数地址的地址。
解析:
"----->"表示"指针指向"
基址(存放的内容是一级基址起始地址)——>一级基址(存放的内容是二级基址的起始地址:假定为a);
[一级基址(a) + 偏移量]------>二级基址(存放的内容是三级基址的起始地址:假定为b);
[二级基址(b)+偏移量]-------->三级基址(存放的内容是四级基址的起始地址:假定为c);
[三级基址(c)+偏移量]-------->四级基址
.........
自己制作游戏修改器或辅助工具必须要找到一级基址。
简介
工具:Cheat Engine(内存修改器)或Ollydbg。本实例用[Cheat Engine v7.0]
材料:植物大战僵尸--英文原版
思路:利用阳光值,来一步一步深入寻找游戏基址。因为阳光值可以看到,可以改变。也可以通过金币等其他方式,按照个人爱好喜欢!!!
步骤
了解基址的概念和寻址方式后,接下来看看如何寻找这个神秘且实用的游戏基址。
一、打开游戏和CE工具,将游戏的进程加载进CE工具中。
二、将当前游戏的阳光值,填入搜索数值中,此时发现出现很多值。
注意:在CE工具中,绿色代表静态地址,红色代表上一次操作改变的地址,黑色代表动态地址但上一次操作没有改变。而要找的基址就是静态基址。
三、返回游戏,种植植物或摄取阳光,改变阳光值,再一次输入到搜索框中,点击“再次扫描”。此时发现只有一个值。(可能也会很多值,可以进行反复改)
原理就是第二点提及的,在CE中地址不同形式,有不同颜色。
那么问题来了,这个值到底是不是代表阳光的地址呢?
按照第四步的步骤来确认。原因:既然找到了内存地址,那么就可以让这个地址存放其他数据。
比如:超人路傻瓜街1号别墅,可以安排小A入住,也可以安排小B入住。(别墅--地址;小A、小B--数据)
四、将搜索到值双击或点旁边的红色箭头,将值加载到下方的框中,双击数值,将会出现下图,然后进行修改,再观察游戏的阳光值是否被改变。如何改变了,说明已找对了。(当然,在寻找到多个值的时候也可以进行其中的某些值修改,从而排除一些可能。)
五、右击该值,选中“找出是什么访问了这个地址”或是“找出是什么改写了这个地址”。
注意:如果点击了“找出是什么改写了这个地址”,进去是空白的,此时要返回游戏,改变阳光值,才会出其他数值。因为当时游戏处于暂停状态,没有数据写入。
六、进去后,可能有多个值进行了访问或只有一个。记住,只找含有 “mov”的指令,同时从上到下找第一个。
此处,必须给CE个赞!(因为CE工具会推荐可能性最大的在前面)。
七、双击进去,看到如下的框。mov eax,[esi+00005560],
意思是将[esi+00005560]中代表的值移动到eax中,而十六进制的0x00005560就是偏移量,而这esi的值可以在下方看到。
前面提及过这是间接寻址(遗忘了滑到上方再康康哈)
但是下一个目标就是esi从哪里来?由哪个地址+多少偏移量等到的?
八、好了,离基址更近一步了。将esi的值复制到搜索值中(第一步)。
注意:记得将Hex打上勾勾,代表以十六进制进行搜索。点击“新的扫描”。
此时,是不是有点小崩溃?好多值,都是看不懂的。
铁汁,稳住!!我们能赢!!!先让辅助探探草丛,问题不大
记住:CE是个好工具,一般将可能性最大的放在前面。
九、可以先将第一个进行改变,试探(一般都是在前5个)。同理,将前5个放入下方的框中。
然后,一个个依次右击该值,选中“找出是什么访问了这个地址”或是“找出是什么改写了这个地址”。
注意:要时不时返回游戏玩一玩,更新下数据。当然,必要时要将游戏返回主菜单(即登陆窗口,但不要退出游戏,否则之前的地址都会改变,要重新弄)
找呀找,找呀找,找朋友。那么如何判断是否找到的呢?
十、一定要找mov指令,同时观察第一个就可以了。见下图。
注意没,mov eax,[ebp+14] ,其中将ebp+14得到eax,但是eax=00189288,如果eax就是之前找到的esi,那么是不是应该两者一致的呢?所以,第一个不是要找的。同理进行下一个。
十一、继续,下一个查找。。。
同样,点击第一个mov指令,此时惊不惊喜,意不意外?
mov esi , [edi+00000768],而esi=16AB6F18,与之前的一样。确认过眼神,就是它了,偏移量为0x768,记录。那么在下方框中的其他多余值,可以删除,只需保留有用的。
十二、继续使用追溯大法。查找下一个值。edi= 02179E80。
是不是很激动,找了那么久,终于看到绿色的值了(静态地址)
十三、同理,将他们加入到下方的框中,进行一个个的排除。
看到了木有?mov ecx,[pvz.exe+ 002A9EC0],pvz.exe是不是进程,不是寄存器,找不下去了。说明002A9EC02就是基址?
那么问题又来了,在上图中的第二框看到mov ecx[006A9EC0],但是点击进去却是002A9EC02,为什么?
原因:pvz.exe仅是程序的名称,没有任何地址。根据操作系统原理,程序被加载到内存上运行了,才能被称为进程。进程就会有装载地址,32位默认的虚拟装载地址是0x400000(可以使用PEiD工具查看)
计算下:0x006A9EC0-0x002A9EC0。结果:pvz.exe=0x400000。
十四、结果验证(无论是否出现上面的情况,这验证都要进行,可以确保所找的基址准确性)
思路:验证就是利用所找到的基址,加上之前找到的偏移量,阳光地址=基址+偏移量,那么最终的地址一定是阳光地址,否则基址错误。
第一情况:基址: 002A9EC0 偏移量:768 5560
通过手动添加地址,可以看到基址: 002A9EC0根本不存在的,直接废除。
第二情况:基址: 006A9EC0 偏移量:768 5560
地址是存在,是可用的。但是呢?到底是不是真实的!!!
十五、使用老方法,改它、改它、改它的数据。
方式:再点击确定,把它放到下方的框中,然后修改它的值,看看游戏中的阳光值有没有改变。。。。
铁汁们,看到了木有。。。
验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。
验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。
验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。
同理,也可以通过金币,冷却时间,植物等其他标志去寻找基址。方法一样。。。
最后,推荐一个视频,可以看到实操(非本人录制) 推荐视频:www.iqiyi.com/w_19rt636lh…
最后的最后
1、技术是老技术,但对技术的探索和深究会永保热情,同样只做技术上的探讨。(写得不够细节、表达不恰当,请搬大理石砸过来,铁头娃不怕)
2、根据这个原理,可以尝试找出【植物大战僵尸】里所有的地址。当然,也可以挑战其他游戏,比如:扫雷、片道勇士、XXX传奇[一刀999那种]等等。(注意是端游,页游需要捉包分析数据)
附内存地址大全:www.cnblogs.com/CLXiao-1029…
3、上述的介绍通过CE工具来寻找与修改、验证的。知道了基址,知道了偏移数据,在实际中,不可能每台机器都这样手动修改吧?那么,如何以代码形式编写辅助工具呢?比如: