游戏基址的原理及用CE进行简单寻找
- 格式:doc
- 大小:1.62 MB
- 文档页数:17
CE找基址及偏移教程
[转载于广海]
一般来说,大家都应该知道怎么找到一个值的地址,然后去修改它,但是有些地址退出游戏后就变了
这就需要偏移了,现在教大家找偏移和基址
1.当然是开游戏,有CE载入它的进程(看图)
2.搜你要搜的值,一般用默认的那个(整数,4字节)
比如搜金钱,就输入金钱数,一开始会有很多个,这时要改变下金钱的数(捡钱扔钱随你)
然后再次搜金钱的数,循环数次后剩下1个或几个,双击它,看图,现在我的钱是5
3.看图先
点击后得到这个(如图)
然后进入游戏改变一下金钱的数(扔钱捡钱随便你),之后得到如下图
双击后得到
4.根据刚才记下的esi,搜索下esi(如图)
5.这步很麻烦,我直接用说的了
然后双击被点下来的那个
接下来
这时候要小退一下,记住`是小退,进来后看看那个地址的值是不是跟金钱一样,改变一下金钱的数,看会不会跟着改变,如果会,就代表找对了
郁闷,游戏突然掉了,我重来,不过是从上面那一步开始,到这里也算差不多完了
6.接下来要重复上面讲到的其中一步,就是双击后看到偏移是504的那一步,得到如图
这个是完美国际122版的,也就是说,完美国际122的基址就是0092782C
二级基址=基址+20
金钱的地址则=二级基址+504不好意思``上次写的是一级基址=基址+20其实基址就是一级基址了`误导了大家基址+20应该是二级基址才对
到这里就完了。
CE寻找游戏基址什么是游戏基址? 游戏基址是保持恒定的两部分内存地址的⼀部分并提供⼀个基准点,从这⾥可以计算⼀个字节数据的位置。
基址伴随着⼀个加到基上的偏移值来确定信息准确的位置(绝对地址)。
全局基址⼀级基址⼆级基址三级基址的关系: 第⼀步、计算机内存⼀般分为四级存储。
(印象⾥好像是四级)。
第⼆步、在最底下的,往往是游戏的全局基址(决定⽤户界⾯以及⼀些细节等)和⼀些响应⽤户操作⽽对应实施的命令。
第三步、该是传递基址了。
现在⽹游的基址往往是动态的。
这个是因为底层的基址不会直接传递给上⼀级内存。
它会加上⼀个偏移量,然后再传递。
这个传递就是指针了。
第四步、当传递到第四层的时候,就会表现在游戏的⽤户界⾯。
在本例中使⽤的是:间接寻址指令的地址字段不是操作数的真实地址,⽽是操作数的有效地址所在的存储单元的地址。
即操作数地址的地址。
"----->"表⽰"指针指向"基址(存放的内容是⼀级基址起始地址)——>⼀级基址(存放的内容是⼆级基址的起始地址:假定为a)[⼀级基址(a) + 偏移量]------>⼆级基址(存放的内容是三级基址的起始地址:假定为b);[⼆级基址(b)+偏移量]-------->三级基址三级基址-------->游戏界⾯⾃⼰制作游戏修改器必须要找到⼀级基址注意:对于单机游戏,游戏基址是不变的。
对⽹络游戏,更新时可能会变。
(因此才会有游戏更新后,某外挂不可以使⽤。
其本质可能是基址改变的。
)另外,所谓的游戏的基址存在于虚拟内存中,⽐如基址为0x006A9EC0。
问题:基址⽆⾮就是⼀块内存,同时基址⼜不可以改变,如果计算机中该块内存被占⽤了,然后再安装基址为0x006A9EC0的游戏,此时会不会写⼊失败,造成⽆法安装呢?解析:不会,基址0x006A9EC0是虚拟内存,会经过页⾯地址重地位,将虚拟地址转换成本机的物理地址,即不存在地址冲突问题。
CE查找基址的原理CE查找基址的原理学外挂制做或不学的人都知道CE就是Cheat Engine,用这个玩意找基址(当然找基址也不是一定用CE,熟悉逆向的人也用调试器)用CE找基址是非常方便的,也知道怎么找,但是却不知道为什么这么找,那些个教程也没怎么说就说怎么找在这我随便说说比如,我要查找角色坐标的基址什么是基址,简单的说,只要这个应用程序不变,那么这个地址就不会变(比如全局变量,这个变量在编译就确定的它的地址了,编译成汇编后这个地址就直接拿来用了)动作:CE中查坐标值比如找到存放这个坐标值的内存地址是1111 (有可能是基址,在这里假如不是基址)那么就有[1111]==坐标动作:查找访问这个地址的代码比如:mov [eax+8],edi那么就有eax+8==1111; [eax+8]==[1111]==坐标; eax==1111-8==1103然后大家会再去查找1103为什么再去找这个eax的值(1103)?为什么重覆的这样找下去就能找到基址(如果选择的访问代码正确的话)?因为这个1103(也就是eax的值)不可能打娘胎时就在eax里,(就算在娘胎里混也要先播种吧)最起码也要一句mov eax,1103 这样才能到eax里,如果你在找访问该地址的代码时找到mov eax,1103 恭喜你,请重新找,你找错了,不可能找到这样的访问地址的代码重新讲上一回1103只有可能在内存由mov eax, dword ptr [1103的内存地址]这样的形式送给eax,就像上个世纪40年代送孩子一样当然可能不会直接mov eax dword ptr [1103的内存地址] 这样送给eax可能mov ebx, dword ptr [1103的内存地址]mov eax,ebx或其它,反正最后才到eax手中了所以我们才再在找内存中有1103的数的地址再找访问1103的地址的代码看看1103的地址是哪个混蛋+偏移形成的一般会再遇到像mov eax dword ptr [esi+10] 这样加偏移的代码再找esi的地址找访问地址的代码假如走狗屎运马上遇到mov eax dword ptr [立即数] 这回真要恭喜发财,基址捡到了。
CE找基址及偏移教程CE (Cheat Engine) 是一款功能强大的开源游戏修改工具,可以用于找出游戏中的基址和偏移量。
在本教程中,我将向您介绍如何使用CE来找到基址和偏移量。
第一步是启动CE,并选择您要修改的游戏进程。
在CE的主界面上,您可以看到一个按钮上写着"Select a process to open"。
单击该按钮,它将打开一个对话框,显示您当前正在运行的所有进程。
在这个对话框中,选择您想要修改的游戏进程,并单击"Open"。
要找到基址,您需要在游戏中查找一个可修改的值。
在CE的主界面上,单击"First Scan"(首次扫描)按钮来开始。
在弹出的对话框中,选择要的数据类型,如整数、浮点数等。
在"Value"字段中输入您想要查找的值,然后单击"Scan"按钮。
CE将开始游戏进程中的内存地址,以找到与您输入的值匹配的地址。
这个过程可能需要一些时间,具体取决于您的计算机性能和游戏进程的大小。
当完成后,CE将显示一个地址列表,显示了与您输入的值匹配的地址。
这些地址被称为"Results"。
要找到基址,您需要修改游戏中的值,并进行第二次扫描。
修改游戏中的值,然后单击"Next Scan"(下一次扫描)按钮。
根据上一步的结果,CE将显示新的地址列表,这些地址仅包含与上一次扫描中的值匹配的地址。
这些地址可能是潜在的基址,但我们无法确定。
我们需要进一步修改游戏中的值,然后进行下一次扫描,以进一步缩小范围。
重复上述步骤,直到您找到了一组相对静止不变的地址。
这些地址很可能是游戏的基址。
为了验证,请尝试在这些地址上做一些修改,看看游戏中的值是否相应变化。
一旦您确定了游戏的基址,您可以使用偏移量来找到其他变量或函数的地址。
在CE的"Address List"中,选择基址的地址,并单击"Add Address Manually"(手动添加地址)按钮。
ce查找:搜索当前血量218OD查找:OD附加,先点运行让它跑起来。
CTRL+G,00456448.来到00456448血地地址是ESI+25C,搜索左面[]中ESI地值,不要搜索右面EDX。
向上查找ESI。
ESI是从ECX来地,在这里按F2下断。
看看对不对,要是对血值发生变化会被自动断下。
成功断下后在命令:后面添加 dd ecx+25c(因为血是ESI+25C,ESI是从ECX 来地所以ESI+25C=ECX+25C)。
回车。
来到当前血量。
DA十六进制换成十进制是218.证明ECX是对地,继续找ECX地值。
向上查找。
两段代码之间会出现NOP。
在高级语言中这两段代码叫做函数。
NOP将2个函数分开,一般在OD中函数以PUSH开始RETN结束。
因为在本段代码没有找到ECX,在向上找就是其他函数代码了,那样找起来会很麻烦,所以来到本段代码头部,看看还没有CALL.点击004563A0(代码头部)发现有个CALL,右键前往这个CALL。
如果这里没有CALL,在CALL这个位置下端,运行OD,让血值发生变化自己断下,看看返回值,然后记录下来在排除查找!前往这个CALL,来到!向上查找。
来到EAX发现是个跳转,所以要往回跳。
右键点击跳回!跳到00454B71。
一直向上来到头部没找到ECX,发现EAX这里有个调用,不过没有CALL,所以在这里下断,运行,到游戏里动一下让它自动断下。
取消断点,要不在这个断点又被断下了,看到了返回到……这个调用。
在第一个返回到,点右键,点在反汇编窗口中跟随。
然后运行OD。
让游戏动一下。
没被断下,继续向上查找ECX,发现ECX是地值是从EAX来地。
向上找EAX,没找到,发现函数代码中部有个CALL。
进入这个CALL看看。
命令:DD [EAX+24]+25C 在 [EAX+24] 这行代码下端。
在命令行按回车。
发现当前血是对地,取消断点在让OD运行起来。
向上 dd [[ecx+8]+24]+25c 在这行下断,在命令行回车。
CE找基址及偏移教程首先,为了理解基址和偏移的概念,我们需要了解一下计算机内存的组织结构。
一、计算机内存的组织结构计算机内存是由一系列连续的存储单元组成的,每个存储单元都有一个唯一的地址。
这些地址以字节为单位进行编址,从0开始递增。
程序在运行时,会被加载到内存中,并且在内存中分配一个起始地址。
二、基址和偏移的概念基址和偏移是指计算机内存地址的两个部分,用于定位内存中的特定数据。
其中,基址是内存段的起始地址,而偏移是相对于基址的地址的偏移量。
理解基址和偏移的重要性在于,它们为我们提供了一种动态定位内存中的数据的方式。
特别是在计算机安全领域,如逆向工程和漏洞分析,基址和偏移的概念非常重要。
三、寻找基址和偏移的方法在一些情况下,我们需要找到程序中一些特定变量或函数的地址,以便进行相关操作。
以下是一些常用的寻找基址和偏移的方法。
1.调试器调试器是寻找程序中基址和偏移的最常见工具之一、使用调试器,可以暂停程序的执行,并查看其内存中的的状态。
通过在程序中设置断点,可以直接获取特定变量或函数的地址。
2.静态分析静态分析是指在不运行程序的情况下对其进行分析。
可以使用反汇编器来分析程序的机器码,找到关键函数或变量的地址。
这种方法对于分析没有调试信息的程序特别有用。
3.动态分析动态分析是指在运行程序的情况下对其进行分析。
可以通过跟踪程序的执行,记录关键函数或变量的地址。
这种方法适用于需要捕获程序运行时的状态的情况。
4.模块排布在操作系统中,程序通常使用模块(DLL、SO等)来组织代码和数据。
模块的基址是一个固定的地址,而其中的变量和函数的地址是相对于该基址的偏移量。
因此,通过查找模块的基址和计算偏移量,可以找到特定变量或函数的地址。
四、基址和偏移的应用了解基址和偏移的概念后,我们可以使用它们进行一些常见的操作。
1.漏洞分析在漏洞分析中,基址和偏移可以帮助我们定位程序中的关键数据结构,比如缓冲区。
通过寻找基址和计算偏移量,可以精确地定位漏洞所涉及的内存位置,并进行相关的利用和修复操作。
CE查找基址的原理学外挂制做或不学的人都知道CE就是Cheat Engine,用这个玩意找基址(当然找基址也不是一定用CE,熟悉逆向的人也用调试器)用CE找基址是非常方便的,也知道怎么找,但是却不知道为什么这么找,那些个教程也没怎么说就说怎么找在这我随便说说比如,我要查找角色坐标的基址什么是基址,简单的说,只要这个应用程序不变,那么这个地址就不会变(比如全局变量,这个变量在编译就确定的它的地址了,编译成汇编后这个地址就直接拿来用了)动作:CE中查坐标值比如找到存放这个坐标值的内存地址是1111 (有可能是基址,在这里假如不是基址)那么就有[1111]==坐标动作:查找访问这个地址的代码比如:mov [eax+8],edi那么就有eax+8==1111; [eax+8]==[1111]==坐标; eax==1111-8==1103然后大家会再去查找1103为什么再去找这个eax的值(1103)?为什么重覆的这样找下去就能找到基址(如果选择的访问代码正确的话)?因为这个1103(也就是eax的值)不可能打娘胎时就在eax里,(就算在娘胎里混也要先播种吧)最起码也要一句mov eax,1103 这样才能到eax里,如果你在找访问该地址的代码时找到mov eax,1103 恭喜你,请重新找,你找错了,不可能找到这样的访问地址的代码重新讲上一回1103只有可能在内存由mov eax, dword ptr [1103的内存地址]这样的形式送给eax,就像上个世纪40年代送孩子一样当然可能不会直接mov eax dword ptr [1103的内存地址] 这样送给eax可能mov ebx, dword ptr [1103的内存地址]mov eax,ebx或其它,反正最后才到eax手中了所以我们才再在找内存中有1103的数的地址再找访问1103的地址的代码看看1103的地址是哪个混蛋+偏移形成的一般会再遇到像mov eax dword ptr [esi+10] 这样加偏移的代码再找esi的地址找访问地址的代码假如走狗屎运马上遇到mov eax dword ptr [立即数] 这回真要恭喜发财,基址捡到了。
先说下查找方式,大体就是肯定值查找模糊查找还有些值查找不出来的话先别急,因为那些值寄存方式不明白,所以可能会查找起来比较麻烦不知道存放方法的值可以先分析OD数据,OD分析数据中会得到很多数据,比如有些游戏存放坐标不是数据型,而是把数据改后存为文本型,找到寻路CALL后或需要用到坐标数据的CALL时就可以获得需要查找的值了。
这些下面再说先说下模糊查找,会模糊查找,确定值查找也就会了,不过确定值查找需要选择查找的数值类型模糊查找我用选择怪物数据为例下面画红圈的地方注意看1.肯定没有怪物和人物,NPC选中选中16进制,这样比较容易看数据。
数值填写0,然后点击首次扫描查找出来1大堆2.选中只怪物(注意:攻击的话别杀死怪物后再点扫描)扫描类型选择大于,再次点击再次扫描搜索出来来少了很多,不过还是太多了3.杀死怪物,然后扫描类型选择(精确数值)点击再次扫描4.看下扫描结果,应该仍是很多,然后重复2-3的步骤一直到看地址少于10个这里剩下3个值,0d3c1c9c和0d3c1ca0里寄存的有1个是怪物ID地址偏移,1个寄存怪物名称。
0d3c1ca4里寄存的是当前选中怪物血百分比其实那个游戏CALL里面挪用的选择怪物,解决怪物都是挪用这3个地址,若是不想做怪物过滤的话就没必要去查找怪物ID,怪物名称了。
总结回来很多不重要的功能能够不做就不做了。
不过很多游戏怪物过滤是很重要的。
呼呼下面说如何找出游戏基址直接拿上面地址找我拿0d3c1ca4来做例子双击0d3c1ca4再蓝色条部位随便哪处鼠标右键弹出下图蓝色部分点击鼠标左键,没有这个选项,我用的是弹出下图刚进这个图片的时候可能是空白的,因为没有动作调用这个地址,那么你选只怪物或已经选择了,那么换只会攻击那只怪物(这里需要注意,第1个mov eax,[esi+ecx*4-4] 可能开出来就会出现这种地址,这种地址表示数组地址,而在第1个就跳出来应该不会是咱们要找的偏移地址里面ecx一般=0 能够点进去看下查看里面ecx的值是不是=0 若是不是,那么那个就是咱们要找的偏移值。
游戏基址的原理及用CE进行简单寻找概要游戏基址(Base Address)是指游戏进程在内存中的起始地址。
不同的游戏基址具有不同的内存偏移,通过寻找游戏基址,可以确定特定变量或对象在内存中的地址。
在使用CE(Cheat Engine)进行简单寻找时,可以利用基址链来定位所需的内存位置。
在计算机中,内存是用来存储程序运行时所需的数据和指令的地方。
每个进程都有独立的内存空间,包括代码段、数据段和堆栈段等。
游戏也是一种程序,其在内存中存储了许多有关游戏状态、玩家属性等的数据。
为了能够修改游戏的一些参数或属性,如无敌模式、无限金钱等,需要确定这些数据在内存中的位置。
游戏基址的寻找通常分为静态和动态两种方法。
静态方法是指通过分析游戏的二进制代码,定位其中的特征数据进行寻找。
这种方法比较繁琐,需要一定的逆向工程知识和经验。
而动态方法则是利用CE等工具,在游戏运行时进行寻找。
使用CE进行寻找时,首先需要启动游戏和CE,并将游戏进程添加到CE的进程列表中。
然后,在CE的主界面中选择"Open",打开要进行寻找的游戏进程。
接下来,可以通过几种方法来寻找游戏基址。
1. 指定初始值:如果我们已经知道一些变量的初始值,在CE的主界面中选择"First Scan",并在输入框中输入这个值。
点击"New Scan"按钮进行扫描。
CE会在游戏的内存中与这个初始值匹配的地址。
此时,尽量不要进行其他的游戏操作,以减少内存的变化。
扫描完成后,在结果列表中会显示匹配的地址。
2.改变变量值:在找到一些匹配的地址后,可以进行一些游戏操作,改变这个变量的值。
然后,根据变化的值进行新一轮的扫描。
通过多次扫描,可以逐渐缩小范围,找到更精确的基址。
3. 通过指针链:指针是一种变量,它存储了另一个变量的地址。
在游戏中,有些属性或变量的地址是通过一个或多个指针进行间接引用的。
可以先确定这个变量的地址,然后通过"Find out what writes/reads to this address"功能来找到指向这个地址的指针。
游戏基址的原理及用CE进行简单寻找
2011-11-13 16:51
注:对初学者,基址的一些简单概念入门挺好的,就记下来了
首先,要想写挂,必须要知道游戏中的数据是多少,我们才能决定有什么操作。
所以本节课要解决的内容是---游戏一些简单的数据(红和蓝)。
对于网游而言,用的肯定是动态内存。
所以现在我们先把原理讲清楚,讲时候我尽量避免少用术语,用通俗的语言为大家解释。
有的人一直不理解为什么每次血的内存位置是变的,但是既然是变的,为什么我们又能通过固定的程序找到呢?这里我用以下图表示,并且用一些通俗话解释
因此要找游戏的血量,关键是把路线图中红色的三个不变的数字找到,也就是基址1的地址(下面就简称基址1了),偏移量1,偏移量2。
然后根据以下公式得到血量
基址2=基址1内放的数字+偏移量1
血内存地址=基址2内放的数字+偏移量2
HP值=血内存地址内放的数字
从上面看到,每次游戏之所以血内存地址会变,关键是因为,每次启动游戏时候,基址1内的数字是不同的。
下面我们就以前两天刚公测的游戏《昆仑OL》为例,找一找血的动态内存地址。
1、首先打开CE,在设置里面尽量使用内核模式调试器
2、点击左上角的电脑图标
3、选中游戏进程,按确定
4、可以看到人物的血量是220,所以输入220,点首次搜索。
其他用默认
5、以下是搜索结果,可以看到结果很多
6、出门让怪砍,使你掉血,然后CE在扫描内型下拉框里选择减少的数值
7、搜索完发现结果很多。
8、没事我们多搜索几次,直到出现比较少的数字为止,看现在就一个地址了
9、双击找到的地址,把他加入下面的方框内
10、修改描述为1.内存地址(表示第一次游戏内找到的内存地址),右击地址,选择“查找写入该地址的代码”
11、以下是结果,并且双击找到的结果
12、然后出现如下图片,红色内行写着 ecx+000001e0,这里ecx 代表二级基址内放的数值,1e0 代表偏移量2。
方框内是CE帮我们计算好的二级基址内的数值,我们就是需要他。
把这个数字记下啦。
通过它寻找二级基址的位置
13、点新的搜索,然后输入刚刚找到的二级基址内的数值,并且勾上前面的16进制(因为这个数据是16进制),再点击首次搜索(找找看哪个地址内的数值,满足上面这个数字),得到,如下两个结果,然后双击这两个结果,把他们加入下面的方框内。
并且添加注释第A次进游戏得到的可能二级基址。
14、二级基址只有一个,所以这两个结果只有一个是真的,(一般来说第一个是真的地址,但也不是绝对的。
碰RP的话,你也可以直接用第一)所以接下来要判断哪个才是真的二级基址。
刚刚说过,退到游戏选择人物画面再进游戏,一级基址不变,二级基址不变,但是二级基址内放的数字变了,这导致这个时候血的内存地址也变了。
所以下面要做的就是退到人物选择画面,再进入游戏,通过刚刚方法(1---13步骤),再找次二级基址,他应该和前一回找到的二级基址一样。
下面图中我描述为(B可能的二级基址)的东东,是我第二次搜索得到的可能二级基址。
比较下两次进游戏得到的二级基址,只有红色的地址是没变的,说明他就是二级基址。
15、找到二级基址后,通过上图的面板你们也发现
二级基址(10822D20 ) = 一级基址的数值() + 偏移1() 所以现在我们要找一级基址的数值和偏移1.
我们说过二级基址数值只要进入正式游戏都不不会改变了,只有进入人物选择画面的时候才变,下面我们要做的就是跟踪这个二级基址,回到人物选择画面,看看是谁往这个基址内写入东东~
16、正式进入游戏后,我们发现检测到几个结果,那到底哪个才是真的呢?我们选择红色那个,因为他有mov
17、双击这个红色,然后得到如下图。
红色那行写着 eax+ecx*4,这里前面的eax 代表一级基址内放的数值,ecx*4 代表偏移量1。
方框内是CE帮我们计算好的一级基址内的数值,我们就是需要他。
把这个数字记下啦。
通过它寻找一级基址的位置。
同时我们发现ecx代表的是4(十六进制),4(十六进制)*4=10(十六进制)。
10就是偏移1
18、搜索一级基址内的数值10822D10,看看哪个地址内装的是他。
结果就一个
19、好了现在我们知道所有的东西了,红色部分是无论哪次进游戏都不变的。
找到他们,现在就能进行找血的内存位置了。
一级基址(012BAB94 )
二级基址(10822D20 ) = 一级基址的数值(10822D10) + 偏移1(10)
血内存地址(055FCE18) = 二级基址的数值(055FCC38) + 偏移2(1e0)。