← retour aux outils back to tools

# 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;

2. 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;

2. 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