读取内存

如何在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);

### 回答1: 易语言是一种针对Windows操作系统开发的高级编程语言,“csgo”代表“Counter-Strike: Global Offensive”,一款热门的多人在线射击游戏。在这个问题中,需要回答如何使用易语言编写一个写“csgo”游戏内存的驱动。 要编写一个写“csgo”游戏内存的驱动,首先需要理解内存的基本概念和原理。内存是计算机用于存储数据和程序的地方,可以通过特定的地址写数据。游戏的内存中存储了各种游戏状态、变量和对象的信息,我们可以通过读取和修改这些数据来实现对游戏的控制和修改。 在易语言中,可以使用WinAPI函数来访问和操作内存。具体来说,可以使用以下函数来实现对“csgo”游戏内存写操作: 1. 打开进程函数:使用WinAPI函数OpenProcess打开“csgo”进程,获取进程句柄。 2. 读取内存函数:使用WinAPI函数ReadProcessMemory从进程的地址中读取数据到本地变量中。 3. 写入内存函数:使用WinAPI函数WriteProcessMemory将本地变量中的数据写入到进程的地址中。 读取和写入内存时,需要确保使用正确的进程句柄和地址。可以通过一些基本的偏移量或者扫描特定的数据来找到“csgo”中需要修改的变量的地址。 需要注意的是,写“csgo”游戏内存的驱动可能涉及到游戏的防作弊和反作弊机制,因此在编写和使用该驱动时需要小心操作,尊重游戏的规定和其它玩家的权益,遵守游戏开发者的规范。 总之,通过在易语言中使用相应的WinAPI函数,我们可以编写一个能够写“csgo”游戏内存的驱动,实现对游戏状态和变量的控制和修改。但在使用驱动的过程中需要注意合法性和遵守游戏规定。 ### 回答2: 易语言是一种基于Windows系统编程语言,它具有简单易学、易于上手的特点。借助易语言,我们可以编写内存的驱动程序来实现与CSGO游戏进行交互。 首先,需要了解CSGO游戏的内存结构以及我们想要写的特定内存地址。我们可以通过一些工具(如Cheat Engine)来获取这些地址。 然后,在易语言中,我们可以使用kernal32.dll库文件来实现内存的功能。通过使用kernal32.dll中的ReadProcessMemory和WriteProcessMemory函数,我们可以在安装驱动程序的PC进程中读取和写入内存。 具体步骤如下: 1. 使用易语言创建一个新的项目,选择Windows驱动程序类型。 2. 在项目中导入kernal32.dll库文件。 3. 使用kernal32.dll中的OpenProcess函数来打开CSGO游戏进程,获取进程句柄。 4. 使用VirtualProtectEx函数来修改进程的内存保护属性,确保内存可以被写。 5. 使用ReadProcessMemory函数来读取我们想要获取的内存地址的值。可以将这些值存储在易语言变量中,以供后续使用。 6. 使用WriteProcessMemory函数来写入特定的内存地址。可以将需要写入的值存储在易语言变量中,然后传递给该函数。 7. 最后,关闭进程句柄以释放资源,并退出驱动程序。 需要注意的是,编写内存驱动程序需要深入了解Windows操作系统的工作原理和内存结构,同时也需要对C语言有一定的了解,以便理解和使用kernal32.dll中的函数。此外,为了避免违反游戏规则或者法律法规,对于游戏内存写操作应该遵循道德准则和法律法规。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值