Smali - Decompiling/[Modifying]/Compiling
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
A volte è interessante modificare il codice dell'applicazione per accedere a informazioni nascoste per te (forse password o flag ben offuscate). Quindi, potrebbe essere interessante decompilare l'apk, modificare il codice e ricompilarlo.
Riferimento Opcode: http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Utilizzando Visual Studio Code e l'estensione APKLab, puoi decompilare automaticamente, modificare, ricompilare, firmare e installare l'applicazione senza eseguire alcun comando.
Un altro script che facilita molto questo compito è https://github.com/ax/apk.sh
Utilizzando APKTool puoi accedere al codice smali e alle risorse:
Se apktool ti dà qualche errore, prova a installare la versione più recente
Alcuni file interessanti da esaminare sono:
res/values/strings.xml (e tutti gli xml all'interno di res/values/*)
AndroidManifest.xml
Qualsiasi file con estensione .sqlite o .db
Se apktool
ha problemi a decodificare l'applicazione, dai un'occhiata a https://ibotpeaches.github.io/Apktool/documentation/#framework-files o prova a usare l'argomento -r
(Non decodificare le risorse). Poi, se il problema era in una risorsa e non nel codice sorgente, non avrai il problema (non decompilando nemmeno le risorse).
Puoi cambiare istruzioni, cambiare il valore di alcune variabili o aggiungere nuove istruzioni. Io cambio il codice Smali usando VS Code, poi installi l'estensione smalise e l'editor ti dirà se qualche istruzione è errata. Alcuni esempi possono essere trovati qui:
Oppure puoi controllare qui sotto alcuni cambiamenti Smali spiegati.
Dopo aver modificato il codice, puoi ricompilare il codice usando:
Compilerà il nuovo APK all'interno della cartella dist.
Se apktool genera un errore, prova a installare la versione più recente
Poi, devi generare una chiave (ti verrà chiesta una password e alcune informazioni che puoi compilare casualmente):
Finalmente, firma il nuovo APK:
zipalign è uno strumento di allineamento degli archivi che fornisce importanti ottimizzazioni ai file delle applicazioni Android (APK). Maggiori informazioni qui.
Se preferisci utilizzare apksigner invece di jarsigner, dovresti firmare l'apk dopo aver applicato l'ottimizzazione con zipalign. MA FAI ATTENZIONE CHE DEVI FIRMARE L'APPLICAZIONE UNA SOLA VOLTA CON jarsigner (prima di zipalign) O CON apksigner (dopo zipalign).
Per il seguente codice Java Hello World:
Il codice Smali sarebbe:
Il set di istruzioni Smali è disponibile qui.
Alcune variabili sono definite all'inizio della funzione utilizzando l'opcode const, puoi modificare i loro valori, oppure puoi definirne di nuovi:
Raccomandazioni:
Se intendi utilizzare variabili dichiarate all'interno della funzione (dichiarate v0,v1,v2...) inserisci queste righe tra il .local <numero> e le dichiarazioni delle variabili (const v0, 0x1)
Se vuoi inserire il codice di logging nel mezzo del codice di una funzione:
Aggiungi 2 al numero di variabili dichiarate: Es: da .locals 10 a .locals 12
Le nuove variabili dovrebbero essere i numeri successivi delle variabili già dichiarate (in questo esempio dovrebbero essere v10 e v11, ricorda che inizia con v0).
Cambia il codice della funzione di logging e usa v10 e v11 invece di v5 e v1.
Ricorda di aggiungere 3 al numero di .locals all'inizio della funzione.
Questo codice è preparato per essere inserito nel mezzo di una funzione (cambia il numero delle variabili come necessario). Prenderà il valore di this.o, trasformerà in String e poi farà un toast con il suo valore.
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)