Hvad er SMALI-filformatet?
.smali-filer indeholder menneskelæsbar Dalvik eller ART bytecode - assembly-sprogsrepræsentationen af Android-applikationskode. Navnene smali og baksmali er islandske ord for assembler og disassembler; værktøjerne blev skabt af Ben Gruver (JesusFreke) i 2010 og vedligeholdes nu af Google.
Når en Android .apk pakkes ud ved hjælp af apktool eller baksmali, udtrækkes hver kompileret klasse inde i .dex-filen som en separat .smali-fil. Syntaksen erklærer klasse-metadata med .class, .super og .implements direktiver; felter med .field; og metoder inde i .method....end method blokke. Individuelle Dalvik opcodes (invoke-virtual, move-result, return-void og andre) opererer på navngivne registre (v0, v1, p0 osv.).
.smali-filer bruges primært til Android reverse engineering, sikkerhedsforskning og CTF (Capture The Flag) udfordringer. En typisk arbejdsgang er: pak en APK ud med apktool d, rediger .smali-kilderne for at rette adfærd, pak derefter igen med apktool b og underskriv på ny. De er et mellemliggende disassembly-artefakt - almindelige Android-brugere støder aldrig på rå .smali-filer.
Hver .smali-fil svarer til præcis én klasse, herunder anonyme indre klasser (som optræder som separate filer). Tilgængelige opcodes varierer med Android API-niveau, hvilket afspejles i .dex-formatversionen (f.eks. 035 for Android 5, 039 for Android 12+).
Sikkerhed og tryghed
RISIKO: MEDIUM.smali-filer i sig selv er ren tekst og kan ikke skade dit system, når de vises i en editor. Risikoen er kontekstuel: 1. Hvis du har adskilt en mistænkelig APK, afslører .smali-filerne dens adfærd - kig efter slørede (obfuscated) strenge, dynamisk kodeindlæsning (DexClassLoader) og netværkskald til mistænkelige værter. 2. Patching af APK-filer og genunderskrift af dem til distribution kan overtræde appens servicevilkår og i nogle jurisdiktioner ophavsretsloven. Personlig brug er generelt accepteret; videredistribution er ikke. 3. Download af .smali-«patches» fra ukendte kilder - behandl dem som eksekverbar kode; gennemse dem før de anvendes.
Formatdetaljer
kort fortaltProgrammer der åbner SMALI-filer
Tekniske detaljer
dyb specifikation| Udvikler | Ben Gruver (JesusFreke), oprindelig forfatter; vedligeholdes nu af Google (baksmali/smali v3+) |
| Filtype | Almindelig tekst, menneskelæsbar Dalvik/ART bytecode assembly |
| Kodning | UTF-8 |
| Navne-etymologi | smali og baksmali er islandsk for assembler og disassembler |
| Én fil pr. klasse | Hver `.smali`-fil svarer til præcis én Java- eller Kotlin-klasse, herunder anonyme indre klasser |
| Kompileret modstykke | `.dex` (Dalvik Executable) - `.smali` er den adskilte menneskelæsbare repræsentation |
| Typisk størrelse | 1 KB - 200 KB pr. fil; komplekse Android-apps producerer tusindvis af `.smali`-filer |
| Registersyntaks | Lokale registre: `v0`, `v1`, ...; parameterregistre: `p0`, `p1`, ... (`p0` er `this` i instansmetoder) |
| Opcode-versionering | Knyttet til `.dex`-formatversion: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Standard arbejdsgang | APK → `baksmali` disassembly → rediger `.smali` → `smali` assembly → ompakket APK (kræver ny underskrift) |
| Værktøjsintegration | `apktool` bruger `smali`/`baksmali` internt til APK-disassembly og genopbygning |
| Primære anvendelsesområder | Android reverse engineering, app-patching, forskning i sikkerhedssårbarheder, CTF-udfordringer |
| Udgivet | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Seneste version | smali/baksmali 3.x (Google-maintained as of 2024) |
| Specifikation | github.com |
SMALI-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om SMALI-filer.