VBS病毒應該來說還是挺流行的,其力量不可小覷啊!用VBS寫一隻普通病毒(蠕蟲)沒有什麼難度,寫病毒專殺工具也是沒什麼難度的。但在寫出專殺工具前必須瞭解你要殺的這隻病毒的一些信息……比如:病毒釋放的文件,感染的文件,註冊表與進程裏的病毒信息等等。
一、首先來看如何結束病毒進程,之前我在《兩個簡易VBS腳本結束進程與防止進程啓動》給出了關於進程的一些操作方法。假如要結束的病毒進程爲rund1132.exe(32之前是兩個數字1),看下面代碼:
set w=getobject("winmgmts:")??'創建WMI對象,執行後面的查詢。
set p=w.execquery("select * from win32_process where name='rund1132.exe'")
for each i in p
i.terminate
next
二、雙擊執行這段代碼就可以結束rund1132.exe進程,這爲後面的殺毒提供方便。病毒進程一被結束就要馬上將其文件給刪掉!假如病毒相關文件爲c:/windows/rund1132.exe與c:/windows/system32/explorer.exe,它們皆爲隱藏文件。看下面代碼:
set fso=createobject("scripting.filesystemobject") '創建fso對象,此對象以後介紹……
set v1=fso.getfile("c:/windows/rund1132.exe")
set v2=fso.getfile("c:/windows/system32/explorer.exe")
v1.attributes=0 '設置文件爲正常屬性值,即隱藏文件就被還原成正常文件了!
v2.attributes=0 '當病毒文件多時,可以使用for語句。
fso.deletefile("c:/windows/rund1132.exe")
fso.deletefile("c:/windows/system32/explorer.exe")
執行這段代碼,病毒文件就被Killed了……刪除病毒的感染文件也是創建fso對象,然後進行盤符、文件夾、文件遍歷查找,使用ext=lcase(fso.GetExtensionName(file)
)這樣的表達式來獲取所有文件的後綴,最後將ext值與被已知感染文件的後綴(比如.exe)進行判斷,如果爲真則刪除此此文件……思路給出了,代碼有點長有點複雜就不黏貼上來了。其實如果有可能去分析“愛蟲VBS病毒”的代碼,就會發現它在感染文件時使用的正是這樣的遍歷、後綴判別的方法……
三、註冊表是關鍵。有些病毒是很變態的,將系統的許多功能都給禁用了,還往註冊表裏塞一大堆垃圾信息……它要是把WSH(windows腳本宿主)給禁用了或破壞了那我們辛辛苦苦寫的VBS專殺工具就沒法使用了,我感覺VBS寫出來的專殺是有一定的侷限性的……不過對付不這麼變態的病毒還是可以的!
比如:此病毒禁用了“任務管理器”、然後在註冊表中添加下面的值來實現開機自啓動"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/run","c:/windows/rund1132.exe"。如何修復?看下面代碼:
set reg=wscript.createobject("wscript.shell") '創建wscript對象,進行下面的註冊表操作!
'reg.regwrite恢復禁用的任務管理器
reg.regwrite
"HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System/DisableTaskMgr",0,"REG_DWORD"
'reg,regdelete刪除病毒的自啓動項
reg.regdelete
"HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run/run"
到此用VBS打造自己的病毒專殺工具就有成形了,框架就是這樣。根據不同的病毒特徵寫出不同的專殺工具。