【文章标题】: 一款QQ盗号木马的分析
【文章作者】: CCDebuger
【使用工具】: OD,IDA,PEiD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  今天逛汉化新世纪,看到一个标题叫“超级攻击软件udp攻击器”的帖子(http://bbs.hanzify.org/index.php?showtopic=50996),看跟帖有人说是木马,没事就拿来玩了一下。这个帖子的附件是个 udp.rar 文件,下载后先用 PEiD 扫描了一下解压后的 udp.exe 文件,显示是 Borland Delphi 5.0 KOL [Overlay]。呵呵,有 Overlay,那就先来看看附加数据是啥。用16进制查看一下附加数据,典型是个 EXE 文件,把附加数据保存为 test.exe,用 PEiD 扫一下,显示是 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay]。本来想用 UPX 自身来脱的,可 UPX 脱不了,那就用OD手脱吧。这东西脱壳简单,我就不讲了。脱完看了一下,是个易语言的程序,用16进制工具看了看,应该就是发帖人所说的那个udp攻击器了,不是真正的木马,忽略。再重新用16进制工具打开原来的那个 udp.exe,观察一下附加数据,发现附加数据的末尾有 UDP.exe、muma.exe这两个字串。呵呵,这个放木马的倒也挺有趣啊,直接就把木马命名为 muma.exe。从这看来这是捆绑过的,那我们就用 OD 来让它把那个 muma.exe 释放出来吧。先用 IDA 来分析一下主程序,发现有两个地方调用 ShellExecuteA,这是用来释放捆绑文件后运行的。OD 载入程序,在
  调用这两个函数的上面一点设断点,开始来看它释放:
  
  0040461D  |.  50            PUSH EAX                                 ; |FileName = "e:\Temp\\UDP.exe"
  0040461E  |.  68 30474000   PUSH <udp.Operation>                     ; |Operation = "Open"
  00404623  |.  6A 00         PUSH 0                                   ; |hWnd = NULL
  00404625  |.  E8 2EF6FFFF   CALL <udp.ShellExecuteA>                 ; \ShellExecuteA
  
  这是第一个断下来的地方,是运行那个真正的 UDP.exe 的。这时候文件已经释放到系统临时目录了,我设置在 E:\Temp 下。我还不想让这个 UDP.exe 运行,直接把 00404625 地址处的那条指令 CALL <udp.ShellExecuteA> NOP掉,现在 F9 继续:
  
  004046D9  |.  50            PUSH EAX                                 ; |FileName = "e:\Temp\\muma.exe"
  004046DA  |.  68 30474000   PUSH <udp.Operation>                     ; |Operation = "Open"
  004046DF  |.  6A 00         PUSH 0                                   ; |hWnd = NULL
  004046E1  |.  E8 72F5FFFF   CALL <udp.ShellExecuteA>                 ; \ShellExecuteA
  
  第二个断下来的地方是 004046D9,呵呵,muma.exe 出来了。这时不要动OD,直接到系统的临时目录下把 muma.exe 剪切到其他文件夹,关掉 OD,清空系统临时目录下的文件,我们来玩这个 muma.exe 吧。
  先用 PEiD 来检测一下这个 muma.exe,分析显示 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo [Overlay],直接用 UPX 的 -d 命令脱之。脱完检测是 Borland Delphi 6.0 - 7.0 [Overlay],先用16进制工具看一下附加数据,一堆ASCII字符。怀疑有可能是配置文件。再用资源工具看了一下,里面有个名称为 DATEINFO 的是个 PE 文件,先导出来保存为 DATEINFO.dll 文件。先上 IDA 看一下 muma.exe 和 DATEINFO.dll,muma.exe 主要是用来释放那个 DATEINFO.dll 的,这个 DATEINFO.dll 再来 hook 进程。通过 IDA 的分析知道这个木马是用来盗QQ的。为了得到木马的配置文件,我本来准备上虚拟机用 OD 动态调试那个 DLL。正好 nbw 在,给他看了一下,他说他知道这个木马,配置就是 EXE 里的附加数据,这下简单了,我就直接对这个 muma.exe 下手,虚拟机也不要了,呵呵。用 OD 载入 muma.exe,开头感觉有点像灰鸽子。因为我杀毒软件也关了,裸奔,小心一点,因为木马肯定要释放文件,所以我先在 CreateFileA 上全部设上断点,以绝后患,然后结合 IDA 的分析慢慢跟吧。载入后一路F8到这:
  
  0040576D   .  50            PUSH EAX                                 ; /Arg3
  0040576E   .  6A 00         PUSH 0                                   ; |Arg2 = 00000000
  00405770   .  6A 00         PUSH 0                                   ; |Arg1 = 00000000
  00405772   .  E8 6DE9FFFF   CALL muma.004040E4                       ; \回车看看这个CALL的代码
  
  按回车键,看看00405772这个CALL的代码,原来是调用 CreateMutexA,直接NOP掉00405772处的这句(用回车键进入CALL看代码后可以按 ALT+C 返回到当前的 EIP)。现在继续:
  
  00405777   .  8BF0          MOV ESI,EAX
  00405779   .  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
  0040577C   .  E8 FBEDFFFF   CALL muma.0040457C                            ;  跟进去看看
  
  跟进0040577C处的那个 CALL,原来是获得系统目录,再获取 C 盘的卷标号,用来在系统目录的\Program Files\Common Files\Microsoft Shared\MSINFO\下生成以系统卷标号命名的dll文件的。懒得看了,反正在 CreateFileA 上设了断点,又经过 IDA 的分析,直接F9,断在 CreateFileA 上:
  
  00404DED   .  50            PUSH EAX                                      ; |FileName
  00404DEE   .  E8 E1F2FFFF   CALL <JMP.&KERNEL32.CreateFileA>              ; \断在这,读muma.exe这个文件
  00404DF3   .  8BF0          MOV ESI,EAX
  00404DF5   .  83FE FF       CMP ESI,-1
  
  一路 F8 到这:
  
  00404E98   .  50            PUSH EAX                                      ; |Buffer
  00404E99   .  56            PUSH ESI                                      ; |hFile
  00404E9A   .  E8 D5F2FFFF   CALL <JMP.&KERNEL32.ReadFile>                 ; \ReadFile
  00404E9F   .  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
  00404EA2   .  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                 ;  那段附加数据中的ASCII字串出现了
  00404EA5   .  E8 AAFCFFFF   CALL muma.00404B54                            ;  跟进去好好看看
  
  00404B54  /$  55            PUSH EBP
  00404B55  |.  8BEC          MOV EBP,ESP
  00404B57  |.  83C4 D8       ADD ESP,-28
  00404B5A  |.  53            PUSH EBX
  00404B5B  |.  56            PUSH ESI
  00404B5C  |.  57            PUSH EDI
  00404B5D  |.  33C9          XOR ECX,ECX
  00404B5F  |.  894D D8       MOV DWORD PTR SS:[EBP-28],ECX
  00404B62  |.  894D DC       MOV DWORD PTR SS:[EBP-24],ECX
  00404B65  |.  894D E0       MOV DWORD PTR SS:[EBP-20],ECX
  00404B68  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
  00404B6B  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
  00404B6E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  00404B71  |.  E8 C2EDFFFF   CALL muma.00403938
  00404B76  |.  33C0          XOR EAX,EAX
  00404B78  |.  55            PUSH EBP
  00404B79  |.  68 B84C4000   PUSH muma.00404CB8
  00404B7E  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  00404B81  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  00404B84  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
  00404B87  |.  E8 74EAFFFF   CALL muma.00403600
  00404B8C  |.  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
  00404B8F  |.  E8 6CEAFFFF   CALL muma.00403600
  00404B94  |.  C645 EA FC    MOV BYTE PTR SS:[EBP-16],0FC
  00404B98  |.  C645 EC F0    MOV BYTE PTR SS:[EBP-14],0F0
  00404B9C  |.  C645 EE C0    MOV BYTE PTR SS:[EBP-12],0C0
  00404BA0  |.  33C0          XOR EAX,EAX
  00404BA2  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
  00404BA5  |.  C645 E6 00    MOV BYTE PTR SS:[EBP-1A],0
  00404BA9  |.  BB 02000000   MOV EBX,2
  00404BAE  |.  33FF          XOR EDI,EDI
  00404BB0  |.  33F6          XOR ESI,ESI
  00404BB2  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]                  ;  第二次出现附加数据中的ASCII字串
  00404BB5  |.  E8 8EEBFFFF   CALL muma.00403748
  00404BBA  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
  00404BBD  |.  3B75 F4       CMP ESI,DWORD PTR SS:[EBP-C]
  00404BC0  |.  0F8D B9000000 JGE muma.00404C7F
  00404BC6  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]                 ;  解码算法开始
  00404BC9  |.  0FB60430      |MOVZX EAX,BYTE PTR DS:[EAX+ESI]
  00404BCD  |.  83E8 3C       |SUB EAX,3C
  00404BD0  |.  79 2A         |JNS SHORT muma.00404BFC
  00404BD2  |.  8D45 DC       |LEA EAX,DWORD PTR SS:[EBP-24]
  00404BD5  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]
  00404BD8  |.  8A1432        |MOV DL,BYTE PTR DS:[EDX+ESI]
  00404BDB  |.  E8 40EBFFFF   |CALL muma.00403720
  00404BE0  |.  8B55 DC       |MOV EDX,DWORD PTR SS:[EBP-24]
  00404BE3  |.  8D45 E0       |LEA EAX,DWORD PTR SS:[EBP-20]
  00404BE6  |.  E8 65EBFFFF   |CALL muma.00403750
  00404BEB  |.  FF45 F0       |INC DWORD PTR SS:[EBP-10]
  00404BEE  |.  46            |INC ESI
  00404BEF  |.  C645 E6 00    |MOV BYTE PTR SS:[EBP-1A],0
  00404BF3  |.  BB 02000000   |MOV EBX,2
  00404BF8  |.  33FF          |XOR EDI,EDI
  00404BFA  |.  EB 7A         |JMP SHORT muma.00404C76
  00404BFC  |>  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]
  00404BFF  |.  8A0430        |MOV AL,BYTE PTR DS:[EAX+ESI]
  00404C02  |.  2C 3C         |SUB AL,3C
  00404C04  |.  8845 E7       |MOV BYTE PTR SS:[EBP-19],AL
  00404C07  |.  8B45 F0       |MOV EAX,DWORD PTR SS:[EBP-10]
  00404C0A  |.  3B45 F4       |CMP EAX,DWORD PTR SS:[EBP-C]
  00404C0D  |.  74 70         |JE SHORT muma.00404C7F
  00404C0F  |.  8D47 06       |LEA EAX,DWORD PTR DS:[EDI+6]
  00404C12  |.  83F8 08       |CMP EAX,8
  00404C15  |.  7C 44         |JL SHORT muma.00404C5B
  00404C17  |.  8A45 E7       |MOV AL,BYTE PTR SS:[EBP-19]
  00404C1A  |.  24 3F         |AND AL,3F
  00404C1C  |.  8BF8          |MOV EDI,EAX
  00404C1E  |.  81E7 FF000000 |AND EDI,0FF
  00404C24  |.  B9 06000000   |MOV ECX,6
  00404C29  |.  2BCB          |SUB ECX,EBX
  00404C2B  |.  D3EF          |SHR EDI,CL
  00404C2D  |.  8D45 D8       |LEA EAX,DWORD PTR SS:[EBP-28]
  00404C30  |.  33D2          |XOR EDX,EDX
  00404C32  |.  8A55 E6       |MOV DL,BYTE PTR SS:[EBP-1A]
  00404C35  |.  0BD7          |OR EDX,EDI
  00404C37  |.  E8 E4EAFFFF   |CALL muma.00403720
  00404C3C  |.  8B55 D8       |MOV EDX,DWORD PTR SS:[EBP-28]
  00404C3F  |.  8D45 E0       |LEA EAX,DWORD PTR SS:[EBP-20]
  00404C42  |.  E8 09EBFFFF   |CALL muma.00403750
  00404C47  |.  FF45 F0       |INC DWORD PTR SS:[EBP-10]
  00404C4A  |.  33FF          |XOR EDI,EDI
  00404C4C  |.  83FB 06       |CMP EBX,6
  00404C4F  |.  75 07         |JNZ SHORT muma.00404C58
  00404C51  |.  BB 02000000   |MOV EBX,2
  00404C56  |.  EB 1D         |JMP SHORT muma.00404C75
  00404C58  |>  83C3 02       |ADD EBX,2
  00404C5B  |>  8BCB          |MOV ECX,EBX
  00404C5D  |.  8A45 E7       |MOV AL,BYTE PTR SS:[EBP-19]
  00404C60  |.  D2E0          |SHL AL,CL
  00404C62  |.  8845 E6       |MOV BYTE PTR SS:[EBP-1A],AL
  00404C65  |.  8A441D E8     |MOV AL,BYTE PTR SS:[EBP+EBX-18]
  00404C69  |.  2045 E6       |AND BYTE PTR SS:[EBP-1A],AL
  00404C6C  |.  B8 08000000   |MOV EAX,8
  00404C71  |.  2BC3          |SUB EAX,EBX
  00404C73  |.  03F8          |ADD EDI,EAX
  00404C75  |>  46            |INC ESI
  00404C76  |>  3B75 F4       |CMP ESI,DWORD PTR SS:[EBP-C]
  00404C79  |.^ 0F8C 47FFFFFF \JL muma.00404BC6
  00404C7F  |>  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]                 ;  直接F4到这
  00404C82  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]                 ;  看一下堆栈窗口,解码后的配置已经到手了
  00404C85  |.  E8 EEEDFFFF   CALL muma.00403A78
  00404C8A  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
  00404C8D  |.  8B55 E0       MOV EDX,DWORD PTR SS:[EBP-20]
  
  我是懒得看它的解码算法,直接在算法结束后的地方00404C7F按F4,这时已经解码完成了。看一下堆栈窗口,呵呵,配置都出来了:
  
  0 1 http://www.xxx.com/qq.asp ddssbb21@163.com smtp.163.com ddssbb21 dsb6823291 ddssbb21@163.com 1 120 1 0 1 1 1
  
  邮箱是ddssbb21@163.com,密码是ddssbb21或dsb6823291。收工,这时可以把OD关掉了。
  
  后记:
  既然拿到了邮箱帐号和密码,那就去这位的邮箱看看吧。看了一下这位的邮箱,里面还要十几个偷来的QQ号。看了一下个人信息(隐去部分信息):
  
  姓 名:**
  省 份:广东
  城 市:广州
  地 址:广东广州市广东工业*******
  邮 编:510520
  电 话:020-*******
  E-mail:ddssbb21@163.com
  
  邮箱里有个注册个人主页的确认信,一个论坛的帐号和密码。我只是看看,nbw把他的密码通通改掉了,哈哈。看了这位的邮箱,才知道这个木马是QQ大杀器 2.0。本来不想写的,后来想想写出来让大家热闹热闹吧,呵呵。就写这么多吧,感谢nbw的协助。
  

--------------------------------------------------------------------------------
【版权声明】: 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!