Vad är filformatet SMALI?
.smali-filer innehåller läsbar Dalvik eller ART bytecode - assembly-språkrepresentationen av Android-applikationskod. Namnen smali och baksmali är isländska ord för assembler och disassembler; verktygen skapades av Ben Gruver (JesusFreke) 2010 och underhålls nu av Google.
När en Android .apk packas upp med apktool eller baksmali, extraheras varje kompilerad klass inuti .dex-filen som en separat .smali-fil. Syntaxen deklarerar klassmetadata med direktiven .class, .super och .implements; fält med .field; och metoder inuti .method....end method-block. Individuella Dalvik-opkoder (invoke-virtual, move-result, return-void med flera) opererar på namngivna register (v0, v1, p0, etc.).
.smali-filer används främst inom Android reverse engineering, säkerhetsforskning och CTF-utmaningar (Capture The Flag). Ett typiskt arbetsflöde är: packa upp en APK med apktool d, redigera .smali-källkoden för att patcha beteenden, paketera sedan om med apktool b och signera på nytt. De är en mellanliggande disassemblerings-artefakt - vanliga Android-användare stöter aldrig på råa .smali-filer.
Varje .smali-fil motsvarar exakt en klass, inklusive anonyma inre klasser (som visas som separata filer). Tillgängliga opkoder varierar med Android API-nivå, vilket återspeglas i .dex-formatversionen (t.ex. 035 för Android 5, 039 för Android 12+).
Säkerhet & trygghet
RISK: MEDIUM.smali-filer i sig är ren text och kan inte skada ditt system när de visas i en redigerare. Risken är kontextuell: 1. Om du har disassemblerat en misstänkt APK avslöjar .smali-filerna dess beteende - leta efter obfuskerade strängar, dynamisk kodladdning (DexClassLoader) och nätverksanrop till misstänkta värdar. 2. Att patcha APK-filer och signera om dem för distribution kan bryta mot appens användarvillkor och i vissa jurisdiktioner mot upphovsrättslagen. Personligt bruk accepteras i allmänhet; vidaredistribution gör det inte. 3. Nedladdning av .smali-«patchar» från okända källor - behandla dessa som körbar kod; granska dem innan de används.
Formatdetaljer
i ett nötskalProgram som öppnar SMALI-filer
Tekniska detaljer
djup specifikation| Utvecklare | Ben Gruver (JesusFreke), ursprunglig författare; underhålls nu av Google (baksmali/smali v3+) |
| Filtyp | Mänskligt läsbar Dalvik/ART bytecode-assembly i klartext |
| Kodning | UTF-8 |
| Namnets etymologi | smali och baksmali är isländska för assembler och disassembler |
| En fil per klass | Varje `.smali`-fil mappar till exakt en Java- eller Kotlin-klass, inklusive anonyma inre klasser |
| Kompilerad motsvarighet | `.dex` (Dalvik Executable) - `.smali` är den disassemblerade mänskligt läsbara representationen |
| Typisk storlek | 1 KB - 200 KB per fil; komplexa Android-appar genererar tusentals `.smali`-filer |
| Registersyntax | Lokala register: `v0`, `v1`, ...; parameterregister: `p0`, `p1`, ... (`p0` är `this` i instansmetoder) |
| Opkod-versionering | Kopplad till `.dex`-formatversion: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Standardarbetsflöde | APK → `baksmali` disassemblering → redigera `.smali` → `smali` assemblering → ompaketerad APK (om-signering krävs) |
| Verktygsintegration | `apktool` använder `smali`/`baksmali` internt för disassemblering och återmontering av APK |
| Primära användningsområden | Android reverse engineering, app-patchning, säkerhetsforskning, CTF-utmaningar |
| Släppt | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Senaste version | smali/baksmali 3.x (Google-maintained as of 2024) |
| Specifikation | github.com |
SMALI-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om SMALI-filer.