ropper

Chercheur de gadgets ROP et constructeur de chaînes d'exploit. Recherche dans des binaires ELF, PE et Mach-O des gadgets de Return Oriented Programming pour construire des chaînes d'exploit contournant DEP/NX. ROP gadget finder and exploit chain builder. Searches ELF, PE, and Mach-O binaries for Return Oriented Programming gadgets to build exploit chains bypassing DEP/NX.

↗ https://github.com/sashs/Ropper

Overview

ropper finds Return Oriented Programming (ROP) gadgets in binary files. ROP chains bypass non-executable memory (DEP/NX) by linking together small existing code sequences ending in ret. ropper supports ELF, PE, and Mach-O binaries and provides an interactive shell for building and testing ROP chains.

Basic Usage

Find all ROP gadgets in a binary

ropper -f /path/to/binary

Search for specific gadget type

ropper -f binary --search "pop rdi"

Find gadgets containing specific instruction

ropper -f binary --search "pop %?; ret"

Find in multiple binaries (libc, main binary)

ropper -f binary -f /lib/x86_64-linux-gnu/libc.so.6

Show gadgets with addresses

ropper -f binary --arch x86_64

Gadget Searching

Find ‘pop rdi; ret’ (common for argument setup in x64)

ropper -f binary --search "pop rdi; ret"

Find syscall gadgets

ropper -f binary --search "syscall"

Find /bin/sh string

ropper -f binary --string "/bin/sh"

Find xchg gadgets

ropper -f binary --search "xchg rax, rsp"

Find gadgets with wildcards

ropper -f binary --search "pop ???; ret"  # any register pop

Find ret2libc setup gadgets

ropper -f binary --search "pop rdi; ret; pop rsi; ret"

Gadget Types

ROP gadgets (end in ret)

ropper -f binary --type rop

JOP gadgets (end in jmp)

ropper -f binary --type jop

SYS gadgets (contain syscall)

ropper -f binary --type sys

All gadget types

ropper -f binary --type all

Interactive Mode

Start ropper interactive shell

ropper
# Inside ropper shell:
(ropper)> file /path/to/binary
(ropper)> gadgets
(ropper)> search pop rdi
(ropper)> chain
(ropper)> quit

Architecture

x86_64 (default)

ropper -f binary --arch x86_64

x86 (32-bit)

ropper -f binary --arch x86

ARM

ropper -f binary --arch ARM

ARM64/AArch64

ropper -f binary --arch ARM64

MIPS

ropper -f binary --arch MIPS

ROP Chain Construction

Common x64 ret2libc chain: 1. Find ‘pop rdi; ret’ gadget

ropper -f ./vuln --search "pop rdi; ret"

→ → 0x0000000000401233: pop rdi; ret;

  1. Find /bin/sh address in libc
ropper -f /lib/x86_64-linux-gnu/libc.so.6 --string "/bin/sh"

→ → 0x00007ffff7f8144e: /bin/sh

# 3. Find system() address (use gdb or pwntools)
# 4. Build chain: [pop_rdi] [/bin/sh_addr] [system_addr]

# With pwntools:
# pop_rdi = 0x401233
# chain = p64(pop_rdi) + p64(bin_sh) + p64(system)

Tips

  • Use --search with wildcards (?) to find gadgets for any register
  • Check ASLR/PIE status first — fixed addresses only work if ASLR/PIE is disabled
  • Combine with pwntools’ ROP class for automatic chain generation
  • ropper and ROPgadget complement each other — some gadgets are found by one and not the other
Help / Man page
ropper [options]

-f FILE         Binary file to analyze
--search TERM   Search for specific gadget pattern
--type TYPE     Gadget type: rop, jop, sys, all
--string STR    Search for string in binary
--arch ARCH     Architecture: x86, x86_64, ARM, ARM64, MIPS
--badbytes HEX  Exclude gadgets containing bad bytes
--nocolor       Disable colored output
--inst-count N  Max instructions per gadget (default: 6)
-i              Start interactive shell

Vue d’ensemble

ropper trouve des gadgets de Return Oriented Programming (ROP) dans des fichiers binaires. Les chaînes ROP contournent la mémoire non exécutable (DEP/NX) en enchaînant de petites séquences de code existantes se terminant par ret. ropper prend en charge les binaires ELF, PE et Mach-O et fournit un shell interactif pour construire et tester des chaînes ROP.

Utilisation basique

# Trouver tous les gadgets ROP dans un binaire
ropper -f /path/to/binary

# Rechercher un type de gadget spécifique
ropper -f binary --search "pop rdi"

# Trouver des gadgets contenant une instruction spécifique
ropper -f binary --search "pop %?; ret"

# Chercher dans plusieurs binaires (libc, binaire principal)
ropper -f binary -f /lib/x86_64-linux-gnu/libc.so.6

# Afficher les gadgets avec leurs adresses
ropper -f binary --arch x86_64

Recherche de gadgets

# Trouver 'pop rdi; ret' (courant pour la mise en place d'arguments en x64)
ropper -f binary --search "pop rdi; ret"

# Trouver des gadgets syscall
ropper -f binary --search "syscall"

# Trouver la chaîne /bin/sh
ropper -f binary --string "/bin/sh"

# Trouver des gadgets xchg
ropper -f binary --search "xchg rax, rsp"

# Trouver des gadgets avec des jokers
ropper -f binary --search "pop ???; ret"  # pop de n'importe quel registre

# Trouver des gadgets de mise en place pour ret2libc
ropper -f binary --search "pop rdi; ret; pop rsi; ret"

Types de gadgets

# Gadgets ROP (se terminant par ret)
ropper -f binary --type rop

# Gadgets JOP (se terminant par jmp)
ropper -f binary --type jop

# Gadgets SYS (contenant syscall)
ropper -f binary --type sys

# Tous les types de gadgets
ropper -f binary --type all

Mode interactif

Démarrer le shell interactif ropper

ropper
# À l'intérieur du shell ropper :
(ropper)> file /path/to/binary
(ropper)> gadgets
(ropper)> search pop rdi
(ropper)> chain
(ropper)> quit

Architecture

# x86_64 (par défaut)
ropper -f binary --arch x86_64

# x86 (32 bits)
ropper -f binary --arch x86

# ARM
ropper -f binary --arch ARM

# ARM64/AArch64
ropper -f binary --arch ARM64

# MIPS
ropper -f binary --arch MIPS

Construction d’une chaîne ROP

Chaîne ret2libc x64 courante : 1. Trouver un gadget ‘pop rdi; ret’

ropper -f ./vuln --search "pop rdi; ret"

→ → 0x0000000000401233: pop rdi; ret;

  1. Trouver l’adresse de /bin/sh dans libc
ropper -f /lib/x86_64-linux-gnu/libc.so.6 --string "/bin/sh"

→ → 0x00007ffff7f8144e: /bin/sh

# 3. Trouver l'adresse de system() (utiliser gdb ou pwntools)
# 4. Construire la chaîne : [pop_rdi] [adresse_/bin/sh] [adresse_system]

# Avec pwntools :
# pop_rdi = 0x401233
# chain = p64(pop_rdi) + p64(bin_sh) + p64(system)

Conseils

  • Utiliser --search avec des jokers (?) pour trouver des gadgets pour n’importe quel registre
  • Vérifier le statut ASLR/PIE en premier : les adresses fixes ne fonctionnent que si ASLR/PIE est désactivé
  • Combiner avec la classe ROP de pwntools pour une génération de chaîne automatique
  • ropper et ROPgadget se complètent : certains gadgets sont trouvés par l’un et pas par l’autre
Aide / Page de manuel
ropper [options]

-f FILE         Binary file to analyze
--search TERM   Search for specific gadget pattern
--type TYPE     Gadget type: rop, jop, sys, all
--string STR    Search for string in binary
--arch ARCH     Architecture: x86, x86_64, ARM, ARM64, MIPS
--badbytes HEX  Exclude gadgets containing bad bytes
--nocolor       Disable colored output
--inst-count N  Max instructions per gadget (default: 6)
-i              Start interactive shell