欢迎使用 SHAREM!
SHAREM 在 DEFCON 31 的“Game-Changing Advances in Windows Shellcode Analysis”以及 Black Hat USA Arsenal 上进行了展示。Trellix 的 Max Kersten 提供了一个配套的 Ghidra 插件(单独发布)。因此,如果你愿意,可以将 SHAREM 的强大功能扩展到 Ghidra。
SHAREM 旨在成为终极的 Windows shellcode 工具,支持模拟超过 45,000 个 WinAPI、几乎所有用户模式 Windows 系统调用,并提供了许多新功能。SHAREM 包含一个模拟器、一个反汇编器、永恒调试、暴力去混淆以及许多其他功能。SHAREM 的模拟器还可以显示完整结构体(甚至是结构体中的结构体),并允许编码的 shellcode 自行去混淆。SHAREM 会记录所有分析的 WinAPI 和 Windows 系统调用的输出,并将其分为多个类别和子类别。SHAREM 的完整代码覆盖还能发现无法到达的功能。
SHAREM 的反汇编器能够将发现的函数集成到反汇编中,并在反汇编器中为每个函数标注名称。SHAREM 还会在反汇编器中显示编码 shellcode 的解密形式,因此无需调试 shellcode。
我们创建了一个 SHAREM Wiki,提供了一些关于 SHAREM 使用的指导信息,但目前还有大量内容和功能未记录。SHAREM 由多人共同开发了两年。SHAREM 的反汇编器比主流反汇编器要精确得多。此外,SHAREM 可以将模拟数据集成到反汇编器中,从而获得几乎完美的反汇编结果。
请注意,由于 SHAREM 刚刚发布,这里的文档有点简略。我们将在未来几周内更新 GitHub,提供更多信息。
如果你刚接触 SHAREM,可以观看一个简短的演示视频,展示其部分功能。点击图片观看演示:

2026 年 3 月:SHAREM 启动时会加载多达 61 个 DLL,但在最新更新中,它现在可以支持 369 个 DLL 和 45538 个独特的 WinAPI。此外,DLL 会在需要时按需加载。Windows 内部特性(如模块列表、flinks、blinks 等)在需要加载额外 DLL(例如通过 LoadLibraryA)时会自动更新。还进行了许多其他更新以改进功能。针对一些用户报告的安装问题进行了优化。
2026 年 3 月 22 日:跳出循环的逻辑经过完善,更加细致。其中大部分内容已被重写并重新测试。我们不建议一般用户更改 config.cfg 中的默认设置,如果你决定使用此功能。
2024/2025:SHAREM 可以选择利用 AI 分析结果,需要用户提供 OpenAI 密钥。请注意,SHAREM 是在近期 AI 进步之前开发的,它仅在 SHAREM 初始分析完成后才使用 AI。这个可选功能可以检查已发现的内容,并将其应用于 MITRE ATT&CK 框架等。
SHAREM 作为本地 Python 包安装,以便我们在其他项目中访问它。这样允许导入 SHAREM 的部分功能。因此,它必须作为包安装。注意:我听说有报告称安装遇到一些问题。最近的更改应该可以解决这个问题。
安装 sharem 需要 Git。 可以从 https://git-scm.com/download/win 安装。安装后重启计算机,然后继续安装 SHAREM。Git 用于自动化安装 Windows SSDeep。你也可以手动完成此操作,并修改 .bat 文件以排除 SSDeep(如果你自己安装)。手动安装避免了使用 Git 的需要。注意:对于 Windows,我们正在迁移到 Bw3ll 账户上的 SSDeep 分支,该分支修正了先前版本的一些安装问题。这个版本和之前的版本都是 SSDeep 的包装器。
运行 .bat 文件。它会调用 setup.py 文件。根据你调用 Python 的方式,你可能需要调用备用的 .bat 文件,或者如果使用非标准方式,可能需要稍作修改。
执行
py -m pip list 或 python3 -m pip list 来验证 SHAREM 是否已作为本地包安装。它必须作为包安装才能工作。如果看不到它怎么办?那么它就没有作为包安装,SHAREM 将无法工作。确保你正在使用 .bat 文件,并且在 Windows 命令提示符下从 installers 目录运行。如果不起作用,请查找任何错误消息。如果有错误,请尝试纠正。你可能需要尝试几次。如果仍然不行,请提交 issue,并尽可能包含所有这些信息,以便我们找出问题所在。通常不需要这样,但偶尔可能需要。如果你曾经卸载过又决定重新安装,可能需要再次运行安装脚本。一旦在 py -m pip list 中看到 sharem 出现,你就知道它已正确安装为本地包。
安装 SHAREM 后,当你第一次运行 shellcode 时,你需要位于 sharem_cli 文件夹中。例如,在该目录中,你可以运行 py main.py -r32 shellcode.bin。没有 shellcode?没关系,你可以在单独的仓库中找到一些样本。
注意:在 Windows 上第一次尝试模拟 shellcode 时,它会尝试收获并膨胀 Windows DLL。此过程在首次尝试模拟 shellcode 时自动开始。它会复制 DLL,将复制(并随后膨胀)的 DLL 移动到 SHAREM 目录。还有其他步骤,但整个初始过程可能需要几分钟,甚至 10-15 分钟(如果 CPU 很旧)。完成后,你无需再次执行此操作。对于 32 位和 64 位 shellcode,必须分别执行此操作。你可以导航到 sharem/sharem/sharem/sharem/DLLs/x86 - 你应该会看到 DLL 慢慢出现。这些 DLL 从操作系统中取出,经过修改以模拟操作系统可能对它们执行的操作,并保存到此目录。会有大约 60 多个。如果你看到大约这个数量的 DLL,并且没有更多 DLL 被保存,则可能只是卡住了。只需再次按回车键。如果失败,只需重新启动并再次尝试模拟。一旦 DLL 保存完毕,你无需再次执行此操作;只有第一次可能需要等待,具体取决于 CPU 速度。完成后,你会看到模拟结果,例如列出的不同 WinAPI 或 Windows 系统调用。
如果文件以 .txt 结尾,它将假定 shellcode 是十六进制的 ASCII 表示(而不是纯十六进制),并据此解释。这适用于在网上找到的内容。使用 ASCII 表示的十六进制时,文件名必须以 .txt 结尾。
chmod +x linux_installer.sh 启用安装程序的执行权限sudo ./linux_installer.sh 执行安装程序你需要添加 Windows DLL 文件。我们目前还没有为 Linux 用户单独提供这些文件下载。目前,用户需要先在 Windows 上安装并收获它们。(注意:这些 DLL 必须由 SHAREM 膨胀。未膨胀的 DLL 无法使用。大多数(尽管可能不是全部)如果未适当膨胀将会失败。)稍后我们可能在几周内提供单独下载。但与此同时,用户可以按照 Windows 步骤生成它们并将其移动到 Linux,放置在 sharem\sharem\sharem\DLLs\x64 和 sharem\sharem\sharem\DLLs\x86 中。你还需要 foundDLLAddresses32.json 和 FoundDLLAddresses64.json,它们应放在 sharem\sharem\sharem 中。
SHAREM 在 2024 年增加了对 OpenAI 的支持,因此我们可以利用 AI 自动化一些分析任务。这可以通过主菜单中的 A 键激活——“利用 AI”。为此,你必须拥有 OpenAI 密钥,并将其放入 config.cfg 文件中,该文件位于 sharem/sharem/sharem/sharem/config.cfg。此外,在允许你利用 AI 之前,你必须先模拟一个 shellcode。目前这是使用 AI 的唯一方式——它不支持无头模式——但如果有人有这种需求,请提交 issue,我将为此添加支持,作为可以通过配置选择的另一个选项。如果你已经安装了 SHAREM 并获取了更新版本,你可能只想手动安装 OpenAI,例如 pip install openai。我已将其添加到 setup.py 文件的 requirements 中,该文件在运行初始安装脚本时被激活。
Max Kersten 的优秀 Ghidra 脚本(如 2023 年 8 月在 Black Hat 和 DEFCON 上展示)可在此处找到:https://github.com/advanced-threat-research/GhidraScripts/blob/main/Sharem.java Max 的一些说明在此处:https://github.com/advanced-threat-research/GhidraScripts/ 这个 Ghidra 插件由 Trellix 提供!你仍需要使用 SHAREM。该插件读取 SHAREM 生成的 JSON 输出,并将其转换为 Ghidra 可用的格式。更多关于 Max 本人的信息,请访问 https://maxkersten.nl/。
文档可以在 SHAREM Wiki 找到,它提供了一些关于 SHAREM 使用的指导信息,尽管目前还有大量内容和功能未记录。
SHAREM 是一个非常强大的框架,具有众多功能,有些有详细记录,有些则没有。本部分将展示其中一小部分功能。
SHAREM 可以接受编码的 shellcode 并通过仿真去混淆。它不仅捕获所有 WinAPI 或系统调用信息,而且如果你选择在反汇编器中查看,它还会显示 shellcode 的解码形式:

SHAREM 不仅可以枚举 12,000 多个 WinAPI 函数,还可以对几乎所有用户模式 Windows 系统调用进行枚举。此外,对于某些函数,它会显示结构体信息。对于处理注册表的函数,它会提取注册表信息并将其添加到我们的注册表管理器中:

SHAREM 还具有通过 UrlDownloadToFileA 下载文件(如果存在)的能力。这些文件会下载到模拟器的内存中,而不是保存到磁盘。如果成功,它将捕获哈希。还有一个有限的伪文件系统,因此你可以看到关联,例如一个文件被下载为某物然后重命名为其他名称。如果所需的下载不可用,则只会模拟为成功下载。实时下载是一个可以在配置中启用或禁用的选项:

Dr. Bramwell Brizendine, Austin Babcock, Jake Hince, Shelby VandenHoek, Sascha Walker, Evan Read, Dylan Park, Kade Brost, James Tate Forcella, William Lochte, Hunter Murphy, 和 Tarek Abdelmotaleb。
本研究及部分合著者得到了 NSA 基金 H98230-20-1-0326 的支持。