Che cos'è il formato di file DEX?
Un file .dex è un Dalvik Executable - un contenitore di bytecode compilato progettato per essere eseguito nell'ambiente di sistema Android. Contiene codice compilato pronto per l'esecuzione su Android ed era originariamente interpretato dalla macchina virtuale Dalvik. A partire da Android 5.0 (Lollipop), il moderno ART (Android Runtime) compila il bytecode .dex in modalità ahead-of-time invece di interpretarlo, ma il formato rimane lo standard eseguibile di Android.
File DEX nei pacchetti APK
I file .dex si trovano comunemente all'interno dei pacchetti APK, utilizzati per installare nuovi software su Android. Storicamente ogni APK conteneva un singolo file classes.dex che memorizzava tutte le classi e i metodi utilizzati dall'applicazione. Le app più grandi ora utilizzano il multidex - dividendo il codice tra classes.dex, classes2.dex, classes3.dex e così via - per superare il limite di 65.536 metodi imposto da un singolo file.
Generazione e ispezione dei file DEX
Un file .dex può essere generato automaticamente come parte del processo di compilazione di Android o manualmente. La toolchain moderna utilizza il compilatore d8 (parte degli Android SDK build-tools) per tradurre il bytecode Java o Kotlin nel formato .dex. Ogni file si apre con la firma magica dex\n seguita da un numero di versione del formato a 3 cifre (come 035, 037, 038 o 039) e un byte nullo. Durante l'installazione, ART compila ulteriormente il .dex in codice nativo, producendo file .odex o .vdex memorizzati sul dispositivo.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file .dex di per sé non viene eseguito sul PC, quindi il semplice possesso è a basso rischio. Il vero contesto è l'analisi dei malware Android: le app dannose nascondono la loro logica nei DEX (a volte caricati dinamicamente al runtime), quindi un .dex estratto da un APK non attendibile potrebbe contenere codice nocivo. Ispeziona tali file solo in un ambiente sicuro (decompilatore/sandbox), mai installando l'APK principale. Diffida dei siti di download sospetti di «dex to exe / dex opener» - non offrono nulla di legittimo e spesso includono adware.
Dettagli del formato
in sintesiProgrammi che aprono file DEX
Dettagli tecnici
specifiche approfondite| Architettura VM | Basata su registri (a differenza della JVM basata su stack; ogni istruzione DEX nomina esplicitamente gli operandi dei registri, riducendo il numero totale di istruzioni) |
| Magic bytes | 8 byte all'offset 0 del file: ASCII «dex», nuova riga (0x0A), versione del formato a 3 cifre (es. 035, 037, 038, 039), byte nullo (0x00) |
| Versioni del formato | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); le cifre della versione sono incorporate nell'intestazione magica |
| Limite indice metodi | 65.536 metodi per file .dex (indice di riferimento del metodo a 16 bit); le app che superano questo limite dividono il codice tra classes2.dex, classes3.dex, ecc. |
| Campi di integrità | L'intestazione contiene un checksum Adler-32 e una firma SHA-1 di 20 byte che insieme coprono il resto del file |
| String pool | Tutte le stringhe letterali sono memorizzate una sola volta in un pool di stringhe condiviso e deduplicato; il bytecode fa riferimento alle stringhe tramite indice intero |
| Ordine dei byte | Little-endian per impostazione predefinita; l'intestazione incorpora la costante di endianness 0x12345678 per consentire il rilevamento dell'ordine dei byte invertito |
| Linguaggi sorgente | Java e Kotlin (e qualsiasi linguaggio destinato alla JVM); il compilatore d8 converte il bytecode .class o gli archivi .jar in DEX |
| Compilatore build-time | d8 (Android SDK build-tools 28.0.1+) ha sostituito il vecchio strumento dx; accetta file .class della JVM o archivi .jar come input |
| Compilazione ART ahead-of-time | Al momento dell'installazione, dex2oat di ART converte i .dex in codice macchina nativo, memorizzando i risultati come file .odex / .oat in /data/dalvik-cache |
| Tipo MIME | application/octet-stream (non esiste un tipo MIME registrato dedicato per il formato DEX) |
| Storia dell'esecuzione | Interpretato dalla Dalvik VM con JIT (Android 1.0-4.4); compilato ahead-of-time + JIT guidato dal profilo da ART (Android 5.0+) |
| Disassemblaggio e decompilazione | baksmali disassembla i .dex in assembly Smali; jadx e strumenti simili decompilano i .dex in codice sorgente Java leggibile |
| Posizione all'interno dell'APK | Memorizzato non compresso all'interno dell'archivio ZIP APK; la voce primaria è sempre denominata classes.dex, con classes2.dex e successivi per le app multidex |
| Rilasciato | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Standard aperto | Sì · royalty-free |
| Specifica | source.android.com |
Conversioni DEX
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file DEX.