We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Termux и обратный инженеринг Android‑приложений: статический и динамический анализ с apktool, jadx, Frida и Ghidra

Termux — мощная среда для работы с Linux-инструментами на Android. Для специалистов по безопасности и разработке она удобна тем, что позволяет быстро развернуть инструментарий для статического и динамического анализа Android‑приложений: от изучения ресурсов и манифеста до разборки кода и наблюдения поведения во время выполнения.

Важно: обратный инженеринг допускается в рамках закона и договорных ограничений. В РФ корректно ориентироваться на анализ собственных приложений, приложений с разрешением правообладателя, а также материалов, использование которых легитимно. Технические подходы ниже описываются с упором на исследовательские и инженерные задачи (аудит, обучение, восстановление артефактов, проверка корректности интеграций).

Подготовка Termux: среда, права и базовые компоненты

Начните с установки Termux и обновления пакетов. Дальше — подготовьте инструменты для загрузки APK, извлечения ресурсов и анализа артефактов.

pkg update && pkg upgrade -y
pkg 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 50

3) 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 и подтверждение гипотез

Практический рабочий процесс обычно такой:

  1. В jadx/ресурсах находите «кандидатов»: класс/метод, где формируется URL, где парсится JSON, где создается подпись.
  2. С помощью Frida проверяете, что метод действительно вызывается в нужный сценарий использования.
  3. Уточняете перехват: добавляете логирование параметров/возвращаемых значений (в объеме, допустимом вашей политикой и законом).
  4. Если метод реализован на 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-реализации.

Комбинирование подходов: связная методика статического и динамического анализа

Ниже — практичная «дорожная карта» анализа одного приложения:

  1. apktool: получите манифест, ресурсы и строковые артефакты. Сформируйте список «где искать» (активности, permission’ы, intent-filters, URL/ключи в ресурсах).
  2. jadx: найдите обработчики, которые соответствуют сценариям из ресурсов (классы, методы, цепочки вызовов). Составьте гипотезы: «вот где формируется запрос» / «вот где вычисляется подпись».
  3. Frida: подтвердите гипотезы в реальном времени: перехватите метод/точку входа, проверьте параметры, оцените влияние на поведение.
  4. 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 — команда РыбинскЛАБ может провести работы под ваши задачи и предоставить результаты в понятном виде.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект