O que é o formato de ficheiro SMALI?
Arquivos .smali contêm bytecode Dalvik ou ART legível por humanos - a representação em linguagem assembly do código de aplicativo Android. Os nomes smali e baksmali são palavras islandesas para montador (assembler) e desmontador (disassembler); as ferramentas foram criadas por Ben Gruver (JesusFreke) em 2010 e agora são mantidas pelo Google.
Quando um .apk do Android é descompactado usando apktool ou baksmali, cada classe compilada dentro do arquivo .dex é extraída como um arquivo .smali separado. A sintaxe declara metadados de classe com as diretivas .class, .super e .implements; campos com .field; e métodos dentro de blocos .method....end method. Opcodes Dalvik individuais (invoke-virtual, move-result, return-void e outros) operam em registradores nomeados (v0, v1, p0, etc.).
Arquivos .smali são usados principalmente em engenharia reversa de Android, pesquisa de segurança e desafios de CTF (Capture The Flag). Um fluxo de trabalho típico é: descompactar um APK com apktool d, editar as fontes .smali para corrigir comportamentos, depois reempacotar com apktool b e assinar novamente. Eles são um artefato intermediário de desmontagem - usuários comuns de Android nunca encontram arquivos .smali brutos.
Cada arquivo .smali corresponde a exatamente uma classe, incluindo classes internas anônimas (que aparecem como arquivos separados). Os opcodes disponíveis variam de acordo com o nível da API do Android, refletido na versão do formato .dex (ex: 035 para Android 5, 039 para Android 12+).
Segurança e proteção
RISCO: MEDIUMArquivos .smali em si são texto simples e não podem prejudicar seu sistema quando visualizados em um editor. O risco é contextual: 1. Se você desmontou um APK suspeito, os arquivos .smali revelam seu comportamento - procure por strings ofuscadas, carregamento de código dinâmico (DexClassLoader) e chamadas de rede para hosts suspeitos. 2. Corrigir APKs e assiná-los novamente para distribuição pode violar os termos de serviço do aplicativo e, em algumas jurisdições, a lei de direitos autorais. O uso pessoal é geralmente aceito; a redistribuição não. 3. Ao baixar «patches» .smali de fontes desconhecidas - trate como código executável; revise antes de aplicar.
Detalhes do formato
em resumoProgramas que abrem arquivos SMALI
Detalhes técnicos
especificação profunda| Desenvolvedor | Ben Gruver (JesusFreke), autor original; agora mantido pelo Google (baksmali/smali v3+) |
| Tipo de arquivo | Assembly de bytecode Dalvik/ART legível por humanos em texto simples |
| Codificação | UTF-8 |
| Etimologia do nome | smali e baksmali são islandês para montador e desmontador |
| Um arquivo por classe | Cada arquivo `.smali` mapeia para exatamente uma classe Java ou Kotlin, incluindo classes internas anônimas |
| Equivalente compilado | `.dex` (Dalvik Executable) - `.smali` é a representação legível por humanos desmontada |
| Tamanho típico | 1 KB - 200 KB por arquivo; aplicativos Android complexos produzem milhares de arquivos `.smali` |
| Sintaxe de registrador | Registradores locais: `v0`, `v1`, ...; registradores de parâmetros: `p0`, `p1`, ... (`p0` é `this` em métodos de instância) |
| Versão do Opcode | Vinculado à versão do formato `.dex`: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Fluxo de trabalho padrão | APK → desmontagem `baksmali` → editar `.smali` → montagem `smali` → APK reempacotado (requer nova assinatura) |
| Integração de ferramentas | O `apktool` usa `smali`/`baksmali` internamente para desmontagem e remontagem de APK |
| Principais casos de uso | Engenharia reversa de Android, correção de aplicativos, pesquisa de vulnerabilidades de segurança, desafios de CTF |
| Lançado | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Versão mais recente | smali/baksmali 3.x (Google-maintained as of 2024) |
| Especificação | github.com |
Conversões de SMALI
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos SMALI.