如何在DELPHI中实现读出基址数据
寻找血值在OD中是这样的 ~2HlAU))<&
dd [[[95ad3c]+1c]+24]+25c 1" k_l.\,0
u!]g^r
DELPHI中这样 rAv)k&l
<6!;mb ;cX
GameBase =$95E800;//[95ad3c] 55%j$f
ReadProcessMemory(GamehProcess,Pointer(GameBase+$1C),@ptmp,4,readByte); ' F,.y6QU
ReadProcessMemory(GamehProcess,Pointer(Ptmp+$24),@ptmp,4,readByte); M/d6I$~7z
ReadProcessMemory(GamehProcess,Pointer(base+$25c),@ptmp,4,readByte); Ad:}i9-x
? "+g6II
Y<ZaW{%
Vf V|fuW
寻找血值在OD中是这样的 @5=2+ M
?D\6@G:,#@
dd [[[[[95E800+1c]+24]+918]+14]+1c]+25c U!TSAg21P
.Fl5b}C(
DELPHI中这样 B-.QGf8K.
-W\1 n#J
GameBase =$95E800;//[95ad3c] p]]*H2UD
4b@ Awtk
o9JZ -biH
ReadProcessMemory(GamehProcess,Pointer(GameBase+$1C),@ptmp,4,readByte); [ U`})
ReadProcessMemory(GamehProcess,Pointer(Ptmp+$24),@ptmp,4,readByte); V."qxKsz
ReadProcessMemory(GamehProcess,Pointer(Ptmp+$918),@ptmp,4,readByte); !uxma~ZH-
ReadProcessMemory(GamehProcess,Pointer(Ptmp+$14),@ptmp,4,readByte); M&h`uO/[
ReadProcessMemory(GamehProcess,Pointer(Ptmp+$1C),@ptmp,4,readByte); tB<2mjg
ReadProcessMemory(GamehProcess,Pointer(base+$25c),@ptmp,4,readByte); P-LdzVt(^
从这两个例子中,你会发现一些规律的。 C%ZSsp u
以上摘自阿冲笔记。
var
Num:Cardinal;
a,b:Integer;
ParamAdd: THandle;
lpNumberOfBytes:Cardinal;
begin
a:= 1234567;
b:= 11111;
//GetWindowThreadProcessId(Ghwnd,PID);
PID:= FindProcessID('project2.exe');
ProcessID:=OpenProcess(PROCESS_ALL_ACCESS,False,PID); // 打开进程
ParamAdd:= VirtualAllocEx(ProcessID,nil,20,MEM_COMMIT,PAGE_READWRITE); //开辟一个空间
WriteProcessMemory(ProcessID, @a, @b, SizeOf(b), lpNumberOfBytes); // 将地址b内容写到地址a中
ReadProcessMemory(ProcessID,Pointer(@a),@sBase,6,Num); // 读取地址a内容放进地址sBase中
ShowMessage(IntToStr(sBase));
end;
Button1Click(Sender: TObject);
var
hwnd:cardinal;
pid:Dword;
hProcess:cardinal;
x:string;
Num: cardinal;
begin
setlength(X,$10);
hwnd := FindWindow(nil, 'Cheat Engine 5.3');
GetWindowThreadProcessId (hwnd, @pid);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
If hProcess <> 0 Then
begin
if ReadProcessMemory(hprocess,Pointer($1005334),@x,$10,num) then
label1.Caption := string(x)
else
showmessage('读数失败~!');
end
else
showmessage('未启动游戏');
CloseHandle(hProcess);
end;
var
h : HWND;
PId : hwnd;
hProcess : Cardinal;
num : Cardinal;
x : pinteger;
dwErr : dword;
begin
h := FindWindow(nil,'testMem');
if h = 0 then
exit;
GetWindowThreadProcessId (h, @pid);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if hProcess = 0 then
exit;
getmem(x,4);
if ReadProcessMemory(hprocess,Pointer($00D43810),x,4,num) then
begin
messagebox(0,pchar(inttostr(x^)),'d',0);
end
else
begin
dwErr := getLastError;
messagebox(0,pchar(inttostr(dwerr)),'d',0);
end;
freemem(x);
closehandle(hProcess);
读取内存
最新推荐文章于 2020-10-24 17:48:22 发布