Wat is het SMALI-bestandsformaat?
.smali-bestanden bevatten voor mensen leesbare Dalvik of ART bytecode - de assembly-taalweergave van Android-applicatiecode. De namen smali en baksmali zijn IJslandse woorden voor assembler en disassembler; de tools zijn in 2010 gemaakt door Ben Gruver (JesusFreke) en worden nu onderhouden door Google.
Wanneer een Android .apk wordt uitgepakt met apktool of baksmali, wordt elke gecompileerde klasse in het .dex-bestand uitgepakt als een afzonderlijk .smali-bestand. De syntaxis declareert klasse-metadata met .class, .super en .implements instructies; velden met .field; en methoden binnen .method....end method blokken. Individuele Dalvik opcodes (invoke-virtual, move-result, return-void en andere) werken op benoemde registers (v0, v1, p0, enz.).
.smali-bestanden worden voornamelijk gebruikt bij Android reverse engineering, beveiligingsonderzoek en CTF (Capture The Flag) uitdagingen. Een typische workflow is: een APK uitpakken met apktool d, de .smali-bronnen bewerken om gedrag aan te passen, en vervolgens opnieuw verpakken met apktool b en opnieuw ondertekenen. Het zijn tussenliggende demontage-artefacten - reguliere Android-gebruikers komen nooit onbewerkte .smali-bestanden tegen.
Elk .smali-bestand komt overeen met precies één klasse, inclusief anonieme innerlijke klassen (die als afzonderlijke bestanden verschijnen). Beschikbare opcodes variëren per Android API-niveau, weerspiegeld in de .dex-formaatversie (bijv. 035 voor Android 5, 039 voor Android 12+).
Beveiliging & veiligheid
RISICO: MEDIUM.smali-bestanden zelf zijn platte tekst en kunnen uw systeem niet beschadigen wanneer ze in een editor worden bekeken. Risico is contextueel: 1. Als u een verdachte APK hebt gedemonteerd, onthullen de .smali-bestanden het gedrag - zoek naar verduisterde strings, dynamisch laden van code (DexClassLoader) en netwerkoproepen naar verdachte hosts. 2. Het patchen van APK's en het opnieuw ondertekenen voor distributie kan in strijd zijn met de servicevoorwaarden van de app en in sommige rechtsgebieden met het auteursrecht. Persoonlijk gebruik wordt over het algemeen geaccepteerd; herdistributie niet. 3. Het downloaden van .smali „patches” van onbekende bronnen - behandel deze als uitvoerbare code; controleer ze voordat u ze toepast.
Formaatdetails
in een notendopProgramma's die SMALI-bestanden openen
Technische details
diepe specificaties| Ontwikkelaar | Ben Gruver (JesusFreke), oorspronkelijke auteur; nu onderhouden door Google (baksmali/smali v3+) |
| Bestandstype | Platte tekst, voor mensen leesbare Dalvik/ART bytecode assembly |
| Codering | UTF-8 |
| Naamsetymologie | smali en baksmali zijn IJslands voor assembler en disassembler |
| Eén bestand per klasse | Elk `.smali`-bestand is gekoppeld aan precies één Java- of Kotlin-klasse, inclusief anonieme innerlijke klassen |
| Gecompileerd equivalent | `.dex` (Dalvik Executable) - `.smali` is de gedemonteerde, voor mensen leesbare weergave |
| Typische grootte | 1 KB - 200 KB per bestand; complexe Android-apps produceren duizenden `.smali`-bestanden |
| Registersyntaxis | Lokale registers: `v0`, `v1`, ...; parameterregisters: `p0`, `p1`, ... (`p0` is `this` in instantiemethoden) |
| Opcode-versiebeheer | Gekoppeld aan `.dex`-formaatversie: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Standaard workflow | APK → `baksmali` demonteren → `.smali` bewerken → `smali` assembleren → opnieuw verpakte APK (opnieuw ondertekenen vereist) |
| Tool-integratie | `apktool` gebruikt `smali`/`baksmali` intern voor APK-demontage en herassemblage |
| Belangrijkste use-cases | Android reverse engineering, app-patching, onderzoek naar beveiligingslekken, CTF-uitdagingen |
| Uitgebracht | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Laatste versie | smali/baksmali 3.x (Google-maintained as of 2024) |
| Specificatie | github.com |
SMALI conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over SMALI-bestanden.