热血江湖V60000喊话

1.       喊话CALL

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

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

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

  1. mov esi,0c86df00  
  2. mov edx,[esi]  
  3. push 0d  
  4. push 0d  
  5. push 3ed  
  6. mov ecx,esi  
  7. call [edx+4]  
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

  1. 00440409    8B16            mov edx,dword ptr ds:[esi]  
  2.   
  3. 0044040B    57              push edi  
  4.   
  5. 0044040C    53              push ebx  
  6.   
  7. 0044040D    68 ED030000     push 3ED  
  8.   
  9. 00440412    8BCE            mov ecx,esi  
  10.   
  11. 00440414    FF52 04         call dword ptr ds:[edx+4]  
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查看下

现在可以写喊话的函数了

  1. VOID Talk(const char * text)  
  2.   
  3. {  
  4.   
  5.     char *s;  
  6.   
  7.     int *p;  
  8.   
  9.     p=(int *)0x0DD6148;  
  10.   
  11.     s=(char *)(*p+0x13c);  
  12.   
  13.     memcpy(s,text,strlen(text));  
  14.   
  15.     __asm  
  16.   
  17.     {  
  18.   
  19.         mov esi,0x03E6F304  
  20.   
  21.         mov esi,[esi]  
  22.   
  23.         mov edx,[esi]  
  24.   
  25.         push 0x0d  
  26.   
  27.         push 0x0d  
  28.   
  29.         push 0x3ed  
  30.   
  31.         mov ecx,esi  
  32.   
  33.         call [edx+4]  
  34.   
  35.     }  
  36.   
  37. }  
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]

    }

}


调用:

  1. CString str;  
  2.   
  3.     GetDlgItemText(IDC_EDIT_SPEAK,str);  
  4.   
  5.     USES_CONVERSION;  
  6.   
  7.     Talk(T2A(str.GetBuffer()));  
  8.   
  9.     str.ReleaseBuffer();  
CString str;

    GetDlgItemText(IDC_EDIT_SPEAK,str);

    USES_CONVERSION;

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

    str.ReleaseBuffer();


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值