求助:DLL注入成功后,如何修改内存?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ww94949403 2010-02-01 07:51:33
比如我的DLL注入到 一个游戏game.exe

注入成功,在游戏里按F12,可以呼出我的程序form1的窗口,


我现在想修改该程序一个内存地址的值,请教,该如何修改?如何去读内存的值?


前提是,不用WriteProcessMemory个函数和ReadProcessMemory函数,


我知道可以用WriteProcessMemory修改知道可以用ReadProcessMemory函数读,

但是DLL都注入到EXE了,和这个game.exe融合到一体了,我想不用"WriteProcessMemory"这个函数那么麻烦吧?



分多分少是个意思.

好人一生平安,谢谢!~
...全文
932 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
mouse1984dog 2010-02-02
  • 打赏
  • 举报
回复
学习
ww94949403 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 pathletboy 的回复:]
引用 20 楼 ww94949403 的回复:
成功了
经测试

pI := Pointer($00C46F88);


edit1.Text :=pI^;


这个的pI^ 改成pI 即可

不知道为什么


引用 18 楼 pathletboy 的回复:
pI^这样访问的话是一个字节,建议你把object pascal指针那块重新温习下。

[/Quote]



谢谢哈 我懂了

其实我自学这是跳着学的 今天学点这明天学点那.

基础只是看过视频教程.

谢谢了 结贴了
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 ww94949403 的回复:]
成功了
经测试

pI := Pointer($00C46F88);


edit1.Text :=pI^;


这个的pI^ 改成pI 即可

不知道为什么
[/Quote]

[Quote=引用 18 楼 pathletboy 的回复:]
pI^这样访问的话是一个字节,建议你把object pascal指针那块重新温习下。
[/Quote]
ww94949403 2010-02-01
  • 打赏
  • 举报
回复
成功了
经测试

pI := Pointer($00C46F88);


edit1.Text :=pI^;


这个的pI^ 改成pI 即可

不知道为什么
kfcoffe 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pathletboy 的回复:]
如果pI的类型是PChar.
var
pI: PChar;

pI := Pointer($0012FEC0);
edit1.Text := pI;
lstrcpy(pI, PChar(edit2.Text));
[/Quote]

pI := pchar(Pointer($0012FEC0));
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
pI^这样访问的话是一个字节,建议你把object pascal指针那块重新温习下。
kfcoffe 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 pathletboy 的回复:]
如上,pI的类型是PInteger.
var
pI: PInteger;

pI := PInteger(Pointer($0012FEC0));//这里转换下
edit1.Text := IntToStr(pI^);

pI^ := StrToInt(edit2.Text);
[/Quote]

pI := PInteger(Pointer($0012FEC0));//这里转换下
ww94949403 2010-02-01
  • 打赏
  • 举报
回复


知道了
pI := Pointer($00C46F88);


edit1.Text :=pI^;

这个是读00C46F88地址的字符串 VAR 的是PChar

但是读不到,读的是空的

edit1.text 的结果是空的
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
如果pI的类型是PChar.
var
pI: PChar;

pI := Pointer($0012FEC0);
edit1.Text := pI;
lstrcpy(pI, PChar(edit2.Text));
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
如上,pI的类型是PInteger.
var
pI: PInteger;

pI := Pointer($0012FEC0);
edit1.Text := IntToStr(pI^);

pI^ := StrToInt(edit2.Text);
ww94949403 2010-02-01
  • 打赏
  • 举报
回复


我觉得你的代码是对的啊

为什么会错??

PI的值给强制IntToStr把转换 赋值给 EDIT1 但是错误?

请看图
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
应该是pI^ := StrToInt(edit2.Text);,打错了。
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
pI := Pointer($0012FEC0);
edit1.Text := IntToStr(pI^);

pI^ := IntToStr(edit2.Text);
ww94949403 2010-02-01
  • 打赏
  • 举报
回复
谢谢 字符串 修改成功`
ww94949403 2010-02-01
  • 打赏
  • 举报
回复
还有.最后一个问题,最后一个

您教会我修改了,
但是我不会读.

然后在跟我说下怎么读吧谢谢.


pI := Pointer($0012FEC0);
edit1.Text := IntToStr(PI);

PI^ := edit2.Text ;

出错呢.
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
字符串修改方法略有不同。
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
var
pI: PChar;


begin
pI := Pointer($00C46F88);

lstrcpy(pI, '一二三');

end;
这样。
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
var
pI: PChar;


begin
pI := Pointer($00C46F88);

PI := '一二三';

end;
ww94949403 2010-02-01
  • 打赏
  • 举报
回复
谢谢 你好 刚修改出错

var
pI: Pstring;


begin
pI := Pointer($00C46F88);

PI^ := '一二三';

end;

出错,修改4字节申明的是 Pinteger

我要修改文字呢?3个字一共是6字节?

谢谢 不出错我就不问你了 不好意思
pathletboy 2010-02-01
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/1786426.htm?fr=ala0_1

var
lp: Cardinal;

VirtualProtect(pI, SizeOf(pI),PAGE_EXECUTE_READWRITE, lp);
加载更多回复(3)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧