Domanda

Come si può decompilare Android DEX (VM bytecode) file in corrispondenti Java codice sorgente?

È stato utile?

Soluzione

E 'facile

Ricevi questi strumenti:

1) dex2jar per tradurre i file DEX alle JAR file

2) JD-GUI per visualizzare i file java nel vaso

Il codice sorgente è abbastanza leggibile come dex2jar rende alcune ottimizzazioni.

Procedura:

Ed ecco la procedura su come decompilare:

Passaggio 1:

Convertire classes.dex in test_apk-debug.apk a test_apk-debug_dex2jar.jar

d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
  

Nota: Nelle macchine di Windows tutti gli script .sh sono sostituiti dagli script .bat

dex2jar documentazione

Fase 2:

Aprire il vaso in JD-GUI

La fonte decompilato

Altri suggerimenti

Per chiarire un po ', ci sono due strade principali si potrebbe prendere qui a seconda di ciò che si vuole realizzare:

decompilare il bytecode Dalvik (dex) nella sorgente di Java leggibile. Lo si può fare facilmente con dex2jar e jdgui , come cita fred. La fonte risultante è utile per leggere e comprendere la funzionalità di un app, ma probabilmente non produrre il 100% del codice utilizzabile. In altre parole, è possibile leggere il sorgente, ma non si può davvero modificare e riconfezionare. Si noti che se la sorgente è stato offuscato con proguard, il codice sorgente risultante sarà sostanzialmente più difficile da districare.

L'altra grande alternativa è quella di smontare il bytecode per Smali , un linguaggio assembly progettato per proprio per questo scopo. Ho trovato che il modo più semplice per farlo è con apktool . Una volta che hai apktool installato, si può solo puntare a un file apk, e ti tornare un file Smali per ogni classe contenuta nella domanda. È possibile leggere e modificare la Smali o addirittura sostituire le classi interamente generando Smali dalla nuova sorgente Java (per fare questo, si potrebbe compilare il sorgente del .java a .class file con javac, poi convertire i file .class per .dex file con Android dx compilatore, e quindi utilizzare baksmali (disassembler Smali) per convertire il .dex a .smali file, come descritto in questa domanda . ci potrebbe essere un collegamento qui). Una volta fatto, si può facilmente confezionare l'apk back up con apktool di nuovo. Si noti che apktool non firmare l'apk risultante, quindi avrai bisogno di prendersi cura di che come qualsiasi altra applicazione Android .

Se si va via Smali, si potrebbe desiderare di provare APK Studio , un IDE che consente di automatizzare alcuni dei passaggi di cui sopra per assistervi con decompilazione e ricompilare un apk e installarlo su un dispositivo.

In breve, le scelte sono praticamente né a decompilare in Java, che è più leggibile, ma probabilmente irreversibili, o di smontare a Smali, che è più difficile da leggere, ma molto più flessibile per apportare modifiche e riconfezionare un'applicazione modificata. Quale approccio si sceglie dipenderà da quello che stai cercando di raggiungere.

Infine, il suggerimento di osa è anche di nota. E 'uno strumento di retargeting per convertire i file .apk .dex e al file Java .class, in modo che possano essere analizzati utilizzando tipica java strumenti di analisi statica.

Mi piacerebbe davvero consiglio di andare qui: https://github.com/JesusFreke/smali

Si prevede BAKSMALI, che è un più eccellente strumento di reverse-engineering per i file DEX. E 'fatta dal JesusFreke, il ragazzo che ha creato le ROM fameous per Android.

Una versione più completa della s ' fred risposta :

modo manuale

Per prima cosa è necessario uno strumento per tutte le classi estratto (compilato) sul DEX ad un JAR.
C'è uno chiamato dex2jar , che è fatto da uno studente cinese.

Quindi, è possibile utilizzare JD-GUI per decompilare le classi su il JAR al codice sorgente.
La fonte risultante dovrebbe essere abbastanza leggibile, come dex2jar applica alcune ottimizzazioni.

modo automatico

È possibile utilizzare APKTool . Sarà automaticamente estrarre tutte le classi (.dex), risorse (.asrc), allora verrà convertito XML binario per XML leggibile , e lo farà anche DISSASSEMBLARE le classi per voi.
Lo smontaggio sarà sempre più robusto di decompilazione, specialmente con
JAR offuscati con Guardia Pro!

Basta dire APKTool a decodifica l'APK in una directory, allora Modifica quello che vuoi,
e, infine, encode di nuovo a un APK. Questo è tutto.

Importante: APKTool dissassembles . E non lo fa decompilare .
Il codice generato non sarà sorgente Java.
Ma si dovrebbe essere in grado di leggerlo, e anche modificarlo se si ha familiarità con gelsomino .
Se si desidera sorgente di Java, si prega di andare oltre il modo manuale .

A volte si ottiene il codice rotto, quando si utilizza dex2jar / apktool, in particolare nei cicli. Per evitare questo, utilizzare jadx , che decompila Dalvik bytecode in codice sorgente Java, senza creare un file .jar / .class prima come dex2jar fa ( apktool utilizza dex2jar credo). E 'anche open-source e in fase di sviluppo. Dispone anche di una GUI, per gui-fanatici. Provalo!

Dal momento che nessuno ha menzionato questo, c'è un altro strumento: DED homepage

Installa how-to e alcune spiegazioni: installazione .

E 'stato utilizzato in uno studio molto interessante della sicurezza delle applicazioni di mercato superiori (non proprio legati, solo se siete curiosi): A Survey of Android Application Security

ho usato

  1. dex2jar + JD-GUI
  2. javadecompilers.com
  3. enjarify
  4. Apktool

Ma nessuno batte propri strumenti di Google

1) Studio Android 2.x: costruire> analizzare apk entrare image description qui

2) Android Studio 3.0: Profilo o Debug APK entrare image description qui entrare image description qui

Una volta scaricato il file APK, è necessario effettuare le seguenti operazioni per ottenere un codice Java / documento modificabile.

  1. Convertire file apk a zip (mentre iniziare il download non andare con "salvare" l'opzione, basta andare con "Salva con nome" e parlare la vostra estensione come .zip) facendo in questo modo si può evitare di APKTOOL ...
  2. Estraete il file zip, vi si possono trovare somefilename.dex. così ora abbiamo bisogno di convertire dex -> .class
  3. Per fare questo, è necessario "dex2jar" (è possibile scaricarlo da http://code.google.com/p / dex2jar / , dopo estratto, nel prompt dei comandi si deve parlare di come, [D: \ dex2jar-0.09> dex2jar somefilename.dex] (Tenete a mente che il vostro somefilename.dex deve sia all'interno della stessa cartella in cui si dispone di mantenere il vostro dex2jar.)
  4. Scarica Jad da http://www.viralpatel.net/blogs/download/jad/jad. zip ed estrarlo. Una volta estratto è possibile vedere due file come "jad.exe" e "Readme.txt" (a volte "jad.txt" può lì, invece di "jad.exe", quindi basta rinominare la sua as.exe estensione per l'esecuzione)
  5. Infine, nel prompt dei comandi si deve parlare di come [D: \ Jad> Jad -sjava yourfilename.class] sarà analizzare il file classe in Java documento modificabile.

Dedexer , è possibile smontare il file .dex in Dalvik bytecode (.ddx).

decompilazione verso Java non è possibile per quanto ne so.
Si può leggere su Dalvik bytecode qui .

Android Reverse Engineering è possibile  . Seguire questa procedura per ottenere il file .java da file apk.

Step1. Utilizzando dex2jar

  • Genera file .jar da file .apk
  • comando: dex2jar sampleApp.apk

Step2. Decompilazione .jar usando JD-GUI

  • è decompila i file .class vale a dire, ci arriveremo offuscato .java indietro dal apk.

Debian recenti hanno Python pacchetto androguard:

Description-en: full Python tool to play with Android files
 Androguard is a full Python tool to play with Android files.
  * DEX, ODEX
  * APK
  * Android's binary xml
  * Android resources
  * Disassemble DEX/ODEX bytecodes
  * Decompiler for DEX/ODEX files

Installa pacchetti corrispondenti:

sudo apt-get install androguard python-networkx

Decompilare il file DEX:

$ androdd -i classes.dex -o ./dir-for-output

Estratto classes.dex da Apk + Decompile:

$ androdd -i app.apk -o ./dir-for-output

file Apk è altro che Java archive (JAR), è possibile estrarre file da archivi tramite:

$ unzip app.apk -d ./dir-for-output

Molto è cambiato da quando la maggior parte di queste risposte sono state inviate. Ora, a un giorno ci un sono molti strumenti semplici con GUI, come questi:

APK Easy Tool for Windows (GUI tool, friendly)
Bytecode Viewer - APK/Java Reverse Engineering Suite
URET Android Reverser Toolkit

Il miglior posto per trovare loro è sul forum XDA Developers.

Dato che la risposta di Dheeraj Bhaskar è relativamente vecchio come molti anni passati.

Qui è il mio ultimo (2019 anni) risposta:

logica principale

da dex a java sourcecode, attualmente dispone di due tipi di soluzione:

  • One Step: convertire direttamente dex a java sourcecode
  • Two Step: prima convertire dex a jar, secondo jar convertito al java sourcecode

Un passo soluzione: dex direttamente a java sourcecode

Strumenti

Processo

  1. jadx-0.9.0.zip , decomprimerlo, nella cartella bin può vedere jadx riga di comando o versione GUI jadx-gui, fare doppio clic per eseguire la versione GUI: jadx-gui

  1. file dex aperto

quindi può mostrare il codice sorgente Java:

  1. File -> save as gradle project

poi si java codice sorgente:


Due soluzione Passo

Step1: dex per jar

Strumenti

Processo

dex2jar zip , d2j-dex2jar.sh decomprimere ottenuto, quindi:

  • apk a jar: sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
  • dex a jar: sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex

Esempio:

➜  v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜  v3.4.8 ll
-rw-------  1 crifan  staff   9.5M  3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw-------  1 crifan  staff   8.4M  3 19 14:04 com.huili.readingclub8825612.dex

Step2: jar per java sourcecode

Strumenti

Processo

qui demo Procyon convertito vaso al codice sorgente di Java:

procyon-Decompiler-0.5.34.jar

quindi utilizzando la sintassi:

java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderName

Esempio:

java -jar /Users/crifan/dev/dev_tool/android/reverse_engineering/Procyon/procyon-decompiler-0.5.34.jar -jar com.huili.readingclub8825612-dex2jar.jar -o com.huili.readingclub8825612

VSCode per aprire il codice sorgente di esportato, simile a questa:

Conclusione

correttezza di conversione: Jadx> Procyon> CRF> JD-GUI

Consiglia uso: Jadx (One soluzione step)


per spiegazioni più dettagliate, si rimanda la mia linea cinese ebook: 安卓 应用 的 安全 和 破解

Si potrebbe provare JADX ( https://bitbucket.org/mstrobel/procyon/wiki / Java% 20Decompiler ), questo è uno strumento perfetto per DEX decompilazione.

E sì, è disponibile anche on-line su (il mio: 0)) nuovo sito: http: // www .javadecompilers.com / apk /

Questo può essere fatto in seguito cinque passi:

Questo gioiello fa queste cose per voi automaticamente anche l'installazione di richiesta strumenti

  1. convertire il file apk a zip
  2. decomprimere il file
  3. estratto classes.dex da esso
  4. uso dex al barattolo per convertire classes.dex in file jar
  5. uso jadx gui per aprire il file jar come codice sorgente java

metodo più semplice per decompilare un app Android è quello di scaricare un'applicazione di nome ShowJava da playstore. Basta selezionare l'applicazione che deve essere decompilato dall'elenco delle applicazioni. Ci sono tre diversi Decompiler è possibile utilizzare per decompilare un app vale a dire -

  

CFR 0.110, JaDX 0.6.1 o FernFlower (decompilatore analitico).

Se non stai cercando di scaricare dex2jar, poi basta usare lo script python rel="nofollow"> apk_grabber per decompilare qualsiasi apk in file jar. Poi li si legge con il JD-GUI.

scroll top