随笔 - 1  文章 - 37  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

test

搜索

  •  

最新评论

根据3EF找到生成命令体的函数,该函数只有一个参数——消息体,转到上一个函数得到以下代码

  push    1FFF           ;1FFF入栈
  lea     eax, dword ptr [esp+CAC] ;(3244)  距离栈顶811个存储单元
  push    eax            ;eax入栈 解密后要存入的地址入栈
  add     edi, 10        ;edi=从字符串第17个字节开始往后的串
  push    edi            ;密文入栈
  call    004A0BD0       ;跟进发现这是普通的一次解密,解密后数据存在esp+CAC里
  mov     byte ptr [esp+eax+CA8], 0
  xor     eax, eax
  mov     ecx, 100       ;ecx=100 (256) 循环次数
  lea     edi, dword ptr [esp+3F8]   ;edi
  rep     stos dword ptr es:[edi]    ;
  lea     ecx, dword ptr [esp+3F8]  
  push    ecx
  lea     edx, dword ptr [ebx+3CD864]
  push    edx
  mov     ecx, ebx
  call    0042C440                   ;二次解密,生成回复密文
  lea     eax, dword ptr [esp+3F8]
  push    eax
  mov     ecx, 004D5C70 
  call    0049F770        ;调用messageSend(char* msg)
  lea     eax, dword ptr [esp+CA8]
  lea     edx, dword ptr [eax+1]
L023:
  mov     cl, byte ptr [eax]
  inc     eax
  test    cl, cl
  jnz L023
  sub     eax, edx
  cmp     eax, 3C
  jnz     0043BF9D
  mov     ecx, dword ptr [esp+CA8]
  mov     edx, dword ptr [esp+CAC]
  mov     eax, dword ptr [esp+CB0]
  mov     dword ptr [esp+38], ecx
  mov     ecx, dword ptr [esp+CB4]
  mov     dword ptr [esp+44], ecx
  mov     ecx, dword ptr [esp+CC0]
  mov     dword ptr [esp+3C], edx
  mov     edx, dword ptr [esp+CB8]
  mov     dword ptr [esp+40], eax
  mov     eax, dword ptr [esp+CBC]
  mov     dword ptr [esp+54], ecx
  mov     ecx, dword ptr [esp+CCC]
  mov     dword ptr [esp+48], edx
  mov     edx, dword ptr [esp+CC4]
  mov     dword ptr [esp+50], eax
  mov     eax, dword ptr [esp+CC8]
  mov     dword ptr [esp+60], ecx
  mov     ecx, dword ptr [esp+CD8]
  mov     dword ptr [esp+58], edx
  mov     edx, dword ptr [esp+CD0]
  mov     dword ptr [esp+5C], eax
  mov     eax, dword ptr [esp+CD4]
  mov     dword ptr [esp+24], ecx
  lea     ecx, dword ptr [esp+1C]
  mov     dword ptr [esp+1C], edx
  mov     edx, dword ptr [esp+CDC]
  mov     dword ptr [esp+20], eax
  mov     eax, dword ptr [esp+CE0]
  push    ecx
  mov     ecx, ebx
  mov     byte ptr [esp+50], 0
  mov     byte ptr [esp+68], 0
  mov     dword ptr [esp+2C], edx
  mov     dword ptr [esp+30], eax
  mov     byte ptr [esp+34], 0
  call    0042BD60
  lea     edx, dword ptr [esp+38]
  push    edx
  mov     ecx, ebx
  mov     byte ptr [ebx+49B160], al
  mov     byte ptr [ebx+49B161], ah
  call    0042BD60
  mov     word ptr [ebx+49B162], ax
  lea     eax, dword ptr [esp+50]
  push    eax
  mov     ecx, ebx
  call    0042BD60
  mov     word ptr [ebx+49B164], ax
  mov     ecx, dword ptr [esp+54AC]
  mov     dword ptr fs:[0], ecx
  pop     edi
  pop     esi
  pop     ebx
  mov     esp, ebp
  pop     ebp
  retn    4


分析以上代码可以简单得出以下结论
1. 从call  004A0BD0 的调用可以简单分析出二次密文可能也是标准消息结构
2. 通过对比未更新版本与最新版本对3EF的发送情况,未更新版本发送3EF时,消息体是空,命令体其他参数不为0,再细分析,
未更新的版本的3EF其实就是割肉的命令...........
最新版本的客户端收到二次密文后,经过一些处理,以3EF为命令发向服务器
3. 从add edi, 10可以猜测,二次密文的命令体可能是迷惑人用的
4. 从call 0049F770这个调用断定 esp+3F8 就是二次解密后的明文
5. 对于call 0042C440这个调用,可以猜测,这个就是二次解密的函数
6. 服务器发来的密文对于本次解密是没有影响的,只是对它进行了一些操作,生成了4个数并进行如下保存
  mov     byte ptr [ebx+49B160], al
  mov     byte ptr [ebx+49B161], ah
  mov     word ptr [ebx+49B162], ax
  mov     word ptr [ebx+49B164], ax
7. 二次解密函数有2个参数: arg1 = dword ptr [ebx+3CD864] , arg2 = [esp+3F8]
   也就是根据dword ptr [ebx+3CD864]来生成解密明文,并存入地址esp+3F8,于是ebx+3CD864就成了解密的关键

posted on 2008-06-01 20:12 Phrancol Yang 阅读(314) 评论(0)  编辑  收藏 所属分类: 反汇编

只有注册用户登录后才能发表评论。


网站导航: