Voluntad
¿Cómo se pueden descompilar los archivos DEX de Android (código de bytes de VM) en el código fuente de Java correspondiente?
Es fácil
Obtén estas herramientas:
El código fuente es bastante legible ya que dex2jar realiza algunas optimizaciones.
Procedimiento:
Y aquí está el procedimiento sobre cómo descompilar:
Paso 1:
Convierta clases.dex en 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 1: En las máquinas Windows todos los
.sh
los guiones son reemplazados por.bat
guiones
Nota 2: En linux/mac no te olvides de
sh
obash
. El comando completo debe ser:
sh d2j-dex2jar.sh -f -o output_jar.jar apk_to_decompile.apk
Nota 3: Además, recuerde agregar permiso de ejecución a
dex2jar-X.X
directorio por ejemplosudo chmod -R +x dex2jar-2.0
Paso 2:
Abre el jar en JD-GUI
-
+1. Probé tanto Baksmali como Dex2jar. Dex2Jar+JD-Gui gana por brindarle un código fuente perfectamente legible para la mayoría de los archivos .dex.
–Jonathan Dumaine
22 de enero de 2011 a las 5:58
-
hola, ¿podrías compartir la forma en que vas? Te estaré muy agradecido.
– Arslan Anwar
22 de marzo de 2011 a las 12:45
-
La oración anterior sonó una campana – parece ser una semi-cita de aquí: geeknizer.com/decompile-reverse-engineer-android-apk (¿O al revés?). Los artículos vinculados explican brevemente las herramientas mencionadas anteriormente, así como Smali y APKTool.
– AgenteKnopf
19 de enero de 2012 a las 9:38
-
@JonathanDumaine eso depende. Si los archivos JAR están ofuscados y desea hacer pequeñas modificaciones, Backsmali es el único camino a seguir. ¡Prima! Con APKTool también recupera todos los XML, imágenes y otros recursos. Mira mi respuesta.
– Alba Méndez
30 de agosto de 2012 a las 11:15
-
@JonathanDumaine Estoy de acuerdo con jmendeth, apktool también es el camino a seguir si desea descompilar su apk, modificarlo y luego volver a compilarlo. Mientras usa dex2jar y jd-gui, la fuente es realmente legible, ¡pero no puede volver a compilar sin algunos errores!
– heredero oscuro
10 de septiembre de 2012 a las 10:13
Zach Lipton
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. Puedes hacer esto 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 un código utilizable al 100 %. En otras palabras, puede leer el código fuente, pero en realidad no puede modificarlo ni volver a empaquetarlo. Tenga en cuenta que si la fuente ha sido ofuscada con proguard, el código fuente resultante será sustancialmente más difícil de desenredar.
La otra gran alternativa es desensamblar el código de bytes para pequeño, un lenguaje ensamblador diseñado precisamente para este propósito. Descubrí que la forma más fácil de hacer esto 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 el smali o incluso reemplazar las clases por completo generando smali a partir de una nueva fuente de Java (para hacer esto, puede compilar su fuente .java en archivos .class con javac, luego convertir sus archivos .class en archivos .dex con Android’s dx y luego use baksmali (desensamblador smali) 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 del apk con apktool nuevamente. Tenga en cuenta que apktool no firma el apk resultante, por lo que deberá encargarse de eso como cualquier otra aplicación de Android.
Si vas por la ruta smali, tal vez quieras probar Estudio APKun IDE que automatiza algunos de los pasos anteriores para ayudarlo a descompilar y volver a compilar un apk e instalarlo en un dispositivo.
En resumen, sus opciones son prácticamente descompilar en Java, que es más legible pero probablemente irreversible, o desensamblar en 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 atrevimiento también es de destacar. Es una herramienta de reorientación para convertir archivos .dex y .apk en archivos java .class, de modo que puedan analizarse con las herramientas típicas de análisis estático de java.
-
prueba APK Studio, fue una elección increíble
– Sideeg MoHammed
9 de noviembre de 2020 a las 11:28
reflog
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ó las famosas ROM para Android.
-
smali es un lenguaje similar a un ensamblador basado en dalvik IL, no se puede traducir directamente a Java.
– reflog
15 de noviembre de 2010 a las 12:39
-
@endryha No hay herramientas capaces de hacer eso. Consulte esta pregunta para obtener más información.
– Alba Méndez
9 de enero de 2012 a las 18:03
-
Código, código, código,… ¿Por qué sólo código? Si usas APKTool obtienes todo ¡espalda! Y es tan simple como
./apktool d myprogram.apk
. Mira mi respuesta.– Alba Méndez
30 de agosto de 2012 a las 11:14
crifan
Ya que Dheeraj Bhaskar
La respuesta de es relativamente antigua ya que hace muchos años.
Aquí está mi última respuesta (año 2019):
Lógica principal
de dex
a java sourcecode
actualmente tiene dos tipos de solución:
One Step
: convertir directamentedex
ajava sourcecode
Two Step
: primera conversióndex
ajar
segundo convertidojar
ajava sourcecode
Solución de un paso: dex
directamente a java sourcecode
Instrumentos
Proceso
- descargar jadx-0.9.0.zipdescomprímelo, en
bin
la carpeta puede ver la línea de comandojadx
o versión GUIjadx-gui
haga doble clic para ejecutar la versión GUI:jadx-gui
- abierto
dex
expediente
entonces 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
a jar
Instrumentos
Proceso
descargar zip dex2jardescomprimir tengo d2j-dex2jar.sh
después:
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
Paso 2: jar
a java sourcecode
Instrumentos
- jd-gui: más popular, pero
many
el código descompilará el error - FRC: popular,
minor
el código descompilará el error - Proción: popular,
no
error de descompilación de código- Herramienta GUI basada en
Procyon
- Herramienta GUI basada en
- otros
Proceso
aquí demostración Procyon
convertir jar a código fuente de Java:
descargar procyon-descompilador-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 Código VSC para abrir el código fuente exportado, tenga este aspecto:
Conclusión
Corrección de la conversión: Jadx
> Procyon
> CRF
> JD-GUI
Uso recomendado: (soluciones de un solo paso) Jadx
para una explicación más detallada, consulte mi en línea Chino libro electronico: 安卓应用的安全和破解
Alba Méndez
Una versión más completa de la respuesta de fred:
forma manual
Primero necesitas una herramienta para extracto todas las clases (compiladas) en el DEX a un JAR.
Hay uno llamado dex2jarque está hecho por un estudiante chino.
Entonces, puedes usar jd-gui a descompilar 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 APKHerramienta. Va a automáticamente extraer todas las clases (.dex
), recursos (.asrc
), entonces se convertirá XML binario a XML legible por humanosy también será desmontar las clases para ti.
El desmontaje siempre será más robusto que la descompilación, especialmente con
¡JARs ofuscados con Pro Guard!
Solo dile a APKTool que descodificar el APK en un directorio, luego modificar Lo que quieras,
y finalmente codificar de vuelta a un APK. Eso es todo.
Importante: APKHerramienta desmonta. no lo hace descompilar.
El código generado no será fuente de Java.
Pero debería poder leerlo e incluso editarlo si está familiarizado con jazmín.
Si desea fuente de Java, por favor vaya a la forma manual.
polimero
A veces obtienes un código roto, cuando usas dex2jar
/apktool
, sobre todo en bucles. Para evitar esto, utilice jadxque descompila el código de bytes dalvik en el código fuente de Java, sin crear un .jar
/.class
presentar primero como dex2jar
lo hace (apktool usa dex2jar, creo). También es de código abierto y está en desarrollo activo. Incluso tiene una GUI, para fanáticos de la GUI. ¡Intentalo!
ishandutta2007
he utilizado
- dex2jar + jd-gui
- javadecompilers.com
- enjarificar
- apktool
Pero ninguna supera a las propias herramientas de Google.
-
Más uno para Enjarify. En mi experiencia personal, ha demostrado dar mejores resultados en comparación con d2j
– qre0ct
25 de septiembre de 2018 a las 4:04
Echar un vistazo aquí. Obtendrá posibles pistas a partir de ahí para seguir adelante.
–Kevin Boyd
9 de agosto de 2009 a las 6:47
La información actualizada está disponible en el blog del centro de codificadores: coders-hub.com/2013/04/how-to-convert-apk-file-into-source.html
– Md. Mohsin
23 de septiembre de 2015 a las 7:31
Si tienes dinero, compra jebde lo contrario usa jadxmira aquí por qué
– polimero
3 de noviembre de 2015 a las 7:42
Hay una nueva plataforma cruzada (java) y una herramienta de código abierto que le permite hacer eso, solo consulte bytecodeviewer: stackoverflow.com/a/36557898/795245
– Gomino
11/04/2016 a las 19:48