
[Ufficiale] Strumento di reverse engineering Android focalizzato sull'automazione dell'instrumentazione dinamica sfruttando Frida. Disassembla dex, lo analizza staticamente, genera hook, scopre metodi riflessi, memorizza i dati intercettati e ne ricava nuove informazioni. Il suo obiettivo è essere una piattaforma tutto-in-uno per il reverse engineering Android.

Dexcalibur è una piattaforma di reverse engineering Android focalizzata sull'automazione dell'instrumentazione. La sua particolarità è l'uso dell'analisi dinamica per migliorare le euristiche di analisi statica. Mira ad automatizzare compiti noiosi legati all'instrumentazione dinamica, come:
Ma non solo, perché Dexcalibur ha un proprio motore di analisi statica ed è in grado di eseguire porzioni parziali di smali.
Vuoi condividere qualcosa o hai bisogno di aiuto? Unisciti alle nostre chat ufficiali:
Telegram - il modo più rapido per ricevere una risposta
La documentazione ufficiale è disponibile qui (sito in lavorazione).
Vedi le ultime notizie qui: http://docs.dexcalibur.org/News.html
Guarda i video dimostrativi di Dexcalibur: Demo: Meno di 1 minuto per hookare 61 metodi? Nessun problema. (youtube)
Contribuisci!
Non esitare! Ci sono diversi modi per contribuire:
Vai alla documentazione di installazione
Alternativa: usa Docker
adb (e un emulatore Android se appropriato)docker-compose build android-dexcaliburdocker run --rm -it --net=host -v /tmp/dexcalibur:/shared -p 8000:8000 dexcalibur:2023.01 /bin/bashPer Linux e MacOS
Installazione NPM: Se Dexcalibur è stato installato globalmente usando NPM (opzione -g), allora Dexcalibur può essere avviato dal terminale eseguendo $ dexcalibur, altrimenti può essere avviato con $ node $(node root -g dexcalibur)/dexcalibur/dexcalibur.js.
Installazione da sorgente: dalla cartella dexcalibur, esegui $ dexcalibur o $ node dexcalibur.js.
Per Windows
Installazione NPM: Anche se Dexcalibur è installato globalmente usando NPM (opzione -g), Dexcalibur deve essere avviato dal terminale eseguendo il seguente comando da un terminale node <NPM_ROOT>/dexcalibur/dexcalibur.js.
Installazione da sorgente: dalla cartella dexcalibur, nel terminale, esegui il comando node dexcalibur.js.
Stai usando una versione precedente di Dexcalibur?
Segui gli stessi passaggi di una nuova installazione e, quando ti viene chiesto il percorso del workspace, inserisci la posizione del tuo workspace attuale.
Semplicemente eseguendo:
$ npm install -g dexcalibur
La configurazione e il workspace esistenti verranno rilevati automaticamente.
Le seguenti schermate illustrano l'aggiornamento automatico degli xref in runtime.


Attualmente, la limitazione più grande è che Dexcalibur non è in grado di generare codice sorgente di hook che targettano funzioni native (in librerie JNI). Tuttavia, puoi dichiarare manualmente un Interceptor di Frida modificando un hook.
Considerando che Dexcalibur non fornisce (per il momento) funzionalità per analizzare la parte nativa come librerie JNI o JNA, sono state dettagliate solo le funzionalità e limitazioni relative alla parte Java.
L'accuratezza dell'analisi dipende dalla completezza dell'immagine dell'API Android utilizzata durante le prime fasi dell'analisi. Ciò significa che, se utilizzi un file DEX generato dal file Android.jar di Android SDK, alcuni riferimenti a metodi, campi o classi interne dell'API Java Android potrebbero mancare. Risultati migliori si ottengono quando l'analisi parte da un file "boot.oat" estratto direttamente da un dispositivo reale che esegue la versione Android prevista.
TODO: scrivi testo
TODO: scrivi testo
Comportamenti tracciati
L'analizzatore statico coinvolto nell'azione "Run smali (VM)" è in grado di scoprire e accettare, ma traccia i seguenti comportamenti:
Attualmente, gestori/listener per tali istruzioni non valide non sono supportati, ma gli eventi vengono tracciati e visualizzati.
IR di Dexcalibur
La VM produce una rappresentazione intermedia (IR) personalizzata e semplificata che viene visualizzata solo per aiutare l'analista a svolgere la propria analisi.
A seconda del valore della profondità dello stack di chiamate e della configurazione, l'IR può includere o meno le istruzioni eseguite nella funzione chiamata. Se l'esecuzione entra in un blocco try e prosegue fino al return, ma non esegue mai il catch, allora il blocco catch non verrà visualizzato. In effetti, lo scopo dell'IR di Dexcalibur è visualizzare solo "ciò che viene eseguito" o "ciò che potrebbe essere eseguito a seconda del valore di qualche simbolo" nel contesto della VM.
L'IR di Dexcalibur aiuta a leggere una versione ripulita del bytecode rimuovendo goto inutili e predicati opachi. L'IR di Dexcalibur può essere generato dalla VM con 2 livelli di semplificazione:
IR di primo livello, potrebbe essere usato se non ti fidi dell'IR di secondo livello: