Pregunta descompilando DEX en el código fuente de Java


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


643
2017-08-08 21:39


origen


Respuestas:


Es fácil

Obtenga estas herramientas:

1) dex2jar para traducir archivos dex a archivos jar

2) jd-gui para ver los archivos java en el contenedor

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

Procedimiento:

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

Paso 1:

Convierta classes.dex en test_apk-debug.apk a test_apk-debug_dex2jar.jar

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

Nota: En las máquinas de Windows todo el .sh los scripts son reemplazados por .bat guiones

documentación dex2jar

Paso 2:

Abra el jar en JD-GUI

The decompiled source


825
2017-11-04 23:40



Para aclarar algo, hay dos caminos principales que puede tomar aquí según lo que desee lograr:

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

La otra gran alternativa es desmontar el bytecode para smali, un lenguaje ensamblador diseñado precisamente para este propósito. He descubierto que la forma más fácil de hacerlo es con apktool. Una vez que haya instalado apktool, puede apuntarlo a un archivo apk y obtendrá un archivo smali para cada clase contenida en la aplicación. Puede leer y modificar los más pequeños o incluso reemplazar las clases por completo al generar smali a partir de una nueva fuente Java (para ello, puede compilar su fuente .java a archivos .class con javac, y luego convertir sus archivos .class a archivos .dex con Android dx compilador, y luego use baksmali (smali disassembler) 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 de la aplicación con apktool nuevamente. Tenga en cuenta que apktool no firma el apk resultante, por lo que tendrá que encargarse de eso como cualquier otra aplicación de Android.

Si vas por la ruta más pequeña, es posible que quieras probar APK Studio, un IDE que automatiza algunos de los pasos anteriores para ayudarlo a descompilar y volver a compilar una aplicación e instalarla en un dispositivo.

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

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


124
2017-08-09 10:48



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ó los ROM fabulosos para Android.


59
2018-01-09 18:01



Una versión más completa de fredes responder:

Manera manual

Primero necesitas una herramienta para extraer todas las clases (compiladas) en el DEX a un JAR.
Hay uno llamado dex2jar, que es hecho por un estudiante chino.

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

Forma automática

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

Simplemente dile a APKTool que descodificar el APK en un directorio, luego modificar Lo que quieras,
y finalmente codificar volver a una APK. Eso es todo.

Importante: APKTool se desmonta. No lo hace descompilar.
El código generado no será fuente Java.
Pero debería poder leerlo e incluso editarlo si está familiarizado con jazmín.
Si quieres una fuente Java, por favor revisa el Manera manual.


26
2018-03-04 21:07



A veces obtienes código roto, cuando usas dex2jar/apktool, más notablemente en bucles. Para evitar esto, use jadx, que descompila dalvik bytecode en código fuente java, sin crear un .jar/.class archivo primero como dex2jar does (apktool usa dex2jar, creo). También es de código abierto y en desarrollo activo. Incluso tiene una GUI, para GUI-fanáticos. ¡Intentalo!


19
2017-08-17 07:22



Como nadie mencionó esto, hay una herramienta más: Página de DED

Instale cómo hacerlo y algunas explicaciones: Instalación.

Fue utilizado en un estudio bastante interesante sobre la seguridad de las principales aplicaciones del mercado (no muy relacionado, solo si tienes curiosidad): Una encuesta de seguridad de aplicaciones de Android


15
2018-04-26 08:36



Una vez que descargó su archivo APK, debe seguir los siguientes pasos para obtener un código / documento Java editable.

  1. Convierta su archivo apk en zip (mientras comienza la descarga, no vaya con la opción "guardar", simplemente vaya con "guardar como" y mencione su extensión como .zip) haciendo esto, puede evitar APKTOOL ...
  2. Extraiga el archivo zip, allí puede encontrar somefilename.dex. así que ahora tenemos que convertir dex -> .class
  3. Para hacer eso, necesitas "dex2jar" (puedes descargarlo de http://code.google.com/p/dex2jar/ , después de extraerlo, en el símbolo del sistema, debe mencionar como, [D: \ dex2jar-0.09> dex2jar somefilename.dex] (Tenga en cuenta que su somefilename.dex debe estar dentro de la misma carpeta donde tiene guardado su dex2jar).
  4. Descargar jad de http://www.viralpatel.net/blogs/download/jad/jad.zip y extraerlo. Una vez extraído, puede ver dos archivos como "jad.exe" y "Readme.txt" (a veces puede ser "jad.txt" allí en lugar de "jad.exe", así que simplemente cambie el nombre de su extensión como.exe para ejecutar)
  5. Finalmente, en el símbolo del sistema, debe mencionar como [D: \ jad> jad -sjava yourfilename.class] analizará su archivo de clase en un documento editable de Java.

13
2018-04-23 07:43



Con Dedexer, puedes desmontar el .dex archivo en dalvik bytecode (.ddx)

Descompilarse hacia Java no es posible hasta donde yo sé.
Puedes leer sobre dalvik bytecode aquí.


8
2018-02-09 16:29



Android Reverse Engineering es posible   . Siga estos pasos para obtener el archivo .java del archivo apk.

Paso 1 . Usando dex2jar

  • Generar archivo .jar desde el archivo .apk
  • comando: dex2jar sampleApp.apk

Paso 2 . Descompilación de .jar utilizando JD-GUI

  • descompila los archivos .class, es decir, obtendremos ofuscado .java de regreso de la apk.

8
2017-11-03 05:43



Mucho ha cambiado desde que se publicaron la mayoría de estas respuestas. Hoy en día hay muchas herramientas fáciles con GUI, como estas:

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.


5
2018-03-22 15:48