热血江湖V60000喊话

来源:互联网 发布:游戏防沉迷软件 编辑:程序博客网 时间:2024/04/28 04:45
1.       喊话CALL

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

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

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

[cpp] view plaincopyprint?
  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]  


 

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

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

首先看下CALL

[cpp] view plaincopyprint?
  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]  


 

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

03E6F304

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

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

现在可以写喊话的函数了

[cpp] view plaincopyprint?
  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. }  


调用:

[cpp] view plaincopyprint?
  1. CString str;  
  2.   
  3.     GetDlgItemText(IDC_EDIT_SPEAK,str);  
  4.   
  5.     USES_CONVERSION;  
  6.   
  7.     Talk(T2A(str.GetBuffer()));  
  8.   
  9.     str.ReleaseBuffer();  


 

0 0
原创粉丝点击