这个全新、先进的 ROP 框架在 DEF CON 31 上首次亮相,具备一些前所未有的能力。ROCKET 可以生成多种类型的链,并提供了新的模式或技术。
请注意,这仍是一个进行中的工作,后续将添加一些更新和增强的功能。更新应该是定期的。如果你遇到问题,请在 issues 中提出或发送邮件给我,我会解决它们。此外,还会添加生成某些类型 gadget 的替代方法。
目前正在持续工作,定期添加新功能。请定期回来查看。

ROP ROCKET 非常强大,具有一些独特的能力,包括以下几个方面:
2025 年 8 月:ROP ROCKET 有一个 ASLR 绕过迷你工具,于 2025 年 8 月 10 日在 DEFCON 上发布,将生成九种针对 64 位高熵 ASLR 的绕过方式。


这应该作为本地包安装。有一个 setup.py 文件。为此,只需进入目录并输入以下命令:
py -m pip install -e ./ 根据你的 Python 安装,你可能需要稍微调整。如果你查看已安装的包,应该能看到 ROP-ROCKET 出现:py -m pip list 相信所有必需的依赖项都已包含,但如果你遇到任何问题——鉴于该版本的新颖性——只需打开一个 issue,我们会调查。
只需从命令行运行它:py rop2.py rop_tester_syscall.exe 一个完全可利用的 rop_tester_syscall.exe 也作为 zip 文件包含在内。它开发的目的是为了帮助确保所有 gadget 都被找到,而不是遗漏。
这个工具受到更老的 JOP ROCKET 的启发,JOP ROCKET 是我为博士论文的一部分编写的,并在 2019 年的 DEF CON 27 上发布。这导致了 JOP 的进一步发展和许多新的 JOP 能力,并在不同论文中提供了关于 JOP 机制和使用的广泛文档。该工具目前有点过时——它是较旧风格的 Python。通过这项新研究,部分灵感是尝试在 ROP 领域做一些新颖和不同的事情。到目前为止,我们已经履行了这一使命。所以某种程度上,这个工具受到一个 JOP 工具的启发,允许我们也许尝试跳出框框,以比通常使用 ROP 更非常规的方式进行思考。ROP ROCKET 没有任何 JOP 能力——它严格致力于 ROP。唯一完全专注于 JOP 的工具是 JOP ROCKET,其他所有东西都只是为未来的 JOP 工作预留了一个占位符。无论如何,我想澄清这些历史信息,以免名称的相似性使人困惑,因为这是两个截然不同且不相关的工具。

ROCKET 生成了一个 Heaven's Gate x86 到 x64 攻击,将其打印到屏幕并保存。

ROCKET 为 Win 10/11 生成了一个 用于 NtProtectVirtualMemory 的 Windows 系统调用,将其打印到屏幕并保存。

凭借其内部模拟能力,ROCKET 可以考虑许多不寻常的 gadget 组合。上面的目的是捕获栈指针 (ESP),并将其移动到 ECX。它能够找到替代的方法来实现,而不是仅仅使用一个可能不可用的 ROP gadget。首先它将 esp 移动到 edi;然后将 edi 移动到 ebx;然后将 ebx 移动到 esi。ECX 通过整数溢出设置为零,然后将 esi(包含我们的栈指针)的值加到 ecx。结果是栈指针在 ecx 中。一个等效的更短的 gadget 是 mov ecx, esp # ret——但这并不总是可行。ROCKET 还正确处理了额外的 pop 指令,生成了正确的填充。注意 ROP ROCKET 仔细考虑了必须保护的寄存器(“排除的寄存器”),这些寄存器可能因 gadget 而异。在上面的例子中,没有我们试图保护的寄存器被“破坏”。

ROCKET 为捕获什么以及如何捕获 gadget 提供了许多选项。当然可以在 config.cfg 文件中设置默认值。这里用户决定只检查最多 0xa (15) 字节的内存块。

你不仅可以打印单个 ROP 链,还可以按类别打印所有找到的 gadget,例如 mov edx。有数百种可能性。你还可以通过更改每个 gadget 的行数来细化结果。

打印结果时,有许多不同类型的过滤器选项可以排除 gadget,例如 ASLR、CFG、Windows 系统 DLL 或简单的坏字节。这一切都 高度可定制。

有时你需要 混淆某个特定的 gadget,否则由于 gadget 地址中的坏字节,它可能无法使用。我们有多种选项,你也可以根据使用的寄存器或坏字节进行排除。
这里用户使用了混淆,在运行时动态解码 xor eax, edi # ret 的地址,假设否则他无法使用它。解码后,push r32 / ret 导致它立即被执行。这是一个使用由于坏字节而不可用的 gadget 的好方法。ROCKET 在几秒钟内完成此操作。它通过整数溢出做到这一点的能力几乎可以保证成功,假设没有坏字节或可用寄存器不足(即用户排除了太多寄存器)的问题。
该工具由 Dr. Bramwell Brizendine 创建并编写,始于 2023 年初。
Shiva Shashank Kusuma 作为研究生为 Dr. Bramwell Brizendine 工作,开发 ROP ROCKET 的模式。他做了宝贵的工作,并且是 DEFCON 和 Black Hat Arsenal 的共同演讲者。2025 年,Shiva 也开始为 ROP ROCKET 的编程做出贡献。
2023 年 9 月 18 日 - 各种增强;进一步支持导致 Windows 系统调用的远跳转的变体方式。
2024 年 3 月 - 许多重要的更新,大致定期进行——如果你打算积极使用 ROP ROCKET,请尽量保持最新的副本。不会列出单独的更改。小的更改和更新可能会持续进行。只有主要的新功能会被描述。(一些小的新功能已经添加。) 2024 年 3 月下旬至 4 月 3 日 - 对模拟进行了广泛更新,以提高效率;支持更多可能的选项以生成单个 gadget;修复错误;通过 pushad 新发布了 VirtualAlloc 和 VirtualProtect。虽然其他工具之前已经提供了 VirtualProtect 和 VirtualAlloc 的支持,这也是为什么我们之前没有提供,但现在我们认为不包含这些功能将是一种疏忽,尤其是这些功能可以通过该工具的能力得到增强。创建了通过 pushad 实现 VirtualAlloc 和 VirtualProtect 的完整模板,其中也包括了 shellcode(弹出计算器)。
2024 年 5 月 - 对 Windows 系统调用进行了大规模改造,极大地扩展了在真实世界二进制文件中可以找到的内容。即使是冗长的、不理想的泄漏 FS 寄存器(在 SysWow64 中进行 Windows 系统调用所需的,即 32 位)的 gadget 也可以以自动化的方式处理。其他许多小的增强。
2025 年 6 月 28 日 - 大规模更新,包括支持 ROP ROCKET 中以前未包含的 17 个新 WinAPI。增加了定义初始溢出量的能力——这很重要,因为它会影响在进行模拟时对字符串或指针的运算。