Wat is het DEX-bestandsformaat?
Een .dex-bestand is een Dalvik Executable - een gecompileerde bytecode-container ontworpen om te draaien in de Android-systeemomgeving. Het bevat gecompileerde code die klaar is om te worden uitgevoerd op Android, en werd oorspronkelijk geïnterpreteerd door de Dalvik virtuele machine. Sinds Android 5.0 (Lollipop) compileert de moderne ART (Android Runtime) de .dex-bytecode vooraf (ahead-of-time) in plaats van deze te interpreteren, maar het formaat blijft het standaard uitvoerbare formaat voor Android.
DEX-bestanden in APK-pakketten
.dex-bestanden worden gewoonlijk aangetroffen in APK-pakketten, die worden gebruikt voor het installeren van nieuwe software op Android. Historisch gezien bevatte elke APK een enkel classes.dex-bestand waarin alle klassen en methoden werden opgeslagen die door de applicatie werden gebruikt. Grotere apps gebruiken nu multidex - waarbij de code wordt gesplitst over classes.dex, classes2.dex, classes3.dex enzovoort - om de limiet van 65.536 methoden van een enkel bestand te overschrijden.
DEX-bestanden genereren en inspecteren
Een .dex-bestand kan automatisch worden gegenereerd als onderdeel van het Android-bouwproces, of handmatig. De moderne toolchain gebruikt de d8-compiler (onderdeel van Android SDK build-tools) om Java- of Kotlin-bytecode te vertalen naar het .dex-formaat. Elk bestand begint met de „magic signature” dex\n gevolgd door een 3-cijferig versienummer (zoals 035, 037, 038 of 039) en een null-byte. Tijdens de installatie compileert ART de .dex verder naar native code, wat resulteert in .odex- of .vdex-bestanden die op het apparaat worden opgeslagen.
Beveiliging & veiligheid
RISICO: MEDIUMEen .dex zelf draait niet op uw pc, dus het simpelweg bezitten ervan is een laag risico. De echte context is Android-malwareanalyse: kwaadaardige apps verbergen hun logica in DEX (soms dynamisch geladen tijdens runtime), dus een .dex die u uit een onbetrouwbare APK hebt geëxtraheerd, kan schadelijke code bevatten. Inspecteer dergelijke bestanden alleen in een veilige omgeving (decompiler/sandbox), nooit door de bovenliggende APK te installeren. Wees op uw hoede voor dubieuze „dex to exe / dex opener” downloadsites - deze doen niets legitiems en bevatten vaak adware.
Formaatdetails
in een notendopProgramma's die DEX-bestanden openen
Technische details
diepe specificaties| VM-architectuur | Op registers gebaseerd (in tegenstelling tot de op stack gebaseerde JVM; elke DEX-instructie benoemt expliciet register-operanden, wat het totale aantal instructies vermindert) |
| Magic bytes | 8 bytes op bestandsoffset 0: ASCII „dex”, newline (0x0A), 3-cijferige formaatversie (bijv. 035, 037, 038, 039), null-byte (0x00) |
| Formaatversies | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); versienummers zijn ingebed in de magic header |
| Limiet methode-index | 65.536 methoden per .dex-bestand (16-bit methode-referentie-index); apps die dit overschrijden splitsen code over classes2.dex, classes3.dex, enz. |
| Integriteitsvelden | Header bevat een Adler-32 checksum en een 20-byte SHA-1 handtekening die samen de rest van het bestand dekken |
| String pool | Alle string-literals worden één keer opgeslagen in een gedeelde, gededupliceerde string pool; bytecode verwijst naar strings via een integer-index |
| Byte-volgorde | Standaard Little-endian; de header bevat de endianness-constante 0x12345678 om detectie van omgekeerde byte-volgorde mogelijk te maken |
| Brontalen | Java en Kotlin (en elke taal die de JVM als doel heeft); de d8-compiler converteert .class-bytecode of .jar-archieven naar DEX |
| Build-time compiler | d8 (Android SDK build-tools 28.0.1+) verving de verouderde dx-tool; accepteert JVM .class-bestanden of .jar-archieven als invoer |
| ART ahead-of-time compilatie | Tijdens installatie converteert dex2oat van ART de .dex naar native machinecode, waarbij resultaten worden opgeslagen als .odex / .oat bestanden in /data/dalvik-cache |
| MIME-type | application/octet-stream (er bestaat geen specifiek geregistreerd MIME-type voor het DEX-formaat) |
| Uitvoeringsgeschiedenis | Geïnterpreteerd door Dalvik VM met JIT (Android 1.0-4.4); ahead-of-time + profielgestuurde JIT gecompileerd door ART (Android 5.0+) |
| Disassemblage en decompilatie | baksmali disassembleert .dex naar Smali-assembly; jadx en soortgelijke tools decompileren .dex terug naar leesbare Java-broncode |
| Locatie binnen APK | Ongecomprimeerd opgeslagen in het APK ZIP-archief; de primaire ingang heet altijd classes.dex, met classes2.dex en verder voor multidex-apps |
| Uitgebracht | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | source.android.com |
DEX conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over DEX-bestanden.