看流星社区

 找回密码
 注册账号
查看: 2742|回复: 2

[Delphi] 新人求助,浪费高手一分钟时间,谢谢

[复制链接]

该用户从未签到

发表于 2011-3-31 09:09:40 | 显示全部楼层 |阅读模式
本人刚刚学习用delphi写辅助。
想用植物大战僵尸试试手,在网上找到基址 游戏内存基址:base = 0x006A9EC0  
    游戏阳光地址:[base+0x768]+0x5560  
    游戏金钱地址:[base+0x82C]+0x28  
    游戏关卡地址:[base+0x82C]+0x24  //关卡如:A-B 实际值为:(A-1)×10+B  

按照基址写的代码如下
Var
  Gameh:HWND;
  GamePid:DWORD;
  GamehProcess:Thandle;
  YNum:DWORD;
  base:DWORD;
  readByte:DWORD;
begin
  //获取游戏窗口句柄
  Gameh:=findwindow(nil,'植物大战僵尸中文版');
  //获取进程ID
  GetWindowThreadProcessId(Gameh,GamePid);
  //获取进程句柄
  GamehProcess:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE,false,GamePid);
  //改阳光
  Readprocessmemory(GamehProcess, pointer($006A9EC0),@base,4,readByte);
  Readprocessmemory(GamehProcess, pointer(base+768),@base,4,readByte);
  Readprocessmemory(GamehProcess, pointer(base+5560),@YNum,4,readByte);
  Edit1.text:=inttostr(YNum);

运行以后一直得不到正确的阳光数,高手帮帮忙。
   万分感激。

该用户从未签到

发表于 2011-3-31 09:09:52 | 显示全部楼层
游戏阳光地址:[base+0x768]+0x5560
按照你的公式的话你代码是写错的。

[base+0x768]
是基本地址的值 + 0x768 地址保存的值
然后由那个值加上0x5560
才是你公式地址的值

也就是先读这个内存地址的值 0x006A9EC0+768
把读到的值加上 0x5560
然后就是游戏阳光了。

该用户从未签到

发表于 2011-3-31 09:10:14 | 显示全部楼层
Readprocessmemory(GamehProcess, pointer($006A9EC0),@base,4,readByte);   
  Readprocessmemory(GamehProcess, pointer(base+$768),@base,4,readByte);  
  Readprocessmemory(GamehProcess, pointer(base+$5560),@YNum,4,readByte);  
  Edit1.text:=inttostr(YNum);  

这样就ok了!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-29 21:10

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表