kenhuang 发表于 2011-4-1 15:28:08

Delphi写的单机游戏辅助的一点小问题

const
Base=$006a9ec0;
var
Form1: TForm1;
hd:cardinal;
pid:cardinal;
hprocess:cardinal;
lpNumberOfBytesRead:dword;
ygBase:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
hd:=findwindow(nil,'植物大战僵尸中文版');
getwindowthreadprocessid(hd,pid);
hprocess:=openprocess(PROCESS_ALL_ACCESS,false,pid);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ReadProcessMemory(hprocess,pointer(Base),@ygBase,4,lpNumberOfBytesRead);
ReadProcessMemory(hprocess,pointer(ygBase+$768),@ygBase,4,lpNumberOfBytesRead);
ReadProcessMemory(hprocess,pointer(ygBase+$5560),@ygBase,4,lpNumberOfBytesRead);
label2.Caption :=inttostr(ygBase);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i:=200;
WriteProcessMemory(hprocess, @ygBase, pointer(i),4,lpNumberOfBytesRead);
label2.Caption :=inttostr(ygBase);

请各位高手指点指点,为什么我写不进去呢?读是正常的,谢谢

黑色情人 发表于 2011-4-1 15:28:19

如果你要写的目标地址。是游戏原来的地址。你先把该地址写保护去掉先
如果你要写的地址不是游戏原来地址。就先申请一个可写的地址

smlyk 发表于 2011-4-1 15:28:29

不是保护的问题,是地址搞晕了,要实现功能,下面两句代码小改一下

原码:ReadProcessMemory(hprocess,pointer(ygBase+$5560),@ygBase,4,lpNumberOfBytesRead);
改成:ReadProcessMemory(hprocess,pointer(ygBase+$5560),@ygBase2,4,lpNumberOfBytesRead);

原码:WriteProcessMemory(hprocess, @ygBase, pointer(i),4,lpNumberOfBytesRead);
改成:Writeprocessmemory(hprocess,pointer(ygbase+$5560),@i,4,lpnumberofbytesread);


另对楼主的这句代码有兴趣
WriteProcessMemory(hprocess, @ygBase, pointer(i),4,lpNumberOfBytesRead);
有时间试试看能不能实现
页: [1]
查看完整版本: Delphi写的单机游戏辅助的一点小问题