Termux — мощная среда для работы с Linux-инструментами на Android. Для специалистов по безопасности и разработке она удобна тем, что позволяет быстро развернуть инструментарий для статического и динамического анализа Android‑приложений: от изучения ресурсов и манифеста до разборки кода и наблюдения поведения во время выполнения.
Важно: обратный инженеринг допускается в рамках закона и договорных ограничений. В РФ корректно ориентироваться на анализ собственных приложений, приложений с разрешением правообладателя, а также материалов, использование которых легитимно. Технические подходы ниже описываются с упором на исследовательские и инженерные задачи (аудит, обучение, восстановление артефактов, проверка корректности интеграций).
Подготовка Termux: среда, права и базовые компоненты
Начните с установки Termux и обновления пакетов. Дальше — подготовьте инструменты для загрузки APK, извлечения ресурсов и анализа артефактов.
pkg update && pkg upgrade -ypkg install -y openjdk-17 wget unzip tarДля работы со сборками и реверсом часто нужны Java/архиваторы. Рекомендуется также проверить, что есть достаточно места на диске и стабильная сеть.
Получение APK и организация рабочего пространства
Скачайте APK легитимным способом (например, из ваших артефактов CI или из официальных источников для приложений, на анализ которых вы имеете право). Создайте рабочую директорию.
mkdir -p ~/re/apk && cd ~/re/apkЕсли APK получен на устройстве, удобно скопировать его в Termux. В терминах команд это может выглядеть по-разному в зависимости от вашего способа передачи, но цель одна: иметь локальный файл, с которым будут работать инструменты.
ls -laСтатический анализ: apktool (ресурсы, манифест, разметка)
apktool применяется для декодирования ресурсов APK: AndroidManifest.xml, строковых ресурсов, layout/ресурсов, а также для получения представления об устройстве приложения. Это особенно полезно для:
- понимания структуры пакетов и активностей;
- проверки используемых permission’ов и компонентов;
- анализа строк, URL, путей к API, ключей (если они «зашиты»);
- оценки схемы навигации и подключения библиотек.
В Termux apktool можно запускать различными путями (через Java и репозитории/загрузку jar). Практика: установить/скачать apktool.jar и пользоваться им как отдельной программой.
Ниже — ориентир по подготовке jar (как сделать именно в вашем Termux зависит от доступных способов установки в момент выполнения; используйте официальный/доверенный источник). Сам запуск будет таким:
java -jar apktool.jar d app.apk -o app_decodedПосле декодирования проверьте основные артефакты:
ls -la app_decoded
ls -la app_decoded/AndroidManifest.xml
find app_decoded -maxdepth 3 -type f | headПрактические задачи в apktool: как читать AndroidManifest и ресурсы
1) AndroidManifest.xml — ключ к пониманию компонентов и внешних интеграций. Обратите внимание на:
- activities/services/receivers/providers;
- exported=true (где применимо);
- permission’ы;
- deep links (intent-filters);
- провайдеры контентных данных.
2) res/values и res/xml — источник строк, шаблонов, ссылок. Быстрый поиск:
grep -Rin --color=always "https?://" app_decoded/res 2>/dev/null | head -n 50
grep -Rin --color=always "api" app_decoded/res/values 2>/dev/null | head -n 503) resources.arsc декодируется в структуру. Иногда строки/лейблы оказываются «спрятаны» в отдельных ресурсах — ищите повторяющиеся шаблоны, названия ключей, типы ассетов.
Статический анализ кода: jadx для декомпиляции классов
jadx помогает извлечь человекочитаемый Java-подобный код из DEX. Это ускоряет понимание логики: где формируются запросы, как устроены валидации, какие классы отвечают за хранение данных и обработку событий.
Обычно шаги выглядят так: запускаете jadx по APK, а затем просматриваете дерево пакетов и файлы классов. Запуск может отличаться в зависимости от того, как установлен jadx в Termux. Идея одна: указать входной файл и директорию для вывода.
jadx -d out_jadx app.apkДальше:
ls -la out_jadx
find out_jadx -maxdepth 3 -type f -name ".java" | headКак работать с jadx эффективно: фильтрация и быстрые проверки
Вместо «читать все подряд» используйте точечные запросы по строкам и сигнатурам:
- Поиск HTTP/HTTPS:
grep -Rin --color=always "http" out_jadx | head -n 50- Поиск ключевых слов: token, bearer, authorization, oauth, jwt:
grep -Rin --color=always -E "token|bearer|authorization|oauth|jwt" out_jadx | head -n 80- Поиск работы с хранилищем: SharedPreferences, SQLite, FileOutputStream:
grep -Rin --color=always -E "SharedPreferences|SQLite|FileOutputStream|MODE_PRIVATE" out_jadx | head -n 80Результат: вы быстро находите подозрительные участки, которые затем подтверждаете динамическим наблюдением (Frida) или углубленным разбором в Ghidra.
Динамический анализ: принципы Frida (безопасная исследовательская схема)
Frida позволяет перехватывать вызовы Java- и native-уровня в приложении во время выполнения. Для исследователя это означает возможность:
- наблюдать, когда и как приложение обращается к определенным методам;
- снимать параметры вызовов (в рамках исследовательских задач);
- отслеживать появление ключевых строк, обработку данных и формирование запросов.
При этом важно не превращать процесс в «взлом» и не выходить за рамки легитимных целей. Технический подход — наблюдение и верификация гипотез: что именно делает приложение.
Уточнение по установке: в зависимости от вашего окружения Frida на Android может требовать определенной инфраструктуры (например, сервер Frida на устройстве). В рамках статьи покажем общую схему запуска с локальной проверкой и примерами логирования.
Frida: базовая логика скрипта (перехват метода и логирование)
Обычно вы подготавливаете JavaScript для Frida и подаете его к процессу приложения. Ниже — шаблон концептуального перехвата с логированием вызовов Java-методов (адаптируйте под фактические классы/методы вашего приложения).
// frida_script.js (шаблон)
Java.perform(function () {
var clazz = Java.use("com.example.app.SomeClass");
clazz.someMethod.implementation = function () {
console.log("[+] SomeClass.someMethod called");
return this.someMethod.apply(this, arguments);
};
});Запуск (примерная форма) может отличаться в зависимости от того, как устроено подключение к вашему устройству:
frida -U -n <process_name> -l frida_script.js --no-pauseПосле выполнения проверьте консоль: вы получите маркеры того, что метод реально вызывается, и сможете уточнять дальнейшие перехваты.
Frida: поиск точек интереса через hooking и подтверждение гипотез
Практический рабочий процесс обычно такой:
- В jadx/ресурсах находите «кандидатов»: класс/метод, где формируется URL, где парсится JSON, где создается подпись.
- С помощью Frida проверяете, что метод действительно вызывается в нужный сценарий использования.
- Уточняете перехват: добавляете логирование параметров/возвращаемых значений (в объеме, допустимом вашей политикой и законом).
- Если метод реализован на native-уровне (JNI), переходите к Ghidra для глубокой картины.
Ghidra: анализ native-кода и понимание ARM/ARM64 фрагментов
Ghidra — мощный инструмент для анализа исполняемых файлов и библиотек (включая native-библиотеки .so, которые лежат внутри APK). Для Android часто встречаются сценарии:
- использование криптографии/обфускации на native-уровне;
- JNI-интерфейсы, где Java вызывает функции в .so;
- сборка запросов или обработка данных, скрытая от простого просмотра DEX.
Шаг 1: извлеките native-библиотеки из APK. В Termux это можно сделать через распаковку:
mkdir -p extracted_libs
unzip -q app.apk "lib/" -d extracted_libs
find extracted_libs -type f -maxdepth 4 | head -n 50Шаг 2: импортируйте нужную .so в Ghidra и выполните анализ по умолчанию. В Ghidra обычно следует:
- выбрать архитектуру (arm/arm64);
- запустить auto-analysis;
- исследовать функции, обращения к строкам, JNI-связки;
- сопоставить сигнатуры с тем, что видите в jadx.
Идея связки «ядекс → фрида → ги-дырра» помогает не теряться: сначала находите интересное в Java, затем подтверждаете во время исполнения, а затем углубляетесь в native-реализации.
Комбинирование подходов: связная методика статического и динамического анализа
Ниже — практичная «дорожная карта» анализа одного приложения:
- apktool: получите манифест, ресурсы и строковые артефакты. Сформируйте список «где искать» (активности, permission’ы, intent-filters, URL/ключи в ресурсах).
- jadx: найдите обработчики, которые соответствуют сценариям из ресурсов (классы, методы, цепочки вызовов). Составьте гипотезы: «вот где формируется запрос» / «вот где вычисляется подпись».
- Frida: подтвердите гипотезы в реальном времени: перехватите метод/точку входа, проверьте параметры, оцените влияние на поведение.
- Ghidra: если логика уходит в native (.so), разберите соответствующие функции и свяжите их с JNI-вызывами и тем, что вы видели в динамике.
Так вы получаете не набор разрозненных команд, а обоснованную картину поведения приложения.
Типовые ошибки новичка и как их избежать
- Слишком ранняя погоня за “секретами”: начните с легитимного understanding потока приложения (manifest → entry points → data flow).
- Игнорирование обфускации: если jadx показывает нечитаемые имена — ищите строки/константы, точки входа и сигнатуры вызовов; используйте динамическое подтверждение.
- Нет сценария запуска: Frida и динамика требуют четкого действия в приложении (например, конкретная форма логина, конкретная загрузка данных).
- Падение из-за неправильной архитектуры: для .so и Ghidra важно выбрать верный target (arm vs arm64).
Небольшой технический трек: что делать прямо в Termux (чеклист)
- Обновить окружение Termux и поставить Java/архиваторы:
pkg update,pkg install. - Подготовить директорию проекта:
mkdir -p ~/re/apk. - Декодировать ресурсы apktool:
java -jar apktool.jar d app.apk -o app_decoded. - Декомпилировать DEX jadx:
jadx -d out_jadx app.apk. - Извлечь lib из APK:
unzip -q app.apk "lib/*" -d extracted_libs. - Собрать перехват Frida под интересующие классы/методы и проверить воспроизводимость.
О VPN и сетевой инфраструктуре (только для локальной лаборатории)
Если вы используете лабораторную сеть для взаимодействия между устройством и компьютером (например, для удобства доступа к сервисам наблюдения), можно настроить локальную сеть через VPN. Это используется исключительно для построения внутренней инфраструктуры в рамках лаборатории, а не для обхода ограничений.
Заключение
Termux дает удобный и мобильный контур для начала обратного инженеринга Android‑приложений: apktool помогает понять структуру ресурсов и манифеста, jadx — быстро восстановить логику Java-части, Frida — подтвердить гипотезы в динамике, а Ghidra — углубиться в native-реализации и связать поведение с функциями в .so. В связке эти инструменты позволяют перейти от фрагментарного просмотра к системному анализу.
Если вам нужна помощь с аудитом Android‑приложения, разбором APK для оценки рисков, исследованием подозрительных интеграций или построением рабочей цепочки анализа в Termux — команда РыбинскЛАБ может провести работы под ваши задачи и предоставить результаты в понятном виде.