关于ROPgadget
ROPgadget是一款可以在二进制文件中搜索Gadget的强大工具,本质上来说,ROPgadget 是一个小工具查找程序和自动操作程序。在该工具的帮助下,广大研究人员可以在二进制文件中搜索Gadget,以方便我们实现对 ROP 的利用。ROPgadget 支持 x86,x64,ARM,PowerPC,SPARC 和 MIPS 体系结构,并支持 ELF / PE / Mach-O 格式。
值得一提的是,从ROPgadget v5 开始,ROPgadget 具有一个新的内核,该内核是使用 Capstone (一个轻量级的多平台架构支持的反汇编架构)实现的。
工具安装
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3环境。接下来,广大研究人员可以直接使用PyPi安装ROPgadget:
$ sudo apt install python3-pip $ sudo -H python3 -m pip install ROPgadget $ ROPgadget --help
或者使用下列命令将该项目源码克隆至本地,但此时你需要先手动安装Capstone:
$ sudo apt install python3-pip $ sudo -H python3 -m pip install capstone $ sudo git clone https://github.com/JonathanSalwan/ROPgadget.git
安装完成后,我们就可以将ROPgadget以独立工具运行和使用了:
$ python3 ROPgadget.py --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 显示工具帮助信息和退出 -v, --version 显示ROPgadget版本 -c, --checkUpdate 检测是否有新版本 --binary 指定需要分析的代码文件名 --opcode 搜索可执行区段中的opcode --string 搜索可读区段中的字符串 --memstr 搜索所有可读区段中的每一个字节 --depth 搜索引擎深度(默认为10) --only 仅显示指定指令 --filter 过滤特定助记符 --range 在两个地址之间执行搜索(0x...-0x...) --badbytes 屏蔽Gadget地址中的特定字节 --rawArch 指定原始文件架构,例如x86|arm|arm64|sparc|mips|ppc|riscv --rawMode 指定原始文件模式,例如32|64|arm|thumb --rawEndian 为原始文件设置大/小端,例如little|big --re 正则表达式 --offset 指定Gadget地址偏移量 --ropchain 启用ROP链生成 --thumb 怼搜索引擎启用thumb模式 --console 使用搜索引擎的交互式终端 --norop 禁用ROP搜索引擎 --nojop 禁用JOP搜索引擎 --callPreceded 仅显示前面调用过的Gadget --nosys 应用SYS搜索引擎 --multibr 启用多分支Gadget --all 禁用重复Gadget删除功能 --noinstr 禁用Gadget指令终端打印 --dump 输出Gadget --silent 在分析过程中不打印Gadget信息 --align ALIGN 对齐Gadget地址(字节) --mipsrop 搜索其他有用的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
工具运行截图
许可证协议
本项目的开发与发布遵循BSD开源许可证协议。
项目地址
ROPgadget:【GitHub传送门】
参考资料
http://www.capstone-engine.org/
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/soft/30703.html