Che cos'è il formato di file SMALI?
I file .smali contengono bytecode Dalvik o ART leggibile dall'uomo - la rappresentazione in linguaggio assembly del codice dell'applicazione Android. I nomi smali e baksmali sono parole islandesi che significano assemblatore e disassemblatore; gli strumenti sono stati creati da Ben Gruver (JesusFreke) nel 2010 e sono ora mantenuti da Google.
Quando un .apk Android viene decompresso utilizzando apktool o baksmali, ogni classe compilata all'interno del file .dex viene estratta come un file .smali separato. La sintassi dichiara i metadati della classe con le direttive .class, .super e .implements; i campi con .field; e i metodi all'interno dei blocchi .method....end method. I singoli opcode Dalvik (invoke-virtual, move-result, return-void e altri) operano su registri denominati (v0, v1, p0, ecc.).
I file .smali sono utilizzati principalmente nell'ingegneria inversa di Android, nella ricerca sulla sicurezza e nelle sfide CTF (Capture The Flag). Un flusso di lavoro tipico è: decomprimere un APK con apktool d, modificare i sorgenti .smali per correggere il comportamento, quindi riconfezionare con apktool b e firmare nuovamente. Sono un artefatto intermedio di disassemblaggio - gli utenti Android regolari non incontrano mai file .smali grezzi.
Ogni file .smali corrisponde esattamente a una classe, incluse le classi interne anonime (che appaiono come file separati). Gli opcode disponibili variano in base al livello API di Android, riflesso nella versione del formato .dex (ad esempio, 035 per Android 5, 039 per Android 12+).
Sicurezza e incolumità
RISCHIO: MEDIUMI file .smali stessi sono testo semplice e non possono danneggiare il sistema se visualizzati in un editor. Il rischio è contestuale: 1. Se hai disassemblato un APK sospetto, i file .smali ne rivelano il comportamento - cerca stringhe offuscate, caricamento dinamico del codice (DexClassLoader) e chiamate di rete verso host sospetti. 2. Il patching degli APK e la loro nuova firma per la distribuzione possono violare i termini di servizio dell'app e, in alcune giurisdizioni, la legge sul copyright. L'uso personale è generalmente accettato; la ridistribuzione no. 3. Scaricare «patch» .smali da fonti sconosciute - trattale come codice eseguibile; esaminale prima di applicarle.
Dettagli del formato
in sintesiProgrammi che aprono file SMALI
Dettagli tecnici
specifiche approfondite| Sviluppatore | Ben Gruver (JesusFreke), autore originale; ora mantenuto da Google (baksmali/smali v3+) |
| Tipo di file | Assembly bytecode Dalvik/ART leggibile dall'uomo in formato testo semplice |
| Codifica | UTF-8 |
| Etimologia del nome | smali e baksmali sono termini islandesi per assemblatore e disassemblatore |
| Un file per classe | Ogni file `.smali` mappa esattamente una classe Java o Kotlin, incluse le classi interne anonime |
| Equivalente compilato | `.dex` (Dalvik Executable) - `.smali` è la rappresentazione disassemblata leggibile dall'uomo |
| Dimensione tipica | 1 KB - 200 KB per file; le app Android complesse producono migliaia di file `.smali` |
| Sintassi dei registri | Registri locali: `v0`, `v1`, ...; registri dei parametri: `p0`, `p1`, ... (`p0` è `this` nei metodi di istanza) |
| Versionamento degli opcode | Legato alla versione del formato `.dex`: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Flusso di lavoro standard | APK → disassemblaggio `baksmali` → modifica `.smali` → assemblaggio `smali` → APK riconfezionato (richiesta nuova firma) |
| Integrazione strumenti | `apktool` utilizza internamente `smali`/`baksmali` per il disassemblaggio e il riassemblaggio degli APK |
| Casi d'uso primari | Ingegneria inversa Android, patching di app, ricerca di vulnerabilità di sicurezza, sfide CTF |
| Rilasciato | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Ultima versione | smali/baksmali 3.x (Google-maintained as of 2024) |
| Specifica | github.com |
Conversioni SMALI
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file SMALI.