ROPgadget

JonathanSalwan更新放缓

在二进制文件中自动搜索 ROP gadget,方便构造 ROP 利用链,支持 ELF、PE、Mach-O 及 x86、ARM、MIPS、RISC-V 等多种架构。

This tool lets you search your gadgets on your binaries to facilitate your ROP exploitation. ROPgadget supports ELF, PE and Mach-O format on x86, x64, ARM, ARM64, PowerPC, SPARC, MIPS, RISC-V 64, and RISC-V Compressed architectures.

v7.7发布于 2025-10-15 09:07 UTC4,515star582fork同步于 2026-11-10 17:39 UTC

怎么上手

由 README 提炼,执行前请确认
sudo apt install python3-pip
sudo -H python3 -m pip install ROPgadget
ROPgadget --help
硬件要求按 README 说明

README 未说明硬件要求;工具为 Python 程序,依赖 Capstone 反汇编库,未提及 GPU 或显存需求

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

在二进制文件中搜索 ROP gadgets 的 Python 工具,支持多格式多架构,方便构造 ROP 利用链

在二进制文件中自动搜索 ROP gadget,方便构造 ROP 利用链,支持 ELF、PE、Mach-O 及 x86、ARM、MIPS、RISC-V 等多种架构。

核心能力

  • 基于 Capstone 反汇编引擎搜索 gadgets
  • 支持 ELF、PE、Mach-O、Raw 四种文件格式
  • 覆盖 x86、x64、ARM、ARM64、MIPS、PowerPC、SPARC、RISC-V 等架构
  • 可按指令、字节、字符串、地址范围过滤 gadget
  • 支持 --ropchain 自动生成 ROP 链

容易踩的坑

从源码安装需先单独安装 Capstone 依赖;分析 Raw 格式文件时必须用 --rawArch、--rawMode、--rawEndian 指定架构、模式和字节序;默认搜索深度为 10,可用 --depth 调整

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v7.7
  1. v7.7最新正式版2025-10-15 · 2025-10-15 09:07 UTC

    What's Changed

    New Contributors

    Full Changelog: https://github.com/JonathanSalwan/ROPgadget/compare/v7.6...v7.7

  2. v7.62025-01-28 · 2025-01-28 19:27 UTC
    查看更新说明

    Add LDM / LDMDB JOP gadgets for ARM Thumb2

  3. v7.52024-09-30 · 2024-09-30 13:36 UTC
    查看更新说明

    Add some PowerPC ROP and SYS gadgets Support iret and sysret instructions for x86

  4. v7.42023-09-01 · 2023-09-01 07:08 UTC
    查看更新说明

    Update to Capstone 5.0.1

  5. v7.32023-03-09 · 2023-03-09 13:46 UTC
    查看更新说明

    Support RISC-V 64 and Compressed

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    ROPgadget Tool

    This tool lets you search your gadgets on your binaries to facilitate your ROP exploitation. ROPgadget supports ELF/PE/Mach-O/Raw formats on x86, x64, ARM, ARM64, PowerPC, SPARC, MIPS, RISC-V 64, and RISC-V Compressed architectures.

    Install

    The easiest way is installing ROPgadget from PyPi:

    $ sudo apt install python3-pip
    $ sudo -H python3 -m pip install ROPgadget
    $ ROPgadget --help
    

    Alternatively you can install ROPgadget from source. You have to install Capstone first.

    For the Capstone's installation on nix machine:

    $ sudo apt install python3-pip
    $ sudo -H python3 -m pip install capstone
    

    Capstone supports multi-platforms (windows, ios, android, cygwin...). For the cross-compilation, please refer to the https://github.com/capstone-engine/capstone/blob/master/COMPILE.TXT file.

    After Capstone is installed, ROPgadget can be used as a standalone tool:

    $ python3 ROPgadget.py --help
    

    Or installed into the Python site-packages library, and executed from $PATH.

    $ sudo -H python3 setup.py install
    $ ROPgadget --help
    

    Usage

    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>]
    
    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 <binary>     Specify a binary filename to analyze
      --opcode <opcodes>    Search opcode in executable segment
      --string <string>     Search string in readable segment
      --memstr <string>     Search each byte in all readable segment
      --depth <nbyte>       Depth for search engine (default 10)
      --only <key>          Only show specific instructions
      --filter <key>        Suppress specific mnemonics
      --range <start-end>   Search between two addresses (0x...-0x...)
      --badbytes <byte>     Rejects specific bytes in the gadget's address
      --rawArch <arch>      Specify an arch for a raw file
                            x86|arm|arm64|sparc|mips|ppc|riscv
      --rawMode <mode>      Specify a mode for a raw file 32|64|arm|thumb
      --rawEndian <endian>  Specify an endianness for a raw file little|big
      --re <re>             Regular expression
      --offset <hexaddr>    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 <rtype>     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
    

    How can I contribute ?

    • Add system gadgets for PPC, Sparc, ARM64 (Gadgets.addSYSGadgets()).
    • Support RISC-V 32-bit.
    • Handle bad bytes in data during ROP chain generation.
    • Manage big endian in Mach-O format like the ELF class.
    • Everything you think is cool :)

    Bugs/Patches/Contact

    Please, report bugs, submit pull requests, etc. on GitHub at https://github.com/JonathanSalwan/ROPgadget

    License

    See LICENSE_BSD.txt and the license header on all source files.

    Screenshots