O que é o formato de ficheiro DEX?
Um arquivo .dex é um Dalvik Executable - um contêiner de bytecode compilado projetado para rodar no ambiente do sistema Android. Ele contém código compilado pronto para ser executado no Android e era originalmente interpretado pela máquina virtual Dalvik. Desde o Android 5.0 (Lollipop), o moderno ART (Android Runtime) compila o bytecode .dex antecipadamente (ahead-of-time) em vez de interpretá-lo, mas o formato continua sendo o padrão executável do Android.
Arquivos DEX em pacotes APK
Arquivos .dex são comumente encontrados dentro de pacotes APK, que são usados para instalar novos softwares no Android. Historicamente, cada APK continha um único arquivo classes.dex armazenando todas as classes e métodos usados pelo aplicativo. Aplicativos maiores agora usam multidex - dividindo o código entre classes.dex, classes2.dex, classes3.dex e assim por diante - para exceder o limite de 65.536 métodos imposto por um único arquivo.
Gerando e inspecionando arquivos DEX
Um arquivo .dex pode ser gerado automaticamente como parte do processo de compilação do Android ou manualmente. O conjunto de ferramentas moderno usa o compilador d8 (parte do Android SDK build-tools) para traduzir o bytecode Java ou Kotlin para o formato .dex. Cada arquivo abre com a assinatura mágica dex\n seguida por um número de versão do formato de 3 dígitos (como 035, 037, 038 ou 039) e um byte nulo. Durante a instalação, o ART compila ainda mais o .dex em código nativo, produzindo arquivos .odex ou .vdex armazenados no dispositivo.
Segurança e proteção
RISCO: MEDIUMUm .dex por si só não roda no seu PC, então apenas possuir um é de baixo risco. O contexto real é a análise de malware Android: aplicativos maliciosos escondem sua lógica em DEX (às vezes carregados dinamicamente em tempo de execução), portanto, um .dex extraído de um APK não confiável pode conter código prejudicial. Inspecione tais arquivos apenas em um ambiente seguro (decompilador/sandbox), nunca instalando o APK pai. Cuidado com sites de download duvidosos de «dex to exe / dex opener» - eles não fazem nada legítimo e geralmente incluem adware.
Detalhes do formato
em resumoProgramas que abrem arquivos DEX
Detalhes técnicos
especificação profunda| Arquitetura da VM | Baseada em registradores (ao contrário da JVM baseada em pilha; cada instrução DEX nomeia explicitamente os operandos dos registradores, reduzindo a contagem total de instruções) |
| Bytes mágicos | 8 bytes no deslocamento 0 do arquivo: ASCII «dex», nova linha (0x0A), versão do formato de 3 dígitos (ex: 035, 037, 038, 039), byte nulo (0x00) |
| Versões do formato | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); os dígitos da versão estão incorporados no cabeçalho mágico |
| Limite de índice de métodos | 65.536 métodos por arquivo .dex (índice de referência de método de 16 bits); aplicativos que excedem isso dividem o código em classes2.dex, classes3.dex, etc. |
| Campos de integridade | O cabeçalho contém uma soma de verificação Adler-32 e uma assinatura SHA-1 de 20 bytes que, juntas, cobrem o restante do arquivo |
| Pool de strings | Todos os literais de string são armazenados uma única vez em um pool de strings compartilhado e deduplicado; o bytecode referencia as strings por índice inteiro |
| Ordem dos bytes | Little-endian por padrão; o cabeçalho incorpora a constante de endianness 0x12345678 para permitir a detecção de ordem de bytes invertida |
| Linguagens de origem | Java e Kotlin (e qualquer linguagem voltada para JVM); o compilador d8 converte bytecode .class ou arquivos .jar para DEX |
| Compilador de tempo de compilação | d8 (Android SDK build-tools 28.0.1+) substituiu a ferramenta legada dx; aceita arquivos .class da JVM ou arquivos .jar como entrada |
| Compilação antecipada do ART | No momento da instalação, o dex2oat do ART converte o .dex em código de máquina nativo, armazenando os resultados como arquivos .odex / .oat em /data/dalvik-cache |
| Tipo MIME | application/octet-stream (não existe um tipo MIME registrado dedicado para o formato DEX) |
| Histórico de execução | Interpretado pela Dalvik VM com JIT (Android 1.0-4.4); compilação antecipada + JIT guiado por perfil pelo ART (Android 5.0+) |
| Desmontagem e decompilação | O baksmali desmonta .dex para assembly Smali; o jadx e ferramentas similares decompilam .dex de volta para código-fonte Java legível |
| Localização dentro do APK | Armazenado sem compressão dentro do arquivo ZIP do APK; a entrada primária é sempre chamada classes.dex, com classes2.dex em diante para aplicativos multidex |
| Lançado | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | source.android.com |
Conversões de DEX
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos DEX.