内存数据读取,是最准确判别方法..其实不难的,,我具体把方法说下..希望大家仔细看:
网络游戏.每一个数据比如你的血值.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
"加血的按键",就是这么简单!!
对找到棚念神的动态地址右键查看修改这个地址的地址
可以找到偏移
然后再找基址高游
两者相加就是
动态链亏地址
这样就是不用每次都找了
这个你在找一下,这是一个有徧移的基址,你继续往下找,最后的一个一般是静态地址.. 追问: 就找到这一个,用的是ce,可是每次都变 回答: 我知道,搜索不是有一个范围这个选项吗,你在范围里面填上这个动态地址 比如动态地址是 0x100000,那就在范围里面搜索 0x500000 - 0x200000,看看有哪些内存有保存这些数据的,不过你用这个方法一直找,最后没有找到的话可能这个就是静态地址了,找到地址的话你再推算徧移量就可以... 追问: 你说的静态基址 计算的偏移=我找到的动态基址?复杂…还是用ce找? 追问: 静态基址加偏移等于动态基址,这样理解对吗? 回答: 都要的,先用CE找,然后再计算,我先给你段G代码你看薯尺唯看先你就会明白为什么要这样做了 Addr = Memory.GetMemory(Token, &H6A9EC0) Addr = Memory.GetMemory(Token, Addr + &H82C) Memory.SetMemory Token, Addr + &H28, 999999 这段是植物大战僵尸的修改无限金币的代码,你看上面的GetMemory,这个是读内存函数 Addr = Memory.GetMemory(Token, &H6A9EC0) '' 从静态基础地址里面读取数据 Addr = Memory.GetMemory(Token, Addr + &H82C)'' 然后从CE中搜索得出来的徧移 最后一个就是修改内存 Memory.SetMemory Token, Addr + &H28, 999999 '' Addr + &H28 这离还需要徧移,这是一个典型的2段动态徧移 有不懂的话再问我吧.. 追问: 怎样推算偏移?哥帮帮忙吧? 回答: 徧移数培量=动态地址 - 储存地址内存中的数据 比如有一个静态基础地址,里面的数据为 0x1000,动态地址为0x1200 则徧移量=0x1200-0x1000=0x200 都是这样推算的.. 追问: 哥,也就是每个动态基址肯定有相对应的静态基址对吗?那静态基址在重新玩游戏就不会变了吗?哥别烦啊! 回答: 呵呵,我没有这么快烦的,一般情况下都会有一个对应的静态基址,就比如进程代码也有一个基址,你要这样去想,每个变量都是有一个内存地址的,只要你找到这个变量的困迟内存地址的话都可以修改,大多数情况下是不会变化的..欢迎分享,转载请注明来源:内存溢出
评论列表(0条)