Мобильный реверс (APK) — обзор
Как устроен реверс приложений Android — обзорно и легально.
APK — формат установочного пакета Android: по сути ZIP-архив с кодом, ресурсами и манифестом.
Чем мобильный реверс отличается
Большинство Android-приложений написаны на Java/Kotlin и компилируются не в машинный код, а в байткод для виртуальной машины Android (Dalvik/ART). Байткод гораздо ближе к исходнику, чем нативный ассемблер, поэтому декомпиляция в Java часто получается на удивление читаемой.
Что внутри APK
| Часть | Что это |
classes.dex | скомпилированный байткод приложения |
AndroidManifest.xml | разрешения, компоненты, точки входа |
res/, assets/ | ресурсы: картинки, строки, файлы |
lib/ | нативные библиотеки (.so) — уже машинный код ARM |
Инструменты (обзорно)
- apktool — распаковывает APK, переводит
.dexв smali (человекочитаемое представление байткода). - jadx — декомпилирует
.dexпрямо в читаемый Java-код. - Для нативных
.so— те же Ghidra/IDA, ведь это ARM-машинный код.
Зачем это легально
Разработчики реверсят свои приложения (отладка, проверка, что попало в релиз), исследователи безопасности — с разрешения (анализ на уязвимости), аналитики — мобильную малварь. Манифест и разрешения — первое, что смотрят: приложение, просящее доступ к SMS и контактам без причины, подозрительно.
Как работает под капотом
Java-исходник → байткод Dalvik (.dex) → исполнение на ART (Android Runtime). Поскольку байткод сохраняет имена классов и методов (если не применён обфускатор вроде R8/ProGuard), декомпиляция близка к исходнику. Обфускация в мобайле как раз поэтому распространена.
Этическая рамка
Реверсить можно своё приложение, малварь в исследовательских целях, чужое — только с разрешения. Не для кражи кода или обхода платных функций чужих приложений.
Частые ошибки
- Думать, что APK — это нативный код. Чаще это байткод (кроме
lib/*.so). - Игнорировать манифест — там разрешения и точки входа.
- Забывать про обфускацию (R8/ProGuard), которая прячет имена.
Итог
- APK — ZIP с байткодом (
classes.dex), манифестом, ресурсами и нативными.so. - Байткод декомпилируется в почти-Java (jadx) или smali (apktool).
- Легально: своё приложение, разрешённое исследование, мобильная малварь.