
Окно инструмента Frida UI внутри PyCharm / JetBrains IDE.
中文 | [English](https://github.com/yilongmd/zafrida-ui/blob/main/README.en-US.md)

ZAFrida UI - PyCharm Frida Plugin
===============
Текущая версия: 0.3.8
[](LICENSE)
[](https://github.com/yilongmd/zafrida-ui)
[](https://plugins.jetbrains.com/)
[](https://github.com/yilongmd/zafrida-ui)
## Основные обновления 0.3.8
- В панели Session «устройство» и «режим подключения» разделены на две независимые строки выбора: строка Device содержит только реальные устройства, строка Mode выбирает USB / Remote / Gadget и конечные точки. Проброс adb-портов для Remote/Gadget loopback, Force Stop, Open App всегда применяются к текущему выбранному телефону и больше не используют по ошибке предыдущее устройство.
- При первом открытии и обновлении устройств автоматически запускается неработающий adb server, больше не нужно вручную выполнять `adb devices`.
- Если сохранённое устройство не в сети, отображается заглушка «не подключено» и блокируются связанные операции; при подключении только одного USB-устройства оно автоматически выбирается с уведомлением в Console.
- Под строкой Mode отображается фактически используемый маршрут adb/frida; в режиме Gadget имя пакета Target доступно только для чтения, но его можно выделить и скопировать.
- В HTTP API `/state` добавлен результат разбора `connection`; `device-select --host` по-прежнему доступен, но устарел, для конечных точек используйте `mode-set --host/--port`.
## Основные обновления 0.3.7
- Каждый ZAFrida Project может независимо выбирать или совместно использовать окружение Python/Frida, по умолчанию используется интерпретатор текущего проекта PyCharm, поддерживаются локальные окружения venv, Conda, uv, Poetry, Pipenv, Hatch и другие.
- Переработаны Session UI и Project Settings, полностью отображается информация о версиях плагина, Python и Frida, оптимизированы адаптивная и перетаскиваемая панель логов и состояние сессии.
- Полная поддержка `.js` / `.ts`, Frida 16/17, переключения между окружениями нескольких проектов, а также трёх процессов подключения: USB, Remote, Gadget.
- Усилены локальный HTTP API, CLI и китайский Skill в части восстановления устройств, ожидания сессии и инкрементальных логов; удалён дублирующий и нестабильный слой адаптера MCP.
Описание проекта
-----------------------------------
<h3 align="center">Графический инструмент Frida, созданный специально для PyCharm/IntelliJ</h3>
ZAFrida UI — это плагин графической работы с Frida, интегрированный в PyCharm и линейку IDE JetBrains. Он призван решить проблемы громоздкой работы с Frida через командную строку и беспорядочного управления скриптами, предоставляя полноценный набор **UI-интерфейсов** для управления устройствами, процессами, скриптами и логами.
Ключевая особенность — **система шаблонов в стиле «флажков»**: пользователь может, устанавливая или снимая флажки, динамически вставлять фрагменты кода в основной скрипт или закомментировать их, реализуя «блочную» сборку Hook-скриптов. Кроме того, плагин включает полноценное **проектное управление** (`zafrida-project.xml`), поддерживающее быстрое переключение между конфигурациями множества устройств и окружений.
ZAFrida не заменяет Frida, а служит мощной UI-оболочкой для `frida-tools`, бесшовно интегрируясь с вашим существующим окружением Python и Frida.
**Упрощённая Wiki**: [ZAFrida UI упрощённая Wiki (BBS)](https://github.com/yilongmd/zafrida-ui/blob/main/zafrida_ui_wiki_bbs_zh.md) (это более простая Wiki)
**Подробное руководство**: [ZAFrida UI подробное руководство Wiki](https://github.com/yilongmd/zafrida-ui/blob/main/ZAFridaUI_Wiki_zh.md)
## Демонстрация

Быстрый старт
-----------------------------------
1. **Установка плагина**: найдите "ZAFrida" в магазине плагинов IDE или установите с диска.
2. **Настройка окружения по умолчанию**: по умолчанию используется Python Interpreter текущего проекта PyCharm; глобальные `Settings` -> `Tools` -> `ZAFrida` сохраняют только значения по умолчанию для имён/путей инструментов.
3. **Создание проекта**: правый клик в представлении проекта -> `New Frida Project`.
* Если этому проекту нужна другая версия Frida, откройте ZAFrida `Project Settings`, выберите интерпретатор Python или каталог окружения и нажмите `Test`.
4. **Написание/выбор скрипта**: выберите ваш `agent.js` или `agent.ts` в панели Run.
5. **Отладка Hook**:
* Подключите устройство (USB, Remote или Gadget).
* Выберите целевой процесс или имя пакета.
* Нажмите **Run**.
6. **Использование шаблонов**: переключитесь на вкладку `Templates` и отметьте нужные функции Hook (например, "SSL Pinning Bypass") — код автоматически внедрится в ваш скрипт.
7. **Автоматизация Skills (опционально)**: по умолчанию отключена. Перейдите в `Settings/Preferences -> ZAFrida -> Skills HTTP API`, отметьте `Enable Skills` для автоматического запуска локального API (также можно вручную `Start/Stop`), расположение CLI и шаблонов:
* Skill и основной CLI: `skills-template/zafrida-http-control/`
* Лаунчер для совместимости со старым путём: `skills-cli/zafrida_skill_cli.py`
QR-код группы общения
-----------------------------------
<img src="https://assets.kitploit.com/production/public/readmes/11475/af2e178a9eee68ad3cbdf0c5b002b39f4c18f0128b73575324967291f19eeddc.jpg" alt="QR-код группы общения ZAFrida и реверс-инжиниринга" width="260" />
Возможности
-----------------------------------
* **Управление устройствами и процессами**
Интеграция `frida-ls-devices` и `frida-ps`, поддержка обновления списка устройств одним нажатием, просмотр запущенных процессов, работающих приложений или установленных приложений.
* **Многопользовательские режимы подключения**
Полная поддержка режимов **USB / Remote / Gadget**, поддержка пользовательских удалённых Host и Port, без ручного составления сложных параметров командной строки.
* **Интерактивный запуск скриптов (Run / Attach)**
* Поддержка двух действий выполнения — **Run (по умолчанию Spawn)** и **Attach**, а не простого «переключения режима».
* Поддержка **Force Stop** для принудительной остановки целевого приложения.
* Встроенный вывод логов в консоль с автоматическим сохранением логов в каталог проекта `zafrida-logs/`.
* **Контекстное меню редактора JS / TypeScript (важно)**
* Правый клик в области редактирования файла Frida `.js` или `.ts` позволяет напрямую выбрать:
* **Run Frida Script**: выполнить текущий файл как основной скрипт (по умолчанию Spawn).
* **Attach Frida Script**: внедрить текущий файл как присоединяемый скрипт в уже запущенный целевой процесс.
* Перед выполнением текущий файл автоматически сохраняется и происходит автоматическое переключение на ZAFrida Project, которому принадлежит скрипт.
* Подходит для быстрых PoC, проверки Demo, режима Gadget или мгновенного внедрения в уже запущенный процесс.
* **Горячие клавиши**:
* Windows / Linux: `Ctrl + Alt + S`
* macOS: `⌘ + ⌥ + S`
* **Вставка Snippets из контекстного меню редактора**
* В контекстном меню редактора JS / TypeScript доступен пункт **ZAFrida Frida Snippets**.
* Вставка часто используемых фрагментов кода Frida одним нажатием, например:
* обёртка `Java.perform`
* шаблон Hook метода Java
* Native Hook через `Interceptor.attach`
* Процесс вставки следует IDE WriteCommandAction, безопасно отменяется/повторяется.
* **Динамическая система шаблонов (ключевая инновация)**
* Встроенные шаблоны Hook для Android / iOS (например, SSL Pinning Bypass, Method Hook, Native Hook).
* **Управление флажками**: отметка вставляет код, снятие отметки автоматически комментирует код, без ручного удаления и правки.
* Поддержка пользовательских шаблонов с предпросмотром кода шаблона в реальном времени прямо в IDE.
* **Раздельный дизайн Run Script + Attach Script**
* Поддержка одновременного существования основного **Run Script** и отдельного **Attach Script**.
* Позволяет разделить «Hook на этапе запуска» и «логику внедрения во время выполнения», что удобно для сложной отладки и долгосрочного сопровождения.
* **Проектная конфигурация (ZAFrida Project)**
* Введено понятие ZAFrida Project, сохраняющее устройство, цель, скрипт, Attach Script, параметры подключения и прочее как единый рабочий контекст.
* Поддержка в Project View:
* `New Frida Project` — создание нового проекта
* `Select Frida Project` — быстрое переключение активного проекта
* `Load Frida Project` — импорт существующего каталога проекта
* После переключения проекта состояние UI и конфигурация восстанавливаются автоматически.
* **Умный разбор окружения Python / Frida**
* По умолчанию разбирается Python SDK текущего проекта PyCharm; каждый ZAFrida Project может отдельно переопределить интерпретатор или каталог окружения.
* Поддержка локальных окружений system/pyenv, venv/virtualenv, Conda, uv, Poetry, Pipenv, Hatch.
* Несколько ZAFrida Project могут выбрать один путь для совместного использования окружения, без копирования venv; удобно для раздельного сопровождения окружений Frida 16/17.
* Если в текущем окружении IDE или явно указанном окружении проекта отсутствует `frida-tools`, сразу выдаётся ошибка, без молчаливого использования другой версии из системного PATH; `Test` показывает фактическую версию Frida.
* Удалённые Python Interpreter (SSH, Docker, Docker Compose, WSL и т. п.) пока не могут использоваться для локального дочернего процесса Frida.
* **Frida 17 / TypeScript**
* Выбор файлов, правый клик Run/Attach и Snippets поддерживают `.js` / `.ts`; REPL Frida 17 автоматически компилирует `-l agent.ts`.
* Встроенные шаблоны переведены на современный Module/NativePointer API Frida 17, при этом сохраняется работоспособность в распространённых окружениях Frida 16.
* REPL frida-tools для совместимости несёт стандартные Java/ObjC bridges; при использовании `import` модулей npm/сторонних модулей следует управлять зависимостями через `frida-create -t agent` или эквивалентный инженерный подход.
* **Локальный интерфейс автоматизации Skills**
* Локальный Skills HTTP API (по умолчанию отключён) поддерживает обнаружение возможностей, проекты/окружения Python, устройства и процессы, Run/Attach, список исторических логов и инкрементальное чтение логов на основе байтового курсора.
* Skill включает встроенные ограниченные процессы восстановления `wait-device` / `wait-session` и различает безопасно повторяемые операции чтения и операции с побочными эффектами, которые нельзя автоматически повторять.
* Способ включения: `Settings/Preferences -> ZAFrida -> Skills HTTP API`, отметьте `Enable Skills`.
* Сопутствующий CLI и шаблоны:
* `skills-template/zafrida-http-control/` (основной Skill и CLI)
* `skills-cli/zafrida_skill_cli.py` (лаунчер для совместимости со старым путём)
Сценарии применения
-----------------------------------
ZAFrida UI подходит для всех сценариев реверс-инжиниринга с использованием Frida, особенно:
* Тестирование на проникновение и реверс-анализ приложений Android / iOS.
* Процесс отладки, требующий частого переключения между разными Hook-скриптами.
* Инженеры, привыкшие использовать IDE (PyCharm/IDEA) для смешанной разработки на Python, JavaScript и TypeScript.
Техническая документация
-----------------------------------
- **Требования к окружению**:
- IntelliJ IDEA или PyCharm (рекомендуется 2024.3+)
- Локально установленный Python3 и `frida-tools` (`pip install frida-tools`)
- Убедитесь, что `frida`, `frida-ps`, `frida-ls-devices` находятся в системном PATH или укажите пути в настройках плагина.
- **Обратная связь**: [Github Issues](https://github.com/yilongmd/zafrida-ui/issues)
Запуск проекта
-----------------------------------
1. Клонируйте исходный код: `git clone https://github.com/yilongmd/zafrida-ui.git`
2. Откройте проект в IntelliJ IDEA.
3. Запустите задачу Gradle `runIde` для запуска среды отладки.
Внешний вид системы
-----------------------------------
##### Главный интерфейс и панель запуска (Run Panel)
> Предоставляет выбор устройства, выбор скрипта, настройку режима запуска и вывод в консоль.

##### Управление динамическими шаблонами (Template Panel)
> Слева выбор категории, в центре отметка шаблонов, справа предпросмотр кода в реальном времени. Флажки напрямую управляют активностью содержимого скрипта.

##### Интерфейс настроек (Settings)
> Поддержка пользовательских путей к инструментам Frida, адресов удалённого подключения и настройки логов.

##### Мастер создания проекта
> Быстрое создание стандартизированной структуры проекта Frida.

Техническая архитектура
-----------------------------------
#### Среда разработки
- Язык: Java 21, Java, скрипты сборки используют Gradle Kotlin DSL
- Фреймворк: IntelliJ Platform SDK
- Инструмент сборки: Gradle
- Зависимости: `frida` `frida-tools` (Python environment)
Благодарности
-----------------------------------
Особая благодарность следующим специалистам за поддержку проекта шаблонами Frida JS:
* **小佳**
* **Lane**
* **迷人**
Больше информации о контрибьюторах и благодарностях см. в: [CONTRIBUTORS.md](https://github.com/yilongmd/zafrida-ui/blob/main/CONTRIBUTORS.md)