Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Ropper — Visualizza informazioni sui file in diversi formati e trova gadget per costruire catene ROP per diverse architetture (x86/x86_64, ARM/ARM64, MIPS, PowerPC, SPARC64). Per il disassemblaggio, ropper utilizza l'eccezionale framework Capstone. | Kitploit
Strumenti/GitHubGitHub/sashs/ropper
Generazione di PayloadExploitReverse EngineeringAnalisi di BinariBinary Exploitation
GitHubsashs/ropper

Ropper

Visualizza informazioni sui file in diversi formati e trova gadget per costruire catene ROP per diverse architetture (x86/x86_64, ARM/ARM64, MIPS, PowerPC, SPARC64). Per il disassemblaggio, ropper utilizza l'eccezionale framework Capstone.

Vedi Repository
2.1k2231 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

Ropper

Build Status

Puoi usare Ropper per visualizzare informazioni su file binari in diversi formati e puoi cercare gadget per costruire catene ROP per diverse architetture (x86/X86_64, ARM/ARM64, MIPS/MIPS64, PowerPC/PowerPC64, SPARC64). Per il disassemblaggio, Ropper utilizza il fantastico Capstone Framework.

Installazione

Installa Capstone con PyPi:

root@kitploit:~
$ sudo pip install capstone

Installa filebytes con PyPi:

root@kitploit:~
$ sudo pip install filebytes

Opzionale (non necessario per eseguire Ropper, solo per cercare gadget):

Installa Keystone:

root@kitploit:~
$ sudo pip install keystone-engine

Installa ed esegui Ropper

root@kitploit:~
$ python setup.py install
$ ropper

Puoi anche installare Ropper con pip

root@kitploit:~
$ pip install ropper

Se preferisci, puoi usare Ropper senza installazione

root@kitploit:~
$ ./Ropper.py

Se non vuoi installare filebytes, filebytes è un sottomodulo del repository di Ropper. Questo significa che non devi installare filebytes e ropper separatamente.

root@kitploit:~
$ git clone https://github.com/sashs/ropper.git
$ cd ropper
$ git submodule init
$ git submodule update
$ ./Ropper.py

QUESTA FUNZIONALITÀ È ANCORA IN FASE DI SVILUPPO! Ropper ha un comando di ricerca semantica, che offre la possibilità di cercare gadget.

root@kitploit:~
$ ropper --file <afile> --semantic "<any constraint>"

Le seguenti dipendenze opzionali sono necessarie per usare la ricerca semantica:

Installa pyvex

root@kitploit:~
$ sudo pip install pyvex

Installa z3py

root@kitploit:~
$ python scripts/mk_make.py
$ cd build
$ make
$ sudo make install

Vincoli attualmente possibili

root@kitploit:~
reg == reg     -  assegna un registro a un altro
reg == number  -  assegna un numero a un registro
reg == [reg]   -  assegna la memoria a un registro
reg += number/reg/[reg]
reg -= number/reg/[reg]
reg *= number/reg/[reg]
reg /= number/reg/[reg]

Esempio di vincolo

root@kitploit:~
eax==1 !ebx    - imposta eax a 1 e cerca gadget che non sovrascrivono ebx

ricerca_semantica

Utilizzo

root@kitploit:~
usage: Ropper.py [-h] [--help-examples] [-v] [--console]
             [-f <file> [<file> ...]] [-r] [-a <arch>]
             [--section <section>] [--string [<string>]] [--hex]
             [--asm [<asm> [H|S|R] ...]] [--disasm <opcode>]
             [--disassemble-address <address:length>] [-i] [-e]
             [--imagebase] [-c] [-s] [-S] [--imports] [--symbols]
             [--set <option>] [--unset <option>] [-I <imagebase>] [-p]
             [-j <reg>] [--stack-pivot] [--inst-count <n bytes>]
             [--search <regex>] [--quality <quality>] [--opcode <opcode>]
             [--instructions <instructions>] [--type <type>] [--detailed]
             [--all] [--cfg-only] [--chain <generator>] [-b <badbytes>]
             [--nocolor] [--clear-cache] [--no-load] [--analyse <quality>]
             [--semantic constraint]
             [--count-of-findings <count of gadgets>] [--single]

Puoi usare ropper per visualizzare informazioni su file binari in diversi formati
    e puoi cercare gadget per costruire catene ROP per diverse architetture

formati di file supportati:
  ELF
  PE
  Mach-O
  Raw

architetture supportate:
  x86 [x86]
  x86_64 [x86_64]
  MIPS [MIPS, MIPS64]
  ARM/Thumb [ARM, ARMTHUMB]
  ARM64 [ARM64]
  PowerPC [PPC, PPC64]
  SPARC [SPARC64]

generatori di catene ROP disponibili:
  execve (execve[=<cmd>], predefinito /bin/sh) [Linux x86, x86_64]
  mprotect  (mprotect=<indirizzo>:<dimensione>) [Linux x86, x86_64]
  virtualprotect (virtualprotect=<indirizzo iat vp>:<dimensione>) [Windows x86]

opzioni:
  -h, --help            mostra questo messaggio di aiuto ed esci
  --help-examples       Mostra esempi
  -v, --version         Mostra la versione
  --console             Avvia la riga di comando interattiva
  -f <file> [<file> ...], --file <file> [<file> ...]
                        Il file da caricare
  -r, --raw             Carica il file come file raw
  -a <arch>, --arch <arch>
                        L'architettura del file caricato
  --section <section>   I dati di questa sezione devono essere stampati
  --string [<string>]   Cerca la stringa <stringa> in tutte le sezioni dati
  --hex                 Stampa le sezioni selezionate in formato esadecimale
  --asm [<asm> [H|S|R] ...]
                        Una stringa da assemblare e un formato dell'output
                        (H=HEX, S=STRING, R=RAW, predefinito: H)
  --disasm <opcode>     Opcode da disassemblare (es. ffe4, 89c8c3, ...)
  --disassemble-address <address:length>
                        Disassembla l'istruzione all'indirizzo <indirizzo>
                        (0x12345678:L3). È possibile specificare il numero di
                        istruzioni da disassemblare (0x....:L...)
  -i, --info            Mostra l'intestazione del file [ELF/PE/Mach-O]
  -e                    Mostra l'EntryPoint
  --imagebase           Mostra ImageBase [ELF/PE/Mach-O]
  -c, --dllcharacteristics
                        Mostra DllCharacteristics [PE]
  -s, --sections        Mostra le sezioni del file [ELF/PE/Mach-O]
  -S, --segments        Mostra i segmenti del file [ELF/Mach-O]
  --imports             Mostra le importazioni [ELF/PE]
  --symbols             Mostra i simboli [ELF]
  --set <opzione>       Imposta le opzioni. Opzioni disponibili: aslr nx
  --unset <opzione>     Rimuove le opzioni. Opzioni disponibili: aslr nx
  -I <imagebase>        Usa questo imagebase per i gadget
  -p, --ppr             Cerca istruzioni 'pop reg; pop reg; ret'
                        [solo x86/x86_64]
  -j <reg>, --jmp <reg>
                        Cerca istruzioni 'jmp reg' (-j reg[,reg...])
                        [solo x86/x86_64]
  --stack-pivot         Stampa tutti i gadget stack pivot
  --inst-count <n bytes>
                        Specifica il numero massimo di istruzioni in un gadget
                        (predefinito: 6)
  --search <regex>      Cerca gadget
  --quality <quality>   La qualità per i gadget trovati dalla ricerca (1 =
                        migliore)
  --opcode <opcode>     Cerca opcode (es. ffe4 o ffe? o ff??)
  --instructions <instructions>
                        Cerca istruzioni (es. "jmp esp", "pop eax;
                        ret")
  --type <type>         Imposta il tipo di gadget [rop, jop, sys, all]
                        (predefinito: all)
  --detailed            Stampa i gadget in modo più dettagliato
  --all                 Non rimuove i gadget duplicati
  --cfg-only            Filtra i gadget che non superano il controllo CFG di
                        Microsoft. Solo per file PE compilati con il controllo
                        CFG abilitato (controlla DllCharachteristics) [PE]
  --chain <generator>   Genera una catena ROP [generatore parametro=valore[
                        parametro=valore]]
  -b <badbytes>, --badbytes <badbytes>
                        Imposta i byte che non devono essere contenuti nei gadget
  --nocolor             Disabilita l'output colorato
  --clear-cache         Pulisce la cache
  --no-load             Non caricare automaticamente i gadget all'avvio della
                        console (--console)
  --analyse <quality>   usato solo per l'implementazione della ricerca semantica
  --semantic constraint
                        ricerca semantica per gadget
  --count-of-findings <count of gadgets>
                        Numero massimo di gadget che verranno stampati con la
                        ricerca semantica (0 = indefinito, predefinito: 5)
  --single              Non vengono utilizzati più processi per la scansione dei gadget

esempi di utilizzo:
  [Generale]
  ./Ropper.py
  ./Ropper.py --file /bin/ls --console

  [Informazioni]
  ./Ropper.py --file /bin/ls --info
  ./Ropper.py --file /bin/ls --imports
  ./Ropper.py --file /bin/ls --sections
  ./Ropper.py --file /bin/ls --segments
  ./Ropper.py --file /bin/ls --set nx
  ./Ropper.py --file /bin/ls --unset nx
  ./Ropper.py --file /bin/ls --inst-count 5
  ./Ropper.py --file /bin/ls --search "sub eax" --badbytes 000a0d
  ./Ropper.py --file /bin/ls --search "sub eax" --detail
  ./Ropper.py --file /bin/ls --filter "sub eax"
  ./Ropper.py --file /bin/ls --inst-count 5 --filter "sub eax"
  ./Ropper.py --file /bin/ls --opcode ffe4
  ./Ropper.py --file /bin/ls --opcode ffe?
  ./Ropper.py --file /bin/ls --opcode ??e4
  ./Ropper.py --file /bin/ls --detailed
  ./Ropper.py --file /bin/ls --ppr --nocolor
  ./Ropper.py --file /bin/ls --jmp esp,eax
  ./Ropper.py --file /bin/ls --type jop
  ./Ropper.py --file /bin/ls --chain execve
  ./Ropper.py --file /bin/ls --chain "execve cmd=/bin/sh" --badbytes 000a0d
  ./Ropper.py --file /bin/ls --chain "mprotect address=0xbfdff000 size=0x21000"
  ./Ropper.py --file /bin/ls /lib/libc.so.6 --console

  [Assembla/Disassembla]
  ./Ropper.py --asm "jmp esp"
  ./Ropper.py --asm "mov eax, ecx; ret"
  ./Ropper.py --disasm ffe4

  [Ricerca]
  ./Ropper.py --file /bin/ls --search <stringadicerca>
  ?     qualsiasi carattere
  %     qualsiasi stringa

  Esempio:

  ./Ropper.py --file /bin/ls --search "mov e?x"
  0x000067f1: mov edx, dword ptr [ebp + 0x14]; mov dword ptr [esp], edx; call eax
  0x00006d03: mov eax, esi; pop ebx; pop esi; pop edi; pop ebp; ret ;
  0x00006d6f: mov ebx, esi; mov esi, dword ptr [esp + 0x18]; add esp, 0x1c; ret ;
  0x000076f8: mov eax, dword ptr [eax]; mov byte ptr [eax + edx], 0; add esp, 0x18; pop ebx; ret ;

  ./Ropper.py --file /bin/ls --search "mov [%], edx"
  0x000067ed: mov dword ptr [esp + 4], edx; mov edx, dword ptr [ebp + 0x14]; mov dword ptr [esp], edx; call eax;
  0x00006f4e: mov dword ptr [ecx + 0x14], edx; add esp, 0x2c; pop ebx; pop esi; pop edi; pop ebp; ret ;
  0x000084b8: mov dword ptr [eax], edx; ret ;
  0x00008d9b: mov dword ptr [eax], edx; add esp, 0x18; pop ebx; ret ;

  ./Ropper.py --file /bin/ls --search "mov [%], edx" --quality 1
  0x000084b8: mov dword ptr [eax], edx; ret ;; ret ;

Usare Ropper negli script

root@kitploit:~
#!/usr/bin/env python
from ropper import RopperService

# non tutte le opzioni devono essere fornite
options = {'color' : False,     # se i gadget vengono stampati, usa output colorato: default: False
            'badbytes': '00',   # byte da evitare che non devono essere presenti negli indirizzi o nelle catene ROP; default: ''
            'all' : False,      # Mostra tutti i gadget, cioè non rimuovere i gadget doppi; default: False
            'inst_count' : 6,   # Numero di istruzioni in un gadget; default: 6
            'type' : 'all',     # rop, jop, sys, all; default: all
            'detailed' : False} # se i gadget vengono stampati, usa output dettagliato; default: False

rs = RopperService(options)

##### cambia opzioni ######
rs.options.color = True
rs.options.badbytes = '00'
rs.options.badbytes = ''
rs.options.all = True


##### apri binari ######
# è possibile aprire più file
rs.addFile('test-binaries/ls-x86')
rs.addFile('ls', bytes=open('test-binaries/ls-x86','rb').read()) # altra possibilità
rs.addFile('ls_raw', bytes=open('test-binaries/ls-x86','rb').read(), raw=True, arch='x86')

##### chiudi binari ######
rs.removeFile('ls')
rs.removeFile('ls_raw')


# Imposta architettura di un binario, così è possibile cercare gadget per un'architettura diversa
# Utile per ARM se si vogliono cercare gadget ARM o Thumb
# O se hai aperto un file raw
ls = 'test-binaries/ls-x86'
rs.setArchitectureFor(name=ls, arch='x86')
rs.setArchitectureFor(name=ls, arch='x86_64')
rs.setArchitectureFor(name=ls, arch='ARM')
rs.setArchitectureFor(name=ls, arch='ARMTHUMB')
rs.setArchitectureFor(name=ls, arch='ARM64')
rs.setArchitectureFor(name=ls, arch='MIPS')
rs.setArchitectureFor(name=ls, arch='MIPS64')
rs.setArchitectureFor(name=ls, arch='PPC')
rs.setArchitectureFor(name=ls, arch='PPC64')
rs.setArchitectureFor(name=ls, arch='SPARC64')
rs.setArchitectureFor(name=ls, arch='x86')


##### carica gadget ######

# carica gadget per tutti i file aperti
rs.loadGadgetsFor() 

# carica gadget per un solo file aperto
ls = 'test-binaries/ls-x86'
rs.loadGadgetsFor(name=ls)

# cambia tipo di gadget
rs.options.type = 'jop'
rs.loadGadgetsFor() 

rs.options.type = 'rop'
rs.loadGadgetsFor() 

# cambia conteggio istruzioni
rs.options.inst_count = 10
rs.loadGadgetsFor() 

##### stampa gadget #######
rs.printGadgetsFor() # stampa tutti i gadget
rs.printGadgetsFor(name=ls)

##### Ottieni gadget ######
gadgets = rs.getFileFor(name=ls).gadgets


##### cerca pop pop ret ######
pprs = rs.searchPopPopRet(name=ls) # cerca ppr solo in 'test-binaries/ls-x86'
pprs = rs.searchPopPopRet()        # cerca ppr in tutti i file aperti
for file, ppr in pprs.items():
    for p in ppr:
        print p

##### carica jmp reg ######
jmp_regs = rs.searchJmpReg(name=ls, regs=['esp', 'eax']) # cerca jmp reg solo in 'test-binaries/ls-x86'
jmp_regs = rs.searchJmpReg(regs=['esp', 'eax'])
jmp_regs = rs.searchJmpReg()                             # cerca jmp esp in tutti i file aperti
for file, jmp_reg in jmp_regs.items():
    for j in jmp_reg:
        print j


##### cerca opcode ######
ls = 'test-binaries/ls-x86'
gadgets_dict = rs.searchOpcode(opcode='ffe4', name=ls)
gadgets_dict = rs.searchOpcode(opcode='ffe?')
gadgets_dict = rs.searchOpcode(opcode='??e4')

for file, gadgets in gadgets_dict.items():
    for g in gadgets:
        print g

##### cerca istruzioni ######
ls = 'test-binaries/ls-x86'
for file, gadget in rs.search(search='mov e?x', name=ls):
    print file, gadget

for file, gadget in rs.search(search='mov [e?x%]'):
    print file, gadget    

result_dict = rs.searchdict(search='mov eax')
for file, gadgets in result_dict.items():
    print file
    for gadget in gadgets:
        print gadget

##### assembla istruzioni ######
hex_string = rs.asm('jmp esp')
print '"jmp esp" assemblate nella stringa esadecimale =', hex_string
raw_bytes = rs.asm('jmp esp', format='raw')
print '"jmp esp" assemblate in byte raw =', raw_bytes
string = rs.asm('jmp esp', format='string')
print '"jmp esp" assemblate in stringa =',string
arm_bytes = rs.asm('bx sp', arch='ARM')
print '"bx sp" assemblate nella stringa esadecimale =', arm_bytes

##### disassembla byte #######
arm_instructions = rs.disasm(arm_bytes, arch='ARM')
print arm_bytes, 'disassemblati in "%s"' % arm_instructions

# Cambia l'imagebase, questo cambia anche l'imagebase per tutti i gadget caricati di questo binario
rs.setImageBaseFor(name=ls, imagebase=0x0)

# ripristina image base
rs.setImageBaseFor(name=ls, imagebase=None)

gadgets = rs.getFileFor(name=ls).gadgets

# indirizzo del gadget
print hex(gadgets[0].address)

# ottieni i byte dell'istruzione del gadget
print bytes(gadgets[0].bytes).encode('hex')

# rimuovi tutti i gadget che contengono byte non validi nell'indirizzo
rs.options.badbytes = '000a0d'  # i gadget vengono filtrati automaticamente

Pagina del progetto

http://scoding.de/ropper

Screenshot

caricamento

x86

arm

mips

ppc

catena_rop

intestazione

Scarica lo strumento