
在ELF、PE、Mach-O和Raw二进制文件中搜索ROP gadgets,支持x86、ARM、MIPS和RISC-V架构。支持自动ROP链生成和交互式控制台模式。
此工具允许你在二进制文件中搜索 gadget,以便于进行 ROP 利用。ROPgadget 支持 ELF/PE/Mach-O/Raw 格式,涵盖 x86、x64、ARM、ARM64、PowerPC、SPARC、MIPS、RISC-V 64 以及 RISC-V 压缩架构。
最简单的方法是从 PyPi 安装 ROPgadget:
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install ROPgadget
$ ROPgadget --help
或者,你也可以从源码安装 ROPgadget。 首先需要安装 Capstone。
在 nix 机器上安装 Capstone:
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install capstone
Capstone 支持多种平台(Windows、iOS、Android、Cygwin 等)。关于交叉编译,请参考 https://github.com/capstone-engine/capstone/blob/master/COMPILE.TXT 文件。
安装 Capstone 后,ROPgadget 可以作为独立工具使用:
$ python3 ROPgadget.py --help
或者安装到 Python 的 site-packages 库中,并从 $PATH 执行。
$ sudo -H python3 setup.py install
$ ROPgadget --help
usage: ROPgadget.py [-h] [-v] [-c] [--binary <binary>] [--opcode <opcodes>]
[--string <string>] [--memstr <string>] [--depth <nbyte>]
[--only <key>] [--filter <key>] [--range <start-end>]
[--badbytes <byte>] [--rawArch <arch>] [--rawMode <mode>]
[--rawEndian <endian>] [--re <re>] [--offset <hexaddr>]
[--ropchain] [--thumb] [--console] [--norop] [--nojop]
[--callPreceded] [--nosys] [--multibr] [--all] [--noinstr]
[--dump] [--silent] [--align ALIGN] [--mipsrop <rtype>]
描述:
ROPgadget 让你能够在二进制文件中搜索 gadget。它支持多种文件格式和架构,并使用 Capstone 反汇编引擎进行搜索。
支持的格式:
- ELF
- PE
- Mach-O
- Raw
支持的架构:
- x86
- x86-64
- ARM
- ARM64
- MIPS
- PowerPC
- Sparc
- RISC-V 64
- RISC-V 压缩架构
可选参数:
-h, --help 显示此帮助信息并退出
-v, --version 显示 ROPgadget 的版本
-c, --checkUpdate 检查是否有新版本可用
--binary <binary> 指定要分析的二进制文件名
--opcode <opcodes> 在可执行段中搜索操作码
--string <string> 在可读段中搜索字符串
--memstr <string> 在所有可读段中搜索每个字节
--depth <nbyte> 搜索引擎的深度(默认为 10)
--only <key> 仅显示特定的指令
--filter <key> 排除特定的助记符
--range <start-end> 在两个地址之间搜索(0x...-0x...)
--badbytes <byte> 拒绝 gadget 地址中的特定字节
--rawArch <arch> 为原始文件指定架构
x86|arm|arm64|sparc|mips|ppc|riscv
--rawMode <mode> 为原始文件指定模式 32|64|arm|thumb
--rawEndian <endian> 为原始文件指定字节序 little|big
--re <re> 正则表达式
--offset <hexaddr> 为 gadget 地址指定偏移量
--ropchain 启用 ROP 链生成
--thumb 为搜索引擎使用 Thumb 模式(仅 ARM)
--console 使用交互式控制台进行搜索
--norop 禁用 ROP 搜索引擎
--nojop 禁用 JOP 搜索引擎
--callPreceded 仅显示调用前置的 gadget
--nosys 禁用 SYS 搜索引擎
--multibr 启用多分支 gadget
--all 禁用重复 gadget 的移除
--noinstr 禁用 gadget 指令的控制台打印
--dump 输出 gadget 的字节
--silent 在分析过程中禁用 gadget 的打印
--align ALIGN 对齐 gadget 地址(以字节为单位)
--mipsrop <rtype> MIPS 有用的 gadget 查找器
stackfinder|system|tails|lia0|registers
示例:
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --ropchain
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --depth 3
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --string "main"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --string "m..n"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --opcode c9c3
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --only "mov|ret"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --only "mov|pop|xor|ret"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --filter "xchg|add|sub|cmov.*"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --norop --nosys
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --range 0x08041000-0x08042000
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --string main --range 0x080c9aaa-0x080c9aba
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --memstr "/bin/sh"
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --console
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-x86 --badbytes "00|01-1f|7f|42"
ROPgadget.py --binary ./test-suite-binaries/Linux_lib64.so --offset 0xdeadbeef00000000
ROPgadget.py --binary ./test-suite-binaries/elf-ARMv7-ls --depth 5
ROPgadget.py --binary ./test-suite-binaries/elf-ARM64-bash --depth 5
ROPgadget.py --binary ./test-suite-binaries/raw-x86.raw --rawArch=x86 --rawMode=32
ROPgadget.py --binary ./test-suite-binaries/elf-Linux-RISCV_64 --depth 8
请通过 GitHub 报告 bug、提交 pull request 等:https://github.com/JonathanSalwan/ROPgadget
参见 LICENSE_BSD.txt 以及所有源文件中的许可证头。
x64
ARM
Sparc
MIPS
PowerPC
ROP chain