什么是游戏基址?
游戏基址是保持恒定的两部分内存地址的⼀部分并提供⼀个基准点,从这⾥可以计算⼀个字节数据的位置。基址伴随着⼀个加到基上的偏移值来确定信息准确的位置(绝对地址)。
全局基址⼀级基址⼆级基址三级基址的关系:
第⼀步、计算机内存⼀般分为四级存储。(印象⾥好像是四级)。
第⼆步、在最底下的,往往是游戏的全局基址(决定⽤户界⾯以及⼀些细节等)和⼀些响应⽤户操作⽽对应实施的命令。
第三步、该是传递基址了。现在⽹游的基址往往是动态的。这个是因为底层的基址不会直接传递给上⼀级内存。它会加上⼀个偏移量,然后再传递。这个传递就是指针了。
第四步、当传递到第四层的时候,就会表现在游戏的⽤户界⾯。
在本例中使⽤的是:间接寻址
指令的地址字段不是操作数的真实地址,⽽是操作数的有效地址所在的存储单元的地址。即操作数地址的地址。
"----->"表⽰"指针指向"
基址(存放的内容是⼀级基址起始地址)——>⼀级基址(存放的内容是⼆级基址的起始地址:假定为a)
[⼀级基址(a) + 偏移量]------>⼆级基址(存放的内容是三级基址的起始地址:假定为b);
[⼆级基址(b)+偏移量]-------->三级基址
三级基址-------->游戏界⾯
妮莎 哈金斯⾃⼰制作游戏修改器必须要到⼀级基址
注意:对于单机游戏,游戏基址是不变的。对⽹络游戏,更新时可能会变。(因此才会有游戏更新后,某外挂不可以使⽤。其本质可能是基址改变的。)
另外,所谓的游戏的基址存在于虚拟内存中,⽐如基址为0x006A9EC0。
问题:基址⽆⾮就是⼀块内存,同时基址⼜不可以改变,如果计算机中该块内存被占⽤了,然后再安
装基址为0x006A9EC0的游戏,此时会不会写⼊失败,造成⽆法安装呢?
解析:不会,基址0x006A9EC0是虚拟内存,会经过页⾯地址重地位,将虚拟地址转换成本机的物理地址,即不存在地址冲突问题。即使⼗个游戏的基址都是0x006A9EC0都不会存在冲突问题。
了解基址后,接下来看看如何寻游戏基址。
⼯具:Cheat Engine (内存修改器)或Ollydbg。本实例⽤CE。。。。
例⼦:植物⼤战僵⼫--英⽂原版
说明:利⽤阳光值,来⼀步⼀步深⼊寻游戏基址。因为阳光值可以看到,可以改变。也可以通过⾦币等其他⽅式。
⾸先,打开游戏和CE⼯具,将游戏的进程加载进CE⼯具中。
将当前游戏的阳光值,填⼊搜索数值中,此时发现出现很多值。跨行转账收手续费吗
注意:在CE⼯具中,绿⾊代表静态地址,红⾊代表上⼀次操作改变的地址,⿊⾊代表动态地址但上⼀次操作没有改变。⽽要的基址就是静态基址。
张译主演的电视剧返回游戏,种植植物或摄取阳光,改变阳光值,再⼀次输⼊到搜索框中,点击“再次扫描”。此时发现只有⼀个值。(可能也会很多值,可以进⾏反复改)
那么问题来了,这个值到底是不是代表阳光的地址呢?
将搜索到值双击或点旁边的红⾊箭头,将值加载到下⽅的框中,双击数值,将会出现下图,然后进⾏修改,再观察游戏的阳光值是否被改变。如何改变了,说明已对了。(当然,在寻到多个值的时候也可以进⾏其中的某些值修改,从⽽排除⼀些可能。)
右击该值,选中“出是什么访问了这个地址”或是“出是什么改写了这个地址”,注意:如果点击了“出是什么改写了这个地址”,进去是空⽩的,此时要返回游戏,改变阳光值,才会出其他数值。因此当时游戏处于暂停状态,没有数据写⼊。
进去后,可能有多个值进⾏了访问或只有⼀个。记住,只含有 “mov”的指令,同时从上到下第⼀个(CE⼯具会推荐可能性最⼤的在前⾯)。
双击进去,看到如下的框。mov eax,[esi+00005560],
意思是将[esi+00005560]中代表的值移动到eax中,⽽⼗六进制的00005560就是偏移量,记录。esi的值可以在下⽅看到,但是下⼀个⽬标就是esi从哪⾥来?由哪个地址+多少偏移量等到的?
sjb什么意思
好了,离基址更近⼀步了。将esi的值复制到搜索值中(第⼀步),注意:记得将Hex打上勾勾,代表以⼗六进制进⾏搜索。点击“新的扫描”。
此时,是不是有点⼩崩溃?好多值,都是看不懂的。不急,记住:CE⼯具是好⼯具,⼀般将可能性最⼤的放在前⾯。可以先将第⼀个进⾏改变,试探。(⼀般都是在前5个)。同理,将前5个放⼊下⽅的框中。
然后,⼀个个依次右击该值,选中“出是什么访问了这个地址”或是“出是什么改写了这个地址”。注意:要时不时返回游戏玩⼀玩,更新下数据。当然,必要时要将游戏返回主菜单(即登陆窗⼝,但不要退出游戏,否则之前的地址都会改变,要重新弄)
如何判断是否到的呢?
⼀定要mov指令,同时观察第⼀个就可以了。
见下图。
注意没,mov eax,[ebp+14] ,其中将ebp+14得到eax,但是eax=00189288,如果eax就是之前到的esi,那么是不是应该两者⼀致的呢?所以,第⼀个不是要的。同理进⾏下⼀个。
下⼀个查。。。。。。。
同样,点击第⼀个mov指令,此时惊不惊喜,意不意外?
mov esi , [edi+00000768],⽽esi= 16AB6F18,与之前的⼀样。对,就是它,偏移量为768,记录。在下⽅框中的其他多余值,可以删除。保留有⽤的。
查下⼀个值。edi= 02179E80。
周渝民喻虹渊是不是很激动,了那么久,终于看到绿⾊的值了(静态地址)
同理,将他们加⼊到下⽅的框中,进⾏⼀个个的排除。
看到了没?mov ecx,[+ 002A9EC0],是不是进程,不是寄存器,不下去了。说明002A9EC02就是基址?
那么问题⼜来了,在第⼆框看到mov ecx[006A9EC0],但是点击进去却是002A9EC02,为什么?(本⼈不知道,试过很多次还是⼀样)
是不是有点难以置信,下⾯就来验证⼀下。。。(⽆论是否出现上⾯的情况,这验证都要进⾏,可以确保所的基址准确性)验证就是利⽤所到的基址,加上之前到的偏移量,阳光地址=基址+偏移量,那么最终的地址⼀定是阳光地址,否则基址错误。
第⼀情况:基址: 002A9EC0 偏移量:768 5560
韩雪的家世到底有多强大通过⼿动添加地址,可以看到基址: 002A9EC0根本不存在的,直接废除。
第⼆情况:基址: 006A9EC0 偏移量:768 5560
地址是存在,是可⽤的。不像上⾯情况如此。。。
再点击确定,把它放到下⽅的框中,然后修改它的值,看看游戏中的阳光值有没有改变。。。。
看到了⽊有。。。。
验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。验证成功了。通过修改其值可以直接改变阳光值。。同时也说明了真正的基址: 006A9EC0,偏移量:768,5560。。。。。。。。。。。
同理,也可以通过⾦币,冷却时间,植物等其他标志去寻基址。⽅法⼀样。。。
最后,推荐⼀个视频,可以看到实操。。。。。。。
发布评论