¿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
/.class
como lodex2jar
hace (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 Bhaskar
la respuesta es relativamente antigua como muchos años atrás.Aquí está mi última respuesta (año 2019):
Lógica principal
de
dex
ajava sourcecode
, actualmente tiene dos tipos de solución:One Step
: convertir directamentedex
ajava sourcecode
Two Step
: primer convertirdex
ajar
, segundo convertirjar
ajava sourcecode
Solución de un paso:
dex
directamente ajava sourcecode
Herramientas
Proceso
bin
carpeta puede ver la línea de comandosjadx
o la versión GUIjadx-gui
, haga doble clic para ejecutar la versión GUI:jadx-gui
dex
archivoentonces puede mostrar el código fuente de Java:
File
->save as gradle project
luego obtuve el código fuente de Java:
Solución de dos pasos
Paso 1:
dex
ajar
Herramientas
Proceso
descargue dex2jar zip , descomprima got
d2j-dex2jar.sh
, luego:apk
ajar
:sh d2j-dex2jar.sh -f ~/path/to/apk_to_decompile.apk
dex
ajar
:sh d2j-dex2jar.sh -f ~/path/to/dex_to_decompile.dex
ejemplo:
Paso2:
jar
ajava sourcecode
Herramientas
many
código descompilará el errorminor
código descompilará el errorno
error de descompilación de código popularProcyon
Proceso
aquí la demostración
Procyon
convierte 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 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 VSCode para abrir el código fuente exportado, tenga este aspecto:
Conclusión
Corrección de conversión:
Jadx
>Procyon
>CRF
>JD-GUI
Uso recomendado: (solución de un paso)
Jadx
Para 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.dex
solo consiguió excepción:java.io.IOException: the src file not a .dex or zip file
d2j-dex2jar.bat "D:\android\some_dex_file.dex"
está bien o no?>d2j-dex2jar.bat file.dex
pero no está bien. tal vez es porque mi.dex
archivo fue copiadodalvik-cache
?dex is copied from dalvik-cache
, debería serdex is decompiled from apk
Una 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
.dex
archivo 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.apk
Paso 2 . Descompilación de .jar usando JD-GUI
fuente
Debian reciente tiene paquete Python
androguard
:Instale los paquetes correspondientes:
Descompilar archivo DEX:
Extracto
classes.dex
de 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_grabber
script python para descompilar cualquier apk en archivos jar. Luego los lees con jd-gui.fuente