Pregunta

¿Cómo se puede descompilar Android DEX (VM bytecode) de los archivos en el correspondiente código fuente de Java?

¿Fue útil?

Solución

Es fácil

Obtener estas herramientas:

1) dex2jar para traducir archivos DEX al JAR archivos

2) JD-GUI para ver los archivos de Java en el frasco

El código fuente es bastante legible como dex2jar hace algunas optimizaciones.

Procedimiento:

Y aquí está el procedimiento de cómo descompilar:

Paso 1:

Convertir en classes.dex 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: En las máquinas Windows todos los scripts .sh se sustituyen por guiones .bat

dex2jar documentación

Paso 2:

Abrir el frasco en JD-GUI

La fuente descompilado

Otros consejos

Para aclarar un poco, hay dos caminos principales que usted podría tomar aquí en función de lo que quiere lograr:

descompilar el código de bytes Dalvik (DEX) en fuente de Java legible. Esto se puede hacer fácilmente con dex2jar y jdgui , como se menciona Fred. La fuente resultante es útil para leer y comprender la funcionalidad de una aplicación, pero probablemente no producir 100% código utilizable. En otras palabras, se puede leer la fuente, pero realmente no se puede modificar y volver a empaquetar. Tenga en cuenta que si la fuente se ha ofuscado con Proguard, el código fuente resultante será mucho más difícil de desenredar.

La otra alternativa es importante desmontar el código de bytes a smali , un lenguaje ensamblador diseñado para precisamente este propósito. He descubierto que la mejor manera de hacerlo es con apktool . Una vez que tenga instalado apktool, sólo puede apuntar a un archivo APK, y obtendrá un archivo smali para cada clase contenida en la solicitud. Puede leer y modificar el smali o incluso reemplazar las clases por completo mediante la generación de smali nueva fuente de Java (para hacer esto, usted podría compilar las fuentes .java a .class archivos con javac, a continuación, convertir los archivos .class a .dex archivos con el Android de compilador dx y, a continuación, utilizar baksmali (desensamblador smali) para convertir el .dex a .smali archivos, como se describe en esta pregunta . es posible que haya un acceso directo aquí). Una vez que haya terminado, puede empaquetar fácilmente el apk copia de seguridad con apktool nuevo. Tenga en cuenta que apktool no firmar el apk resultante, por lo que tendrá que cuidar de que al igual que cualquier otra aplicación Android .

Si vas a la ruta smali, es posible que desee probar APK Estudio , un IDE que automatiza algunos de los pasos anteriores para ayudarle con la descompilación y recompilar un APK e instalarlo en un dispositivo.

En resumen, las opciones son más o menos bien a descompilar en Java, que es más fácil de leer, pero probablemente irreversibles, o desarmar a smali, que es más difícil de leer, pero mucho más flexible para realizar cambios y volver a empaquetar una aplicación modificada. ¿Qué enfoque que elija dependerá de lo que busca alcanzar.

Por último, la sugerencia de atreven también es de nota. Es una herramienta para convertir archivos de retargeting .dex y .apk de archivos de Java .class, para que puedan ser analizados utilizando herramientas de análisis estático típica de Java.

Me realmente recomiendo ir aquí: https://github.com/JesusFreke/smali

Proporciona BAKSMALI, que es una excelente herramienta más de ingeniería inversa para los archivos DEX. Ha hecho por JesusFreke, el tipo que creó las ROMs fameous para Android.

Una versión más completa de Fred 's respuesta :

forma manual

Lo primero que necesita una herramienta para extracto todas las clases (compilados) en el DEX a un JAR.
Hay uno llamado dex2jar , que está hecho por un estudiante chino.

A continuación, puede utilizar JD-GUI a descompilar las clases de JAR al código fuente.
La fuente resultante debería ser bastante fácil de leer, como dex2jar aplica algunas optimizaciones.

forma automática

Puede utilizar APKTool . Será automáticamente extraer todas las clases (.dex), recursos (.asrc), entonces se convertirá XML binario a XML legible , y lo hará también en dissassemble las clases para usted.
El desmontaje siempre será más robusta que la descompilación, sobre todo con
JAR ofuscado con la Guardia Pro!

Sólo decirle a APKTool decodificación el APK en un directorio, a continuación, Modificar lo que quiere,
y, finalmente, codificar de nuevo a un APK. Eso es todo.

Importante: APKTool dissassembles . No hace descompilar .
El código generado no será fuente de Java.
Sin embargo, usted debe ser capaz de leer, e incluso editarlo si está familiarizado con jasmin .
Si quieres fuente de Java, visite el forma manual .

A veces tienen el código roto, cuando se utiliza dex2jar / apktool, sobre todo en los bucles. Para evitar esto, utilice jadx , que decompiles código de bytes Dalvik en el código fuente de Java, sin crear un archivo .jar / .class primero como dex2jar hace ( apktool utiliza dex2jar creo). También es de código abierto y en desarrollo activo. Incluso tiene una interfaz gráfica de usuario, por Gui-fanáticos. Inténtelo!

Ya que nadie lo mencionó, hay una herramienta más: DED página

Instalar de cómo hacerlo y algunas explicaciones: instalación .

Fue utilizado en un estudio muy interesante de la seguridad de las mejores aplicaciones de mercado (no realmente relacionados, solo si tienes curiosidad): Una encuesta de seguridad de aplicaciones Android

He utilizado

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. enjarify
  4. Apktool

Sin embargo, ninguno supera propias herramientas de Google

1) Android 2.x Estudio: construir> analizar apk introducir descripción de la imagen aquí

2) Android Studio 3.0: Del perfil o de depuración APK introducir descripción de la imagen aquí introducir descripción de la imagen aquí

Una vez que ha descargado el archivo APK, usted tiene que hacer los siguientes pasos para obtener un código java / documento editable.

  1. Convertir el archivo apk a postal (mientras iniciar la descarga no van con opción "guardar", sólo tiene que ir con "guardar como" y hablar de su extensión como .zip) haciendo como esto puede evitar APKTOOL ...
  2. Extrae el archivo zip, allí se puede encontrar somefilename.dex. por lo que ahora tenemos que convertir dex -> .class
  3. Para ello, es necesario "dex2jar" (se puede descargar desde http://code.google.com/p / dex2jar / , después se extrae, en el símbolo del sistema se tiene que mencionar como, [D: \ dex2jar-0.09> dex2jar somefilename.dex] (tenga en cuenta que su somefilename.dex debe estar dentro de la misma carpeta en la que tiene mantener su dex2jar.)
  4. http://www.viralpatel.net/blogs/download/jad/jad. zip y extraerlo. Una vez extraído se pueden ver dos archivos como "jad.exe" y "readme.txt" (a veces "jad.txt" puede allí en vez de "jad.exe", por lo que sólo cambiar el nombre de su extensión a as.exe ejecución)
  5. Por último, en el símbolo del sistema se tiene que mencionar como [D: \ jad> JAD -sjava yourfilename.class] se analizará el archivo de clase Java en un documento editable.

Dedexer , se puede desmontar el archivo .dex en bytecode Dalvik (.ddx).

Descompilación hacia Java no es posible por lo que yo sé.
Usted puede leer acerca de código de bytes Dalvik aquí .

Android ingeniería inversa es posible  . Siga estos pasos para obtener .java archivo del archivo APK.

Paso 1. Usando dex2jar

  • Generar archivo .jar del archivo apk
  • comando: dex2jar sampleApp.apk

Paso 2. Descompilar .jar usando JD-GUI

  • decompila los archivos .class es decir, vamos a llegar ofuscado .java atrás de la apk.

Debian reciente paquete de Python tienen 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

Instalar paquetes correspondientes:

sudo apt-get install androguard python-networkx

Descompilar archivo DEX:

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

Extracto de classes.dex de Apk + Decompile:

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

archivo APK es nada más que archivos JAR (Java), se puede extraer archivos de archivos a través de:

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

Muchas cosas han cambiado desde que la mayoría de estas respuestas fueron publicadas. Hoy en día hay un muchas herramientas fáciles con interfaz gráfica de usuario de, como los siguientes:

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

El mejor lugar para encontrarlos es en el foro de XDA Developers.

Desde Dheeraj Bhaskar's respuesta es relativamente antigua como muchos en los últimos años.

Aquí está mi más reciente (año 2019) respuesta:

La Lógica Principal

de dex a java sourcecode, actualmente tiene dos tipos de solución:

  • One Step:convertir directamente dex a java sourcecode
  • Two Step:primero convertir dex a jar, segunda convertir jar a java sourcecode

A un paso de la solución: dex directamente a java sourcecode

Herramientas

Proceso de

  1. descargar jadx-0.9.0.zip, descomprimirlo, en bin la carpeta puede ver la línea de comandos jadx o la versión GUI jadx-gui, haga doble clic para ejecutar la versión GUI: jadx-gui

  1. abierto dex archivo

a continuación, puede mostrar el código fuente de java:

  1. File -> save as gradle project

luego se metió de java de código fuente:


Dos pasos de solución de

Paso1: dex a jar

Herramientas

Proceso de

descargar dex2jar zip, tienes que descomprimir d2j-dex2jar.sh, y , a continuación:

  • 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

ejemplo:

➜  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

Paso2: jar a java sourcecode

Herramientas

Proceso de

aquí demo Procyon convertir jar de java de código fuente:

descargar procyon-decompiler-0.5.34.jar

a continuación, utilizando la sintaxis:

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

ejemplo:

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

mediante el editor VSCode para abrir exportar el código fuente, este aspecto:

Conclusión

La conversión de la corrección : Jadx > Procyon > CRF > JD-GUI

Recomendamos utilizar:(Un paso de la solución) Jadx


para una explicación más detallada, por favor consulte mi online Chino ebook: 安卓应用的安全和破解

Usted puede tratar de JADX ( https://bitbucket.org/mstrobel/procyon/wiki / Java% 20Decompiler ), esta es una herramienta perfecta para DEX descompilación.

Y sí, sino que también está disponible en línea en (mi: 0)) nuevo sitio: http: // www .javadecompilers.com / APK /

Esto puede hacerse en los siguientes cinco pasos:

Esta joya hace estas cosas de forma automática, incluso la instalación de requerido herramientas

  1. convertir el archivo apk a postal
  2. descomprimir el archivo
  3. extracto classes.dex de ella
  4. dex uso del JAR para convertir classes.dex en archivo jar
  5. GUI uso jadx para abrir el archivo JAR como código fuente de Java

método más fácil para descomponer una aplicación para Android es descargar una aplicación llamada ShowJava desde playstore. Sólo tienes que seleccionar la aplicación que necesita ser descompilación de la lista de aplicaciones. Hay tres decompilador diferentes que puede utilizar para descomponer una aplicación a saber, -

  

CFR 0.110, JaDX 0.6.1 o FernFlower (decompilador analítica).

Si usted no está buscando para descargar dex2jar, a continuación, sólo tiene que utilizar la secuencia de comandos de Python rel="nofollow"> apk_grabber para descomponer cualquier APK en archivos jAR. Luego de leerlos con JD-GUI.

scroll top