看流星社区

 找回密码
 注册账号
查看: 2858|回复: 3

帮我看下这个拾取CALL哪里错了谢谢/

[复制链接]

该用户从未签到

发表于 2011-5-26 13:51:40 | 显示全部楼层 |阅读模式
//=============拾取================帮我看下这个拾取哪里错了谢谢/
procedure sq(const p:sss):Stdcall;
var
    Address: Pointer;
    dw1,dw2:dword;
begin
Address:= Pointer($577960);  //6.19更新
  dw1:=p^.d1;
  dw2:=p^.d2;
  asm
      pushad
      mov ecx, dword ptr [$8fea5c]
      mov edx, dw1
      push edx
      mov ecx, dword ptr [ecx+$20]
      mov eax, dw2
      push eax
      add  ecx, $D4
      call address
      popad
  end;
    end;
//=====调用拾取====
procedure TForm1.Button2Click(Sender: TObject);
var
  dd:sss;
  wnd,pid:hwnd;
  GoodsBase:dword;
  i:word;
begin
GoodsBase:=((((($12F82C)+$8)+$24)+$18+i*$4)+$4);
  new(dd);
  Wnd:=FindWindow(nil,pchar('Element Client'));
  GetWindowThreadProcessId(Wnd,@pid);
  dd.d1:=(GoodsBase+$110);
  dd.d2:=(GoodsBase+$10c);
  InjectFunc(wnd,@sq,dd,SizeOf((dd)^));
end;

该用户从未签到

发表于 2011-5-26 13:51:51 | 显示全部楼层
function ReadWithOffset(add: Integer;
  Offsets: array of Integer): Integer;
var
  i: DWORD;
begin
  for i := Low(Offsets) to High(Offsets) do
  begin
    ReadProcessMemory(hProcess, Pointer(add + Offsets), @add, 4, lpNumberOfBytes);
  end;
  Result := add;
end;

function ReadInt(add: Integer; size: DWORD=4): Int64;
begin
  ReadProcessMemory(hProcess, Pointer(add), @Result, size, lpNumberOfBytes);
end;

procedure sq(const p:sss):Stdcall;
var
  Address: Pointer;
  dw1,dw2:dword;
begin
  Address:= Pointer($00573790);  //6.19更新
  dw1:=p^.d1;
  dw2:=p^.d2;
  asm
    pushad
    mov ecx, dword ptr [$8F1DC4]
    mov edx, dw1
    push edx
    mov ecx, dword ptr [ecx+$20]
    mov eax, dw2
    push eax
    add  ecx, $D4
    call address
    popad
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  dd:sss;
  wnd,pid:hwnd;
  i:word;
  base:DWord;
  tmp1,tmp2,baseitem:DWORD;
begin
  Wnd:=FindWindow(nil,'Element Client');
  GetWindowThreadProcessId(WND, @PID);
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  base:=ReadWithOffset($0012F824,[0,$8,$24,$18]);
  for i := 0 to 768 do
  begin
    tmp1:=mem.ReadInt(base+i*4);
    if tmp1 <> 0 then
    begin
      baseitem:=ReadInt(tmp1+$4);
      if {放上可以捡取条件}true then
      begin
        new(dd);
        dd.d1:=ReadInt(baseitem+$110);
        dd.d2:=ReadInt(baseitem+$10c);
        InjectFunc(wnd,@sq,dd,SizeOf((dd)^));
      end;
    end;
  end;
end;

该用户从未签到

发表于 2011-5-26 13:52:02 | 显示全部楼层
晕,楼主,你GoodsBase:=((((($12F82C)+$8)+$24)+$18+i*$4)+$4);这个是什么!!!能这么写吗!!!!连i都直接搬出来了
建议楼主学习一下[ ]的含义!!
[XX ]=取XX地址的内存值

该用户从未签到

发表于 2011-12-2 18:34:17 | 显示全部楼层
楼主,我可是冒着被删帖的危险给您回复的,您一定要帮我求情啊
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

GMT+8, 2024-5-18 05:19

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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