descompilar DEX en Java de código fuente
-
12-09-2019 - |
Pregunta
¿Cómo se puede descompilar Android DEX (VM bytecode) de los archivos en el correspondiente código fuente de Java?
Solución
Es fácil
Obtener estas herramientas:
1) dex2jar para traducir archivos DEX al JAR archivos
2) JD-GUI para ver los archivos de Java en el frasco
El código fuente es bastante legible como dex2jar hace algunas optimizaciones.
Procedimiento:
Y aquí está el procedimiento de cómo descompilar:
Paso 1:
Convertir en classes.dex test_apk-debug.apk a test_apk-debug_dex2jar.jar
d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
d2j-dex2jar.sh -f -o output_jar.jar dex_to_decompile.dex
Nota: En las máquinas Windows todos los scripts
.sh
se sustituyen por guiones.bat
Paso 2:
Abrir el frasco en JD-GUI
Otros consejos
Para aclarar un poco, hay dos caminos principales que usted podría tomar aquí en función de lo que quiere lograr:
descompilar el código de bytes Dalvik (DEX) en fuente de Java legible. Esto se puede hacer fácilmente con dex2jar y jdgui , como se menciona Fred. La fuente resultante es útil para leer y comprender la funcionalidad de una aplicación, pero probablemente no producir 100% código utilizable. En otras palabras, se puede leer la fuente, pero realmente no se puede modificar y volver a empaquetar. 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 es importante desmontar el código de bytes a smali , un lenguaje ensamblador diseñado para precisamente este propósito. He descubierto que la mejor manera de hacerlo es con apktool . Una vez que tenga instalado apktool, sólo puede apuntar a un archivo APK, y obtendrá un archivo smali para cada clase contenida en la solicitud. Puede leer y modificar el smali o incluso reemplazar las clases por completo mediante la generación de smali nueva fuente de Java (para hacer esto, usted podría compilar las fuentes .java a .class archivos con javac, a continuación, convertir los archivos .class a .dex archivos con el Android de compilador dx y, a continuación, utilizar baksmali (desensamblador smali) para convertir el .dex a .smali archivos, como se describe en esta pregunta . es posible que haya un acceso directo aquí). Una vez que haya terminado, puede empaquetar fácilmente el apk copia de seguridad con apktool nuevo. Tenga en cuenta que apktool no firmar el apk resultante, por lo que tendrá que cuidar de que al igual que cualquier otra aplicación Android .
Si vas a la ruta smali, es posible que desee probar APK Estudio , un IDE que automatiza algunos de los pasos anteriores para ayudarle con la descompilación y recompilar un APK e instalarlo en un dispositivo.
En resumen, las opciones son más o menos bien a descompilar en Java, que es más fácil de leer, pero probablemente irreversibles, o desarmar 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. ¿Qué enfoque que elija dependerá de lo que busca alcanzar.
Por último, la sugerencia de atreven también es de nota. Es una herramienta para convertir archivos de retargeting .dex y .apk de archivos de Java .class, para que puedan ser analizados utilizando herramientas de análisis estático típica de Java.
Me realmente recomiendo ir aquí: https://github.com/JesusFreke/smali
Proporciona BAKSMALI, que es una excelente herramienta más de ingeniería inversa para los archivos DEX. Ha hecho por JesusFreke, el tipo que creó las ROMs fameous para Android.
Una versión más completa de Fred 's respuesta :
forma manual
Lo primero que necesita una herramienta para extracto todas las clases (compilados) en el DEX a un JAR.
Hay uno llamado dex2jar , que está hecho por un estudiante chino.
A continuación, puede utilizar JD-GUI a descompilar las clases de JAR al código fuente.
La fuente resultante debería ser bastante fácil de leer, como dex2jar aplica algunas optimizaciones.
forma automática
Puede utilizar APKTool . Será automáticamente extraer todas las clases (.dex
), recursos (.asrc
), entonces se convertirá XML binario a XML legible , y lo hará también en dissassemble las clases para usted.
El desmontaje siempre será más robusta que la descompilación, sobre todo con
JAR ofuscado con la Guardia Pro!
Sólo decirle a APKTool decodificación el APK en un directorio, a continuación, Modificar lo que quiere,
y, finalmente, codificar de nuevo a un APK. Eso es todo.
Importante: APKTool dissassembles . No hace descompilar .
El código generado no será fuente de Java.
Sin embargo, usted debe ser capaz de leer, e incluso editarlo si está familiarizado con jasmin .
Si quieres fuente de Java, visite el forma manual .
A veces tienen el código roto, cuando se utiliza dex2jar
/ apktool
, sobre todo en los bucles. Para evitar esto, utilice jadx , que decompiles código de bytes Dalvik en el código fuente de Java, sin crear un archivo .jar
/ .class
primero como dex2jar
hace ( apktool utiliza dex2jar creo). También es de código abierto y en desarrollo activo. Incluso tiene una interfaz gráfica de usuario, por Gui-fanáticos. Inténtelo!
Ya que nadie lo mencionó, hay una herramienta más: DED página
Instalar de cómo hacerlo y algunas explicaciones: instalación .
Fue utilizado en un estudio muy interesante de la seguridad de las mejores aplicaciones de mercado (no realmente relacionados, solo si tienes curiosidad): Una encuesta de seguridad de aplicaciones Android
Una vez que ha descargado el archivo APK, usted tiene que hacer los siguientes pasos para obtener un código java / documento editable.
- Convertir el archivo apk a postal (mientras iniciar la descarga no van con opción "guardar", sólo tiene que ir con "guardar como" y hablar de su extensión como .zip) haciendo como esto puede evitar APKTOOL ...
- Extrae el archivo zip, allí se puede encontrar somefilename.dex. por lo que ahora tenemos que convertir dex -> .class
- Para ello, es necesario "dex2jar" (se puede descargar desde http://code.google.com/p / dex2jar / , después se extrae, en el símbolo del sistema se tiene que mencionar como, [D: \ dex2jar-0.09> dex2jar somefilename.dex] (tenga en cuenta que su somefilename.dex debe estar dentro de la misma carpeta en la que tiene mantener su dex2jar.)
- http://www.viralpatel.net/blogs/download/jad/jad. zip y extraerlo. Una vez extraído se pueden ver dos archivos como "jad.exe" y "readme.txt" (a veces "jad.txt" puede allí en vez de "jad.exe", por lo que sólo cambiar el nombre de su extensión a as.exe ejecución)
- Por último, en el símbolo del sistema se tiene que mencionar como [D: \ jad> JAD -sjava yourfilename.class] se analizará el archivo de clase Java en un documento editable.
Android ingeniería inversa es posible . Siga estos pasos para obtener .java archivo del archivo APK.
Paso 1. Usando dex2jar
- Generar archivo .jar del archivo apk
- comando:
dex2jar sampleApp.apk
Paso 2. Descompilar .jar usando JD-GUI
- decompila los archivos .class es decir, vamos a llegar ofuscado .java atrás de la apk.
Debian reciente paquete de Python tienen 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 paquetes correspondientes:
sudo apt-get install androguard python-networkx
Descompilar archivo DEX:
$ androdd -i classes.dex -o ./dir-for-output
Extracto de classes.dex
de Apk + Decompile:
$ androdd -i app.apk -o ./dir-for-output
archivo APK es nada más que archivos JAR (Java), se puede extraer archivos de archivos a través de:
$ unzip app.apk -d ./dir-for-output
Muchas cosas han cambiado desde que la mayoría de estas respuestas fueron publicadas. Hoy en día hay un muchas herramientas fáciles con interfaz gráfica de usuario de, como los siguientes:
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.
Desde Dheeraj Bhaskar
's respuesta es relativamente antigua como muchos en los últimos años.
Aquí está mi más reciente (año 2019) respuesta:
La Lógica Principal
de dex
a java sourcecode
, actualmente tiene dos tipos de solución:
One Step
:convertir directamentedex
ajava sourcecode
Two Step
:primero convertirdex
ajar
, segunda convertirjar
ajava sourcecode
A un paso de la solución: dex
directamente a java sourcecode
Herramientas
Proceso de
- descargar jadx-0.9.0.zip, descomprimirlo, en
bin
la 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
- abierto
dex
archivo
a continuación, puede mostrar el código fuente de java:
File
->save as gradle project
luego se metió de java de código fuente:
Dos pasos de solución de
Paso1: dex
a jar
Herramientas
Proceso de
descargar dex2jar zip, tienes que descomprimir d2j-dex2jar.sh
, y , a continuación:
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:
➜ v3.4.8 /Users/crifan/dev/dev_tool/android/reverse_engineering/dex-tools/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.huili.readingclub8825612.dex
dex2jar com.huili.readingclub8825612.dex -> ./com.huili.readingclub8825612-dex2jar.jar
➜ v3.4.8 ll
-rw------- 1 crifan staff 9.5M 3 21 10:00 com.huili.readingclub8825612-dex2jar.jar
-rw------- 1 crifan staff 8.4M 3 19 14:04 com.huili.readingclub8825612.dex
Paso2: jar
a java sourcecode
Herramientas
- jd-gui:la mayoría de los populares, pero
many
código descompilar error - CRF:popular,
minor
código descompilar error - Procyon:popular,
no
código descompilar error- Herramienta GUI basado en
Procyon
- Herramienta GUI basado en
- otros
- Krakatoa
- Fernflower
- antiguo: AndroChef
- etc.
Proceso de
aquí demo Procyon
convertir jar de java de código fuente:
descargar procyon-decompiler-0.5.34.jar
a continuación, utilizando 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
mediante el editor VSCode para abrir exportar el código fuente, este aspecto:
Conclusión
La conversión de la corrección : Jadx
> Procyon
> CRF
> JD-GUI
Recomendamos utilizar:(Un paso de la solución) Jadx
para una explicación más detallada, por favor consulte mi online Chino ebook: 安卓应用的安全和破解
Usted puede tratar de JADX ( https://bitbucket.org/mstrobel/procyon/wiki / Java% 20Decompiler ), esta es una herramienta perfecta para DEX descompilación.
Y sí, sino que también está disponible en línea en (mi: 0)) nuevo sitio: http: // www .javadecompilers.com / APK /
Esto puede hacerse en los siguientes cinco pasos:
Esta joya hace estas cosas de forma automática, incluso la instalación de requerido herramientas
- convertir el archivo apk a postal
- descomprimir el archivo
- extracto classes.dex de ella
- dex uso del JAR para convertir classes.dex en archivo jar
- GUI uso jadx para abrir el archivo JAR como código fuente de Java
método más fácil para descomponer una aplicación para Android es descargar una aplicación llamada ShowJava desde playstore. Sólo tienes que seleccionar la aplicación que necesita ser descompilación de la lista de aplicaciones. Hay tres decompilador diferentes que puede utilizar para descomponer una aplicación a saber, -
CFR 0.110, JaDX 0.6.1 o FernFlower (decompilador analítica).
Si usted no está buscando para descargar dex2jar, a continuación, sólo tiene que utilizar la secuencia de comandos de Python rel="nofollow"> apk_grabber
para descomponer cualquier APK en archivos jAR. Luego de leerlos con JD-GUI.