Первичный анализ любого APK-файла: советы багхантеру 📞
Если в скоуп багбаунти-программы входят мобилки — никогда не проходи мимо. Вот основные шаги перед началом анализа исходников:
1️⃣
Проверка подлинности и целостности APKПрежде чем тратить время на анализ, убедись, что код подлинный:
apksigner verify --print-certs target.apk
Команда выводит отпечаток сертификата подписи — сравни его с официальной версией.
2️⃣
Распаковка и анализ структуры APK с помощью APKToolAPKTool разбирает APK на читаемые компоненты: манифест с разрешениями и компонентами, ресурсы интерфейса и конфигурации, а также Smali-код — представление логики приложения на уровне байткода.
Прежде чем читать код, нужно понять архитектуру приложения. Какие компоненты доступны извне? Какие разрешения запрашиваются? Какие ресурсы могут утекать? APKTool отвечает на эти вопросы.
3️⃣
Распаковка APKapktool d target.apk -o target_unpacked
В результате появится структура:
⚫️
AndroidManifest.xml — декларация компонентов, разрешений и настроек
⚫️
res/ — ресурсы интерфейса, строки, XML-конфигурации
⚫️
smali/ — дизассемблированный байткод
⚫️
lib/ — нативные библиотеки под разные архитектуры
⚫️
assets/ — дополнительные файлы: базы данных, конфиги, медиа
4️⃣
Извлечение полезной информации из ресурсовРесурсы часто раскрывают больше, чем планировали разработчики. Изучай
res/values/strings.xml,
res/xml/ и другие файлы — туда нередко попадают staging-серверы, dev-эндпоинты и внутренние API.
Пример:
<string name="api_base_url">https://api-staging.target.com</string>
<string name="debug_endpoint">https://internal-admin.target.com</string>
Такие эндпоинты часто защищены слабее прода. Нередко они принимают боевые токены или допускают обход аутентификации.
5️⃣
Автоматический парсинг URLВместо ручного просмотра используй
apk2url:
git clone https://github.com/n0mi1k/apk2url
./apk2url.sh /path/to/target.apk
Тулза автоматически парсит все URL из кода и ресурсов, формируя список потенциальных API-точек для дальнейшего исследования.
Теперь ты понимаешь структуру приложения: его компоненты, разрешения и точки взаимодействия с сетью. Но структура не показывает логические ошибки и реальное поведение кода — для этого нужно разбираться в реализации 💡