¿Cómo se puede descompilar archivos Android DEX (VM bytecode) en el código fuente Java correspondiente?
706
¿Cómo se puede descompilar archivos Android DEX (VM bytecode) en el código fuente Java correspondiente?
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 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
documentación dex2jar
Paso 2:
Abra el tarro en JD-GUI
fuente
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. Puede 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 es probable que no produzca 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á mucho más difícil de desenredar.
La otra alternativa importante es desmontar el código de bytes 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 pequeño para cada clase contenida en la aplicación. Puede leer y modificar las clases smali o incluso reemplazarlas por completo mediante la generación de smali a partir de una nueva fuente Java (para hacer esto, puede compilar su fuente .java en archivos .class con javac, luego convertir sus archivos .class en archivos .dex con Android) compilador dx, y luego use baksmali (pequeño desensamblador) 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 fácilmente la apk con apktool. Tenga en cuenta que apktool no firma la apk resultante, por lo que tendrá que ocuparse de eso como cualquier otra aplicación de Android .
Si va por la ruta pequeña, puede probar APK Studio , un IDE que automatiza algunos de los pasos anteriores para ayudarlo a descompilar y recompilar un apk e instalarlo en un dispositivo.
En resumen, sus opciones son más o menos 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 hacer cambios y reempaquetar una aplicación modificada. El enfoque que elija dependerá de lo que desee lograr.
Por último, la sugerencia de atrevimiento también es notable. Es una herramienta de reorientación para convertir archivos .dex y .apk a archivos java .class, de modo que puedan analizarse utilizando las herramientas de análisis estático java típicas.
fuente
De hecho, recomiendo 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.
fuente
./apktool d myprogram.apk. Mira mi respuesta .Una versión más completa de la respuesta 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 debería ser bastante legible, ya que dex2jar aplica algunas optimizaciones.
Manera automática
Puedes usar APKTool . Será automáticamente extraer todas las clases (
.dex), recursos (.asrc), entonces se convertirá XML binario a XML legible por humanos , y también será dissassemble las clases para usted.¡El desmontaje siempre será más robusto que el descompilación, especialmente con
JAR ofuscados con Pro Guard!
Solo dígale a APKTool que decodifique el APK en un directorio, luego modifique lo que desee
y finalmente vuelva a codificarlo en un APK. Eso es todo.
: Importante APKTool dissassembles . 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, vaya a la forma Manual .
fuente
A veces obtienes código roto, cuando usas
dex2jar/apktool, más notablemente en bucles. Para evitar esto, use jadx , que descompila el bytecode de dalvik en código fuente de java, sin crear primero un archivo.jar/.classcomo lodex2jarhace (apktool usa dex2jar, creo). También es de código abierto y en desarrollo activo. Incluso tiene una GUI, para fanáticos de la GUI. ¡Intentalo!fuente
javac "$(find . -name '*.java')"?He usado
Pero ninguno supera las herramientas de Google
1) Android Studio 2.x: compilar> analizar apk
2) Android Studio 3.0: perfil o depuración APK

fuente
Como nadie mencionó esto, hay una herramienta más: la página de inicio de DED
Instalar instrucciones y algunas explicaciones: Instalación .
Se utilizó en un estudio bastante interesante sobre la seguridad de las principales aplicaciones del mercado (no realmente relacionado, solo si tiene curiosidad): una encuesta sobre la seguridad de las aplicaciones de Android
fuente
Dado que
Dheeraj Bhaskarla respuesta es relativamente antigua como muchos años atrás.Aquí está mi última respuesta (año 2019):
Lógica principal
de
dexajava sourcecode, actualmente tiene dos tipos de solución:One Step: convertir directamentedexajava sourcecodeTwo Step: primer convertirdexajar, segundo convertirjarajava sourcecodeSolución de un paso:
dexdirectamente ajava sourcecodeHerramientas
Proceso
bincarpeta puede ver la línea de comandosjadxo la versión GUIjadx-gui, haga doble clic para ejecutar la versión GUI:jadx-guidexarchivoentonces puede mostrar el código fuente de Java:
File->save as gradle projectluego obtuve el código fuente de Java:
Solución de dos pasos
Paso 1:
dexajarHerramientas
Proceso
descargue dex2jar zip , descomprima got
d2j-dex2jar.sh, luego:apkajar:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apkdexajar:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dexejemplo:
Paso2:
jarajava sourcecodeHerramientas
manycódigo descompilará el errorminorcódigo descompilará el errornoerror de descompilación de código popularProcyonProceso
aquí la demostración
Procyonconvierte el código fuente jar a java:descarga procyon-decompiler-0.5.34.jar
luego usando la sintaxis:
java -jar /path/to/procyon-decompiler-0.5.34.jar -jar your_to_decompile.jar -o outputFolderNameejemplo:
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.readingclub8825612usando el editor VSCode para abrir el código fuente exportado, tenga este aspecto:
Conclusión
Corrección de conversión:
Jadx>Procyon>CRF>JD-GUIUso recomendado: (solución de un paso)
JadxPara obtener una explicación más detallada, consulte mi ebook chino en línea : 安卓 应用 的 安全 和 破解
fuente
dex2jar-2.0>d2j-dex2jar.bat -f D:\android\some_dex_file.dexsolo consiguió excepción:java.io.IOException: the src file not a .dex or zip filed2j-dex2jar.bat "D:\android\some_dex_file.dex"está bien o no?>d2j-dex2jar.bat file.dexpero no está bien. tal vez es porque mi.dexarchivo fue copiadodalvik-cache?dex is copied from dalvik-cache, debería serdex is decompiled from apkUna vez que haya descargado su archivo APK, debe realizar los siguientes pasos para obtener un código / documento editable de Java.
fuente
Con Dedexer , puede desmontar el
.dexarchivo en el código de bytes de Dalvik (.ddx).Descompilar hacia Java no es posible hasta donde yo sé.
Puede leer sobre el código de bytes de Dalvik aquí .
fuente
La ingeniería inversa de Android es posible . Siga estos pasos para obtener el archivo .java del archivo apk.
Paso 1 . Usando dex2jar
dex2jar sampleApp.apkPaso 2 . Descompilación de .jar usando JD-GUI
fuente
Debian reciente tiene paquete Python
androguard:Instale los paquetes correspondientes:
Descompilar archivo DEX:
Extracto
classes.dexde Apk + Descompilar:El archivo Apk no es más que un archivo Java (JAR), puede extraer archivos del archivo a través de:
fuente
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:
El mejor lugar para encontrarlos es en el foro de desarrolladores de XDA.
fuente
Puede probar JADX ( https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ), esta es una herramienta perfecta para la descompilación DEX.
Y sí, también está disponible en línea en (mi: 0)) nuevo sitio: http://www.javadecompilers.com/apk/
fuente
Esto se puede hacer en los siguientes cinco pasos:
Esta gema hace estas cosas por usted automáticamente, incluso la instalación de las herramientas necesarias.
fuente
El método más fácil para descompilar una aplicación de Android es descargar una aplicación llamada ShowJava de la tienda de juegos. Simplemente seleccione la aplicación que necesita descompilarse de la lista de aplicaciones. Hay tres descompiladores diferentes que puede usar para descompilar una aplicación, a saber:
fuente
Si no está buscando descargar dex2jar, simplemente use el
apk_grabberscript python para descompilar cualquier apk en archivos jar. Luego los lees con jd-gui.fuente