Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程
——ByDeathMemory
简介:
病毒名称: Net-Worm.Win32.Kido.ih (变种)
大小: 125-128 Kb
生成文件: %systemroot%system32<rnd>.dll(rnd 是随机字母)
移动设备生成文件: autorun.inf;.RECYCLERS-5-3-42-2819952290-8240758988-879315005-3665jwgkvsq.vmx(jwgkvsq 是随机字母)
备注: 以下贴出的代码,在XPSP2+VC6.0下编译通过
(新浪标题长度不够用,真是让人困扰啊,哈)
最近进入Windows下学习,教室电脑里Windows系统里都有Net-Worm.Win32.Kido.ih蠕虫病毒。感觉这个病毒还是挺有意思的,于是有了本文。
此蠕虫会在移动设备里生成autorun.inf和.RECYCLERS-5-3-42-2819952290-8240758988-879315005-3665jwgkvsq.vmx
。看到这里一些朋友可能会恍然了吧。这个毒的autorun.inf配置文件比较有意思,里面写了很多乱码,起到加密的作用。相信很多人都看到过。
以下是部分乱码:
=============================================================
; 郊D塮IJ刹u缹 檺G 娞穜kX镱OV黬奻烝L
; fb
; 衙o绒迪KkA a熋T獂箄er薴滼昽jP姐Ff箇u╥纆H卋阭K猌HyFL
[ TdkjJufXACQXwTrqdYPpjbSC]
;Kf抁
; 菒雒er狵疍 oJUqHK emTiv譔筿鰿廔og遄f 霥巨c?
ajzLmMmVuIndpuy = lcH
QPDdnsHCDPoyNqFrWqCPwdLwE = EYhdLWGyLTaLO
KQKpTKLgSQvADhzMNrhSy = VZqYYrMDNyVUqfoNwyaUdSitL
; YBQ疕S無耣O臑漛鐴rwuom渉HkもFy鷢b櫘i鑔踆orf碞v暺
; X纶Oqヌ髁蘫囈置郙Sv偔qh肏h
XQQT = KXpdSzJH
; XVkP鳨餉冿o賨鷏℅O邾boeS
;恙焸V嗚 vp涘驆蓈鼉鲛坍▃靌錏
; TNoA熽浶quO隠Gb 饁噢侱Yi誜镤jB篤w╦夵R?
; R娏諬 CAqVr蚿p墉喫汛h伋n僨m糶jA荎k翿T洿Wt擷薝Bu
FfWcviZFJ = kMHcLuKMpxbeHUvVLDm
; m竣D甜豽钕蔢槉軔曭H蟚莣裏渆Vl藾諷Vnn猧Pg雙r縰h猵綰 o
; 苀荱醙 閍谛u EP勞vA硴o?
Oy = X
; b蔝︽椋I滨囂lPT餻革饸鈳裾A喣膞z
=============================================================
大家都知道,autorun.inf是有很严格的输写规范才能正确执行的。而且是用';'作为注释符,也就是说正确的配置信息还是以文本形式存在文件里的,手工找还是可以找到的,这么多注释的乱码也无非是为了掩人耳目。
在API里已经有了获取ini形式配置信息的函数GetPrivateProfileString,对inf文件一样可用,两者格式几乎是一样的。
DWORD GetPrivateProfileString(
LPCTSTRlpAppName,// points to section name
LPCTSTRlpKeyName,// points to key name
LPCTSTRlpDefault,// default string 当key没有找到时返回的指定字符串
LPTSTR lpReturnedString, // points to destination buffer保存结果的char*
DWORDnSize,// size of destination buffer 指定char*的大小
LPCTSTRlpFileName// points to initialization filename 指定路径
);
====[autorun]获取源码===========================================
const int bufSize = 2048;
char buf[bufSize];
ZeroMemory(buf,bufSize); //设置保存结果的Buffer
char path[256];
ZeroMemory(path,256);
memcpy(path,m_path,strlen(m_path));
//这里buf 获取的是所有key 的值
if(!::GetPrivateProfileString("autorun",NULL,NULL,buf,sizeofbuf,path))
{
MessageBox("读取文件失败!");
return;
}
//打开及将结果保存到文件
CFile a;
a.Open(".\Autorun_inf_View.txt",CFile::modeCreate|CFile::modeWrite,NULL);
char* tmp;
char rebuf[bufSize];
ZeroMemory(rebuf,bufSize);
CString result;
//这里是函数的主要实现。
::GetPrivateProfileString("autorun",buf,"NULL",rebuf,bufSize,path);
result.Format("%s = %sn",buf,rebuf); //取得第一条结果
a.Write(result,result.GetLength()); //写入第一条结果
//循环取出key 并将检到的结果保存到rebuf
for (int i=0;i<s