如何对付宏病毒

Word宏病毒将普通文件存放为带宏程序的模板文件并复制病毒模块至通用模板,从而达到传播的目的。例如,当打开一个带毒的模板文件时,首先由系统启动当前模板的 FileOpen宏,随后将启动带毒模板的 AutoOpen宏。宏病毒正是通过 AutoOpen宏感染系统的通用模板( NORMAL.DOT)而进一步传播,因而在通用模板 NORMAL.DOT中出现可编辑修改的宏命令(如 FileOpen、FileSaveAs 、FileExit 等)一般都是宏病毒。

  在打开文件时判断该文件是否携带了宏命令就可增强系统对宏病毒的防御能力,而一般用户极少编制宏命令,出现非系统携带的模板文件往往意味着该文件为带毒文件,将带毒模板存放为一般的文件而抛弃其中的病毒宏程序即可达到杀毒的目的。

  以下是按照上面思路所编写的宏命令 FileOpen,系统在打开文件时调用了这个宏命令,用户可手工将之加到通用模板 NORMAL.DOT中,具体方法是从工具( Tools)菜单下选择宏( Macro)选项后加入以下 FileOpen宏命令并保存到通用模板 NORMAL.DOT中,此后在打开模板文件时将会弹出对话框,询问如何处理,用户可以选择作为模板打开、作为文件打开或放弃。除非用户确信其中不会有宏病毒,否则应选择作为文件打开以避免感染病毒。

  若系统已经携带了宏病毒,一个稳妥的方法是在备份了当前使用的 NORMAL.DOT模板后删除其中能够删除的宏命令( Word系统自身所带的系统宏是无法删除的),然后再输入下面的宏程序。请注意以下程序仅为一个 PWin 3.2+PWord 6.0系统下的示范程序,其中缺少一些出错处理过程,若在其它系统平台(如 Win95、NT 或Macintosh )或Word 版本下可能要作某些改动,并且存在着其它不调用 FileOpen宏却能打开文件的操作方法,这需要进一步修改其它一些宏(如 ShellOpen、 AutoExit等)。微软在国际互联网 http://www.microsoft.com/msoffice下提供了一个西文 Word的防宏病毒程序 SCANPROT.DOT,需要作一些修改才能适用于 Word汉化版。 'FileOpen宏 打开文档或模板时会被执行

Sub MAIN

ScreenUpdating(0)

DisableInput 1

DisableAutoMacros 1

Dim dlg As FileOpen

GetCurValues dlg

If (Dialog(dlg) = 0) Then Goto EndFunc

dlg.AddToMru = 1

FileOpen dlg

file$ = FileName$()

Dim DlgFSA As FileSaveAs

GetCurValues DlgFSA

If (DlgFSA.Format = 1) And (CountMacros(1) > 0) Then

OpenTemplate(file$) '打开模板文件

EndIf

EndFunc:

ScreenUpdating(1)

DisableInput 0

DisableAutoMacros 0

End Sub

Sub OpenTemplate(file$)

HasAutoOpen = 0

For i = 1 To CountMacros(1)

If LCase$(MacroName$(i, 1)) = "autoopen" Then HasAutoOpen = 1

Next i

Title$ = "警告! "

Message$ = "文件中有宏命令!请选择打开方式 " + Chr$(13) + "是:文本 否:模板 取消:放弃 "

button = MsgBox(Message$, Title$, 51)

Select Case button

Case - 1 '作为文本打开

OpenPureDoc(file$)

Case 0 '作为模板打开

If (HasAutoOpen = 1) Then Call AutoOpen.Main

Case Else '放弃返回

FileClose 2

End Select

End Sub

Sub OpenPureDoc(file$)

FileClose 2

FileNew .Template = file$

FileTemplates .Template = ""

SetDocumentDirty

Title$ = "注意 "

Message$ = "宏命令已被取消,可将此文件作为 " + file$ + "存盘。 "

MsgBox(Message$, Title$, 64)

End Sub

Next-->page>>回上一页,看更多资料