
Pesquise por gadgets ROP em binários ELF, PE, Mach-O e Raw nas arquiteturas x86, ARM, MIPS e RISC-V. Suporta geração automatizada de cadeias ROP e modo de console interativo.
Esta ferramenta permite que você pesquise gadgets em seus binários para facilitar sua exploração ROP. O ROPgadget suporta os formatos ELF/PE/Mach-O/Raw nas arquiteturas x86, x64, ARM, ARM64, PowerPC, SPARC, MIPS, RISC-V 64 e RISC-V Compressed.
A maneira mais fácil é instalar o ROPgadget a partir do PyPi:
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install ROPgadget
$ ROPgadget --help
Alternativamente, você pode instalar o ROPgadget a partir do código fonte. Você precisa instalar o Capstone primeiro.
Para a instalação do Capstone em máquinas nix:
$ sudo apt install python3-pip
$ sudo -H python3 -m pip install capstone
Capstone suporta múltiplas plataformas (Windows, iOS, Android, Cygwin...). Para a compilação cruzada, consulte o arquivo https://github.com/capstone-engine/capstone/blob/master/COMPILE.TXT .
Após a instalação do Capstone, o ROPgadget pode ser usado como uma ferramenta independente:
$ python3 ROPgadget.py --help
Ou instalado na biblioteca site-packages do Python e executado a partir do $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>]
descrição:
O ROPgadget permite que você pesquise gadgets em um binário. Ele suporta vários
formatos de arquivo e arquiteturas e usa o desmontador Capstone para o
mecanismo de busca.
formatos suportados:
- ELF
- PE
- Mach-O
- Raw
arquiteturas suportadas:
- x86
- x86-64
- ARM
- ARM64
- MIPS
- PowerPC
- Sparc
- RISC-V 64
- RISC-V Compressed
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai
-v, --version Exibe a versão do ROPgadget
-c, --checkUpdate Verifica se uma nova versão está disponível
--binary <binary> Especifica um nome de arquivo binário para analisar
--opcode <opcodes> Pesquisa opcode no segmento executável
--string <string> Pesquisa string no segmento legível
--memstr <string> Pesquisa cada byte em todos os segmentos legíveis
--depth <nbyte> Profundidade para o mecanismo de busca (padrão 10)
--only <key> Mostra apenas instruções específicas
--filter <key> Suprime mnemônicos específicos
--range <start-end> Pesquisa entre dois endereços (0x...-0x...)
--badbytes <byte> Rejeita bytes específicos no endereço do gadget
--rawArch <arch> Especifica uma arquitetura para um arquivo raw
x86|arm|arm64|sparc|mips|ppc|riscv
--rawMode <mode> Especifica um modo para um arquivo raw 32|64|arm|thumb
--rawEndian <endian> Especifica uma endianness para um arquivo raw little|big
--re <re> Expressão regular
--offset <hexaddr> Especifica um offset para endereços de gadget
--ropchain Habilita a geração de cadeia ROP
--thumb Usa o modo thumb para o mecanismo de busca (apenas ARM)
--console Usa um console interativo para o mecanismo de busca
--norop Desabilita o mecanismo de busca ROP
--nojop Desabilita o mecanismo de busca JOP
--callPreceded Mostra apenas gadgets que são precedidos por call
--nosys Desabilita o mecanismo de busca SYS
--multibr Habilita múltiplos gadgets de branch
--all Desabilita a remoção de gadgets duplicados
--noinstr Desabilita a impressão das instruções do gadget no console
--dump Exibe os bytes do gadget
--silent Desabilita a impressão de gadgets durante a análise
--align ALIGN Alinha endereços de gadgets (em bytes)
--mipsrop <rtype> Localizador de gadgets úteis MIPS
stackfinder|system|tails|lia0|registers
exemplos:
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
Por favor, reporte bugs, envie pull requests, etc. no GitHub em https://github.com/JonathanSalwan/ROPgadget
Consulte LICENSE_BSD.txt e o cabeçalho de licença em todos os arquivos fonte.





