关于内存读取的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 alalmn
  • 开始时间 开始时间
A

alalmn

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
Window: HWND;
Num: cardinal;
PHND: THandle;
PID,user_adr,i: Integer;
hp:array[0..30] of Char;
whp:array[0..30] of WideChar;
s:string;
adr,Money:dword;
Level:byte;
const
P_id_pass=$0792e66c; //定义内存地址

P_Money_Lever=$0012F82C;
P_Zone=$00905a48;
P_RPG=$03F79FAC;
begin
Window := findwindow('QElementClient Window', 'Element Client'); //主窗体句丙
GetWindowThreadProcessId(Window, @PID); //进程PID
PHND := OpenProcess(PROCESS_VM_READ, False, PID); //以读取权限打开
if PHND <> 0 then
begin
ReadProcessMemory(PHND,Pointer(P_id_pass),@adr,4,num);//get the address of user_pointer $02c36850
//内存地址指向的地址 存入adr
ReadProcessMemory(PHND,Pointer(adr+$0),@adr,4,num);
//偏移
ReadProcessMemory(PHND,Pointer(adr+$124),@adr,4,num);
//偏移
ReadProcessMemory(PHND,Pointer(adr),@hp,30,num);
memo1.Lines.Add('账号:'+hp);
ReadProcessMemory(PHND,Pointer(P_id_pass),@adr,4,num);//get the address of user_pointer $02c36850
ReadProcessMemory(PHND,Pointer(adr+$0),@adr,4,num);
ReadProcessMemory(PHND,Pointer(adr+$128),@adr,4,num);
ReadProcessMemory(PHND,Pointer(adr),@hp,30,num);
memo1.Lines.Add('密码:'+hp);
ReadProcessMemory(PHND,Pointer(P_Money_Lever),@adr,4,num);//get the address of user_pointer $02c36850
ReadProcessMemory(PHND,Pointer(adr+$24),@adr,4,num);
ReadProcessMemory(PHND,Pointer(adr+$250),@Level,4,num);
memo1.Lines.Add('等级:'+inttostr(Level));
ReadProcessMemory(PHND,Pointer(P_Money_Lever),@adr,4,num);//get the address of user_pointer $02c36850
ReadProcessMemory(PHND,Pointer(adr+$24),@adr,4,num);
ReadProcessMemory(PHND,Pointer(adr+$2DC),@Money,4,num);
memo1.Lines.Add('金钱:'+inttostr(Money));
ReadProcessMemory(PHND,Pointer(P_Zone),@HP,4,num);//get the address of user_pointer $02c36850
memo1.Lines.Add('服:'+hp);

ReadProcessMemory(PHND,Pointer(P_RPG),@adr,4,num);//get the address of user_pointer $02c36850
ReadProcessMemory(PHND,Pointer(adr+$0),@adr,4,num);
ReadProcessMemory(PHND,Pointer(adr+$0),@whp,40,num); // 读取内存(句柄,指向内存(adr+$0),找到whp, 读取40个字节, Num)
memo1.Lines.Add('人物名:'+whp); //显示人物名也就是WHP的结果
end;
end;
end.

这是个内存读取代码
P_id_pass=$0792e66c;
我就是不理解这个0792e66c值是怎么获取到的 我用EC查找内存地址的
如果有朋友会希望给我说下吧 我的QQ 316118740
 
怎么还在搞这个

没前途的了。。。 $0792e66c一级指针么、一级一级往上找的 CE教程看完就了解了
 
http://hiphotos.baidu.com/alalmn/pic/item/0c199b091d31412f6b60fb01.jpg
这个图片

0E7D0304 这个是帐户的内存地址 0E7D0304 这个地址每次找都会变
P_id_pass=$0792e66c;

怎么把他转换成这个啊0792e66c
 
每次运行程序,数据段是会根据需要随时被分配内存的,只要有一个很小的差异,内存分配
在二次运行的时间上、位置上稍微有点不同,被分配到的内存位置就会出现变化。代码段的
待遇好得多,除非刻意为之,通常代码段每次都会定义到相同的位置,否则程序就完蛋了。

修改器基本上是二种,一种是找到数据存在的位置,定时检查它的变化,并根据需要对变化
做出响应。这个方法一般仅仅用在当前运行的基础上,也就是说:程序运行-->使用内存搜
索查找需要的数据-->监视这个数据。等到程序再次运行,就重复上面的过程。

另一种也是以上面的搜索为基础的,不同的是它并不在找到数据后停止,而是挂入诊断分析
工具进行读写监视,最后跟踪到读写这个内存位置的代码段。看准了是谁在读写,在哪里读
写,然后对代码段下手。这种修改器即便下次重新启动程序,因为代码段每次会定位到相同
的内存位置,所以它可以不依赖于即时搜索,查找一次,终身受益。
 
你好.加我QQ好吗?我想和你研究研究这个问题.QQ:22901225
 
0E7D0304 这个是帐户的内存地址 0E7D0304 这个地址每次找都会变
P_id_pass=$0792e66c;

怎么把他转换成这个啊0792e66c 这个我也不会.谁知道呢.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
635
import
I
I
回复
0
查看
751
import
I
后退
顶部