Что такое формат файла SMALI?
Файлы .smali содержат человекочитаемый байт-код Dalvik или ART - представление кода приложения Android на языке ассемблера. Названия smali и baksmali - это исландские слова, означающие «ассемблер» и «дизассемблер»; инструменты были созданы Беном Грувером (JesusFreke) в 2010 году и в настоящее время поддерживаются Google.
Когда Android .apk распаковывается с помощью apktool или baksmali, каждый скомпилированный класс внутри файла .dex извлекается как отдельный файл .smali. Синтаксис объявляет метаданные класса с помощью директив .class, .super и .implements; поля - с помощью .field; и методы внутри блоков .method....end method. Отдельные опкоды Dalvik (invoke-virtual, move-result, return-void и другие) оперируют именованными регистрами (v0, v1, p0 и т. д.).
Файлы .smali используются в основном при обратной разработке Android, исследованиях безопасности и в соревнованиях CTF (Capture The Flag). Типичный рабочий процесс: распаковка APK с помощью apktool d, редактирование исходников .smali для изменения поведения, затем перепаковка с помощью apktool b и повторная подпись. Они являются промежуточным артефактом дизассемблирования - обычные пользователи Android никогда не сталкиваются с «сырыми» файлами .smali.
Каждый файл .smali соответствует ровно одному классу, включая анонимные внутренние классы (которые отображаются как отдельные файлы). Доступные опкоды варьируются в зависимости от уровня Android API, что отражается в версии формата .dex (например, 035 для Android 5, 039 для Android 12+).
Безопасность и защита
РИСК: MEDIUMСами файлы .smali являются текстовыми и не могут нанести вред вашей системе при просмотре в редакторе. Риск носит контекстуальный характер: 1. Если вы дизассемблировали подозрительный APK, файлы .smali раскрывают его поведение - ищите обфусцированные строки, динамическую загрузку кода (DexClassLoader) и сетевые вызовы к подозрительным хостам. 2. Патчинг APK и их повторная подпись для распространения могут нарушать условия обслуживания приложения и, в некоторых юрисдикциях, закон об авторском праве. Личное использование обычно допустимо; распространение - нет. 3. Загрузка «патчей» .smali из неизвестных источников - относитесь к ним как к исполняемому коду; проверяйте перед применением.
Детали формата
в двух словахПрограммы, открывающие файлы SMALI
Технические подробности
глубокая спецификация| Разработчик | Бен Грувер (JesusFreke), оригинальный автор; сейчас поддерживается Google (baksmali/smali v3+) |
| Тип файла | Текстовый человекочитаемый ассемблер байт-кода Dalvik/ART |
| Кодировка | UTF-8 |
| Этимология названия | smali и baksmali - это исландские слова для ассемблера и дизассемблера |
| Один файл на класс | Каждый файл `.smali` соответствует ровно одному классу Java или Kotlin, включая анонимные внутренние классы |
| Скомпилированный эквивалент | `.dex` (Dalvik Executable) - `.smali` является его дизассемблированным человекочитаемым представлением |
| Типичный размер | 1 КБ - 200 КБ на файл; сложные приложения Android генерируют тысячи файлов `.smali` |
| Синтаксис регистров | Локальные регистры: `v0`, `v1`, ...; регистры параметров: `p0`, `p1`, ... (`p0` - это `this` в методах экземпляра) |
| Версии опкодов | Привязаны к версии формата `.dex`: 035 (Android 5-6), 037 (Android 7), 038 (Android 8-11), 039 (Android 12+) |
| Стандартный процесс | APK → дизассемблирование `baksmali` → редактирование `.smali` → сборка `smali` → перепакованный APK (требуется повторная подпись) |
| Интеграция инструментов | `apktool` использует `smali`/`baksmali` внутри для дизассемблирования и сборки APK |
| Основные случаи использования | Обратная разработка Android, патчинг приложений, исследование уязвимостей безопасности, соревнования CTF |
| Выпущен | 2010 (baksmali 1.0 by Ben Gruver/JesusFreke) |
| Последняя версия | smali/baksmali 3.x (Google-maintained as of 2024) |
| Спецификация | github.com |
Конвертации SMALI
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах SMALI.