请各位大神费心了,写入内存问题

mikte 2015-12-30 09:17:23
求教如何如何修改内存
将:


修改为:


,求大神帮忙,给写一段可以实现的代码,小弟之前是粗学过一点点delphi皮毛,实在看不懂了- -

学易语言的朋友给了这个代码
函数_内存写字节集型 (标题句柄, 函数_十六到十 (“00411C4D”), { 129, 250, 0, 45, 49, 1 })
说这样就可以实现上面的修改,
但是小弟不会易语言,只想用delphi来实现,求大神帮忙喽
...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liups 2015-12-30
  • 打赏
  • 举报
回复
顺便说一下,上面的代码是delphi7下面编写的,D5也可以正常编译。但是XE2下面得修改,请参考这里: http://blog.csdn.net/beiguofengguang/article/details/6961257
liups 2015-12-30
  • 打赏
  • 举报
回复
0x1869F是立即数寻址,就是EDX的内容和0x1869F比较(实际上是做减法,但是结果不回送到EDX中)并设置相应的标志寄存器位,后续的指令可以根据这些位来决定如何执行。 00411C4D是这条cmp指令在内存中的地址 综合起来大约可以猜测:楼主是要修改内存中的指令(程序)了,是想玩破解么?偶没有玩过,帮不上你了
mikte 2015-12-30
  • 打赏
  • 举报
回复
这里的基础地址就是00411C4D吗?
mikte 2015-12-30
  • 打赏
  • 举报
回复
感谢您的回复,小弟确实不太理解这里给出的 0x1869F 改成 0xF4240 是什么意思,是修改内存 还是修改里面的值?0xF4240 代表的是什么呢?
liups 2015-12-30
  • 打赏
  • 举报
回复
liups 2015-12-30
  • 打赏
  • 举报
回复
procedure TForm1.Timer1Timer(Sender: TObject);
var
  roadrashhandle:THandle;//游戏句柄
  pid: dword;//游戏进程ID
  curmoney:integer;//取出的金钱数目
  newmoney:integer;//要改成的金钱数目
  h: THandle;//进程的句柄
  lpNumberOfBytesRead:DWord;//读取了多少字节
  lpNumberOfBytesWrite:DWord;//写了多少字节
  jiashu:integer;
  //血的地址没有找准,只能放弃了
  //blood:integer;
begin
  roadrashHandle:=FindWindow('RashRoot','Road Rash');
  if roadrashHandle=0
    then
       begin
         Label2.caption:='游戏未运行';
         Label2.Font.Color:=clRed;
       end
    else
      begin
        Label2.caption:='游戏已运行';
        Label2.Font.Color:=clGreen;
        GetWindowThreadProcessId(roadrashHandle, @pid);
        h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
        if h = 0 then Exit;
        ReadProcessMemory(h,ptr($4B8A18),@curmoney,4,lpNumberOfBytesRead);
        Edit2.Text:=inttostr(curmoney);
        newmoney:=strtoint(edit1.text);
        if CHeckBox1.Checked then
           begin
             //游戏中金钱的地址为$4B8A18
             WriteProcessMemory(h,ptr($4B8A18),@newmoney,4,lpNumberOfBytesWrite);
           end;
        jiashu:=10;
        if CHeckBox2.Checked then
           begin
             //游戏中加速的地址为$465A34
             WriteProcessMemory(h,ptr($465A34),@jiashu,4,lpNumberOfBytesWrite);
           end;
//以下本来是想锁定血,可是好象未能找到地址
{        blood:=$1F1F0A00;
        if CHeckBox3.Checked then
           begin
             WriteProcessMemory(h,ptr($49E115),@blood,4,lpNumberOfBytesWrite);
           end;
}
      end;
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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