IO — Ivan Labs

Как анализировать Android APK-файл пошагово

2 мин чтения
Реверс-инжинирингAndroid

Анализ APK — одно из самых доступных упражнений по реверс-инжинирингу в реальном мире, поскольку APK — хорошо задокументированный, стандартный формат.

Шаг 1: распаковать APK

APK — это просто ZIP-архив с определённой внутренней структурой. Такие инструменты, как apktool, распаковывают его и — что критично — декодируют скомпилированные ресурсы и AndroidManifest.xml обратно в человекочитаемую форму:

apktool d target-app.apk -o output-folder

Это даёт вам манифест (разрешения, объявленные activity, сервисы), ресурсы (строки, layout'ы, изображения) и скомпилированный байт-код приложения (файлы .smali — человекочитаемое представление байт-кода Dalvik/ART для Android).

Шаг 2: перейти от байт-кода к Java-подобному исходнику

Smali читаем, но многословен и низкоуровнев. Для реального анализа логики такие инструменты, как jadx, декомпилируют байт-код APK прямо в Java-подобный исходный код, который гораздо проще читать, чем smali, чтобы понять, что приложение реально делает:

jadx target-app.apk -d decompiled-output

Шаг 3: начните с манифеста, а не с кода

AndroidManifest.xml сообщает, на что способно приложение, ещё до того, как вы прочитаете хоть одну строку логики — запрошенные разрешения, экспортируемые компоненты, объявленные activity и сервисы. Это часто самый быстрый способ понять поверхность атаки или возможности приложения одним взглядом.

Шаг 4: следуйте за точками входа, а не за случайными файлами

Вместо чтения декомпилированного кода файл за файлом, начните с объявленных точек входа приложения (главная activity, экспортируемые компоненты из манифеста) и двигайтесь оттуда наружу — это отражает то, как приложение реально выполняется, и позволяет не заблудиться в несвязанном вспомогательном коде.

Шаг 5: ожидайте обфускацию в реальных приложениях

Продакшн-приложения обычно проходят через ProGuard или R8, которые переименовывают классы, методы и переменные в короткие бессмысленные идентификаторы (a, b, c) специально, чтобы уменьшить приложение и усложнить реверс-инжиниринг. Декомпилированный обфусцированный код всё ещё логически читаем — поток управления сохраняется — но вы теряете оригинальные осмысленные имена, что делает анализ медленнее и более основанным на догадках.

Разумная сводка набора инструментов

ШагИнструментРезультат
Распаковка + декодирование ресурсовapktoolМанифест, ресурсы, smali
Декомпиляция в читаемый исходникjadxJava-подобный исходник
Анализ во время выполнения (опционально, продвинутый)FridaРеальное поведение, хукинг

Анализируйте только те APK, которыми владеете, которые собрали сами, или на анализ которых у вас есть явная авторизация (рамки bug bounty, авторизованная проверка). Правовые границы в более общем виде см. в нашем гайде для начинающих по реверс-инжинирингу.

Частые вопросы

Законно ли декомпилировать APK?

Анализ собственного приложения или того, на которое у вас есть явное разрешение (рамки bug bounty программы, авторизованная проверка безопасности), как правило, нормально. Декомпиляция чужого приложения для распространения, обхода лицензирования или извлечения проприетарной логики без разрешения — обычно нет. Проверьте условия приложения и применимое законодательство.

Почему декомпилированный код выглядит иначе, чем то, что реально написал разработчик?

Компиляция и (часто) обфускация кода теряют или намеренно скрывают информацию — имена переменных, комментарии и некоторые структурные решения не переживают компиляцию, а такие инструменты, как ProGuard/R8, переименовывают элементы специально, чтобы уменьшить размер и запутать релизные сборки.

В чём разница между APK и реальным исходным кодом приложения?

APK — это скомпилированное, упакованное приложение, ближе к готовому продукту, чем к чертежу. Декомпиляция восстанавливает лишь приближение к исходнику (часто с общими именами вроде a, b, c для обфусцированных идентификаторов), а не настоящий исходный код разработчика с реальными именами и комментариями.

Нужна помощь с этим?

Свяжитесь со мной, и я помогу разобраться.

Связаться со мной

Похожие статьи

Поделиться:X / TwitterLinkedIn