VBS_蠕虫病毒

这几天看了很多跟 VBS 相关的资料...

起因

虽然看了很多资料,但是没做出什么东西来,感觉好像也没收获什么东西。偶然想到原来在学校打印店插 U 盘打印文件后,U 盘总是会感染蠕虫病毒。琢磨了一下,好像这种简单的病毒就是 VBS 来做的?

病毒的特征

印象中,这种蠕虫病毒会把 U 盘内的文件全部隐藏,并生成一个指向隐藏文件的快捷方式。所以,这种病毒并不会损坏文件,没有什么破坏性。但是对于不熟悉 windows 操作系统的人,多半会认为自己的文件已经丢失了。
现在回头想想,这个病毒倒像是哪个顽皮的同学在学校机房传播的恶作剧😂。

病毒的本质

这种蠕虫病毒的本质就是脚本程序,也就是让计算机利用用户的权限做一些损坏用户自身文件的事情。
执行不同的脚本程序需要不同的脚本解释器,如果要让病毒快速传播,一定要选一个用途比较广的脚本解释器。显然,VBS 脚本解释器是最好的选择。因为只要是微软的操作系统,那么一定自带 VBS 脚本解释器。所以在不需要额外安装的情况下,病毒可以直接运行。

如何实现

先分解一下要实现的功能:

  1. 找到当前目录下的所有文件,包括目录和文件。
  2. 创建指向当前文件或目录的快捷方式。
  3. 将原文件隐藏。

获取所有文件

在 VBS 中,与文件的相关操作需要用到文件对象模型FileSystemObject。这个文件对象模型中封装了许多与访问文件相关的方法。首先,我们创建这个文件模型:

1
2
3
4
5
6
7
8
9
'设置变量必须要声明才能使用
Option Explicit
'声明 3 个变量分别表示文件对象、文件和子目录
Dim Fso, Folders, SubFolders
'创建文件对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'获取当前目录下所有文件,"." 代表当前目录的路径
'这里 GetFolder 返回的是一个 Folder 对象
Set Folders = Fso.GetFolder(".")

设置 WshShell 对象

如果说前面提到的文件对象是用来处理与文件相关操作的,那么WshShell就是用来执行一些系统操作的对象。

1
2
3
'创建 WshShell 对象,用于后面创建快捷方式
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

创建快捷方式

因为 Folder 对象不能直接遍历,所以为了把功能做的更加完善(无论是目录还是文件,全部都变成快捷方式并隐藏原文件),需要分别遍历。
同时,如果当前目录下文件超过一个,也不能只新建一个快捷方式,所以需要生成多个快捷方式,这个过程可以用数组来实现,并且由于不知道具体有多少个文件,这个数组必须是变长的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
'声明一个变长数组,和对应的下标
Dim ShellLink()
Dim index
index = 0

'为文件设置快捷方式并隐藏原文件
Dim Files, file
Set Files = Folders.Files
For Each file In Files
file.attributes = 2 '设置为隐藏
redim ShellLink(index)
'创建快捷方式,快捷方式默认放在当前目录下,名称与原文件一致,后缀为 .lnk
Set ShellLink(index) = WshShell.CreateShortcut(".\" & file.Name & ".lnk")
ShellLink(index).TargetPath = file '快捷方式的目标路径为原文件
ShellLink(index).IconLocation = file '快捷方式的图标为原文件
ShellLink(index).Save '保存快捷方式
index = index + 1 '保存快捷方式
Next

'为目录设置快捷方式的过程类似
Dim SubFolders, folder
Set SubFolders = Folders.SubFolders '获取子目录
For Each folder In SubFolders
folder.attributes = 2
redim ShellLink(index)
Set ShellLink(index) = WshShell.CreateShortcut(".\" & folder.Name & ".lnk")
ShellLink(index).TargetPath = folder
ShellLink(index).IconLocation = folder
ShellLink(index).Save
index = index + 1
Next

结语

到这里,蠕虫病毒的大致功能就完成了。但严格意义上讲,这篇文章做的东西只能算作是一个 VBS 脚本,因为它并不像具备病毒的破坏性和传播性,也不想讨论如何这样干😂。不过,不得不承认的是 VBS 这类轻量级的脚本语言,用来写一些提高工作效率的脚本是很方便的,语法简单,功能齐全,上手速度很快。另外,现在 Web 端用的都是 JS,VBS 可能也没有什么用武之地了。
最后贴一下整体源码(可以直接保存为 .vbs 文件在文件夹内运行):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'设置变量必须要声明才能使用
Option Explicit
'声明 3 个变量分别表示文件对象、文件和子目录
Dim Fso, Folders
'创建文件对象
Set Fso = CreateObject("Scripting.FileSystemObject")
'获取当前目录下所有文件,"." 代表当前目录的路径
'这里 GetFolder 返回的是一个 Folder 对象
Set Folders = Fso.GetFolder(".")

'创建 WshShell 对象,用于后面创建快捷方式
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

'声明一个变长数组,和对应的下标
Dim ShellLink()
Dim index
index = 0

'为文件设置快捷方式并隐藏原文件
Dim Files, file
Set Files = Folders.Files
For Each file In Files
file.attributes = 0 '设置为隐藏
redim ShellLink(index)
'创建快捷方式,快捷方式默认放在当前目录下,名称与原文件一致,后缀为 .lnk
Set ShellLink(index) = WshShell.CreateShortcut(".\" & file.Name & ".lnk")
ShellLink(index).TargetPath = file '快捷方式的目标路径为原文件
ShellLink(index).IconLocation = file '快捷方式的图标为原文件
ShellLink(index).Save '保存快捷方式
index = index + 1 '保存快捷方式
Next

'为目录设置快捷方式的过程类似
Dim SubFolders, folder
Set SubFolders = Folders.SubFolders '获取子目录
For Each folder In SubFolders
folder.attributes = 0
redim ShellLink(index)
Set ShellLink(index) = WshShell.CreateShortcut(".\" & folder.Name & ".lnk")
ShellLink(index).TargetPath = folder
ShellLink(index).IconLocation = folder
ShellLink(index).Save
index = index + 1
Next


Buy me a coffee ? :)
0%