descomstackndo DEX en el código fuente de Java

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

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 descomstackr:

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 con Windows, todos los scripts .sh son reemplazados por scripts .bat

documentación dex2jar

Paso 2:

Abra el jar en JD-GUI

La fuente descompilada

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 hacerlo 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 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 alternativa importante es desarmar el bytecode a smali , un lenguaje ensamblador diseñado precisamente para este propósito. Descubrí 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 comstackr su fuente .java a archivos .class con javac, y luego convertir sus archivos .class a archivos .dex con Android dx compiler, y luego usar 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 la aplicación resultante, por lo que tendrá que encargarse de eso como cualquier otra aplicación de Android .

Si va por la ruta más pequeña, puede probar APK Studio , un IDE que automatiza algunos de los pasos anteriores para ayudarlo a descomstackr y recomstackr una aplicación e instalarla en un dispositivo.

En resumen, sus opciones son tanto descomstackr 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 desafío también es importante. 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.

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.

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

Manera manual

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

Luego, puede usar jd-gui para descomstackr 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 APKTool . Automáticamente extraerá todas las clases ( .dex ), recursos ( .asrc ), luego convertirá XML binario a XML legible por humanos , y también desmontará las clases por usted.
El desassembly siempre será más robusto que la descomstackción, especialmente con
JARs ofuscados con Pro Guard!

Solo dile a APKTool que decodifique el APK en un directorio, luego modifica lo que quieras,
y finalmente codificarlo de nuevo a un APK. Eso es todo.

Importante: APKTool se desmonta. No se descomstack .
El código generado no será fuente Java.
Pero deberías poder leerlo e incluso editarlo si estás familiarizado con jasmin .
Si desea el origen de Java, vaya por el modo Manual .

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

Como nadie mencionó esto, hay una herramienta más: la 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 tiene curiosidad): Una encuesta sobre la seguridad de aplicaciones de Android

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 hacerlo, necesita “dex2jar” (puede descargarlo desde http://code.google.com/p/dex2jar/ , luego 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 ha guardado su dex2jar).
  4. Descargue jad de http://www.viralpatel.net/blogs/download/jad/jad.zip y extráigalo. 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.

Con Dedexer , puede desensamblar el archivo .dex en dalvik bytecode ( .ddx ).

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

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 . Descomstackción de .jar utilizando JD-GUI

  • descomstack los archivos .class, es decir, obsoletos .java de vuelta de la apk.

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.

Los recientes Debian tienen el paquete 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 

Instale los paquetes correspondientes:

 sudo apt-get install androguard python-networkx 

Descomstackr archivo DEX:

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

Extrae classes.dex de Apk + Decompile:

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

El archivo Apk no es más que el archivo Java (JAR), puede extraer archivos del archivo a través de:

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

He usado

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

Pero ninguno supera las herramientas propias de Google

1) Android Studio 2.x: comstackción> analizar apk enter image description here

2) Android Studio 3.0: perfil o depuración APK enter image description here enter image description here

Puede probar JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), esta es una herramienta perfecta para descomstackr DEX.

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

Esto se puede hacer en los siguientes cinco pasos:

Esta joya hace estas cosas automáticamente, incluso la instalación de las herramientas necesarias

  1. convertir archivo apk a zip
  2. descomprimir el archivo
  3. extraer classes.dex de él
  4. use dex to jar para convertir classes.dex en archivo jar
  5. use jadx gui para abrir el archivo jar como código fuente java

Si no desea descargar dex2jar, simplemente use el script apk_grabber python para descomstackr cualquier apk en archivos jar. Luego los lees con jd-gui.

El método más fácil para descomstackr una aplicación de Android es descargar una aplicación llamada ShowJava de playstore. Simplemente seleccione la aplicación que necesita descomstackrse de la lista de aplicaciones. Hay tres descomstackdores diferentes que puede usar para descomstackr una aplicación, a saber:

CFR 0.110, JaDX 0.6.1 o FernFlower (descomstackdor analítico).