Co to jest format pliku SMALI?
Pliki .smali zawierają czytelny dla człowieka kod bajtowy Dalvik lub ART - reprezentację języka asemblera kodu aplikacji Android. Nazwy smali i baksmali to islandzkie słowa oznaczające asembler i dezasembler; narzędzia te zostały stworzone przez Bena Gruvera (JesusFreke) w 2010 roku i są obecnie utrzymywane przez Google.
Gdy plik .apk systemu Android zostanie rozpakowany za pomocą apktool lub baksmali, każda skompilowana klasa wewnątrz pliku .dex jest wyodrębniana jako oddzielny plik .smali. Składnia deklaruje metadane klas za pomocą dyrektyw .class, .super i .implements; pola za pomocą .field; oraz metody wewnątrz bloków .method....end method. Poszczególne kody operacyjne Dalvik (invoke-virtual, move-result, return-void i inne) operują na nazwanych rejestrach (v0, v1, p0 itd.).
Pliki .smali są używane głównie w inżynierii wstecznej systemu Android, badaniach nad bezpieczeństwem i wyzwaniach typu CTF (Capture The Flag). Typowy przepływ pracy to: rozpakowanie APK za pomocą apktool d, edycja źródeł .smali w celu zmiany zachowania, a następnie ponowne spakowanie za pomocą apktool b i podpisanie. Są one pośrednim artefaktem dezasemblacji - zwykli użytkownicy Androida nigdy nie napotykają surowych plików .smali.
Każdy plik .smali odpowiada dokładnie jednej klasie, w tym anonimowym klasom wewnętrznym (które pojawiają się jako osobne pliki). Dostępne kody operacyjne różnią się w zależności od poziomu API Androida, co odzwierciedla wersja formatu .dex (np. 035 dla Android 5, 039 dla Android 12+).
Bezpieczeństwo
RYZYKO: MEDIUMSame pliki .smali są zwykłym tekstem i nie mogą zaszkodzić systemowi podczas przeglądania w edytorze. Ryzyko jest kontekstowe: 1. Jeśli zdezasemblowałeś podejrzany plik APK, pliki .smali ujawniają jego zachowanie - szukaj zaciemnionych (obfuscated) ciągów znaków, dynamicznego ładowania kodu (DexClassLoader) i połączeń sieciowych z podejrzanymi hostami. 2. Patchowanie plików APK i ich ponowne podpisywanie w celu dystrybucji może naruszać warunki korzystania z aplikacji, a w niektórych jurysdykcjach prawo autorskie. Użytek osobisty jest ogólnie akceptowany; redystrybucja nie. 3. Pobieranie „łatek” .smali z nieznanych źródeł - traktuj je jak kod wykonywalny; sprawdź przed zastosowaniem.
Szczegóły formatu
w pigułceProgramy otwierające pliki SMALI
Szczegóły techniczne
specyfikacja| Deweloper | Ben Gruver (JesusFreke), oryginalny autor; obecnie utrzymywane przez Google (baksmali/smali v3+) |
| Typ pliku | Zwykły tekst, czytelny dla człowieka asembler kodu bajtowego Dalvik/ART |
| Kodowanie | UTF-8 |
| Etymologia nazwy | smali i baksmali to po islandzku asembler i dezasembler |
| Jeden plik na klasę | Każdy plik `.smali` mapuje się na dokładnie jedną klasę Java lub Kotlin, w tym anonimowe klasy wewnętrzne |
| Skompilowany odpowiednik | `.dex` (Dalvik Executable) - `.smali` to zdezasemblowana, czytelna dla człowieka reprezentacja |
| Typowy rozmiar | 1 KB - 200 KB na plik; złożone aplikacje na Androida generują tysiące plików `.smali` |
| Składnia rejestrów | Rejestry lokalne: `v0`, `v1`, ...; rejestry parametrów: `p0`, `p1`, ... (`p0` to `this` w metodach instancji) |
| Wersjonowanie kodów operacyjnych | Powiązane z wersją formatu `.dex`: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Standardowy przepływ pracy | APK → dezasemblacja `baksmali` → edycja `.smali` → asemblacja `smali` → przepakowany APK (wymagane ponowne podpisanie) |
| Integracja z narzędziami | `apktool` używa wewnętrznie `smali`/`baksmali` do dezasemblacji i ponownego składania APK |
| Główne przypadki użycia | Inżynieria wsteczna Androida, patchowanie aplikacji, badanie luk w zabezpieczeniach, wyzwania CTF |
| Wydano | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Najnowsza wersja | smali/baksmali 3.x (Google-maintained as of 2024) |
| Specyfikacja | github.com |
Konwersje SMALI
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki SMALI.