JonathanSalwan/ROPgadget

GitHub: JonathanSalwan/ROPgadget

这是一款用于在二进制文件中自动搜索ROP/JOP攻击链片段,辅助漏洞利用开发的工具。

Stars: 4402 | Forks: 574

# ROPgadget 工具 此工具允许您在二进制文件上搜索 gadgets,以促进您的 ROP 利用。ROPgadget 支持在 x86、x64、ARM、ARM64、PowerPC、SPARC、MIPS、RISC-V 64 和 RISC-V Compressed 架构上的 ELF/PE/Mach-O/Raw 格式。 ## 安装 最简单的方法是从 PyPi 安装 ROPgadget: ``` $ sudo apt install python3-pip $ sudo -H python3 -m pip install ROPgadget $ ROPgadget --help ``` 或者,您可以从源代码安装 ROPgadget。 您必须先安装 [Capstone](http://www.capstone-engine.org/)。 在 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 ] [--opcode ] [--string ] [--memstr ] [--depth ] [--only ] [--filter ] [--range ] [--badbytes ] [--rawArch ] [--rawMode ] [--rawEndian ] [--re ] [--offset ] [--ropchain] [--thumb] [--console] [--norop] [--nojop] [--callPreceded] [--nosys] [--multibr] [--all] [--noinstr] [--dump] [--silent] [--align ALIGN] [--mipsrop ] description: ROPgadget lets you search your gadgets on a binary. It supports several file formats and architectures and uses the Capstone disassembler for the search engine. formats supported: - ELF - PE - Mach-O - Raw architectures supported: - x86 - x86-64 - ARM - ARM64 - MIPS - PowerPC - Sparc - RISC-V 64 - RISC-V Compressed optional arguments: -h, --help show this help message and exit -v, --version Display the ROPgadget's version -c, --checkUpdate Checks if a new version is available --binary Specify a binary filename to analyze --opcode Search opcode in executable segment --string Search string in readable segment --memstr Search each byte in all readable segment --depth Depth for search engine (default 10) --only Only show specific instructions --filter Suppress specific mnemonics --range Search between two addresses (0x...-0x...) --badbytes Rejects specific bytes in the gadget's address --rawArch Specify an arch for a raw file x86|arm|arm64|sparc|mips|ppc|riscv --rawMode Specify a mode for a raw file 32|64|arm|thumb --rawEndian Specify an endianness for a raw file little|big --re Regular expression --offset Specify an offset for gadget addresses --ropchain Enable the ROP chain generation --thumb Use the thumb mode for the search engine (ARM only) --console Use an interactive console for search engine --norop Disable ROP search engine --nojop Disable JOP search engine --callPreceded Only show gadgets which are call-preceded --nosys Disable SYS search engine --multibr Enable multiple branch gadgets --all Disables the removal of duplicate gadgets --noinstr Disable the gadget instructions console printing --dump Outputs the gadget bytes --silent Disables printing of gadgets during analysis --align ALIGN Align gadgets addresses (in bytes) --mipsrop MIPS useful gadgets finder stackfinder|system|tails|lia0|registers examples: 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 ``` ## Bug/补丁/联系 请在 GitHub 上 https://github.com/JonathanSalwan/ROPgadget 报告 bug、提交 pull request 等。 ## 许可证 请参阅 LICENSE_BSD.txt 以及所有源文件中的许可证声明。 ## 截图 x64 ARM Sparc MIPS PowerPC ROP chain
标签:ARM64, Capstone, CTF工具, ELF, Exploit开发, Gadget搜索, Hakrawler, JA3, Mach-O, MIPS, PE, PowerPC, Raw, RISC-V, ROP, ROPgadget, ROP链生成, SPARC, Wayback Machine, x64, x86, 二进制分析, 二进制安全, 云安全运维, 云资产清单, 代码复用, 反汇编, 多架构支持, 栈溢出, 汇编指令片段, 漏洞搜索, 网络安全, 逆向工具, 逆向工程, 隐私保护, 面向返回编程