看流星社区

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

武林选怪CALL的问题

[复制链接]

该用户从未签到

发表于 2011-4-5 10:22:17 | 显示全部楼层 |阅读模式
武林的选怪CALL,这个call前面的朋友有发过,试验是可行的

    DWORD SelectMonster=0x0056A8B0;
    _asm
    {     
        pushad
        mov eax,dword ptr ds:[0x8d29a4]
        mov esi,dwSID
        push esi
        mov ecx,dword ptr ds:[eax+0x20]
        add ecx,0xd4
        call SelectMonster
        popad
    }

但是上面的这个call,必须是要求获得ID的,如果没ID的话,没法用
我在OD上看到,这个call前面还有一个获取怪物ID的call

0045CA65  |.  A1 A4298D00  mov    eax, dword ptr [8D29A4]
0045CA6A  |.  8BBB 9C070000 mov    edi, dword ptr [ebx+79C]
0045CA70  |.  F7C7 00000080 test    edi, 80000000
0045CA76  |.  8B48 1C      mov    ecx, dword ptr [eax+1C]
0045CA79  |.  8B51 08      mov    edx, dword ptr [ecx+8]
0045CA7C  |.  8B6A 20      mov    ebp, dword ptr [edx+20]
0045CA7F  |.  74 08        je      short 0045CA89
0045CA81  |.  F7C7 00000040 test    edi, 40000000
0045CA87  |.  74 02        je      short 0045CA8B
0045CA89  |>  33FF          xor    edi, edi
0045CA8B  |>  57            push    edi                              ; /Arg1 = 00000000
0045CA8C  |.  8BCD          mov    ecx, ebp                        ; |
0045CA8E  |.  E8 2D570F00  call    005521C0                        ; \ElementC.005521C0



然后这个call 的返回值eax就是获得的怪物ID
edi是上次怪物的ID,默认一开始应该是0的
然后我定义了一个call,我打算把获得的ID赋值给dwSID,为前面的选怪call使用
DWORD GetId=0x005521C0;
DWORD LastID
_asm
{
    pushad
    push LastID
    mov eax,dword ptr ds:[0x008D29A4]
    mov ecx,dword ptr ds:[eax+0x1C]
    mov edx,dword ptr ds:[ecx+0x8]
    mov ebp,dword ptr ds:[edx+0x20]
    mov ecx,ebp
    call GetId
    mov dwSID,eax
    popad
}

但是这个call始终无法用,一用就崩溃,请各位老师指点指点哪里错了?

该用户从未签到

发表于 2011-4-5 10:22:24 | 显示全部楼层
我怀疑这个call的功能是不是对的

该用户从未签到

发表于 2011-4-5 10:22:34 | 显示全部楼层
procedure choose;  //选怪
begin

asm
    pushad
    mov esi,gwid //遍例周围怪物的gwID赋值给这个变量
    push  esi
    mov    ecx, dword ptr [$8D29A4]
    mov    ecx, dword ptr [ecx+$20]
    add    ecx, $0D4
    mov    eax,$56A8B0
    call  eax
    popad
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
var homeadd:THandle;
begin
gwid:=-2147480861;
homeAdd:=FunIn(Hprocess,@choose);//调用注入函数
ResumeThread(homeAdd);      //运行注入的CALL线程
CloseHandle(homeAdd);        //关闭线程
end;

gwid设为全局变量都是无效的,不知道怎么办才好,难道只能直接写入怪物ID?不能传参数?

该用户从未签到

发表于 2011-12-2 18:56:31 | 显示全部楼层
支持楼主,这贴必须得顶
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

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

GMT+8, 2024-5-3 11:58

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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