descompilar DEX en el código fuente de Java
apk decompiler windows (16)
Es fácil
Consigue 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 hace algunas optimizaciones.
Procedimiento:
Y aquí está el procedimiento sobre cómo descompilar:
Paso 1:
Convierte 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 Windows, todos los scripts
.sh
son reemplazados por scripts.bat
Paso 2:
Abre el tarro en JD-GUI
¿Cómo se pueden descompilar los archivos DEX de Android (bytecode VM) en el código fuente de Java correspondiente?
A veces se obtiene un código roto cuando se usa dex2jar
/ apktool
, especialmente en los bucles. Para evitar esto, use jadx , que descompila el bytecode dalvik en el código fuente java, sin crear primero un archivo .jar
/ .class
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 inicio de DED
Instalar instrucciones y algunas explicaciones: Installation .
Se usó en un estudio bastante interesante sobre la seguridad de las mejores aplicaciones del mercado (no está realmente relacionado, solo si tiene curiosidad): una encuesta sobre la seguridad de las aplicaciones de Android
De hecho, recomiendo ir aquí: https://github.com/JesusFreke/smali
Proporciona BAKSMALI, que es la herramienta de ingeniería inversa más excelente para archivos DEX. Está hecho por JesusFreke, el tipo que creó las famosas ROM para Android.
Debian reciente tiene el paquete Python 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 los paquetes correspondientes:
sudo apt-get install androguard python-networkx
Descompilar el 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
El método más fácil para descompilar una aplicación de Android es descargar una aplicación llamada ShowJava desde playstore. Simplemente seleccione la aplicación que necesita ser descompilada de la lista de aplicaciones. Hay tres tipos diferentes de descompilador que puede usar para descompilar una aplicación:
CFR 0.110, JaDX 0.6.1 o FernFlower (descompilador analítico).
Esto se puede hacer en los siguientes cinco pasos:
- convertir el archivo apk a zip
- descomprimir el archivo
- extraer classes.dex de ella
- use dex to jar para convertir classes.dex en un archivo jar
- use jadx gui para abrir el archivo jar como código fuente de java
Mucho ha cambiado desde que la mayoría de estas respuestas fueron publicadas. Hoy en día hay muchas herramientas sencillas 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 desarrolladores de XDA.
Para aclarar un poco, hay dos caminos principales que puede tomar aquí dependiendo de lo que quiera lograr:
Descompilar el bytecode (dex) de Dalvik en una fuente de Java legible. Puede hacer esto fácilmente con dex2jar y jd-gui , como lo 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 100% utilizable. En otras palabras, puede leer la fuente, pero realmente no puede modificarla y volver a empaquetarla. Tenga en cuenta que si la fuente se ha ofuscado con proguard, el código fuente resultante será sustancialmente más difícil de desenredar.
La otra alternativa importante es desensamblar el smali de smali a smali , un lenguaje ensamblador diseñado precisamente para este propósito. He encontrado que la forma más sencilla 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. Puedes leer y modificar el smali o incluso reemplazar las clases completamente generando smali desde la nueva fuente Java (para hacer esto, puedes compilar tu fuente .java en archivos .class con javac, luego convertir tus archivos .class en archivos .dex con Android) dx compiler, 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 volver a empaquetar la copia de seguridad de apk fácilmente con apktool. Tenga en cuenta que apktool no firma la apk resultante, por lo que deberá cuidarlo como cualquier otra aplicación de Android .
Si sigues la ruta smali, deberías probar APK Studio , un IDE que automatiza algunos de los pasos anteriores para ayudarte a descompilar y recompilar una descarga e instalarla en un dispositivo.
En resumen, sus opciones son más bien para descomponerse en Java, que es más legible pero probablemente irreversible, o bien para desarmar a smali, que es más difícil de leer pero mucho más flexible para hacer cambios y volver a empaquetar una aplicación modificada. El enfoque que elija dependerá de lo que desee lograr.
Por último, la sugerencia de dare también es de destacar. Es una herramienta de retargeting 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.
Puede probar JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), esta es una herramienta perfecta para la descompilación de DEX.
Y sí, también está disponible en línea en (mi: 0) nuevo sitio: http://www.javadecompilers.com/apk/
Si no estás buscando descargar dex2jar, entonces usa el apk_grabber
python apk_grabber
para descompilar cualquier apk en archivos jar. Luego las lees con jd-gui.
Una vez que haya descargado su archivo APK, debe realizar los siguientes pasos para obtener un código / documento Java editable.
- Convierta su archivo apk a zip (mientras inicie su descarga, no vaya a la opción "guardar", simplemente vaya a "guardar como" y mencione su extensión como .zip) haciendo esto puede evitar APKTOOL ...
- Extraiga el archivo zip, allí puede encontrar algún nombre de archivo. por lo que ahora tenemos que convertir dex -> .class
- Para hacer eso, necesita "dex2jar" (puede descargarlo de dex2jar , luego de extraerlo, en el símbolo del sistema que tiene que mencionar como, [D: / dex2jar-0.09> dex2jar somefilename.dex] (Ten en cuenta que tu somefilename.dex debe estar dentro de la misma carpeta donde guardaste tu dex2jar.)
- Descargue jad desde 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 "jad.txt" puede aparecer en lugar de "jad.exe", así que simplemente cambie el nombre de su extensión as.exe para ejecutar)
- Finalmente, en el símbolo del sistema que tiene que mencionar como [D: / jad> jad -sjava yourfilename.class] , analizará su archivo de clase en un documento java editable.
La ingeniería inversa de Android es posible . Siga estos pasos para obtener el archivo .java del archivo apk.
Paso 1 . Utilizando dex2jar
- Genera un archivo .jar de un archivo .apk
- comando:
dex2jar sampleApp.apk
Paso 2 . Descompilar .jar usando JD-GUI
- descompila los archivos .class, es decir, nos ofuscaremos .java de nuevo de la apk.
Una versión más completa de la answer de fred :
Forma manual
Primero necesita una herramienta para extraer todas las clases (compiladas) en el DEX a un JAR.
Hay uno llamado dex2jar , que está hecho por un estudiante chino.
Luego, puede usar jd-gui para descompilar las clases en el JAR al código fuente.
La fuente resultante debe ser bastante legible, ya que dex2jar aplica algunas optimizaciones.
Forma automática
Puedes usar APKTool . .dex
automáticamente todas las clases ( .dex
), recursos ( .asrc
), luego convertirá XML binario a XML legible por humanos , y también desensamblará las clases por usted.
El desmontaje siempre será más robusto que el descompilado, especialmente con
JARs ofuscados con Pro Guard!
Simplemente diga a APKTool que decodifique el APK en un directorio, luego modifique lo que desea,
y finalmente codificarlo de nuevo a un APK. Eso es todo.
Importante: APKTool se desmonta. No se descompila .
El código generado no será fuente Java.
Pero debería poder leerlo, e incluso editarlo si está familiarizado con jasmin .
Si desea una fuente Java, repase el Manual .