热血江湖V60000喊话

  1.       喊话CALL

查找思路:在聊天窗口输入一段文字,在CE中扫描这段文字的内容,wwh Evil0r 区分大小写,最终找到两个地址,一个是编辑框里面显示的内容,一个是真正喊话的内容

查找访问编辑框内容(因为喊话肯定要读取这个编辑框的内容):4403a9

OD进入分析,转到该地址下断,游戏中输入喊话内容在OD中断下来,往下拉可以看到有个call,代码注入器测试,成功喊话

mov esi,0c86df00
mov edx,[esi]
push 0d
push 0d
push 3ed
mov ecx,esi
call [edx+4]


 

注意:要用CE剥离进程可以用其重新附加一次(但是感觉不如直接退出CE好用。。。),push  0D=13 是回车键,ESI的值有一个基址,下面会查找

2.       喊话CALL参数基址+偏移分析与VC实现

首先看下CALL

00440409    8B16            mov edx,dword ptr ds:[esi]

0044040B    57              push edi

0044040C    53              push ebx

0044040D    68 ED030000     push 3ED

00440412    8BCE            mov ecx,esi

00440414    FF52 04         call dword ptr ds:[edx+4]


 

首先下断记下此时ESI的值= 0C86E360,查找ESI的来源 CE中搜索可以找到一个基址

03E6F304

然后再找参数 编辑框输入字符串CE中搜索 找出真正的喊话地址,dd该地址,下内存访问断点,游戏中喊话断下来

来到的地方是对字符串的操作,分析反汇编代码,得到喊话字符串地址[0DD6148]+13C ,可以dc [0DD6148]+13C查看下

现在可以写喊话的函数了

VOID Talk(const char * text)

{

    char *s;

    int *p;

    p=(int *)0x0DD6148;

    s=(char *)(*p+0x13c);

    memcpy(s,text,strlen(text));

    __asm

    {

        mov esi,0x03E6F304

        mov esi,[esi]

        mov edx,[esi]

        push 0x0d

        push 0x0d

        push 0x3ed

        mov ecx,esi

        call [edx+4]

    }

}


调用:

CString str;

    GetDlgItemText(IDC_EDIT_SPEAK,str);

    USES_CONVERSION;

    Talk(T2A(str.GetBuffer()));

    str.ReleaseBuffer();


 


 

 

 

你可能感兴趣的:(游戏,c,汇编,测试,360,聊天)