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<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来得到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"然后木马会查找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