Bw3ll/sharem

GitHub: Bw3ll/sharem

SHAREM 是一款功能强大的 Windows shellcode 分析框架,通过模拟海量 WinAPI 和 syscall 实现对编码/混淆 shellcode 的安全解密与深度剖析。

Stars: 479 | Forks: 69

# SHAREM 欢迎使用 SHAREM! SHAREM 曾在 DEFCON 31 的“Windows Shellcode 分析的革命性进展”以及 Black Hat USA Arsenal 上展示。Trellix 的 Max Kersten 提供了一个配套的 Ghidra 插件(单独提供)。因此,如果您愿意,可以将 SHAREM 的强大功能扩展到 Ghidra。 SHAREM 旨在成为终极的 Windows shellcode 工具,支持模拟超过 45,000 个 WinAPI,几乎所有用户模式的 Windows syscall,并且 SHAREM 提供了许多新功能。SHAREM 包含一个模拟器、一个反汇编器、无时间调试(timeless debugging)、暴力去混淆以及许多其他功能。SHAREM 的模拟器还可以显示完整的结构(甚至结构中的结构),并允许编码的 shellcode 自行去混淆。SHAREM 记录所有被分析的 WinAPI 和 Windows syscall 的输出,并将每个输出分为许多类别和子类别。SHAREM 完整的代码覆盖也使其能够发现无法访问的功能。 SHAREM 的反汇编器能够将发现的函数集成到反汇编中,在反汇编器中标记每一个函数。SHAREM 还会在反汇编器中显示编码 shellcode 的解密形式,因此无需调试 shellcode。 我们创建了一个 [SHAREM Wiki](https://github.com/Bw3ll/sharem/wiki),其中提供了有关 SHAREM 使用的一些指导信息,尽管目前仍有很大一部分内容和功能未被记录。SHAREM 的开发历时两年,有多人参与。SHAREM 的反汇编器比主流反汇编器要准确得多。此外,SHAREM 可以将模拟数据集成到反汇编器中,从而获得几乎完美的反汇编结果。 请注意,由于 SHAREM 刚刚发布,这里的文档有点稀疏。在接下来的几周内,我们将用更多信息更新 GitHub。 如果您是 SHAREM 的新手,请随时观看一个简短的演示视频,展示其部分功能。点击图片查看演示: [![观看视频](https://github.com/Bw3ll/sharem/blob/testing/sharem/SHAREM_images/Sharem_demo.png?raw=true)](https://youtu.be/S1PI9O-q6eM) ## 最近更新 2026 年 3 月:SHAREM 启动时最多加载 61 个 DLL,但经过最新更新,它现在可以支持 369 个 DLL 和 45538 个独特的 WinAPI。此外,DLL 会根据需要按需加载。Windows 内部功能(如模块列表、flinks、blinks 等)将在需要加载任何额外的 DLL 时自动更新,例如通过 LoadLibraryA。还有许多其他更新以改进功能。已进行更改以帮助简化向我报告的有关安装挑战的一些问题。 2024/2025:SHAREM 可以选择利用 AI 分析结果,使用 OpenAI key(用户提供)。请注意,SHAREM 是在 AI 最近取得进展之前制作的,它对 AI 的使用仅在 SHAREM 的初步分析完成后才进行。这个可选功能可以使其检查已发现的内容,并将其应用于 MITRE ATT&CK 框架等等。 # 安装说明 ## Windows SHAREM 作为本地 Python 包安装,以便我们可以在其他项目中访问它。这允许导入 SHAREM 的部分内容。因此,它必须作为包安装。注意:我听说过一些安装问题的报告。最近的更改希望能纠正这个问题。 1. 安装 sharem 需要 Git。 可以从 https://git-scm.com/download/win 安装。安装后重启计算机并继续 SHAREM 安装。Git 用于自动化安装 Windows SSDeep。如果您自己手动操作,也可以手动执行此操作并修改 .bat 以排除 SSDeep。手动安装避免了使用 Git 的需要。注意:对于 Windows,我们将转移到 Bw3ll 帐户上的 SSDeep 分支,该分支纠正了以前版本的一些安装问题。此版本和以前的版本都是 SSDeep 的包装器。 2. 运行 .bat 文件。它将调用 setup.py 文件。根据您调用 Python 的方式,如果使用非标准方式,您可能需要调用备用 .bat 文件甚至稍作修改。 3. 执行 ```py -m pip list``` 或 ```python3 -m pip list``` 以验证 SHAREM 是否已作为包本地安装。它必须作为包安装才能工作。如果您没有看到它会怎样?那么它就没有作为包安装,SHAREM 将无法工作。确保您正在使用 .bat 文件,并在安装程序目录的 Windows 命令提示符中执行。如果不起作用,请查找任何错误消息。如果存在,请尝试更正它们。您可以尝试几次。如果仍然不起作用,请提出 issue 并尝试包含所有这些信息,以便我们尝试找出问题所在。通常情况下不需要这样做,但偶尔可能需要。如果您曾经卸载过并决定再次安装,则可能需要再次运行安装脚本。一旦您在执行 py -m pip list 时看到 sharem 出现,您就知道它已作为本地包正确安装。 安装 SHAREM 后,当您第一次运行 shellcode 时,您需要在 sharem_cli 文件夹内。例如,在该目录中时,您可以运行 ```py main.py -r32 shellcode.bin```。没有 shellcode?没关系,您可以在我在单独的存储库中托管的 shellcode 示例存储库中找到一些示例。 注意:您第一次尝试在 Windows 上模拟 shellcode 时,它将尝试收集并扩充 Windows DLL。当尝试首次模拟 shellcode 时,此过程会自动开始。它会复制它们,将复制(及稍后扩充)的 DLL 移动到 SHAREM 目录。还有其他步骤,但整个初始过程可能需要几分钟,或者如果是非常旧的 CPU,甚至需要 10-15 分钟。完成后,您就不需要再这样做了。这对 32 位和 64 位 shellcode 必须分别进行。您可以导航到 sharem/sharem/sharem/sharem/DLLs/x86 —— 您应该会看到 DLL 缓慢出现。这些是从操作系统中获取的,经过修改以模拟操作系统可能对它们执行的操作,并保存到此目录。将有 60 多个。如果您看到大约该数量的 DLL,并且没有保存其他 DLL,这意味着它可能只是挂起了。只需再次单击回车键。如果失败,只需重新启动并再次尝试模拟。一旦 DLL 保存完毕,您应该不需要再次执行此操作;只有第一次可能需要等待,具体取决于 CPU 速度。完成后您应该会看到模拟结果,例如不同 WinAPI 或 Windows syscall 的枚举。 如果文件以 .txt 结尾,它将假定 shellcode 是 HEX 的 ASCII 表示(而不是纯十六进制),并将按此解释。这适用于在线找到的内容。如果使用十六进制的 ASCII 表示,文件名必须以 .txt 结尾。 ## Linux 1. ```chmod +x linux_installer.sh``` 启用安装程序的执行权限 2. ```sudo ./linux_installer.sh``` 执行安装程序 3. 添加 DLL 文件 您需要添加 Windows DLL 文件。我们目前不提供这些文件供 Linux 用户单独下载。目前,用户需要通过在 Windows 上安装来收集它们。(注意:这些 DLL 必须由 SHAREM 扩充。如果未扩充,Dlls 将无法使用。大多数(虽然可能不是全部)如果扩充量不正确将会失败。)稍后,我们可能会在接下来的几周内提供这些作为单独的下载。但在此期间,用户可以按照 Windows 步骤生成它们并将它们移动到 Linux,将它们放在 sharem\sharem\sharem\DLLs\x64 和 sharem\sharem\sharem\DLLs\x86 中。您还需要 foundDLLAddresses32.json 和 FoundDLLAddresses64.json,它们应该放在 sharem\sharem\sharem 中。 ## OpenAI 2024 年的 SHAREM 增加了对 OpenAI 的支持,因此我们可以利用 AI 自动化一些分析任务。这可以通过主菜单中的 A 激活 —— “leverage AI”。为此,您必须拥有 OpenAI key,并且您希望将其放在 config.cfg 文件中,该文件位于 sharem/sharem/sharem/sharem/config.cfg。此外,您必须先模拟 shellcode,然后它才允许您利用 AI。目前这是使用 AI 的唯一方式 —— 它不能在无头模式下工作 —— 但如果有人需要,请提出 issue,我将添加对该功能的支持,作为可以通过配置选择的另一个选项。如果您已经安装了 SHAREM 并获得了更新版本,您可能只想手动安装 OpenAI,例如 pip install openai。我已将它添加到 requirements 以及 setup.py 文件中,该文件在运行初始安装脚本时激活。 # Ghidra 脚本 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](https://github.com/Bw3ll/sharem/wiki) 找到,其中提供了有关 SHAREM 使用的一些指导信息,尽管目前仍有很大一部分内容和功能未被记录。 # 更新 * 2022 年 9 月 29 日:我们对 setup.py 进行了关于 numpy 的非常小的更新,这可能会影响一些使用最新版本 Python 的人。 * 2022 年 11 月 25 日:姗姗来迟,我们进行了一些更改以支持 [ShellWasp](https://github.com/Bw3ll/ShellWasp) 风格的 syscall。虽然我们之前已经实现了对 syscall 的支持,但 ShellWasp 风格无法工作,只有硬编码的 SSN(syscall 值)可以。OSMajorVersion、OSMinorVersion 和 OSBuild 已为 32 位和 64 位初始化。无论用户在配置或 UI 中拥有什么操作系统版本,现在都会在内部反映出来 —— 例如选择 Windows 10 20H2 将导致填充正确的值,从而允许 [ShellWasp](https://github.com/Bw3ll/ShellWasp) 技术工作,如这个[示例输出](https://github.com/Bw3ll/ShellWasp/blob/main/Samples/alternative_create_process_SHAREM_output.txt)所示。目前仅支持 Windows 7、10 和 11 用于 ShellWasp 技术的模拟。 * 2022 年 11 月 29 日:添加了对新 OSBuilds 的模拟支持,即 Windows 10 和 11 的 22H2。这仅与模拟 Windows syscall 相关。许多小错误修复和生活质量改进。更好地区分了用于 shellcode(其主要关注点)的 SHAREM 功能和用于分析 PE 文件的功能。 * 2022 年 12 月 1 日:更改了 bins/ASCII 输出的默认文件位置 —— 移至日志。添加了使用此命令输出去混淆的 bins/ASCII 的功能。去混淆的 ASCII 已添加到日志中 —— bin 的 ASCII 似乎也从日志中丢失了 —— 这已被更正。 * 2022 年 12 月 29 日:我添加了一个**可选的栈无时间调试功能**。以前,无时间调试只捕获执行的指令和前后的寄存器值。现在我们可以看到 ESP 的 +/- 0xA0。不幸的是,它有点**慢**。这必须单独启用。此外,我发现了一些错误,这些错误会导致从循环中断时产生不正确的结果,在某些情况下可能导致模拟过早终止。我已经更正了这一点。我现在还让 SHAREM 在它跳出循环时输出,指示它去哪里,一旦它跳出循环。 * 2023 年 1 月 4 日:我大幅改进了完整的代码覆盖,增强了其性能。我还公开了一些可选功能,专家用户可以通过 UI 或配置文件根据具体情况调整这些功能。更多信息在[完整代码覆盖 wiki 页面](https://github.com/Bw3ll/sharem/wiki/Complete-Code-Coverage)。 * 2023 年 1 月 5 日:向模拟器菜单中的完整代码覆盖子菜单添加了按键快捷键。对于已经下载昨天更新的用户,按键是字母“o”。 * 2023 年 1 月 16 日:向生成的反汇编 JSON 文件添加了三个新字段。此更新对于任何不使用这些 JSON 的人都不需要,这是使用 SHAREM 的一种非标准方式。 * 2023 年 8 月 3 日:从大约 30 个额外的 DLL 中添加了大约 5000-6000 个 API。支持此功能的其他增强。 * 2024 年:额外的 OpenAI 更新以利用 AI。 * 2025 年 3 月:添加了额外的 WinAPI # 截图 SHAREM 是一个非常强大的框架,具有众多功能,有些有详细记录,有些则没有。本节将展示其中的一小部分功能。 SHAREM 可以通过模拟获取编码的 shellcode 并对其进行去混淆。它不仅捕获所有 WinAPI 或 syscall 信息,而且如果您选择在反汇编器中查看它,它会向您显示 shellcode 的解码形式: ![image](https://github.com/Bw3ll/sharem/blob/testing/sharem/SHAREM_images/encodedShellcode.png?raw=true) SHAREM 不仅可以枚举 12,000+ 个 WinAPI 函数,而且还可以对几乎所有用户模式的 Windows syscall 执行此操作。此外,对于某些它还显示结构信息。对于那些处理注册表的人,它将提取注册表信息并将其添加到我们的注册表管理器中: ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cbbc77ddb8230544.png) SHAREM 还能够通过 UrldownloadToFileA 下载文件(如果它们存在)。这些被下载到模拟器的内存中 —— 而不是保存到磁盘。如果成功,将捕获哈希。还有一个有限的伪文件系统,因此您可以看到相关性,例如文件被下载为一件事并重命名为另一件事。如果所需的下载不可用,它将简单地被模拟为成功的下载。实时下载是可以在配置中启用或禁用的选项 ![image](https://github.com/Bw3ll/sharem/blob/testing/sharem/SHAREM_images/downloading.png?raw=true) # 共同作者和贡献者 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 Grant H98230-20-1-0326 的支持。
标签:AMSI绕过, BlackHat, Conpot, DAST, DEFCON, Findomain, Ghidra插件, Hpfeeds, Shellcode分析, WinAPI模拟, Windows安全, 二进制分析, 云安全运维, 云资产清单, 代码去混淆, 动态仿真, 反汇编器, 威胁检测, 恶意代码分析, 恶意软件分析, 情报收集, 漏洞研究, 系统调用, 逆向工具, 逆向工程, 配置文件