angr/angrop

GitHub: angr/angrop

angrop 是基于 angr 符号执行引擎的多架构 ROP gadget 自动查找与 ROP 链生成工具,支持用户态和内核态二进制。

Stars: 810 | Forks: 85

# angrop angrop 是一个 ROP gadget 查找器和链构建器。 ## 概述 angrop 是一个自动生成 ROP 链的工具。 它构建于 angr 的符号执行引擎之上。 它利用符号执行来理解 gadget 的效果,并使用约束求解和图搜索来生成链。 其设计与架构无关,因此支持多种架构。 通常,它生成 ROP 链的速度比人类更快。 在某些情况下,它可以在几秒钟内生成人类可能需要数小时才能构建的复杂 ROP 链。 一些示例可以在[这里](examples)找到。 它提供了 CLI 和 Python API。 命令行工具 `angrop-cli` 提供了一些基本的 gadget 查找/链构建功能,例如查找 `system`/`execve` 链或调用特定函数。 `angrop` Python API 提供了完整的功能。 详情请参阅[使用说明](README.md#usage)。 `angrop` 不仅适用于用户态二进制文件,同样适用于 Linux 内核。 ## 架构 支持的架构: * x86/x64 * MIPS * ARM * AArch64 * RISC-V (64位) 支持 `angr` 所支持的其他架构应该相对容易。 如果您想在其他架构上使用 `angrop`,请创建一个 issue,我们会关注它 :) ## 使用说明 您可以使用 CLI 或 Python API。 CLI 仅提供一些基本功能,而 Python API 提供了更多的功能且更强大。 ## CLI angrop 附带一个命令行工具,方便日常使用 ``` # dump 命令将在目标 binary 中查找 gadgets,true/false 标记 gadget 是否独立 $ angrop-cli dump /bin/ls 0x11735: true : adc bl, byte ptr [rbx + 0x4c]; mov eax, esp; pop r12; pop r13; pop r14; pop rbp; ret 0x10eaa: true : adc eax, 0x12469; add rsp, 0x38; pop rbx; pop r12; pop r13; pop r14; pop r15; pop rbp; ret 00xe026: true : adc eax, 0xcec8; pop rbx; cmove rax, rdx; pop r12; pop rbp; ret 00xdfd4: true : adc eax, 0xcf18; pop rbx; cmove rax, rdx; pop r12; pop rbp; ret 00xdfa5: true : adc eax, 0xcf4d; pop rbx; cmove rax, rdx; pop r12; pop rbp; ret ...... # chain 命令将在 binary 中查找一些预定义的 chains $ angrop-cli chain -t execve /bin/bash code_base = 0x0 chain = b"" chain += p64(code_base + 0x36083) # pop rax; pop rbx; pop rbp; ret chain += p64(code_base + 0x30016) # add rsp, 8; ret chain += p64(code_base + 0x34873) chain += p64(code_base + 0x0) chain += p64(code_base + 0x9616d) # mov edx, ebp; mov rsi, r12; mov rdi, rbx; call rax chain += p64(code_base + 0xe501e) # pop rsi; ret 0 chain += p64(code_base + 0x0) chain += p64(code_base + 0x31470) # execve@plt chain += p64(0x0) chain += p64(code_base + 0x10d5bf) ``` ## Python API ``` >>> import angr, angrop >>> p = angr.Project("/bin/ls") >>> rop = p.analyses.ROP() >>> rop.find_gadgets() >>> chain = rop.set_regs(rax=0x41414141, rbx=0x42424242) >>> chain.print_payload_code() code_base = 0x0 chain = b"" chain += p64(code_base + 0xf5e2) # pop rbx; pop r12; test eax, eax; pop rbp; cmovs eax, edx; ret chain += p64(0x42424242) chain += p64(0x0) chain += p64(0x0) chain += p64(code_base + 0x812f) # pop rsi; pop rbp; ret chain += p64(0x41414141) chain += p64(0x0) chain += p64(code_base + 0x169dd) # mov rax, rsi; ret chain += p64(code_base + 0x10a55) ``` 关于 Python API 的更详细文档可以在[这里](docs/pythonapi.md)找到。 ## 演示 ### gadget 查找 ![gadget](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b4da13c158195450.gif) ### 查找 execve 链 ![execve](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e2d8b579a6195532.gif) ### 内核容器逃逸链 ![kernel](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/faac2b0427195533.gif) ## 论文 我们在本文中描述了我们的设计和发现 [__ropbot: Reimaging Code Reuse Attack Synthesis__](https://kylebot.net/papers/ropbot.pdf) Kyle Zeng, Moritz Schloegel, Christopher Salls, Adam Doupé, Ruoyu Wang, Yan Shoshitaishvili, Tiffany Bao *发表于网络与分布式系统安全研讨会 (NDSS),2026年2月*
标签:angr 框架, CTF 工具, Gadget 查找, Hakrawler, Linux 内核安全, Python 库, ROP 链生成, 二进制分析, 云安全运维, 云资产清单, 利用开发, 漏洞攻防, 符号执行, 缓冲区溢出, 自动化安全工具, 跨架构支持, 逆向工具, 逆向工程, 项目管理