ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

关于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

工具运行截图

ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

ROPgadget:一款可以在二进制文件中搜索Gadget的强大工具

许可证协议

本项目的开发与发布遵循BSD开源许可证协议。

项目地址

ROPgadget:【GitHub传送门

参考资料

http://www.capstone-engine.org/

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/soft/30703.html

发表评论

登录后才能评论