首页
社区
课程
招聘
[旧帖] [分享][转载]木马的分析方法 0.00雪花
发表于: 2009-5-18 17:51 3692

[旧帖] [分享][转载]木马的分析方法 0.00雪花

2009-5-18 17:51
3692
近日在水木清华BBS上瞎晃,撞见一美文,不敢独享,贴过来给大家看看。
ps:比较古老的文章了。用到的工具论坛上有,感兴趣的可以到反病毒论坛上去下个样本实践下。

木马的分析方法

最近又有一种新的国产木马出现了,它有个好听的名字,叫做"广外女生"。这个木
马是广东外语外贸大学"广外女生"网络小组的作品,它可以运行于WIN98,
WIN98SE,WINME,WINNT,WIN2000或已经安装Winsock2.0的Win95/97上。与以往的木马
相比,它具有体积更小、隐藏更为巧妙的特点。可以预料,在将来的日子里
它会成为继"冰河"之后的又一流行的木马品种。

  由于"广外女生"这个木马的驻留、启动的方法比较具有典型性,下面我就通过对这
种新型木马的详细分析过程来向大家阐述对一般木马的研究方法。下面的测
试环境为Windows2000中文版。


一、所需工具

1.RegSnap v2.80 监视注册表以及系统文件变化的最好工具
2.fport v1.33 查看程序所打开的端口的工具
3.FileInfo v2.45a 查看文件类型的工具
4.ProcDump v1.6.2 脱壳工具
5.IDA v4.0.4 反汇编工具


二、分析步骤

  一切工具准备就绪了,我们开始分析这个木马。一般的木马的服务器端一旦运行之
后都会对注册表以及系统文件做一些手脚,所以我们在分析之前就要先对注册表以
及系统文件做一个备份。

  首先打开RegSnap,从file菜单选new,然后点OK。这样就对当前的注册表以及系统文
件做了一个记录,一会儿如果木马修改了其中某项,我们就可以分析出来了。备份
完成之后把它存为Regsnp1.rgs。

  然后我们就在我们的电脑上运行"广外女生"的服务器端,不要害怕,因为我们已经
做了比较详细的备份了,它做的手脚我们都可以照原样改回来的。双击gdufs.exe,
然后等一小会儿。如果你正在运行着"天网防火墙"或"金山毒霸"的话,应该发现这两个
程序自动退出了,很奇怪吗?且听我们后面的分析。现在木马就已经驻留在我们
的系统中了。我们来看一看它究竟对我们的做了哪些操作。重新打开RegSnap,从file菜
单选new,然后点OK,把这次的snap结果存为Regsnp2.rgs。
  从RegSnap的file菜单选择Compare,在First snapshot中选择打开Regsnp1.rgs,在
Second snapshot中选择打开Regsnp2.rgs,并在下面的单选框中选中Show modified
key names and key values。然后按OK按钮,这样RegSnap就开始比较两次记录又什么区
别了,当比较完成时会自动打开分析结果文件Regsnp1-Regsnp2.htm。

  看一下Regsnp1-Regsnp2.htm,注意其中的:

Summary info:
Deleted keys: 0
Modified keys: 15
New keys : 1

  意思就是两次记录中,没有删除注册表键,修改了15处注册表,新增加了一处注册
表。再看看后边的:

File list in C:\WINNT\System32\*.*


Summary info:
Deleted files: 0
Modified files: 0
New files : 1


New files
diagcfg.exe Size: 97 792 , Date/Time: 2001年07月01日 23:00:12
--------------
Total positions: 1


  这一段话的意思就是,在C:\WINNT\System32\目录下面新增加了一个文件diagcfg.e
xe,这个文件非常可疑,因为我们在比较两次系统信息之间只运行了"广外女生"这个木
马,所以我们有理由相信diagcfg.exe就是木马留在系统中的后门程序。不信的话你打开
任务管理器看一下,会发现其中有一个DIAGCFG.EXE的进程,这就是木马的原身。但这个
时候千万不要删除DIAGCFG.EXE,否则系统就无法正常运行了。
  木马一般都会在注册表中设置一些键值以便以后在系统每次重新启动时能够自动运
行。我们再来看看Regsnp1-Regsnp2.htm中哪些注册表项发生了变化,凭借经验应该注意
到下面这条了:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\shell\open\command\@

Old value: String: ""%1" %*"
New value: String: "C:\WINNT\System32\DIAGCFG.EXE "%1" %*"


  这个键值由原来的"%1" %*被修改为了C:\WINNT\System32\DIAGCFG.EXE "%1" %*,
因为其中包含了木马程序DIAGCFG.EXE所以最为可疑。那么这个注册表项有什么作用呢?
它就是运行可执行文件的格式,被改成C:\WINNT\System32\DIAGCFG.EXE "%1" %*之后每
次再运行任何可执行文件时都要先运行C:\WINNT\System32\DIAGCFG.EXE这个程序。
原来这个木马就是通过这里做了手脚,使自己能够自动运行,它的启动方法与一般普通
木马不太一样,一般的木马是在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Ru
n*
键里增加一个键值,使自己能够自启动,但这种方法被杀毒软件所熟知了,所以很容易
被查杀。而"广外女生"这个木马就比较狡猾,它把启动项设在了另外的位置。

  现在我们已经掌握了这个木马的驻留位置以及在注册表中的启动项,还有重要的一
点就是我们还要找出它到底监听了哪个端口。使用fport可以轻松的实现这一点。在
命令行中运行fport.exe,可以看到:

C:\tool\fport>fport
FPort v1.33 - TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com

Pid Process   Port Proto Path
584 tcpsvcs -> 7   TCP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 9   TCP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 13  TCP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 17  TCP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 19  TCP C:\WINNT\System32\tcpsvcs.exe
836 inetinfo -> 80  TCP C:\WINNT\System32\inetsrv\inetinfo.exe
408 svchost -> 135 TCP C:\WINNT\system32\svchost.exe
836 inetinfo -> 443 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
8   System  -> 445 TCP
464 msdtc  -> 1025 TCP C:\WINNT\System32\msdtc.exe
684 MSTask  -> 1026 TCP C:\WINNT\system32\MSTask.exe
584 tcpsvcs -> 1028 TCP C:\WINNT\System32\tcpsvcs.exe
836 inetinfo -> 1029 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
8   System  -> 1030 TCP
464 msdtc  -> 3372 TCP C:\WINNT\System32\msdtc.exe
1176 DIAGCFG -> 6267 TCP C:\WINNT\System32\DIAGCFG.EXE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 注意这行!!!
836 inetinfo -> 7075 TCP C:\WINNT\System32\inetsrv\inetinfo.exe
584 tcpsvcs -> 7   UDP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 9   UDP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 13  UDP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 17  UDP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 19  UDP C:\WINNT\System32\tcpsvcs.exe
584 tcpsvcs -> 68  UDP C:\WINNT\System32\tcpsvcs.exe
408 svchost -> 135 UDP C:\WINNT\system32\svchost.exe
8   System  -> 445 UDP
228 services -> 1027 UDP C:\WINNT\system32\services.exe
836 inetinfo -> 3456 UDP C:\WINNT\System32\inetsrv\inetinfo.exe


  我们可以清楚的看到,木马程序监听在TCP的6267号端口上了。我们到目前为止就可
以说掌握了"广外女生"这个木马在我们系统中的全部动作了,现在我们可以轻而易
举的查杀它了。


三、查杀

  经过前面的分析我们已经了解了"广外女生"这种木马的工作方式,现在我们就来清
除它。下面就是彻底清除"广外女生"的方法,注意:这个步骤的次序不能颠倒,否
则可能无法完全清除掉此木马。

1.按"开始"菜单,选择"运行",输入regedit,按确定。打开下面键值:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\shell\open\command\,但是先不要修
改,因为如果这时就修改注册表的话,DIAGCFG.EXE进程仍然会立刻把它改回来的。

2.打开"任务管理器",找到DIAGCFG.EXE这个进程,选中它,按"结束进程"来关掉这个进
程。注意,一定也不要先关进程再打开注册表管理器,否则执行regedit.exe时
就又会启动DIAGCFG.EXE。

3.把HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\shell\open\command\的键值由原
来的C:\WINNT\System32\DIAGCFG.EXE "%1" %*改为"%1" %*。

4.这时就可以删除C:\WINNT\System32\目录下的DIAGCFG.EXE了。切记万万不可首先删除
这个文件,否则的话就无法再系统中运行任何可执行文件了。由于我们下面还打算进一

深入分析这个木马,所以现在不删除它,而是把它拷贝到其他的目录以便研究。


四、深入研究

  我们已经知道了"广外女生"的基本工作原理、启动流程以及如何彻底清除它了,但
是还有一点我们没有彻底弄清楚,那就是它是如何对付"天网防火墙"或"金山毒霸"的。
要深入了解这一点,我们必须要去看"广外女生"的代码,这个木马并没有公布源代码,
但是我们仍然可以通过反汇编它来看个究竟。

  "广外女生"的服务器端只有96K,显然是使用了压缩软件进行了加壳的,我们首先就
要确定它到底加了什么壳。通过使用FileInfo这个小工具就可以侦测出来。现在我们就

前面分析过的那个DIAGCFG.EXE复制到FileInfo的目录下,然后在命令行下fi.exe,然后
按回车,就会显示:

  FileInfo v2.45a (c) 1997-2001 from JUN-06-2001

FileInfo v2.45a (c) 1997-2001 by Michael Hering - [email]herinmi@tu-cottbus.de[/email]

C:\TOOL\FI\
═─*
ASPack v1.06b A.Solodovnikov .data   DIAGCFG.EXE .....98304 01.01.1997
aPack v0.98/0.99 (Jibz) {short} ....... EXETOOLS.COM .......895 10.11.2000 !
aPack v0.98/0.99 (Jibz) ............... FI.EXE ....135458 06.06.2001 !
...................................... FILE_ID.DIZ ......1088 06.06.2001 !
?7-bit text ........................... REG.BAT .......280 06.06.2001 !
...................................... SUMMER.KEY  .......157 06.06.2001 !

* detected 4/6 files in 110 ms

──═ FileInfo summary ═──── Date: Mi,01.01.1997 ─ Time: 21:32:15 ─

scan path: C:\TOOL\FI
file mask: *.*
all size: 236182 Bytes = 230 KB

   4/6 files in 110 ms (18.33 ms/file)


  FileInfo就已经检测出DIAGCFG.EXE是使用了ASPack v1.06b进行加壳。知道了它的
加密方法我们就可以使用ProcDump来把它脱壳了。
  运行ProcDump,点击Unpack按钮,因为我们要脱ASPack v1.06b的壳,所以就在其中
选中Aspack<108,然后按OK。这时它会让你打开要脱壳的文件,我们就选DIAGCFG.EXE,
打开。然后稍微等几秒种后按"确定",ProcDump就会把DIAGCFG.EXE脱壳,然后会出个对
话框要你把脱壳过的文件存盘,我们就把它存为gwns.exe。

  注意:这时候,木马又在你的系统上运行了一次,所以必须按照前面的清除步骤重
新把它清除掉。由于前面已经写过清除方法,这里就不再赘述了。

  好了,现在我们已经得到了这个木马加壳前的原始文件了,看看脱壳过的gwns.exe
,有194k之大,比原来的程序大了一倍还多,这就是加壳软件的功劳了。现在就可以使
用反汇编程序对其进行反汇编,然后看它的汇编程序代码了。

  我们就用IDA来反汇编它,顺便说一句,这个IDA是个超强的反汇编工具,是cracker
以及Windows hacker所必备的工具。下面我们就来看看部分反汇编过的代码:

0042B1AC   push  offset aKernel32_dll ; "kernel32.dll"
0042B1B1   call  j_LoadLibraryA
0042B1B6   mov   [ebx], eax
0042B1B8   push  offset aRegisterservic ; "RegisterServiceProcess"
0042B1BD   mov   eax, [ebx]
0042B1BF   push  eax
0042B1C0   call  j_GetProcAddress
0042B1C5   mov   ds:dword_42EA5C, eax
0042B1CA   cmp   ds:dword_42EA5C, 0
0042B1D1   jz   short loc_42B1E1
0042B1D3   push  1
0042B1D5   call  j_GetCurrentProcessId
0042B1DA   push  eax
0042B1DB   call  ds:dword_42EA5C

  木马首先加载了kernel32.dll,然后利用GetProcAddress来得到RegisterServicePr
ocess这个API的地址,木马首先需要把自己注册为系统服务,这样在Win9x下运行时就不
容易被任务管理器发现。然后它会GetCommandLineA来得到运行参数,如果参数是可执行
文件的话就调用Winexec来运行。

0042B271   mov   eax, ds:dword_42EA80
0042B276   mov   edx, offset aSnfw_exe ; "snfw.exe"
0042B27B   call  sub_403900
0042B280   jz   short loc_42B293
0042B282   mov   eax, ds:dword_42EA80
0042B287   mov   edx, offset aKav9x_exe ; "kav9x.exe"

  然后木马会查找snfw.exe和kav9x.exe的进程,也就是"天网防火墙"或"金山毒霸"的
进程,然后将其杀掉。
0042B6AD   push  ebx
0042B6AE   push  0
0042B6B0   push  0
0042B6B2   push  offset aSoftwareMicr_0 ;
"Software\\Microsoft\\Windows\\CurrentVersi"...
0042B6B7   push  80000002h
0042B6BC   call  j_RegOpenKeyExA_0
0042B6C1   push  offset aKingsoftAntivi ; "Kingsoft AntiVirus"
0042B6C6   mov   eax, [ebx]
0042B6C8   push  eax
0042B6C9   call  j_RegDeleteValueA
0042B6CE   mov   eax, [ebx]
0042B6D0   push  eax
0042B6D1   call  j_RegCloseKey_0

  木马还会修改"天网防火墙"或"金山毒霸"在注册表中的启动项,使其在下次系统重
新启动时无法自动运行。

0042B820   mov   dword ptr [esi], 100h
0042B826   push  esi
0042B827   push  edi
0042B828   push  offset a_exe_1 ; ".exe"
0042B82D   push  80000000h
0042B832   call  j_RegQueryValueA
0042B837   push  8
0042B839   push  offset a1 ; "\"%1\" %*"
0042B83E   push  1
0042B840   lea   eax, [ebp+var_10]
0042B843   mov   edx, edi
0042B845   mov   ecx, 100h
0042B84A   call  sub_4037A0
0042B84F   lea   eax, [ebp+var_10]
0042B852   mov   edx, offset aShellOpenComma ; "\\shell\\open\\command"
0042B857   call  sub_4037F8
0042B85C   mov   eax, [ebp+var_10]
0042B85F   call  sub_4039A4
0042B864   push  eax
0042B865   push  80000000h
0042B86A   call  j_RegSetValueA
0042B86F   push  0
0042B871   mov   eax, ds:dword_42D040
0042B876   mov   eax, [eax]
0042B878   push  eax
0042B879   call  j_WinExec

  下面就是修改木马的注册表启动项,即HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exe
file\shell\open\command\项,使其能够在每次系统重新启动时能够自行启动。接下来
木马就会初始化Winsock dll,绑定端口,等待木马客户端的连接。
  截止目前为止,我们已经完成了对"广外女生"这个木马程序的全部分析过程,了解
了木马的启动、运行机制。当然,我写本文的目的并不是简单的介绍"广外女生"这一种
木马,而是通过对这个具有典型意义的木马的详细分析,来向大家介绍对一般木马的分
析方法。利用本文的分析方法,你完全对任何一种未知的木马品种进行分析。最后我们
再来总结一下对木马分析的方法及步骤:

  首先对系统注册表以及系统文件进行备份,然后运行木马服务器端,再对运行过木
马的注册表以及系统文件进行记录,利用注册表分析工具对两次记录结果进行比较,这
样就可以了解木马在系统中做了哪些手脚。利用fport来查看木马监听端口。然后利用所
获取的信息做出木马的清除方法。

就可以完全掌握木马的任何动作,当然,这需要你对汇编语言有相当的掌握程度以及一
定的耐心,因为冗长的汇编代码不是一般的新手所能完全阅读的。

  如果还想进一步分析木马报文格式的话,就用sniffer对木马的端口进行监听,然后
进行比较分析,这种分析方法比较复杂,本文就不举例说明了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
FileInfo

现在一般用peid, 不知道有什么差别啊?
2009-5-18 17:54
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个《加密与解密》第三版上提了一句,好像是说FileInfo更加难欺骗,但是PEiD功能比较多,具体记不得了。。。lx回答。
2009-5-18 17:59
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
其实在大量样本的情况下,用样本分析机分析,再加上对于特殊地方的个人分析就比较可以了
2009-5-18 18:02
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
没怎么看懂,样本分析机这个词今天才第一次听见。。。google去了!
2009-5-18 18:05
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
google、baidu根本就没这个词。。。请教popeylj大大,样本分析机到底是何方神物?
2009-5-18 18:09
0
游客
登录 | 注册 方可回帖
返回
//