血量地址为例吧
一级基址+偏移1 得 二级基址
二级基址+偏移2 得 三级基址
三级基址+偏移3 得 四级基址(也就是血量地址)
真正的基址和对应的偏移可能多几个,也可能会少几个看程序定
在不退出游戏的情况下一,二,三,四级基址(血量地址)是不会变化了,当退出游戏再进时,一级基址(最基础的基址)是不变的,但二级或三级基可能会改变,从而使后四级基址跟着改变,所以退出游戏后再进你之前找到的四级基址(血量地址)就不对了要想重进还能用就要找到一级基址,以及后面基址的偏移
注意:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的 *** 作码,用地址符号(Symbol)或标号(Label)代替指令或 *** 作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的不同平台之间不可直接移植。[1]
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件 *** 作和高要求的程序优化的场合。驱动程序、嵌入式 *** 作系统和实时运行程序都需要汇编语言。[
内存地址数据读取:最准确的判断方法
内存数据读取,是最准确判别方法其实不难的,,我具体把方法说下希望大家仔细看:
网络游戏每一个数据比如你的血值MP值怪的血值在内存中是以16进制的形式存放的而显示给我们看的是10进制的形式显示的,,[16进制转就是123456789ABCDEF,好比十进制的0123456789,逢16进1,十进制是逢十进1,不想算可以用windows自带的计算器,在附件中有]
网络游戏几乎全是动态内存存放[大话战国居然不是那天写辅助工具时发现的],,就是每上线一次,数据在内存中分配位置会变,但是数据间地址的差值是不变的就是所谓的偏移量我们要做的工作就是要让动态的,转换成静态的,只要找到一个就成了别的根据偏移量可以知道步骤如下:
1我们进游戏首先要做的就是找动态内存地址[我以HP值举例],找动态内存的工具软件很多,我推荐金山游侠,FPE,CE,GE等软件用法很简单就好比你现在的HP值是1000你先定位好程序输入1000搜索,会搜到一串地址然后让自己的血值变(比如穿件加HP的装备,比如是加了50血),再搜1050,这样试几次就找到了唯一的动态内存地址[虽然唯一,但一下线就会变的],第一步工作完全了
2然后我们要用到调试工具设断点,调试工具很多,比如OD或softice等,我以softice举例:
比如我们搜索到HP的动态地址是044321A7我们按CRTL+D呼出SOFICE下命令设断点BPM
044321A7
W
然后按F5退出进游戏只要HP值一变就会跳出调试的界面比如说位置跳到了001B:0047EB17
mov
eax,[edx+000000fc]处其中edx是基值[也可以是esi等等],000000fc是一个固定的地址偏移量,每次进游戏在变的就是基值中的数值
3到这有多种方法可以求得静态地址一种就是内存注入的方法网上有很多这类的资料主要是太麻烦我就不写了我讲我自己的方法我是用到指针的指针的思想就是我们的HP值是存放在一个动态内存地址中地址其实也是数据地址也是存放在地址中的当然要基值的地址所以我们要做的就是找存放基值地址的地址,可以用金山等软件搜索到不过地址是16进制的所以要转换成10进制再找存放基值地址的地址比如说找到011076EC好了我们的工作完成了现在就到了怎么写读语句用C语言写起来很简单用VB也可以写[别人说VB没指针但并不代表不能用]因为按键是VBS语言那我就用VB写当然我要调用WIN32
API函数
VB调用API要申明,如下:Ddeclare
Function
ReadProcessMemory
Lib
"kernel32"
(ByVal
hProcess
As
Long,
lpBaseAddress
As
Any,
lpBuffer
As
Any,
ByVal
nSize
As
Long,
lpNumberOfBytesWritten
As
Long)
As
Long
dim
edx
as
long
dim
hp
as
long
ReadProcessMemory
nOK,
ByVal
&H011076EC,
edx,
4,
0
ReadProcessMemory
nOK,
ByVal
edx+000000fc,
hp,
4,
0
就这样两条语句hp中的数值就是我们的血值了非常精准的可以得到比如我血有1000点我要在666点时加血你就可以if
hp<666
then
keypress
"加血的按键",就是这么简单!!
不是。基址就是一个地址。打个比方,假设CPU存储的信息是你所住的小区,小区又分为多少栋,那么你所在的那一栋就是基址,而在那一栋的基础上说你是住在那一栋的几零几,这就是地址,其中从你所住的那一栋到几零几房间的运算就是所谓的偏移量
同理,基址就是指CPU存储的信息的地址不过还要加偏移量才能获得准确的内存地址
额内存地址一般是变量
找基址用CE比较方便,但OD也是可以的,基址就是静态地址
首先你要先确定某一内存数据,即血蓝XY什么的
然后看地址,基址就是固定在程序中的某一位置的地址,具体点就是data区段里的地址
通常来说刚开始找到的地址是动态的,即临时分配的内存中
这个时候需要在你找的地址上下读写断点
一般来说会断到形如“mov 寄存器1, [寄存器2 + 偏移]”的指令
接着去搜索"寄存器2"的值,看看有没有静态地址存放,如果没有,重复上述步骤,直到找到静态地址
32位系统:
内存_驱动读写1写代码 (取进程ID (“进程名exe”), “基址+偏移=值”)
64位系统:
写内存代码(取进程ID(“进程名exe”),“基址+偏移=值”)
需要用到超级模块
超级模块下载地址:>
以上就是关于CE到底怎么根据内存地址偏移量找到真正的基址全部的内容,包括:CE到底怎么根据内存地址偏移量找到真正的基址、动态内存基址怎么找。、游戏的内存基址是源码吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)