¿Qué es el formato de archivo DEX?
Un archivo .dex es un Dalvik Executable: un contenedor de bytecode compilado diseñado para ejecutarse en el entorno del sistema Android. Contiene código compilado listo para ser ejecutado en Android y originalmente era interpretado por la máquina virtual Dalvik. Desde Android 5.0 (Lollipop), el moderno ART (Android Runtime) compila el bytecode .dex de forma anticipada (ahead-of-time) en lugar de interpretarlo, pero el formato sigue siendo el estándar ejecutable de Android.
Archivos DEX en paquetes APK
Los archivos .dex se encuentran comúnmente dentro de paquetes APK, que se utilizan para instalar nuevo software en Android. Históricamente, cada APK contenía un único archivo classes.dex que almacenaba todas las clases y métodos utilizados por la aplicación. Las aplicaciones más grandes ahora utilizan multidex -dividiendo el código en classes.dex, classes2.dex, classes3.dex, etc.- para superar el límite de 65.536 métodos impuesto por un solo archivo.
Generación e inspección de archivos DEX
Un archivo .dex puede generarse automáticamente como parte del proceso de compilación de Android o manualmente. La cadena de herramientas moderna utiliza el compilador d8 (parte de Android SDK build-tools) para traducir el bytecode de Java o Kotlin al formato .dex. Cada archivo comienza con la firma mágica dex\n seguida de un número de versión de formato de 3 dígitos (como 035, 037, 038 o 039) y un byte nulo. Durante la instalación, ART compila aún más el .dex en código nativo, produciendo archivos .odex o .vdex almacenados en el dispositivo.
Seguridad y protección
RIESGO: MEDIUMUn archivo .dex en sí mismo no se ejecuta en su PC, por lo que tener uno es de bajo riesgo. El contexto real es el análisis de malware de Android: las aplicaciones maliciosas ocultan su lógica en DEX (a veces cargados dinámicamente en tiempo de ejecución), por lo que un .dex extraído de un APK no confiable puede contener código dañino. Solo inspeccione tales archivos en un entorno seguro (descompilador/sandbox), nunca instalando el APK de origen. Tenga cuidado con los sitios de descarga sospechosos de «dex to exe / dex opener»; no hacen nada legítimo y a menudo incluyen adware.
Detalles del formato
en pocas palabrasProgramas que abren archivos DEX
Detalles técnicos
especificación profunda| Arquitectura de VM | Basada en registros (a diferencia de la JVM basada en pila; cada instrucción DEX nombra explícitamente los operandos de los registros, reduciendo el recuento total de instrucciones) |
| Bytes mágicos | 8 bytes en el desplazamiento 0 del archivo: ASCII «dex», salto de línea (0x0A), versión de formato de 3 dígitos (ej. 035, 037, 038, 039), byte nulo (0x00) |
| Versiones de formato | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); los dígitos de la versión están incrustados en el encabezado mágico |
| Límite de índice de métodos | 65.536 métodos por archivo .dex (índice de referencia de método de 16 bits); las aplicaciones que superan esto dividen el código en classes2.dex, classes3.dex, etc. |
| Campos de integridad | El encabezado contiene una suma de comprobación Adler-32 y una firma SHA-1 de 20 bytes que juntas cubren el resto del archivo |
| Pool de cadenas | Todos los literales de cadena se almacenan una vez en un pool de cadenas compartido y deduplicado; el bytecode hace referencia a las cadenas por índice entero |
| Orden de bytes | Little-endian por defecto; el encabezado incluye la constante de endianness 0x12345678 para permitir la detección de un orden de bytes invertido |
| Lenguajes de origen | Java y Kotlin (y cualquier lenguaje orientado a la JVM); el compilador d8 convierte el bytecode .class o archivos .jar a DEX |
| Compilador en tiempo de construcción | d8 (Android SDK build-tools 28.0.1+) reemplazó a la herramienta heredada dx; toma archivos .class de la JVM o archivos .jar como entrada |
| Compilación ART ahead-of-time | Al momento de la instalación, dex2oat de ART convierte .dex en código máquina nativo, almacenando los resultados como archivos .odex / .oat en /data/dalvik-cache |
| Tipo MIME | application/octet-stream (no existe un tipo MIME registrado dedicado para el formato DEX) |
| Historial de ejecución | Interpretado por Dalvik VM con JIT (Android 1.0-4.4); compilado mediante ahead-of-time + JIT guiado por perfiles por ART (Android 5.0+) |
| Desensamblado y descompilación | baksmali desensambla .dex a ensamblador Smali; jadx y herramientas similares descompilan .dex de nuevo a código fuente Java legible |
| Ubicación dentro del APK | Almacenado sin comprimir dentro del archivo ZIP del APK; la entrada principal siempre se llama classes.dex, con classes2.dex en adelante para aplicaciones multidex |
| Lanzado | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | source.android.com |
Conversiones de DEX
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos DEX.