QQ木马分析

  • 格式:doc
  • 大小:97.00 KB
  • 文档页数:18

那天晚上在群里和backer下载一端口扫描器(一看就知道是qq木马),我们把它反汇编把其中的盗qq的邮箱给弄出来了。下面抽工作之余我对这个家伙进行了详细的分析:

由于当时没有装虚拟器,就拿自己的笔记本做实验台了。用peid查壳发现是FSG的一个变形的壳,只能手工脱了,用OD载入,脱壳的具体细节我也不说了,因为在我脱的过程中一不小心给运行了,发现界面确实是个扫描器,于是看了看我的临时目录下多出两个文件:端口扫描器.exe和muma.exe看来这是个捆绑机啊。也不用脱了muma.exe出来了。

再用peid查壳发现是UPX的一个变形壳。载入OD手动脱掉之后(脱壳我就不分析了),脱出来的我们叫upack.exe吧。用Ultraedit把它们都打开会发现muma.exe最后有一些加密的字符串,脱壳后的upack.exe里就没有。把这些字串复制到upack.exe的结尾(注意要复制的刚好到位。可能有人会问:你怎么知道的呢。我一开始的时候也没有复制,在跟踪的时候发现此程序在读自身,就察觉有问题)。如果不复制的话带壳调也行。

下面开始真正的分析这个程序了:

0040507E 50 push eax

0040507F 6A 00 push 0

00405081 68 01001F00 push 1F0001

00405086 E8 65EBFFFF call 打开互斥

0040508B 85C0 test eax, eax

0040508D 75 13 jnz short 004050A2

一开始先检查互斥(判断程序运行是否唯一),由于我的机子已经中了这个木马了,需要改一下跳转。0040508D 75 13 je short 004050A2

不然的话就自己动退出了。

004050D0 A1 C0604000 mov eax, dword ptr [4060C0] 把"ExeMutex_QQRobber2.0"给eax

004050D5 E8 1AE3FFFF call 004033F4 判断上面的字符串有没有

004050DA 50 push eax

004050DB 6A 00 push 0

004050DD 6A 00 push 0

004050DF E8 9CEAFFFF call 00403B80 以"ExeMutex_QQRobber2.0"创建互斥

看一下call 00403B80这个函数里面:

00403B80 55 push ebp

00403B81 8BEC mov ebp, esp

00403B83 8B45 10 mov eax, dword ptr [ebp+10]

00403B86 50 push eax

00403B87 837D 0C 01 cmp dword ptr [ebp+C], 1

00403B8B 1BC0 sbb eax, eax

00403B8D 40 inc eax

00403B8E 83E0 7F and eax, 7F

00403B91 50 push eax

00403B92 8B45 08 mov eax, dword ptr [ebp+8]

00403B95 50 push eax

00403B96 E8 DDFFFFFF call

00403B9B 5D pop ebp 00403B9C C2 0C00 retn 0C

创建了一个互斥

下面呢

004050E9 E8 16EEFFFF call 00403F04

到这个函数里去:

00403F25 E8 FAF5FFFF call 00403524

00403F2A 6A 32 push 32

00403F2C 8BC3 mov eax, ebx

00403F2E E8 19F5FFFF call 0040344C

00403F33 50 push eax

00403F34 E8 97FCFFFF call

00403F39 8D45 FC lea eax, dword ptr [ebp-4]

00403F3C E8 D7FEFFFF call 00403E18

得到系统目录,我的是:C:\windows(再往下看就知道为什么了)

看00403F3C E8 D7FEFFFF call 00403E18

里得到C:\的具体信息,(推测是判断一下这个C:\盘是否存在)

现在有了C:\这个系统盘符了

00403F73 E8 3CF3FFFF call 004032B4

00403F78 EB 27 jmp short 00403FA1

在程序里有内置了一个目录是:\Program Files\Common Files\Microsoft Shared\MSInfo

call 004032B4就是把C和上面的字串接起来

004050E9 E8 16EEFFFF call 00403F04

004050EE 8B55 EC mov edx, dword ptr [ebp-14]

004050F1 B8 B0764000 mov eax, 004076B0

004050F6 E8 05E0FFFF call 00403100

004050FB A1 B0764000 mov eax, dword ptr [4076B0]

00405100 E8 EFE2FFFF call 004033F4

上面的函数是通过一些算法随机算出一个dll文件名,我机子上是E83B4A4D.dll然后和上面的字串接起来成为:

C:\Program Files\Common Files\Microsoft Shared\MSInfo\E83B4A4D.dll

00405105 8BD8 mov ebx, eax

00405107 53 push ebx 得到C:\Program Files\Common Files\Microsoft Shared\MSInfo\E83B4A4D.dll的属性

00405108 E8 ABEAFFFF call 它的意思是看这个文件存在否,

0040510D 83F8 FF cmp eax, -1 比较是否失败

这个程序判断一个文件是否存在用的不是FindFirstFile是GetFileAttributes函数,意思是如果得不到此文件的属性就认为它不存在

00405110 /74 0E je short 00405120

00405112 |6A 00 push 0

00405114 |53 push ebx

00405115 |E8 EEEAFFFF call 设置此文件的属性

0040511A |53 push ebx

0040511B |E8 80EAFFFF call 注意 00405120 \8D55 E4 lea edx, dword ptr [ebp-1C]

如果存在呢,设置文件的属性为正常,然后把它删掉

继续往下看这个00405125 E8 62D5FFFF call 0040268C

里面是:

004026A4 68 05010000 push 105

004026A9 8D4424 04 lea eax, dword ptr [esp+4]

004026AD 50 push eax

004026AE 6A 00 push 0

004026B0 E8 AFE9FFFF call

004026B5 8BC8 mov ecx, eax

得到自己程序和路径:我的是C:\Documents and Settings\javafish\Desktop\MSInfo\upack.exe

返回看00405130 E8 AFF7FFFF call 004048E4

里面:

00404927 6A 00 push 0

00404929 68 80000000 push 80

0040492E 6A 03 push 3

00404930 6A 00 push 0

00404932 6A 01 push 1

00404934 68 00000080 push 80000000

00404939 8B45 FC mov eax, dword ptr [ebp-4]

0040493C E8 B3EAFFFF call 004033F4