|
Title: 对一个qq病毒的分析 Author: Mekanizumu Date: 2005.9.19 Background: 首先说明一下其实叫它病毒是不准确的,它更像个木马,但又像Worm... 姑且叫它病毒。 此病毒困扰了我一个学姐几个月,瑞星防火墙总是在开机的时候杀掉此病毒,但是下一次启动还是有。而且据 说开机杀掉以后用了一阵子又启动了,且瑞星没有察觉. 于是我就来手动分析学姐的机子啦.
Day1: 我考了一个Process Explorer和一个Autorun到她机子上,Autorun运行后我一看\currentversion\run就发现里 面有一个c:\windows\system\SVCHOST.exe显然这就是病毒文件。但是我用Explorer打开看不到,运行Cmd.exe 也看不到。我猜想它hook了每个进程的FindFirstFile和FindNextFile等函数,于是重新启动进入安全模式看, 还是看不到! 此时经验不足导致我把它想复杂了: 因为我以前写过木马,就是用的修改IAT来Hook FindFirstFile等函数的办法,再加上安全模式下也看不到,由此我猜想难道安全模式下它也能启动?! 另外,此病毒运行时瑞星会报告它修改注册表的动作,一共修改了三个注册表键: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CLASSES_ROOT\txtfile\shell\open\command HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 我猜病毒把txtfile\shell\open\command值加了一个exe,这样在打开txt文件时就可以启动病毒了,这就解释了为什么开机时瑞星杀掉了,但是后来又有了。 但是我允许病毒修改了注册表后察看这个键,发现它还是"NOTEPAD.EXE %1"!但我打开txt文件的话ProcessExplorer中确实可以看到有SVCHOST.exe这个进程创建。于 是我怀疑病毒难道hook了RegEdit的RegEnumValueA?(因为我就干过这种事...) 这天是中秋节晚上,我必须先走了所以就叫学姐第二天早上再来。
Day2: 我想清楚了觉得这个病毒不可能有内核模块,写qq病毒的人绝对不至于把它写成Kernel mode驱动木马... 不管 这么多,先把学姐的病毒弄到我机子上再说。我的机子各种工具都有,分析起来方便。忘了说了我在ProcessExplorer里面看Imagename的时候显示的是小写,发现病毒文件名居然是"svch0st.exe",那个'0'和'O'在大多 数情况下根本分不出来! 现在如果我在cmd中敲"c:\windows\system\svch0st.exe"就可以启动病毒。 但是我 copy c:\windows\system\svch0st.exe h:\却说找不到文件。 于是我想直接让它从qq上发文件感染我。 但是我rp就是这么高,病毒完全无阻碍运行了,用她的qq跟我的qq说话都不会带尾巴... 我只有手动的发文件,虽然打开文件对话框看不到svch0st.exe,我直接输入名字的话还是可 以发的. Faint的是我这里一收这个文件瑞星就警报了,我选忽略病毒都不行,还是给我杀了,我只好把瑞星关了再来一次! 我的瑞星版本没有她的高,她的怎么当时就没报错... 真是不可理喻。 我长这么大还真的从来没有被病毒虐过,根本就没有怎么被感染过... 拷贝到我机子上就进入正戏了,嘿嘿!
分析恶意代码的良好习惯:尽量在虚拟机里弄。 我打开VMWARE开了我的win2000。 PEiD一看,PECompact的壳。这个太容易了,一分钟内脱掉。然后再用PEid一看,是Visual Basic 6.0的... 我最讨厌VB程序了。。。 pcode和native code混着的。用IDA和W32dasm都没有看到什么很有用的串式参考,不知道是运行时才解密的还是这两个软件太笨没认出来。只有先靠断点了. 先下了LoadLibrary,GetProcAddress,CreateFile等一堆断点。 发现病毒在Load了Shell32.dll后调用了一次
ShellExecute: pec1:00403000 aShell32_dll db 'shell32.dll',0 ; DATA XREF: pec1:00403020o pec1:0040300C db 0Eh ; pec1:0040300D db 0 ; pec1:0040300E db 0 ; pec1:0040300F db 0 ; pec1:00403010 aShellexecutea db 'ShellExecuteA',0 ; DATA XREF: pec1:00403024o pec1:0040301E db 0 ; pec1:0040301F db 0 ; pec1:00403020 off_403020 dd offset aShell32_dll ; DATA XREF: sub_403038+Bo pec1:00403020 ; "shell32.dll" pec1:00403024 dd offset aShellexecutea ; "ShellExecuteA" pec1:00403028 dd 40000h, 40A4A0h, 2 dup(0) pec1:00403038 pec1:00403038 ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹? pec1:00403038 pec1:00403038 pec1:00403038 sub_403038 proc near ; CODE XREF: keyfunc+795p pec1:00403038 ; keyfunc+8ADp ... pec1:00403038 mov eax, ds:dword_40A4A8 pec1:0040303D or eax, eax pec1:0040303F jz short loc_403043 pec1:00403041 jmp eax pec1:00403043 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪? pec1:00403043 pec1:00403043 loc_403043: ; CODE XREF: sub_403038+7j pec1:00403043 push offset off_403020 pec1:00403048 mov eax, offset DllFunctionCall pec1:0040304D call eax ; DllFunctionCall pec1:0040304F jmp eax pec1:0040304F sub_403038 endp
vb的程序就是讨厌,简单的调用api编译出来就成这个鬼样子了。里面的'shell32.dll','ShellExecuteA' IDA并没有自己识别出来,是我自己按"a"出来的。说明它确实很笨,后面还有一大堆字符串,它都没有识别出来。 此处的ShellExecuteA打开了ie,url是http://www.****.com/,打开的网页是空白的,里面代码即是病毒。
Tags: qq
|