Smali - Decompiling/[Modifying]/Compiling
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
Modo Veloce
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
Decompilare l'APK
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).
Cambiare il codice smali
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.
Ricompilare l'APK
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
Firma il nuovo APK
Poi, devi generare una chiave (ti verrà chiesta una password e alcune informazioni che puoi compilare casualmente):
Finalmente, firma il nuovo APK:
Ottimizza una nuova applicazione
zipalign è uno strumento di allineamento degli archivi che fornisce importanti ottimizzazioni ai file delle applicazioni Android (APK). Maggiori informazioni qui.
Firma il nuovo APK (di nuovo?)
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).
Modifying Smali
Per il seguente codice Java Hello World:
Il codice Smali sarebbe:
Il set di istruzioni Smali è disponibile qui.
Modifiche leggere
Modificare i valori iniziali di una variabile all'interno di una funzione
Alcune variabili sono definite all'inizio della funzione utilizzando l'opcode const, puoi modificare i loro valori, oppure puoi definirne di nuovi:
Operazioni di base
Cambiamenti Maggiori
Registrazione
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.
Toasting
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.
Last updated