
Un deofuscatore Dalvik basato su pattern che utilizza l'esecuzione limitata per migliorare l'analisi semantica.
Un deoffuscatore Dalvik basato su pattern che utilizza l'esecuzione limitata per migliorare l'analisi semantica. Inoltre, l'ispirazione per un altro deoffuscatore Android: Simplify.
Prima

Dopo

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
Dato che sei un elite reverser Android, sono sicuro che tu abbia già Smali e Baksmali nel tuo PATH. Se per qualche strana ragione non sono ancora installati, questo dovrebbe aiutarti a iniziare, ma per favore esaminalo attentamente prima di eseguire:
mkdir ~/bin || cd ~/bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali-*.jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali-*.jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH=$PATH:$PWD
Assicurati che adb sia nel tuo PATH.
gem install dex-oracle
Oppure, se preferisci compilare dal sorgente:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
Devi avere un emulatore in esecuzione o un dispositivo connesso perché Oracle funzioni. La versione minima richiesta di Android è 5.0!
Oracle ha bisogno di eseguire metodi su un sistema Android attivo. Questo può essere su un dispositivo o un emulatore (preferito). Se è un dispositivo, assicurati di non avere problemi a eseguire codice potenzialmente ostile su di esso.
Se desideri usare un emulatore e hai già installato l'Android SDK, puoi creare e avviare immagini dell'emulatore con:
android avd
Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Mostra questa schermata
-s ANDROID_SERIAL, ID del dispositivo per l'esecuzione del driver, predefinito=""
--specific-device
-t, --timeout N Timeout dell'esecuzione del comando ADB in secondi, predefinito="120"
-i, --include PATTERN Ottimizza solo metodi e classi che corrispondono al pattern, es. Ldune;->melange\(\)V
-e, --exclude PATTERN Escludi questi tipi dall'ottimizzazione; including overrides
--disable-plugins STRING[,STRING]*
Disabilita plugin, es. stringdecryptor,unreflector
--list-plugins Elenca i plugin disponibili
-v, --verbose Sii verboso
-V, --vverbose Sii molto verboso
Per esempio, per deoffuscare solo i metodi in una classe chiamata Lcom/android/system/admin/CCOIoll; all'interno di un APK chiamato obad.apk:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
Oracle accetta app Android (APK), eseguibili Dalvik (DEX) e file Smali come input. Prima, se l'input è un APK o DEX, viene disassemblato in file Smali. Poi, i file Smali vengono passati a vari plugin che eseguono analisi e modifiche. I plugin cercano pattern che possono essere trasformati in qualcosa di più facile da leggere. Per capire cosa sta facendo il codice, alcuni metodi Dalvik vengono effettivamente eseguiti e l'output viene raccolto. In questo modo, alcune chiamate a metodi possono essere sostituite con costanti. Dopo di ciò, tutti i file Smali vengono aggiornati. Infine, se l'input era un file APK o DEX, i file Smali modificati vengono ricompilati e viene creato un APK o DEX aggiornato.
L'esecuzione dei metodi è gestita dal Driver. L'APK, DEX o Smali di input viene combinato con il Driver in un singolo DEX usando dexmerge e viene inviato a un dispositivo o emulatore. I plugin possono quindi utilizzare Driver che usa la riflessione Java per eseguire metodi dal DEX di input. I valori di ritorno possono essere usati per migliorare l'analisi semantica oltre il semplice riconoscimento di pattern. Questo è particolarmente utile per molti metodi di decrittazione delle stringhe, che di solito prendono una stringa crittografata o un array di byte. Una limitazione è che l'esecuzione è limitata ai metodi statici.
Ci sono tre plugin che vengono forniti con Oracle:
Se incontri un nuovo tipo di offuscamento, potrebbe essere possibile deoffuscarlo con Oracle. Guarda lo Smali e capisci se il codice può essere:
Se si verifica uno di questi due casi, dovresti provare a scrivere il tuo plugin. Ci sono quattro passi per costruire il tuo plugin:
I plugin inclusi dovrebbero essere una buona guida per comprendere i passi #3 e #4. Driver è progettato per aiutare con il passo #2.
Naturalmente, sei sempre il benvenuto a condividere qualsiasi offuscamento in cui ti imbatti e qualcuno potrebbe eventualmente occuparsene.
Per prima cosa, assicurati che dx sia nel tuo PATH. Fa parte dell'Android SDK, ma probabilmente non è nel tuo PATH a meno che tu non sia un hardcore.
La cartella driver è un progetto Java gestito da Gradle. Importalo in Eclipse, IntelliJ, ecc. e apporta le modifiche che desideri. Per completare l'aggiornamento del driver, esegui ./update_driver. Questo ricostruirà il driver e convertirà il JAR di output in un DEX.
Se c'è un problema nell'esecuzione del codice del driver sul tuo emulatore o dispositivo, assicurati di aprire monitor (parte dell'Android SDK) e controlla eventuali indizi lì. Anche se l'errore non ha senso per te, aiuterà se lo pubblichi insieme al problema che creerai.
Non tutte le piattaforme Android funzionano bene con dex-oracle. Alcune di esse si bloccano quando si tenta di eseguire file DEX arbitrari. Se hai problemi con segfault o crash del driver, prova a usare Android 4.4.2 API level 19 con ARM.
È possibile che un plugin veda un pattern che pensa sia offuscamento ma in realtà è codice che non dovrebbe eseguire. Questo sembra improbabile perché i pattern di offuscamento sono davvero insoliti, ma è possibile. Se scopri che un particolare plugin sta causando problemi e sei sicuro che l'app non sia protetta da quel particolare offuscatore, ad esempio l'app non è DexGuarded ma il plugin DexGuard sta cercando di eseguire cose, disabilitalo semplicemente.