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
redexer — Il framework di strumentazione binaria Redexer per il bytecode Dalvik | Kitploit
Strumenti/GitHubGitHub/plum-umd/redexer
Sicurezza AndroidAnalisi StaticaAnalisi Dinamica (Sandboxing)Reverse EngineeringAnalisi di BinariPaper e RicercaApprendimento e Formazione
GitHubplum-umd/redexer

redexer

Il framework di strumentazione binaria Redexer per il bytecode Dalvik

Vedi Repository
174315 anni 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

Build Status

redexer

Redexer è uno strumento di reingegnerizzazione che manipola i binari delle app Android. Questo strumento è in grado di analizzare un file DEX in una struttura dati in memoria; di dedurre con quali parametri l'app utilizza determinati permessi (chiamiamo questa funzionalità RefineDroid); di modificare e de-analizzare quella struttura dati per produrre un file DEX in output (chiamiamo queste funzionalità Dr. Android, che sta per Dalvik Rewriting for Android).

Pubblicazioni

  • Dr. Android and Mr. Hide: Fine-grained Permissions in Android Applications. Jinseong Jeon, Kristopher K. Micinski, Jeffrey A. Vaughan, Ari Fogel, Nikhilesh Reddy, Jeffrey S. Foster e Todd Millstein. In ACM CCS Workshop on Security and Privacy in Smartphones and Mobile Devices (SPSM '12), Ottobre 2012.

Requisiti

  • OCaml e Ruby

Questo strumento è testato con OCaml 4.09.0 e Ruby 1.8.6(7), quindi è necessario installarli (o versioni successive).

  • Gestore di pacchetti/lib librerie OCaml e libreria SHA

Per manipolare una firma SHA-1 (hash) nel formato DEX, utilizziamo la libreria OCaml SHA tramite ocamlfind/findlib, un gestore di librerie OCaml. Il modo più semplice per installare entrambi è usare OPAM, un gestore di pacchetti OCaml, che ha entrambi i pacchetti: OPAM ocamlfind e OPAM sha.

Puoi anche compilare e/o installare entrambi i pacchetti direttamente. Se utilizzi una macchina Linux, puoi facilmente trovare le distribuzioni.

In caso contrario, ad esempio su Mac, devi compilarli da solo. Puoi trovare i codici sorgente originali qui. Compilali eseguendo make, e collega la directory risultante nella directory root site-lib di ocamlfind; oppure sudo make install.

Se usi un PC, devi installare prima ocamlfind/findlib e FlexDLL. Assicurati che le variabili d'ambiente siano impostate correttamente come segue:

root@kitploit:~
OCAMLLIB=C:\OCaml\lib
CAML_LD_LIBRARY_PATH=%OCAMLLIB%\stublibs
FLEXLINKFLAGS=-L%MinGW%\lib -L%MinGW%\lib\gcc\mingw32\N.N.N
  • Pacchetti OPAM:

    • sha
    • str
    • ppx_deriving
    • ppx_deriving_yojson
    • yojson
  • Android SDK (o sorgenti)

Per decomprimere e ricomprimere i file apk, utilizziamo apktool, uno strumento open source di reingegnerizzazione degli APK. Poiché utilizza aapt, Android Asset Packaging Tool, è necessario installare Android SDK o i sorgenti. Inoltre, utilizziamo zipalign, che proviene anch'esso da Android SDK, per ottimizzare le app riscritte.

Puoi impostare i percorsi degli strumenti base di Android aggiungendo quanto segue al tuo profilo:

root@kitploit:~
ANDROID_HOME=$HOME/android-sdk    # il tuo percorso personale qui!
export ANDROID_HOME

PATH=$PATH:$ANDROID_HOME/tools
PATH=$PATH:$ANDROID_HOME/platform-tools
PATH=$PATH:$ANDROID_HOME/build-tools/19.0.0    # numero di versione installato
export PATH
  • RubyGems e Nokogiri

Gli script principali sono scritti in Ruby e richiedono RubyGems, un gestore di pacchetti Ruby, e Nokogiri, una libreria XML per manipolare i file manifest.

  • (opzionale) graphviz dot

Se vuoi visualizzare grafici (es. grafico delle chiamate, grafico del flusso di controllo, albero dei dominatori, ecc.), devi installare graphviz dot.

Build

Per compilare redexer, basta make! Puoi vedere il binario redexer al livello superiore.

root@kitploit:~
$ make (clean)

Prima di usare lo strumento, l'installazione del file della piattaforma più recente per apktool è a carico dell'utente. Ad esempio, è necessario eseguire

root@kitploit:~
$ java -jar tools/apktool.jar if [file piattaforma appropriato]

Puoi anche generare documenti API in formato html.

root@kitploit:~
$ make api

Utilizzo

  • help

Puoi vedere tutte le opzioni fornite dallo strumento:

root@kitploit:~
$ ruby scripts/cmd.rb -h
$ ruby scripts/cmd.rb --help
  • unparse

Come dexdump in Android SDK, redexer ti permette di visualizzare i dettagli interni del file dex fornito in formato YAML.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd unparse [--to blah.yml]
  • dump method

Questa opzione scarica le istruzioni per un metodo specificato.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dump_method --mtd cls.mtd
  • identity

Questa funzionalità serve per testare i moduli di parsing e dumping di redexer. Probabilmente genera un file dex identico.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd id [--to blah.dex]
  • info

Puoi anche vedere statistiche di base sul file dex, ad esempio # instr.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd info
  • classes

Questa opzione stampa tutti i nomi delle classi definiti nel file dex.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes

Può essere utile per cercare librerie di terze parti specifiche, ad esempio:

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd classes | egrep 'apache'
  • api

Questa opzione stampa l'utilizzo delle API nel file dex.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api [--sdk android.]
$ ruby scripts/cmd.rb target.(apk|dex) --cmd api --sdk com.facebook.
  • statistiche opcode

Non sei curioso di sapere quanto raramente alcuni opcode vengono usati nei bytecode Dalvik? Mostrerà l'istogramma di tutti gli opcode, oppure puoi cercare quanto spesso l'opcode esatto viene utilizzato nell'app data.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd opstat [--op opcode1,opcode2,...]

Ad esempio:

root@kitploit:~
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat
$ ruby scripts/cmd.rb ~/apps/top24/com.whatsapp.apk --cmd opstat --op div-int/lit16,nop
  • Analisi della risoluzione degli Intent

Questa opzione esegue un'analisi di risoluzione degli Intent basata sulla propagazione, e stampa le transizioni tra le classi Activity.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd intent
  • grafico delle chiamate

Questa opzione genera un file pdf che rappresenta un grafico delle chiamate del file dato. Se non specifichi il nome del pdf, verrà usato cg.pdf.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cg [--to blah.pdf] [--no-pdf]
  • grafico del flusso di controllo

Questa opzione genera un file pdf che mostra un grafico del flusso di controllo del metodo specificato. Aggiungi un nome di metodo a un nome di classe con un punto: nome_classe.nome_metodo

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd cfg --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • (post) albero dei dominatori

Questa opzione è simile alla precedente, tranne che rappresenta l'albero dei dominatori (post).

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd (p)dom --mtd cls.mtd [--to blah.pdf] [--no-pdf]
  • analisi di vivacità

Questa opzione esegue una classica analisi del flusso dei dati all'indietro.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd live --mtd cls.mtd
  • analisi di propagazione delle costanti

Questa opzione esegue una classica analisi del flusso dei dati in avanti.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd const --mtd cls.mtd
  • analisi delle definizioni raggiungenti

Questa opzione esegue una classica analisi del flusso dei dati in avanti.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd reach --mtd cls.mtd
  • dipendenti

Questa opzione trova la dipendenza tra classi.

root@kitploit:~
$ ruby scripts/cmd.rb target.(apk|dex) --cmd dependants --mtd cls.mtd
  • activity di avvio

Questa opzione stampa il nome dell'activity di avvio dell'apk dato.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd launcher
  • esportati

Questa opzione ti fa sapere quali componenti sono esposti all'esterno.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd exported
  • activity, service, provider, receiver

Queste opzioni stampano i componenti Android di base dichiarati nel manifest.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd [activity | service | provider | receiver]
  • custom_views

Questa opzione esplora le definizioni di layout nelle risorse e stampa le viste personalizzate.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd custom_views
  • fragments

Questa opzione esplora le definizioni di layout nelle risorse e stampa gli elementi Fragment.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd fragments
  • buttons

Questa opzione esplora le definizioni di layout nelle risorse e stampa i pulsanti, insieme al loro id (o testo) e al metodo di callback (se presente).

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd buttons
  • permessi dichiarati nel manifest dell'app

Questa opzione stampa i permessi che l'apk utilizza.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd permissions
  • versione SDK target

Questa opzione stampa quale versione SDK richiede l'apk.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd sdk

Se non vuoi decomprimere il file apk, in realtà puoi fare lo stesso con una combinazione di comandi:

root@kitploit:~
$ aapt dump badging target.apk | grep 'targetSdkVersion' | tr -dc 0-9.\\n
  • Ciao, DEX

Questa opzione genera un file dex che stampa un semplice messaggio. Questo file dex è realizzato solo usando le API di redexer.

root@kitploit:~
$ ruby scripts/cmd.rb --cmd hello

Controlla il suo interno.

root@kitploit:~
$ dexdump -d results/classes.dex

Se sei interessato, puoi testare quel file dex come segue. Presupponendo che il percorso verso ANDROID_SDK sia impostato.

root@kitploit:~
// crea un jar temporaneo adatto per la VM dalvik
$ aapt add temp.jar results/classes.dex

// (opzionale) se non hai creato un avd, crealo.
$ android create avd -n myAVD1 -t android-8

// avvia il tuo emulatore
$ emulator -avd myAVD1 &

// carica il jar temporaneo
$ adb push temp.jar /data

// connettiti alla shell adb
$ adb shell

// finalmente, esegui il dex
# /system/bin/dalvikvm -Xbootclasspath:/system/framework/core.jar \
 -classpath /data/temp.jar Hello
Hello, DEX
#
  • logging

Questa è una variante della funzionalità di riscrittura. Usando questa funzionalità, puoi registrare il comportamento dell'app da punti di vista specifici. Il file dex precompilato per la libreria di logging è fornito: data/logging.dex. Se vuoi aggiungere più funzionalità o utilità, compilalo come segue:

root@kitploit:~
$ cd logging
$ gradle copyDex
$ cd ..

Quindi, usa il seguente comando:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging

trim.py può catturare le sequenze di chiamata-ritorno dell'app strumentata. (Devi prima strumentare l'app in test usando redexer.)

Se questi log sono abbastanza brevi, cioè il telefono (o emulatore) può contenere tutte le informazioni in memoria, puoi usare la modalità offline dello script:

root@kitploit:~
$ ./scripts/trim.py -d

Nota che tutti i parametri della riga di comando saranno passati a adb logcat, e per impostazione predefinita, org.umd.logging:I *:S viene passato per filtrare i log irrilevanti.

Se i log traboccano, dovresti usare la modalità online:

root@kitploit:~
$ ./scripts/trim.py

Lo script intercetta l'interruzione da tastiera, quindi puoi terminare il logging con Ctrl+C.

In entrambe le modalità, i log vengono salvati in log.txt e mostrati a schermo contemporaneamente. Pertanto, dopo aver raccolto i log, potrebbe essere necessario spostare quel file, ad esempio:

root@kitploit:~
$ mv log.txt app.scenario.txt
  • logging delle interazioni utente

La funzionalità di logging sopra è generica in quanto puoi specificare cosa registrare a livello di metodo. (Vedi il modulo logging per maggiori dettagli.) Tuttavia, a volte è troppo verbosa e può causare un degrado delle prestazioni. Questa funzionalità è progettata per registrare solo le interazioni utente. Usando questa funzionalità, puoi catturare solo gli eventi relativi all'interfaccia utente. Allo stesso modo, il file dex precompilato per la libreria di logging è fornito: data/logging-ui.dex. Se vuoi modificare la verbosità delle informazioni dell'interfaccia utente, compilalo come segue:

root@kitploit:~
$ cd logging-ui
$ gradle copyDex
$ cd ..

Quindi, usa il seguente comando:

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd logging_ui

La libreria di logging è ereditata dal servizio android a11y, che richiede il consenso esplicito dell'utente. Pertanto, dopo aver installato l'apk riscritto, vai su Impostazioni/Accessibilità e attiva il servizio UI Logging. (Questo passaggio può essere visto come simile all'attivazione della modalità di debug del dispositivo.) In logcat, i messaggi con tag org.umd.logging_ui.* sono interazioni tra l'utente e l'app in test.

  • esplorazione diretta

Questa opzione trova i percorsi di transizione dei componenti verso le chiamate ai metodi target.

root@kitploit:~
$ ruby scripts/cmd.rb target.apk --cmd directed

Puoi specificare i metodi target da invocare in data/directed.txt

Questi percorsi di transizione dei componenti vengono utilizzati per guidare le app al fine di testare le vulnerabilità di sicurezza nelle librerie di terze parti. Maggiori dettagli sono descritti nel seguente articolo:

root@kitploit:~
* Brahmastra: Driving Apps to Test the Security of Third-Party Components.
R. Bhoraskar, et al., In 23rd Usenix Security Symposium (Security '14).

withTimeout.rb può costruire automaticamente un file di salto per un'app. Questo script esegue cmd.rb con un timeout specifico, usato per limitare il tempo speso nell'instrumentazione di una singola classe. Questa è una soluzione temporanea per la classe occasionale che si blocca in un ciclo durante l'instrumentazione. Quando questo script trova una classe che si blocca, la aggiunge al file di salto e continua da dove si era interrotto. Una volta che withTimeout è terminato, ci sarà un file chiamato [nome apk]-skip.txt nella directory data, che può essere usato per costruire un'app completamente instrumentata per quell'apk. Per usare withTimeout, basta chiamare

root@kitploit:~
$ ruby scripts/withTimeout.rb TIMEOUT COMANDI

Dove TIMEOUT è la durata del timeout desiderato in secondi (300 è consigliato) e COMANDI sono tutti i normali input della riga di comando che passeresti a scripts/cmd.rb per l'apk.

Scarica lo strumento