Quando si installa un’app Android dal Google Play Store, viene sempre scaricato e installato un pacchetto in formato APK. La procedura di download e installazione di app e loro successivi aggiornamenti è migliorata molto nel corso del tempo tanto che le più recenti versioni di Android addirittura compilano il codice dell’applicazione sul dispositivo al momento della sua installazione (motore “ART”, Android Runtime) anziché all’esecuzione come avveniva con Dalvik: vedere Meglio iPhone o smartphone Android top di gamma? Non si guardino le specifiche).
Decompilare APK non è quindi un termine propriamente corretto: i file APK vanno più propriamente considerati come archivi; una variante del formato .JAR utilizzato in Java per distribuire raccolte di classi.
È più corretto dire che per generare un file APK dapprima si compila l’app Android quindi viene creato un unico pacchetto compresso contenente i vari elementi accessori che la compongono.
Rispetto ad Apple iOS, che di default non permette di installare app da altre sorgenti se non dallo store della Mela, nel caso di Android è possibile caricare app anche manualmente: basta solo attivare l’opzione Sorgenti sconosciute nelle impostazioni del sistema operativo.
Decompilare APK: a che serve?
Sapere come decompilare un APK, o meglio effettuarne il reverse engineering, è molto importante perché aiuterà ad analizzare il funzionamento dell’app Android. Si potrà così esaminare, “dietro le quinte”, come funziona un’applicazione, stabilire a quali URL si connette e verificarne il comportamento.
Va detto, alcuni sviluppatori vietano espressamente queste attività, ma se si sta discompilando un’app Android per accertarne comportamenti sospetti o per finalità di studio, per finalità personali, non vediamo grossi problemi.
Discompilando un pacchetto APK, si avrà la possibilità non soltanto di estrarre file grafici e file di configurazione (come avviene aprendo ad esempio l’APK con un software di compressione come 7-Zip oppure rinominando il file .APK in .ZIP e facendovi doppio clic) ma anche di risalire al codice Java dell’app Android (si potrà accedere al contenuto dei vari file .java).
Scaricare il file APK
Per scaricare il file APK di una certa applicazione, si può usare un servizio come APKMirror oppure usare lo strumento online citato nel medesimo articolo: Scaricare app Android senza passare per Play Store.
In alternativa, se l’app fosse già installata nel dispositivo Android, basterà installare i seguenti due software (che abbiamo imparato a conoscere, ad esempio, nell’articolo Aggiornamento Android, come effettuarlo quando sembra impossibile):
– Driver ADB
– Minimal ADB and Fastboot
Dopo aver riavviato il sistema e connesso il dispositivo Android via USB, si dovrà aprire la cartella Minimal ADB and Fastboot (generalmente in C:\Program files (x86)
o in C:\Program files
) dall’interfaccia di Windows.
Tenendo premuto il tasto MAIUSC e cliccando con il tasto destro del mouse in un’area libera della cartella Minimal ADB and Fastboot, si dovrà selezionare Apri finestra di comando qui.
Digitando adb devices
si potrà verificare l’avvenuto riconoscimento del dispositivo (ne verrà mostrato il numero di serie).
L’accesso al dispositivo Android dovrà essere esplicitamente autorizzato dall’interfaccia del device (ripetere eventualmente il comando adb devices
fino alla scomparsa dell’indicazione unauthorized).
A questo punto, digitando il comando seguente si otterrà i nomi dei pacchetti installati:
Si tratta delle stesse denominazioni che si possono leggere nella barra degli indirizzi aprendo la corrispondente scheda nel Play Store (parametro id
):
Il comando seguente permetterà invece di trovare la cartella locale in cui è installata l’app Android d’interesse:
Con un’altra istruzione, si potrà estrarre il file APK dal dispositivo mobile e copiarlo sul sistema Windows:
Così facendo, il file APK dell’app Android indicata verrà automaticamente scaricato sul sistema Windows nella cartella personale dell’utente. Per aprirla, basterà premere Windows+R
, digitare %userprofile%
e premere Invio.
Come decompilare il file APK con gli strumenti online e offline
Per decompilare APK, uno degli strumenti più immediati ed efficaci è Java Decompilers.
Questo strumento consente di usare diversi decompilatori, alcuni dei quali molti aggiornati come jadx e CFR.
In alternativa, si può ricorrere all’ottimo jadx scaricabile da questa pagina.
Applicazione Java, jadx integra anche un’interfaccia grafica (GUI) ben realizzata: per avviarla, basta portarsi nella cartella bin
dal prompt dei comandi quindi eseguire jadx-gui
seguito dal nome del file .APK da decompilare.
Per proteggere la proprie app Android dalle attività di discompilazione, si possono eventualmente usare tecniche di offuscamento del codice che permettono di rinominare automaticamente classi, attributi e metodi con nomi casuali in grado di complicare lo studio approfondito del codice e l’individuazione delle porzioni più interessanti.
Una possibile soluzione è rappresentata dal software ProGuard.
ProGuard può essere attivato soltanto in modalità release dell’app Android ovvero solamente quando la build creata ad esempio con la IDE che si sta usando (i.e. Android Studio) è pronta per la distribuzione e la pubblicazione online.