Recherchez des gadgets ROP dans les binaires ELF, PE, Mach-O et Raw sur les architectures x86, ARM, MIPS et RISC-V. Prend en charge la génération automatisée de chaînes ROP et le mode console interactif.
Cet outil vous permet de rechercher des gadgets dans vos binaires pour faciliter votre exploitation ROP. ROPgadget prend en charge les formats ELF/PE/Mach-O/Raw sur les architectures x86, x64, ARM, ARM64, PowerPC, SPARC, MIPS, RISC-V 64 et RISC-V Compressed.
La manière la plus simple est d'installer ROPgadget depuis PyPi :
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install ROPgadget
$ ROPgadget --help
Vous pouvez également installer ROPgadget depuis les sources. Vous devez d'abord installer Capstone.
Pour l'installation de Capstone sur une machine nix :
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install capstone
Capstone prend en charge plusieurs plateformes (Windows, iOS, Android, Cygwin…). Pour la compilation croisée, veuillez vous référer au fichier https://github.com/capstone-engine/capstone/blob/master/COMPILE.TXT.
Après installation de Capstone, ROPgadget peut être utilisé comme un outil autonome :
$ python3 ROPgadget.py --help
Ou installé dans la bibliothèque site-packages de Python, et exécuté depuis $PATH.
$ sudo -H python3 setup.py install
$ ROPgadget --help
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 vous permet de rechercher des gadgets dans un binaire. Il prend en charge plusieurs formats de fichiers et architectures et utilise le désassembleur Capstone pour le moteur de recherche.
formats pris en charge :
- ELF
- PE
- Mach-O
- Raw
architectures prises en charge :
- x86
- x86-64
- ARM
- ARM64
- MIPS
- PowerPC
- Sparc
- RISC-V 64
- RISC-V Compressed
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-v, --version Affiche la version de ROPgadget
-c, --checkUpdate Vérifie si une nouvelle version est disponible
--binary <binary> Spécifie un nom de fichier binaire à analyser
--opcode <opcodes> Recherche un opcode dans le segment exécutable
--string <string> Recherche une chaîne dans le segment lisible
--memstr <string> Recherche chaque octet dans tous les segments lisibles
--depth <nbyte> Profondeur pour le moteur de recherche (par défaut 10)
--only <key> Affiche uniquement certaines instructions
--filter <key> Supprime des mnémoniques spécifiques
--range <start-end> Recherche entre deux adresses (0x...-0x...)
--badbytes <byte> Rejette des octets spécifiques dans l'adresse du gadget
--rawArch <arch> Spécifie une architecture pour un fichier brut
x86|arm|arm64|sparc|mips|ppc|riscv
--rawMode <mode> Spécifie un mode pour un fichier brut 32|64|arm|thumb
--rawEndian <endian> Spécifie l'endianness pour un fichier brut little|big
--re <re> Expression régulière
--offset <hexaddr> Spécifie un décalage pour les adresses des gadgets
--ropchain Active la génération de la chaîne ROP
--thumb Utilise le mode thumb pour le moteur de recherche (ARM uniquement)
--console Utilise une console interactive pour le moteur de recherche
--norop Désactive le moteur de recherche ROP
--nojop Désactive le moteur de recherche JOP
--callPreceded Affiche uniquement les gadgets précédés d'un appel
--nosys Désactive le moteur de recherche SYS
--multibr Active les gadgets à branchements multiples
--all Désactive la suppression des gadgets en double
--noinstr Désactive l'affichage des instructions des gadgets dans la console
--dump Affiche les octets des gadgets
--silent Désactive l'affichage des gadgets pendant l'analyse
--align ALIGN Aligne les adresses des gadgets (en octets)
--mipsrop <rtype> Recherche de gadgets utiles MIPS
stackfinder|system|tails|lia0|registers
exemples :
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
Veuillez signaler les bogues, soumettre des pull requests, etc. sur GitHub à l'adresse https://github.com/JonathanSalwan/ROPgadget
Voir LICENSE_BSD.txt et l'en-tête de licence dans tous les fichiers sources.





