¿Cómo descompilar DEX en el código fuente de Java?

9 minutos de lectura

Avatar de usuario de Will
Voluntad

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

  • Echar un vistazo aquí. Obtendrá posibles pistas a partir de ahí para seguir adelante.

    –Kevin Boyd

    9 de agosto de 2009 a las 6:47


  • La información actualizada está disponible en el blog del centro de codificadores: coders-hub.com/2013/04/how-to-convert-apk-file-into-source.html

    – Md. Mohsin

    23 de septiembre de 2015 a las 7:31

  • Si tienes dinero, compra jebde lo contrario usa jadxmira aquí por qué

    – polimero

    3 de noviembre de 2015 a las 7:42


  • Hay una nueva plataforma cruzada (java) y una herramienta de código abierto que le permite hacer eso, solo consulte bytecodeviewer: stackoverflow.com/a/36557898/795245

    – Gomino

    11/04/2016 a las 19:48


Es fácil

Obtén estas herramientas:

  1. dex2jar para traducir archivos dex a archivos jar

  2. jd-gui para ver los archivos java en el jar

El código fuente es bastante legible ya que dex2jar realiza algunas optimizaciones.

Procedimiento:

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

Paso 1:

Convierta clases.dex en 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 1: En las máquinas Windows todos los .sh los guiones son reemplazados por .bat guiones

Nota 2: En linux/mac no te olvides de sh o bash. El comando completo debe ser:

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

Nota 3: Además, recuerde agregar permiso de ejecución a dex2jar-X.X directorio por ejemplo sudo chmod -R +x dex2jar-2.0

documentación dex2jar

Paso 2:

Abre el jar en JD-GUI

La fuente descompilada

  • +1. Probé tanto Baksmali como Dex2jar. Dex2Jar+JD-Gui gana por brindarle un código fuente perfectamente legible para la mayoría de los archivos .dex.

    –Jonathan Dumaine

    22 de enero de 2011 a las 5:58

  • hola, ¿podrías compartir la forma en que vas? Te estaré muy agradecido.

    – Arslan Anwar

    22 de marzo de 2011 a las 12:45

  • La oración anterior sonó una campana – parece ser una semi-cita de aquí: geeknizer.com/decompile-reverse-engineer-android-apk (¿O al revés?). Los artículos vinculados explican brevemente las herramientas mencionadas anteriormente, así como Smali y APKTool.

    – AgenteKnopf

    19 de enero de 2012 a las 9:38


  • @JonathanDumaine eso depende. Si los archivos JAR están ofuscados y desea hacer pequeñas modificaciones, Backsmali es el único camino a seguir. ¡Prima! Con APKTool también recupera todos los XML, imágenes y otros recursos. Mira mi respuesta.

    – Alba Méndez

    30 de agosto de 2012 a las 11:15

  • @JonathanDumaine Estoy de acuerdo con jmendeth, apktool también es el camino a seguir si desea descompilar su apk, modificarlo y luego volver a compilarlo. Mientras usa dex2jar y jd-gui, la fuente es realmente legible, ¡pero no puede volver a compilar sin algunos errores!

    – heredero oscuro

    10 de septiembre de 2012 a las 10:13

Avatar de usuario de Zach Lipton
Zach Lipton

Para aclarar un poco, hay dos caminos principales que puede tomar aquí dependiendo de lo que quiera lograr:

Descompile el bytecode de Dalvik (dex) en una fuente Java legible. Puedes hacer esto fácilmente con dex2jar y jd-gui, como menciona fred. La fuente resultante es útil para leer y comprender la funcionalidad de una aplicación, pero es probable que no produzca un código utilizable al 100 %. En otras palabras, puede leer el código fuente, pero en realidad no puede modificarlo ni volver a empaquetarlo. Tenga en cuenta que si la fuente ha sido ofuscada con proguard, el código fuente resultante será sustancialmente más difícil de desenredar.

La otra gran alternativa es desensamblar el código de bytes para pequeño, un lenguaje ensamblador diseñado precisamente para este propósito. Descubrí que la forma más fácil de hacer esto es con apktool. Una vez que haya instalado apktool, puede apuntarlo a un archivo apk y obtendrá un archivo pequeño para cada clase contenida en la aplicación. Puede leer y modificar el smali o incluso reemplazar las clases por completo generando smali a partir de una nueva fuente de Java (para hacer esto, puede compilar su fuente .java en archivos .class con javac, luego convertir sus archivos .class en archivos .dex con Android’s dx y luego use baksmali (desensamblador smali) para convertir los archivos .dex a .smali, como se describe en esta pregunta. Puede haber un atajo aquí). Una vez que haya terminado, puede empaquetar fácilmente la copia de seguridad del apk con apktool nuevamente. Tenga en cuenta que apktool no firma el apk resultante, por lo que deberá encargarse de eso como cualquier otra aplicación de Android.

Si vas por la ruta smali, tal vez quieras probar Estudio APKun IDE que automatiza algunos de los pasos anteriores para ayudarlo a descompilar y volver a compilar un apk e instalarlo en un dispositivo.

En resumen, sus opciones son prácticamente descompilar en Java, que es más legible pero probablemente irreversible, o desensamblar en 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. El enfoque que elija dependerá de lo que esté buscando lograr.

Por último, la sugerencia de atrevimiento también es de destacar. Es una herramienta de reorientación para convertir archivos .dex y .apk en archivos java .class, de modo que puedan analizarse con las herramientas típicas de análisis estático de java.

  • prueba APK Studio, fue una elección increíble

    – Sideeg MoHammed

    9 de noviembre de 2020 a las 11:28

avatar de usuario de reflog
reflog

De hecho, recomendaría ir aquí:
https://github.com/JesusFreke/smali

Proporciona BAKSMALI, que es una excelente herramienta de ingeniería inversa para archivos DEX. Está hecho por JesusFreke, el tipo que creó las famosas ROM para Android.

  • smali es un lenguaje similar a un ensamblador basado en dalvik IL, no se puede traducir directamente a Java.

    – reflog

    15 de noviembre de 2010 a las 12:39

  • @endryha No hay herramientas capaces de hacer eso. Consulte esta pregunta para obtener más información.

    – Alba Méndez

    9 de enero de 2012 a las 18:03


  • Código, código, código,… ¿Por qué sólo código? Si usas APKTool obtienes todo ¡espalda! Y es tan simple como ./apktool d myprogram.apk. Mira mi respuesta.

    – Alba Méndez

    30 de agosto de 2012 a las 11:14

avatar de usuario de crifan
crifan

Ya que Dheeraj BhaskarLa respuesta de es relativamente antigua ya que hace muchos años.

Aquí está mi última respuesta (año 2019):

Lógica principal

de dex a java sourcecodeactualmente tiene dos tipos de solución:

  • One Step: convertir directamente dex a java sourcecode
  • Two Step: primera conversión dex a jarsegundo convertido jar a java sourcecode

Solución de un paso: dex directamente a java sourcecode

Instrumentos

Proceso

  1. descargar jadx-0.9.0.zipdescomprímelo, en bin la carpeta puede ver la línea de comando jadx o versión GUI jadx-guihaga doble clic para ejecutar la versión GUI: jadx-gui

¿Cómo descompilar DEX en el código fuente de Java?

  1. abierto dex expediente

¿Cómo descompilar DEX en el código fuente de Java?

entonces puede mostrar el código fuente de Java:

¿Cómo descompilar DEX en el código fuente de Java?

  1. File -> save as gradle project

¿Cómo descompilar DEX en el código fuente de Java?

luego obtuve el código fuente de Java:

¿Cómo descompilar DEX en el código fuente de Java?


Solución de dos pasos

Paso 1: dex a jar

Instrumentos

Proceso

descargar zip dex2jardescomprimir tengo d2j-dex2jar.shdespués:

  • 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

Paso 2: jar a java sourcecode

Instrumentos

Proceso

aquí demostración Procyon convertir jar a código fuente de Java:

descargar procyon-descompilador-0.5.34.jar

luego usando 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

usando el editor Código VSC para abrir el código fuente exportado, tenga este aspecto:

¿Cómo descompilar DEX en el código fuente de Java?

Conclusión

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

Uso recomendado: (soluciones de un solo paso) Jadx


para una explicación más detallada, consulte mi en línea Chino libro electronico: 安卓应用的安全和破解

Avatar de usuario de Alba Méndez
Alba Méndez

Una versión más completa de la respuesta de fred:

forma manual

Primero necesitas una herramienta para extracto todas las clases (compiladas) en el DEX a un JAR.
Hay uno llamado dex2jarque está hecho por un estudiante chino.

Entonces, puedes usar jd-gui a descompilar las clases en el JAR al código fuente.
La fuente resultante debería ser bastante legible, ya que dex2jar aplica algunas optimizaciones.

forma automática

Puedes usar APKHerramienta. Va a automáticamente extraer todas las clases (.dex), recursos (.asrc), entonces se convertirá XML binario a XML legible por humanosy también será desmontar las clases para ti.
El desmontaje siempre será más robusto que la descompilación, especialmente con
¡JARs ofuscados con Pro Guard!

Solo dile a APKTool que descodificar el APK en un directorio, luego modificar Lo que quieras,
y finalmente codificar de vuelta a un APK. Eso es todo.

Importante: APKHerramienta desmonta. no lo hace descompilar.
El código generado no será fuente de Java.
Pero debería poder leerlo e incluso editarlo si está familiarizado con jazmín.
Si desea fuente de Java, por favor vaya a la forma manual.

avatar de usuario de polym
polimero

A veces obtienes un código roto, cuando usas dex2jar/apktool, sobre todo en bucles. Para evitar esto, utilice jadxque descompila el código de bytes dalvik en el código fuente de Java, sin crear un .jar/.class presentar primero como dex2jar lo hace (apktool usa dex2jar, creo). También es de código abierto y está en desarrollo activo. Incluso tiene una GUI, para fanáticos de la GUI. ¡Intentalo!

avatar de usuario de ishandutta2007
ishandutta2007

he utilizado

  1. dex2jar + jd-gui
  2. javadecompilers.com
  3. enjarificar
  4. apktool

Pero ninguna supera a las propias herramientas de Google.

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

2)Estudio Android 3.0:
Perfilar o depurar APK
ingrese la descripción de la imagen aquí
ingrese la descripción de la imagen aquí

  • Más uno para Enjarify. En mi experiencia personal, ha demostrado dar mejores resultados en comparación con d2j

    – qre0ct

    25 de septiembre de 2018 a las 4:04

¿Ha sido útil esta solución?