Разбор APK файла начинается с простой проверки: переименуйте копию файла из app.apk в app.zip и откройте её любым архиватором — если внутри видны папки META-INF, res и файлы classes.dex, AndroidManifest.xml, значит пакет не повреждён и его можно изучать дальше. Если архиватор выдаёт ошибку чтения, файл либо скачан не полностью, либо это вовсе не APK, а заглушка или переименованный документ.
APK (Android Package Kit) — это установочный пакет приложения для Android, по сути обычный ZIP-архив со строго определённой структурой. Разобрать его может понадобиться по разным причинам: проверить, какие разрешения запрашивает приложение, извлечь иконки или локализацию, изучить код сторонней программы, найти причину конфликта при установке. В этой статье разберём структуру пакета, инструменты для декомпиляции и безопасный порядок анализа.
Что находится внутри APK: структура пакета
Открыв APK как архив, вы увидите набор файлов и каталогов, каждый из которых выполняет свою роль. Понимание структуры помогает сразу найти нужное, не распаковывая всё подряд.
- 📄 AndroidManifest.xml — главный файл пакета: имя приложения, версия, разрешения, компоненты (активности, сервисы, ресиверы). В «сыром» виде он бинарный и требует декодирования.
- ⚙️ classes.dex — скомпилированный код приложения в формате Dalvik Executable. Файлов может быть несколько (
classes2.dex,classes3.dex) — это называется multidex. - 🎨 res/ — ресурсы: изображения, layouts, строки интерфейса, стили.
- 🔤 resources.arsc — скомпилированная таблица ресурсов, связывающая идентификаторы с файлами.
- 🔐 META-INF/ — цифровые подписи и сертификаты разработчика. По ним можно проверить подлинность пакета.
- 📚 lib/ — нативные библиотеки под разные архитектуры процессора (armeabi-v7a, arm64-v8a, x86_64).
- 🗂️ assets/ — произвольные файлы, которые разработчик упаковал «как есть»: шрифты, базы данных, HTML-страницы.
Обратите внимание: часть файлов внутри архива хранится в бинарном виде, поэтому простого переименования в ZIP недостаточно для полноценного анализа. Манифест и ресурсы придётся декодировать специальными утилитами.
Быстрый осмотр без специальных программ
Для базовой проверки достаточно архиватора 7-Zip или встроенного проводника Windows. Сделайте копию файла (оригинал не трогайте), смените расширение на .zip и откройте. Так вы увидите список содержимого, размеры файлов и сможете извлечь картинки из папки res или assets.
Уже на этом этапе можно сделать полезные выводы. Например, если в lib/ лежат библиотеки только под arm64-v8a, приложение не установится на старое 32-битное устройство. А наличие нескольких classes.dex говорит о крупном проекте с большим количеством кода.
Декомпиляция с помощью Apktool
Apktool — стандартный инструмент для разбора APK: он декодирует бинарный AndroidManifest.xml в читаемый XML, распаковывает ресурсы и преобразует DEX-код в smali — низкоуровневое представление, которое можно читать и редактировать. Утилита работает из командной строки и требует установленной Java.
Базовая команда разбора выглядит так:
apktool d app.apk -o app_decoded
После выполнения в папке app_decoded появится полное дерево проекта: манифест в текстовом виде, ресурсы, smali-код и файл apktool.yml с метаданными. Теперь манифест открывается любым текстовым редактором, и вы можете увидеть все запрашиваемые разрешения.
☑️ Порядок разбора APK через Apktool
Apktool умеет и обратную операцию — собрать модифицированный пакет командой apktool b. Однако пересобранный APK потеряет оригинальную подпись, и его придётся подписывать собственным ключом, иначе Android откажется его устанавливать.
⚠️ Внимание: модификация и пересборка чужого приложения может нарушать лицензионное соглашение и авторские права разработчика. Разбор допустим для изучения, аудита безопасности и исследования — используйте полученные данные ответственно.
Анализ кода: JADX и другие инструменты
Smali-код читать неудобно, поэтому для анализа логики чаще применяют JADX — декомпилятор, преобразующий DEX обратно в Java-подобный код. У JADX есть графическая версия jadx-gui: просто перетащите APK в окно программы, и вы получите дерево пакетов, классов и методов с поиском по коду.
Важно понимать ограничение: декомпилированный код не идентичен исходнику. Имена переменных часто обфусцированы (превращены в a, b, c инструментами вроде ProGuard или R8), а некоторые конструкции восстанавливаются с ошибками. Тем не менее общую логику — сетевые запросы, работу с разрешениями, обращения к API — проследить обычно можно.
| Инструмент | Назначение | Формат результата |
|---|---|---|
| 7-Zip / архиватор | Просмотр состава пакета | Файлы как есть |
| Apktool | Декодирование манифеста и ресурсов | XML + smali |
| JADX / jadx-gui | Декомпиляция кода | Java-подобный код |
| aapt | Быстрые метаданные (версия, разрешения) | Текстовый отчёт |
| Онлайн-анализаторы | Проверка без установки ПО | Отчёт в браузере |
Как проверить разрешения и безопасность пакета
Одна из самых частых причин разбора APK — желание понять, не опасно ли приложение, скачанное не из официального магазина. После декодирования манифеста обратите внимание на секцию <uses-permission>: там перечислены все разрешения, которые программа запросит у системы.
Тревожные сигналы — сочетания вроде доступа к SMS, контактам, микрофону и геолокации у приложения, которому они по смыслу не нужны (например, у простого фонарика). Также проверьте подпись в META-INF: если пакет «пересобран», сертификат будет отличаться от того, которым подписана версия из официального магазина.
⚠️ Внимание: не устанавливайте APK из непроверенных источников на основное устройство. Для экспериментов используйте эмулятор (например, Android Emulator из Android Studio) или отдельный смартфон без личных данных и привязанных карт.
Дополнительно стоит прогнать файл через сервисы мультиантивирусной проверки — они анализируют пакет десятками движков и показывают, не известен ли он как вредоносный. Это не гарантия чистоты, но заметно снижает риск.
Почему приложение не устанавливается после разбора и пересборки
Android проверяет цифровую подпись пакета. Пересобранный Apktool файл подписи не имеет, а при обновлении поверх существующего приложения подписи должны совпадать. Нужно подписать APK своим ключом (например, через apksigner из SDK) и удалить оригинальную версию перед установкой.
Разбор APK прямо на Android-устройстве
Если компьютера под рукой нет, базовый анализ можно выполнить на самом смартфоне. Существуют приложения-инспекторы, которые показывают манифест, разрешения, активности и сертификаты уже установленных программ. Файловые менеджеры с поддержкой архивов позволяют открыть APK как ZIP и извлечь ресурсы.
Для извлечения APK установленного приложения используются программы-экстракторы: они копируют пакет из системного раздела в обычную папку, откуда его можно передать на ПК для детального разбора. Полноценная декомпиляция на телефоне затруднительна — JADX и Apktool рассчитаны на десктопную среду.
Split APK и App Bundle: нюансы современных пакетов
Современные приложения часто распространяются не одним файлом, а набором: базовый APK плюс сплиты под конкретную архитектуру, язык и плотность экрана. Формат Android App Bundle (.aab), который используется при публикации в магазине, вообще не устанавливается напрямую — из него на стороне магазина генерируются APK под конкретное устройство.
Если вы скачали файл .apkm, .xapk или .apks — это контейнер с несколькими APK внутри. Его тоже можно открыть архиватором и достать отдельные пакеты для разбора. При анализе учитывайте, что часть ресурсов и кода может находиться в сплитах, а не в базовом файле, поэтому картина будет неполной без всего набора.
⚠️ Внимание: установка набора сплитов вручную сложнее обычной установки — все компоненты должны быть подписаны одним ключом и устанавливаться вместе (например, через adb install-multiple). Неполный набор приведёт к ошибке установки или падению приложения.
Частые вопросы о разборе APK
Можно ли получить исходный код приложения из APK?
Полностью восстановить исходники нельзя — компиляция необратима. JADX даёт Java-подобный код, близкий по логике, но с потерей комментариев, имён переменных и, при обфускации, структуры классов.
Легально ли разбирать чужие APK файлы?
Зависит от цели и юрисдикции. Анализ для исследования безопасности, совместимости и обучения обычно допустим, а вот модификация, распространение пересобранных пакетов и извлечение чужого кода в свои продукты могут нарушать авторские права и лицензионное соглашение.
Почему AndroidManifest.xml открывается как набор символов?
В APK манифест хранится в бинарном XML-формате для экономии места. Декодируйте его через Apktool или откройте весь файл в jadx-gui — тогда манифест станет читаемым.
Чем открыть файл .aab для анализа?
AAB — тоже ZIP-архив, его можно распаковать архиватором и изучить содержимое. Для генерации установочных APK из бандла существует официальная утилита bundletool от Google.
Как проверить, не изменён ли скачанный APK?
Сравните сертификат подписи с эталонным (например, с версией из официального магазина) и сверьте хеш-суммы файла, если их публикует разработчик. Несовпадение подписи — верный признак того, что пакет пересобран.