欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

实例讲解木马的分析方法

程序员文章站 2022-09-30 12:38:16
以前有过一款国产木马,它有个好听的名字,叫做“广外女生”。这个木马是广东外语外贸大学“广外女生”网络小组的作品,它可以运行于WIN98,WIN98SE,WINME,WIN... 08-10-08...

以前有过一款国产木马,它有个好听的名字,叫做“广外女生”。这个木马是广东外语外贸大学“广外女生”网络小组的作品,它可以运行于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 modifiedkey 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.exe,这个文件非常可疑,因为我们在比较两次系统信息之间只运行了“广外女生”这个木马,所以我们有理由相信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\run*
键里增加一个键值,使自己能够自启动,但这种方法被杀毒软件所熟知了,所以很容易被查杀。而“广外女生”这个木马就比较狡猾,它把启动项设在了另外的位置。
现在我们已经掌握了这个木马的驻留位置以及在注册表中的启动项,还有重要的一点就是我们还要找出它到底监听了哪个端口。使用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 - herinmi@tu-cottbus.de
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
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来得到registerserviceprocess这个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"