Qu'est-ce que le format de fichier DEX ?
Un fichier .dex est un Dalvik Executable - un conteneur de bytecode compilé conçu pour s'exécuter dans l'environnement système Android. Il contient du code compilé prêt à être exécuté sur Android, et était à l'origine interprété par la machine virtuelle Dalvik. Depuis Android 5.0 (Lollipop), le système moderne ART (Android Runtime) compile le bytecode .dex à l'avance (AOT) plutôt que de l'interpréter, mais le format reste le format exécutable standard d'Android.
Fichiers DEX dans les paquets APK
Les fichiers .dex se trouvent couramment à l'intérieur des paquets APK, qui sont utilisés pour installer de nouveaux logiciels sur Android. Historiquement, chaque APK contenait un seul fichier classes.dex stockant toutes les classes et méthodes utilisées par l'application. Les applications plus volumineuses utilisent désormais le « multidex » - répartissant le code sur classes.dex, classes2.dex, classes3.dex et ainsi de suite - pour dépasser la limite de 65 536 méthodes imposée par un seul fichier.
Génération et inspection des fichiers DEX
Un fichier .dex peut être généré automatiquement dans le cadre du processus de construction Android, ou manuellement. La chaîne d'outils moderne utilise le compilateur d8 (faisant partie des Android SDK build-tools) pour traduire le bytecode Java ou Kotlin au format .dex. Chaque fichier s'ouvre avec la signature magique dex\n suivie d'un numéro de version de format à 3 chiffres (tel que 035, 037, 038 ou 039) et d'un octet nul. Lors de l'installation, ART compile davantage le .dex en code natif, produisant des fichiers .odex ou .vdex stockés sur l'appareil.
Sécurité et sûreté
RISQUE : MEDIUMUn fichier .dex en lui-même ne s'exécute pas sur votre PC, donc en posséder un présente un risque faible. Le véritable contexte est l'analyse de logiciels malveillants Android : les applications malveillantes cachent leur logique dans le DEX (parfois chargé dynamiquement au moment de l'exécution), donc un .dex extrait d'un APK non fiable peut contenir du code nuisible. N'inspectez ces fichiers que dans un environnement sûr (décompilateur/bac à sable), jamais en installant l'APK parent. Méfiez-vous des sites de téléchargement douteux de type « dex to exe / dex opener » - ils ne font rien de légitime et regroupent souvent des logiciels publicitaires.
Détails du format
en brefProgrammes qui ouvrent les fichiers DEX
Détails techniques
spécifications approfondies| Architecture VM | Basée sur les registres (contrairement à la JVM basée sur la pile ; chaque instruction DEX nomme explicitement les opérandes des registres, réduisant le nombre total d'instructions) |
| Octets magiques | 8 octets à l'offset 0 : ASCII « dex », saut de ligne (0x0A), version du format à 3 chiffres (ex: 035, 037, 038, 039), octet nul (0x00) |
| Versions du format | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+) ; les chiffres de version sont intégrés dans l'en-tête magique |
| Limite d'index de méthode | 65 536 méthodes par fichier .dex (index de référence de méthode 16 bits) ; les applications dépassant ce seuil répartissent le code sur classes2.dex, classes3.dex, etc. |
| Champs d'intégrité | L'en-tête contient une somme de contrôle Adler-32 et une signature SHA-1 de 20 octets qui couvrent ensemble le reste du fichier |
| Pool de chaînes | Toutes les chaînes littérales sont stockées une seule fois dans un pool de chaînes partagé et dédupliqué ; le bytecode référence les chaînes par index entier |
| Ordre des octets | Little-endian par défaut ; l'en-tête intègre la constante d'endianness 0x12345678 pour permettre la détection d'un ordre d'octets inversé |
| Langages sources | Java et Kotlin (et tout langage ciblant la JVM) ; le compilateur d8 convertit le bytecode .class ou les archives .jar en DEX |
| Compilateur au moment de la construction | d8 (Android SDK build-tools 28.0.1+) a remplacé l'ancien outil dx ; prend des fichiers .class JVM ou des archives .jar en entrée |
| Compilation ART AOT | Au moment de l'installation, l'outil dex2oat d'ART convertit le .dex en code machine natif, stockant les résultats sous forme de fichiers .odex / .oat dans /data/dalvik-cache |
| Type MIME | application/octet-stream (aucun type MIME dédié enregistré n'existe pour le format DEX) |
| Historique d'exécution | Interprété par la VM Dalvik avec JIT (Android 1.0-4.4) ; compilé en AOT + JIT guidé par profil par ART (Android 5.0+) |
| Désassemblage et décompilation | baksmali désassemble le .dex en assembleur Smali ; jadx et des outils similaires décompilent le .dex en code source Java lisible |
| Emplacement dans l'APK | Stocké sans compression à l'intérieur de l'archive ZIP APK ; l'entrée principale est toujours nommée classes.dex, avec classes2.dex et suivants pour les applications multidex |
| Publié | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Standard ouvert | Oui · libre de droits |
| Spécification | source.android.com |
Conversions DEX
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers DEX.