- UID
 - 34236
 
 注册时间2007-8-13
阅读权限10
最后登录1970-1-1
周游历练 
  
 
 
 
该用户从未签到  
 | 
 
木马:Downloader-BIX 
样本见附件 
关键点: 
1:使用Loadlibrary 和 GetProcessAddress来获取API,运行DOWN回来的东东时是 
直接以CALL的形式运行 
2:加入大量的垃圾指令  看的眼酸 
3:通过解密附加数据来获得 URL 
4:以写堆栈的形式 而不是PUSH 的形式 压入函数参数 
================================================================== 
简要分析(以IDA 和OD为主): 
004026B1 >/$  55            push    ebp 
004026B2  |.  89E5          mov     ebp, esp 
004026B4  |.  83EC 28       sub     esp, 28 
004026B7  |.  81EC 3C080000 sub     esp, 83C 
004026BD  |.  89E3          mov     ebx, esp 
004026BF  |.  8925 AD264000 mov     dword ptr [4026AD], esp 
004026C5  |.  A1 44504000   mov     eax, dword ptr [<&KERNEL32.LoadLi> 
004026CA  |.  8983 0D040000 mov     dword ptr [ebx+40D], eax 
004026D0  |.  A1 48504000   mov     eax, dword ptr [<&KERNEL32.GetPro> 
004026D5  |.  8983 A3050000 mov     dword ptr [ebx+5A3], eax 
004026DB  |.  E8 54050000   call    00402C34                                                          ;修复IAT 
 
{ 
 
           seg000:00402C34                 push    ebp 
           seg000:00402C35                 mov     ebp, esp 
           seg000:00402C37                 sub     esp, 50h 
           seg000:00402C3A                 mov     ebx, stack_base 
           seg000:00402C40                 mov     byte ptr [ebx+7DCh], 2Eh       ;这里通过单字节的传送得到字符串 
           seg000:00402C47                 or      dh, 9Ah                        ;基本上使用DH DL CH之类的指令都是属于垃圾指令无视好了 
           seg000:00402C4A                 mov     byte ptr [ebx+7D9h], 6Ch 
           seg000:00402C51                 xor     dl, 82h 
           seg000:00402C54                 mov     ch, 59h 
           seg000:00402C56                 mov     byte ptr [ebx+7D6h], 72h 
           seg000:00402C5D                 mov     byte ptr [ebx+7D7h], 6Eh 
           seg000:00402C64                 mov     byte ptr [ebx+7DBh], 32h 
           seg000:00402C6B                 mov     byte ptr [ebx+7D5h], 65h 
           seg000:00402C72                 or      ch, 0C1h 
           seg000:00402C75                 mov     byte ptr [ebx+7E0h], 0 
           seg000:00402C7C                 mov     byte ptr [ebx+7D8h], 65h 
           seg000:00402C83                 mov     dh, 53h 
           seg000:00402C85                 mov     byte ptr [ebx+7DDh], 64h 
           seg000:00402C8C                 xor     cl, 24h 
           seg000:00402C8F                 add     ch, 5 
           seg000:00402C92                 mov     byte ptr [ebx+7DEh], 6Ch 
           seg000:00402C99                 mov     byte ptr [ebx+7DAh], 33h 
           seg000:00402CA0                 mov     byte ptr [ebx+7D4h], 6Bh 
           seg000:00402CA7                 and     ch, 34h 
           seg000:00402CAA                 mov     byte ptr [ebx+7DFh], 6Ch 
           seg000:00402CB1                 mov     dl, 0CAh 
           seg000:00402CB3                 sub     esp, 4 
           seg000:00402CB6                 lea     edi, [ebx+7D4h] 
           seg000:00402CBC                 mov     [esp+54h+var_54], edi ;   字符串Kernel32.dll 
           seg000:00402CBF                 call    dword ptr [ebx+40Dh]  ;LoadLibrary 
          整个子函数都是用来 获得API地址的,以下不详述 
           ......................................  
} 
004026E0  |.  8983 71070000 mov     dword ptr [ebx+771], eax 
004026E6  |.  C783 29080000>mov     dword ptr [ebx+829], 100000 
004026F0  |.  C783 21040000>mov     dword ptr [ebx+421], 300000 
004026FA  |.  83EC 10       sub     esp, 10 
004026FD  |.  C70424 000000>mov     dword ptr [esp], 6000000 
===================================================================== 
00402741  |.  8B83 6E010000 mov     eax, dword ptr [ebx+16E] 
00402747  |.  8983 7E010000 mov     dword ptr [ebx+17E], eax 
0040274D  |.  83EC 04       sub     esp, 4 
00402750  |.  80F4 46       xor     ah, 46                            ; | 
00402753  |.  8D83 09030000 lea     eax, dword ptr [ebx+309]          ; | 
00402759  |.  890424        mov     dword ptr [esp], eax              ; | 
0040275C  |.  80E6 1B       and     dh, 1B                            ; | 
0040275F  |.  E8 7EF7FFFF   call    00401EE2                          ; \3727D1~1.00401EE2  关键CALL  获得下载URL 
{ 
 代码有点长 只列关键的 
================================================================= 
 00401FC5  |> /80EC D6       /sub     ah, 0D6 
00401FC8  |. |8BB3 4A040000 |mov     esi, dword ptr [ebx+44A] 
00401FCE  |. |803E 00       |cmp     byte ptr [esi], 0 
00401FD1  |. |75 02         |jnz     short 00401FD5 
00401FD3  |. |EB 3C         |jmp     short 00402011 
00401FD5  |> |8BB3 4A040000 |mov     esi, dword ptr [ebx+44A] 
00401FDB  |. |803E 22       |cmp     byte ptr [esi], 22 
00401FDE  |. |75 08         |jnz     short 00401FE8 
00401FE0  |. |80E2 0F       |and     dl, 0F 
00401FE3  |. |80E2 3D       |and     dl, 3D 
00401FE6  |. |EB 29         |jmp     short 00402011 
00401FE8  |> |8BB3 10070000 |mov     esi, dword ptr [ebx+710] 
00401FEE  |. |8BBB 4A040000 |mov     edi, dword ptr [ebx+44A] 
00401FF4  |. |8A07          |mov     al, byte ptr [edi] 
00401FF6  |. |8806          |mov     byte ptr [esi], al 
00401FF8  |. |80F5 8E       |xor     ch, 8E 
00401FFB  |. |8383 10070000>|add     dword ptr [ebx+710], 1 
00402002  |. |8383 4A040000>|add     dword ptr [ebx+44A], 1 
00402009  |. |80C9 FF       |or      cl, 0FF 
0040200C  |. |80F5 04       |xor     ch, 4 
0040200F  |.^\EB B4         \jmp     short 00401FC5 
这里是把COMMANDLINE得到的参数 去掉 "和"  算是除了GetModuleFileName外 另一个得到自身文件名的方法 
================================================================================ 
004020CB  |.  80F2 60       xor     dl, 60 
004020CE  |.  80EC BE       sub     ah, 0BE 
004020D1  |.  C74424 14 000>mov     dword ptr [esp+14], 0 
004020D9  |.  80E2 57       and     dl, 57 
004020DC  |.  80C2 78       add     dl, 78 
004020DF  |.  C74424 18 000>mov     dword ptr [esp+18], 0           ;通过写堆栈来实现参数的PUSH 
                                                                                  下面会多次遇到,不详述 
004020E7  |.  80ED 08       sub     ch, 8 
004020EA  |.  80ED E7       sub     ch, 0E7 
004020ED  |.  FF93 7D070000 call    dword ptr [ebx+77D]               ;  kernel32.CreateFileA 
=============================================================================================== 
00402290  |> /8B83 76010000 /mov     eax, dword ptr [ebx+176] 
00402296  |. |3983 4A040000 |cmp     dword ptr [ebx+44A], eax 
0040229C  |. |75 0B         |jnz     short 004022A9 
0040229E  |. |80ED 1E       |sub     ch, 1E 
004022A1  |. |80C6 59       |add     dh, 59 
004022A4  |. |E9 8F000000   |jmp     00402338 
004022A9  |> |8BB3 4A040000 |mov     esi, dword ptr [ebx+44A] 
004022AF  |. |813E 41414141 |cmp     dword ptr [esi], 41414141    ;通过AAAA标识来遍历文件寻找加密后的URL 为下面解密做准备 
004022B5  |. |74 02         |je      short 004022B9 
004022B7  |. |EB 5F         |jmp     short 00402318 
004022B9  |> |8B83 4A040000 |mov     eax, dword ptr [ebx+44A] 
004022BF  |. |8983 7E060000 |mov     dword ptr [ebx+67E], eax 
004022C5  |. |80E1 2E       |and     cl, 2E 
004022C8  |. |8383 7E060000>|add     dword ptr [ebx+67E], 4 
004022CF  |. |8B83 7E060000 |mov     eax, dword ptr [ebx+67E] 
004022D5  |. |8983 10070000 |mov     dword ptr [ebx+710], eax 
004022DB  |. |80F1 AB       |xor     cl, 0AB 
============================================================================================ 
00402404  |.  80C1 AE       add     cl, 0AE                           ; | 
00402407  |.  8B83 25040000 mov     eax, dword ptr [ebx+425]          ; | 
0040240D  |.  894424 04     mov     dword ptr [esp+4], eax            ; | 
00402411  |.  B5 0A         mov     ch, 0A                            ; | 
00402413  |.  80EE A4       sub     dh, 0A4                           ; | 
00402416  |.  E8 24060000   call    00402A3F                          ; \3727D1~1.00402A3F关键CALL 解密开始 算法很简单 有兴趣的自己研究 
============================================================================================ 
} 
00402764  |.  8983 82060000 mov     dword ptr [ebx+682], eax 
0040276A  |.  83BB 82060000>cmp     dword ptr [ebx+682], 0 
00402771  |.  74 05         je      short 00402778 
00402773  |.  E9 72010000   jmp     004028EA 
00402778  |>  C683 51010000>mov     byte ptr [ebx+151], 31 
0040277F  |.  80E1 19       and     cl, 19 
============================================================================== 
004028EA  |> \83EC 08       sub     esp, 8 
004028ED  |.  80C2 DD       add     dl, 0DD                           ; | 
004028F0  |.  8D83 09030000 lea     eax, dword ptr [ebx+309]          ; | 
004028F6  |.  890424        mov     dword ptr [esp], eax              ; | 
004028F9  |.  B1 C9         mov     cl, 0C9                           ; | 
004028FB  |.  80E5 F5       and     ch, 0F5                           ; | 
004028FE  |.  8DBB 4E040000 lea     edi, dword ptr [ebx+44E]          ; | 
00402904  |.  897C24 04     mov     dword ptr [esp+4], edi            ; | 
00402908  |.  80C1 F8       add     cl, 0F8                           ; | 
0040290B  |.  80C9 D4       or      cl, 0D4                           ; | 
0040290E  |.  E8 EDE6FFFF   call    00401000                          ; \3727D1~1.00401000 下载服务器上的文件 
      调用了相关API 需要注意的就是 垃圾指令太多,第一次连接上服务器  服务器会以字符串形式返回下载的文件大小,由于URL已经失效 
所以返回了  页面的大小 "169" 换算成16进制就是0A9h 
=============================================================================================================== 
seg000:00402A00                 add     cl, 0A3h 
seg000:00402A03                 mov     eax, [ebp+arg_8] 
seg000:00402A06                 mov     [esp+890h+var_87C], eax 
seg000:00402A0A                 mov     eax, [ebp+arg_C] 
seg000:00402A0D                 mov     [esp+890h+var_878], eax 
seg000:00402A11                 or      cl, 9Fh 
seg000:00402A14                 sub     cl, 8Eh 
seg000:00402A17                 call    sub_4024AF       ;这个CALL就是运行DOWN回来文件的关键CALL 
{ 
  .................................. 
  seg000:00402676                 xor     ch, 0Eh 
  seg000:00402679                 and     ch, 0Ah 
  seg000:0040267C                 mov     eax, [ebp+arg_10] 
  seg000:0040267F                 mov     [esp+5Ch+var_58], eax 
  seg000:00402683                 or      dh, 0D9h 
  seg000:00402686                 mov     dh, 56h 
  seg000:00402688                 mov     eax, [ebp+arg_14] 
  seg000:0040268B                 mov     [esp+5Ch+var_54], eax 
  seg000:0040268F                 mov     eax, [ebp+arg_18] 
  seg000:00402692                 mov     [esp+5Ch+var_50], eax 
  seg000:00402696                 add     cl, 0D2h 
  seg000:00402699                 call    dword ptr [ebx+456h]  ;ebx+456h 所存放的就是down回来的PE文件的入口点 直接就运行了文件 本来还 
                                                                                  以为会通过CreateProcess之类的运行  这次长见识了  
  seg000:0040269F                 add     esp, 10h 
  seg000:004026A2                 popa 
  seg000:004026A3                 mov     [ebx+597h], eax 
} 
篇幅有限 这里只是简要分析,详细的分析过程太长了就不贴了     由于  木马下载的服务器已经失效了  直接在本机运行调试就可以了  至少我没分析出其他有害的地方  
当然最保险的还是在虚拟机里调试  万一 服务器在某个时间开通  。。。。。。。。。 
 
[ 本帖最后由 xhn1002 于 2008-8-13 17:03 编辑 ] |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |