Was ist das SMALI-Dateiformat?
.smali-Dateien enthalten menschenlesbaren Dalvik- oder ART-Bytecode - die Assembly-Sprachdarstellung von Android-Anwendungscode. Die Namen smali und baksmali sind isländische Wörter für Assembler und Disassembler; die Tools wurden 2010 von Ben Gruver (JesusFreke) erstellt und werden heute von Google gepflegt.
Wenn eine Android .apk mit apktool oder baksmali entpackt wird, wird jede kompilierte Klasse innerhalb der .dex-Datei als separate .smali-Datei extrahiert. Die Syntax deklariert Klassen-Metadaten mit den Direktiven .class, .super und .implements; Felder mit .field; und Methoden innerhalb von .method....end method-Blöcken. Einzelne Dalvik-Opcodes (invoke-virtual, move-result, return-void und andere) operieren auf benannten Registern (v0, v1, p0 usw.).
.smali-Dateien werden primär im Android Reverse-Engineering, in der Sicherheitsforschung und bei CTF-Herausforderungen (Capture The Flag) verwendet. Ein typischer Workflow ist: eine APK mit apktool d entpacken, die .smali-Quellen bearbeiten, um das Verhalten zu patchen, und dann mit apktool b neu paketieren und signieren. Sie sind ein Zwischenprodukt der Disassemblierung - normale Android-Nutzer kommen nie mit rohen .smali-Dateien in Kontakt.
Jede .smali-Datei entspricht genau einer Klasse, einschließlich anonymer innerer Klassen (die als separate Dateien erscheinen). Die verfügbaren Opcodes variieren je nach Android-API-Level, was sich in der .dex-Formatversion widerspiegelt (z. B. 035 für Android 5, 039 für Android 12+).
Sicherheit
RISIKO: MEDIUM.smali-Dateien selbst sind reiner Text und können Ihrem System nicht schaden, wenn sie in einem Editor betrachtet werden. Das Risiko ist kontextabhängig: 1. Wenn Sie eine verdächtige APK disassembliert haben, offenbaren die .smali-Dateien deren Verhalten - suchen Sie nach verschleierten Strings, dynamischem Laden von Code (DexClassLoader) und Netzwerkaufrufen zu verdächtigen Hosts. 2. Das Patchen von APKs und deren Neusignierung zur Weitergabe kann gegen die Nutzungsbedingungen der App und in einigen Gerichtsbarkeiten gegen das Urheberrecht verstoßen. Der persönliche Gebrauch wird im Allgemeinen akzeptiert; die Weitergabe nicht. 3. Beim Herunterladen von .smali-„Patches” aus unbekannten Quellen - behandeln Sie diese wie ausführbaren Code; prüfen Sie sie vor der Anwendung.
Formatdetails
kurz gefasstProgramme zum Öffnen von SMALI-Dateien
Technische Details
technische Spezifikation| Entwickler | Ben Gruver (JesusFreke), ursprünglicher Autor; jetzt von Google gepflegt (baksmali/smali v3+) |
| Dateityp | Klartext, menschenlesbare Dalvik/ART-Bytecode-Assembly |
| Kodierung | UTF-8 |
| Namensherkunft | smali und baksmali sind isländisch für Assembler und Disassembler |
| Eine Datei pro Klasse | Jede `.smali`-Datei ist genau einer Java- oder Kotlin-Klasse zugeordnet, einschließlich anonymer innerer Klassen |
| Kompiliertes Äquivalent | `.dex` (Dalvik Executable) - `.smali` ist die disassemblierte, menschenlesbare Darstellung |
| Typische Größe | 1 KB - 200 KB pro Datei; komplexe Android-Apps erzeugen Tausende von `.smali`-Dateien |
| Registersyntax | Lokale Register: `v0`, `v1`, ...; Parameter-Register: `p0`, `p1`, ... (`p0` ist `this` in Instanzmethoden) |
| Opcode-Versionierung | Gekoppelt an die `.dex`-Formatversion: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Standard-Workflow | APK → `baksmali` disassemblieren → `.smali` bearbeiten → `smali` assemblieren → neu paketierte APK (Neusignierung erforderlich) |
| Tool-Integration | `apktool` verwendet intern `smali`/`baksmali` für die APK-Disassemblierung und -Reassemblierung |
| Primäre Anwendungsfälle | Android Reverse-Engineering, App-Patching, Sicherheitslückenforschung, CTF-Herausforderungen |
| Veröffentlicht | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Neueste Version | smali/baksmali 3.x (Google-maintained as of 2024) |
| Spezifikation | github.com |
SMALI-Konvertierungen
Community Q&A
von Nutzern gefragtNoch keine Fragen - stellen Sie die erste Frage zu SMALI-Dateien.