martedì 9 maggio 2017

Come usare apktool per decompilare un apk

Se hai trovato un gioco o un'applicazione per android che vorresti poter replicare, magari dando una sbirciata al codice sorgente java, allora quello che vorresti poter fare è decompilare l'apk.

Diciamo che questa cosa non è sempre possibile, anche perchè alcune piattaforme o programmi, possono offuscare appositamente il codice sorgente in modo da renderlo irriconoscibile.
Tuttavia, per qualche app è possibile farlo, soprattutto se si conosce il giusto tool da utilizzare.

In questa breve guida/tutorial, ti spiegherò come decompilare e compilare un file apk, con un software gratuito e relativamente semplice da utilizzare.


Come usare apktool per decompilare e ricompilare un apk


Il software che ti andrò a presentare si chiama apktool e lo puoi scaricare da questo indirizzo:
https://bitbucket.org/iBotPeaches/apktool/downloads/

Quella che devi scaricare è l'ultima versione del programma, che avrà un nome tipo apktool_2-.2.2.jar.
Copia questo file in una cartella del tuo pc, magari dentro programmi/apktool, rinominandolo in apktool.jar.

Sempre all'interno di questa cartella, crea un file.bat chiamato apktool.bat, ed al suo interno mettici queste righe di codice:
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %*


Poi già che ci sei, aggiungi apktool tra i path delle variabili d'ambiente (se non sai come fare leggi questo post).

Ora sei pronto per usare apktool.

Quello che puoi fare adesso, è copiare in una nuova cartella il file apk del gioco/app che vuoi decompilare, in modo da avere tutto a portata di mano.

Decompilare un apk con apktool

Ti basta aprire il prompt dei comandi di dos (posizionandoti nella cartella dove hai caricato l'apk) e digitare:

apktool d nome-programma.apk

Come usare apktool per decompilare un apk

Se tutto sarà andato a buon fine, troverai una nuova cartella con il nome della tua app, dentro la cartella in cui avevi posizionato l'apk da decompilare.
Entrando in questa nuova cartella, troverai tutte le tipiche cartelle ed i file di un progetto java:
  • assets (contenente tutte le immagini ed i file dell'app decompilata)
  • original
  • res
  • ecc...
Ed ovviamente anche il famoso file AndroidManifest.xml.
Troverai anche un file chiamato apktool.yml, che presumibilmente serve ad apktool.

apktool.yml

Come ricompilare un apk

Dopo la decompilazione, e dopo aver apportato eventuali modifiche al codice sorgente dell'applicazione android appena scompattata, per poter rigenerare un apk funzionante, occorre compilare nuovamente il tutto.
Entra dunque nel prompt di dos (posizionandoti nella cartella dove hai caricato l'apk prima) e digita:

apktool b nome-cartella-app

Dove ovviamente nome-cartella-app è il nome della cartella creata prima con la decompilazione.

ricompilare un apk

Ancora una volta, se tutto sarà andato a buon fine, ti basterà entrare nella sottocartella con il nome dell'app, e cercare la cartella chiamata dist, all'interno della quale troverai il tuo bel apk nuovo di zecca.

apk ricompilato

Bene, è tutto.
Anzi no, in teoria, se non firmi l'apk questo potrebbe non funzionare una volta installato sul tuo telefono, riportando il seguente messaggio: "app non installata, il pacchetto potrebbe essere danneggiato".

Firmare l'apk

Per firmare il file apk appena creato, digitare, sempre da dos, il seguente comando:

java -jar signapk.jar certificate.pem key.pk8 nome-programma.apk nuovonome-programma.apk

Si, lo so, ora starai pensando che signapk.jar, certificate.pem e key.pk8, non ce l'hai.
Ebbene, potresti crearli/generarli da solo (leggi questa guida per scoprire come fare), oppure scaricarli da questo link e metterli nella cartella dell'apk da firmare.

firmare apk

Dopo aver completato con successo questa operazione, avrai un nuovo file apk certificato, che potrai caricare ed installare sul tuo telefono senza più alcun problema.

file apk certificato

Come dicevo all'inizio del post, apktool non è infallibile, non tutto si può decompilare e compilare di nuovo, tuttavia in molti casi questo software può riuscire davvero a farti ottenere i codici sorgenti di un app android... poi quello che ne vuoi fare non sono solo affari tuoi.

Se da una parte questo post può farti molto felice (ad esempio con questo metodo puoi ottenere tutte le immagini presenti in un app partendo dall'apk), dall'altra parte però dovrebbe farti sorgere qualche dubbio / preoccupazione.
Se hai quindi capito come è facile ottenere un codice sorgente non offuscato, va da sè che non bisogna mai salvare le password in chiaro dentro le proprie app, perchè potrebbero finire nelle mani di qualche malintenzionato.

Lascia un commento!