Плагин для IDA Pro для реверс-инжиниринга на основе ИИ
# IDAssist *Плагин для реверс-инжиниринга на основе ИИ для IDA Pro* **Автор:** Jason Tang ## Описание IDAssist — это плагин для IDA Pro, который интегрирует анализ на основе LLM непосредственно в интерфейс IDA, обеспечивая реверс-инжиниринг бинарных файлов с помощью ИИ через настраиваемые LLM-провайдеры, семантические графы знаний, поиск по RAG-документам и поддерживает большое разнообразие LLM-провайдеров. Созданный на Python и PySide6, IDAssist работает как закрепляемая панель внутри IDA Pro 9.0+ и взаимодействует с LLM-провайдерами (OpenAI, Anthropic, Ollama, LiteLLM и другими) для анализа функций, предложения переименований, ответов на вопросы о коде и построения индексируемого графа знаний всего бинарного файла. <!-- SCREENSHOT: IDAssist main interface showing the Explain tab with a function explanation and security analysis panel -->  ## Основные возможности **Объяснение функций** — Создание подробных объяснений дизассемблированных функций на естественном языке с автоматическим анализом безопасности, включая уровень риска, профиль активности, флаги безопасности и обнаружение API. **Интерактивный чат запросов** — Задавайте вопросы о бинарном файле с сохранением истории чата. Используйте контекстные макросы (`#func`, `#addr`, `#line`, `#range`) для внедрения кода функций, адресов или диапазонов дизассемблирования в запросы. **Автоматические действия** — Предложения переименований функций, переменных и типов на основе ИИ. Просмотрите предлагаемые изменения в таблице с оценками уверенности, затем примените выбранные действия к IDB. **Семантический граф знаний** — Создавайте и исследуйте граф знаний бинарного файла: функции, отношения вызовов, потоки данных и характеристики безопасности. Включает визуализацию графов, семантический поиск и обнаружение сообществ. **Поиск по RAG-документам** — Загружайте справочные документы (`.txt`, `.md`, `.rst`, `.pdf`) и используйте их как контекст при запросах к LLM. Поддерживает гибридный текстовый+векторный поиск через индексацию Whoosh. **Интеграция с SymGraph** — Отправляйте и получайте имена функций, переменных, типы и данные графа на платформу SymGraph. Включает многошаговый мастер с разрешением конфликтов при получении. **Управление настройками** — Настройте несколько LLM и MCP провайдеров, управляйте учетными данными API SymGraph, настраивайте системный промпт и задавайте пути к базам данных. ## Расширенные возможности ### ReAct Agent Вкладка Query поддерживает автономный режим агента ReAct (Reasoning + Acting). При включении LLM планирует стратегию исследования, выполняет инструменты для сбора информации, анализирует результаты и синтезирует исчерпывающий ответ — всё автоматически за несколько раундов рассуждений. ### Расширенное мышление Настройте уровень усилий рассуждения, чтобы контролировать, сколько LLM «думает» перед ответом: | Уровень | Бюджет мышления | Лучше всего подходит для | |-------|----------------|----------| | Нет | Отключено | Быстрые, простые запросы | | Низкий | ~2K токенов | Прямолинейный анализ | | Средний | ~10K токенов | Умеренная сложность | | Высокий | ~25K токенов | Глубокий анализ, сложный код | ### MCP Интеграция IDAssist может подключаться к внешним MCP-серверам для взаимодействия с LLM с расширенными инструментами, где модель может программно проверять функции, читать дизассемблирование, запрашивать перекрестные ссылки и изменять IDB во время рассуждений. Поддерживаются как MCP-серверы на основе URL (SSE или Streamable HTTP), так и MCP-серверы на основе stdio, запускаемые из локальной команды CLI. IDAssist также предоставляет встроенные внутренние инструменты для вызова функций без необходимости внешнего MCP-сервера. ### Вызов функций LLM-провайдеры с поддержкой вызова инструментов могут вызывать функции анализа IDA в середине диалога, что позволяет проводить итеративное исследование без ручного вмешательства. ### Обратная связь RLHF Оставляйте положительные/отрицательные отзывы об объяснениях и ответах на запросы. Отзывы хранятся локально и могут использоваться для улучшения инженерии промптов и выбора модели. ## Архитектура IDAssist следует шаблону MVC (Model-View-Controller): - **Представления** (`src/views/`) — виджеты вкладок PySide6, которые отправляют сигналы при взаимодействии пользователя - **Контроллеры** (`src/controllers/`) — соединяют сигналы представлений с вызовами служб, управляют состоянием - **Службы** (`src/services/`) — бизнес-логика, LLM-провайдеры, доступ к базе данных, анализ графов - **Внутренние инструменты** (`src/services/internal_tools.py`) — определения инструментов, специфичных для IDA, для вызова функций LLM - **Графовые инструменты** (`src/services/graphrag/graphrag_tools.py`) — инструменты чтения/записи семантического графа для взаимодействия с LLM Ключевые принципы проектирования: - Все вызовы IDA API выполняются в главном потоке через `execute_on_main_thread()` - Ответы LLM передаются в UI инкрементально (постепенно) - Локальные базы данных SQLite для сохранения состояния (не требуется внешняя база данных) - Реестр служб-одиночек с потокобезопасной инициализацией ## Быстрый старт 1. **Установите плагин** (рекомендуется — IDA Plugin Manager): ``` hcli plugin install idassist ``` Это автоматически устанавливает плагин и его Python-зависимости в среду IDA. 2. **Или установите вручную** (из архива релиза): Загрузите последний zip-архив релиза с [GitHub Releases](https://github.com/jtang613/IDAssist/releases) и распакуйте его в каталог плагинов IDA: **Linux / macOS:** ```bash unzip IDAssist-*.zip -d ~/.idapro/plugins/ ``` **Windows:** Extract the zip into `%APPDATA%\Hex-Rays\IDA Pro\plugins\`. Затем установите зависимости, используя **встроенный Python IDA** (не системный Python): **Linux / macOS:** ```bash <IDA_INSTALL_DIR>/python3/bin/pip3 install -r ~/.idapro/plugins/IDAssist/requirements.txt ``` **Windows:** ```cmd "<IDA_INSTALL_DIR>\python3\python.exe" -m pip install -r "%APPDATA%\Hex-Rays\IDA Pro\plugins\IDAssist\requirements.txt" ``` > Замените `<IDA_INSTALL_DIR>` на путь установки IDA Pro (например, `/opt/idapro-9.0` или `C:\Program Files\IDA Pro 9.0`). > > **Совет:** Вы также можете задать переменную окружения `IDAUSR`, указывающую на пользовательский каталог, содержащий подкаталог `plugins/`. 3. **Откройте IDAssist:** Запустите IDA Pro, откройте бинарный файл и нажмите `Ctrl+Shift+A` (или Edit > Plugins > IDAssist). 4. **Настройте провайдера:** Перейдите на вкладку Settings, нажмите **Add** в разделе LLM Providers и настройте предпочитаемого провайдера. 5. **Проанализируйте функцию:** Перейдите к любой функции, щелкните вкладку **Explain** и нажмите **Explain Function**. Подробные инструкции по настройке см. в [Начало работы](https://github.com/symgraph/idassist/blob/master/docs/getting-started.md). ## Настройка LLM-провайдера IDAssist поддерживает следующие типы провайдеров: | Тип | Метод аутентификации | Примечания | |------|-------------|-------| | `anthropic_platform` | API Key | Прямой API Anthropic | | `anthropic_oauth` | OAuth (браузер) | Аутентификация через браузер | | `anthropic_claude_cli` | Локальный CLI | Использует бинарник `claude` CLI | | `bedrock` | Учетные данные AWS | Прямой API AWS Bedrock Converse | | `openai_platform` | API Key | Прямой API OpenAI | | `openai_oauth` | OAuth (браузер) | Аутентификация через браузер | | `ollama` | Нет (локально) | Самостоятельно размещенные модели | | `litellm` | URL прокси | Многопровайдерный прокси | ### Рекомендуемые модели | Провайдер | Модель | Сильные стороны | |----------|-------|-----------| | Anthropic | `claude-sonnet-4-6` | Сильный анализ кода, расширенное мышление | | OpenAI | `gpt-5.3-codex` | Быстрый, хороший общий анализ | | Ollama | `qwen2.5-coder:32b` | Локально, не нужен API-ключ | ## Использование семантического графа Вкладка Semantic Graph предоставляет граф знаний бинарного файла: 1. **ReIndex Binary** — Извлекает структуру функций, граф вызовов и перекрестные ссылки 2. **Semantic Analysis** — Генерирует сводки LLM для каждой функции 3. **Security Analysis** — Обнаруживает шаблоны уязвимостей и API, связанные с безопасностью 4. **Network Flow** — Отслеживает сетевые операции по графу вызовов 5. **Community Detection** — Группирует связанные функции в модули Исследуйте граф через **List View** (вызывающие, вызываемые, ребра, флаги), **Visual Graph** (интерактивная диаграмма узлов с расширением на N шагов) или **Search** (7 типов запросов, включая семантический поиск, похожие функции и контекст вызовов). ## Действия контекстного меню Щелкните правой кнопкой мыши в любом представлении дизассемблирования или псевдокода, чтобы получить доступ: | Действие | Горячая клавиша | Результат | |--------|--------|--------| | Объяснить функцию | `Ctrl+Shift+E` | Открывает вкладку Explain и генерирует объяснение | | Спросить о выделении | `Ctrl+Shift+Q` | Открывает вкладку Query с контекстом `#func` | | Предложения переименования | — | Открывает вкладку Actions и генерирует предложения | ## Требования - **IDA Pro 9.0+** с Python 3 и PySide6 - **Hex-Rays Decompiler** (рекомендуется для функций псевдокода) - Python-пакеты, перечисленные в `requirements.txt` ## Документация - [Индекс документации](https://github.com/symgraph/idassist/blob/master/docs/index.md) - [Начало работы](https://github.com/symgraph/idassist/blob/master/docs/getting-started.md) - Справочник по вкладкам: [Explain](https://github.com/symgraph/idassist/blob/master/docs/tabs/explain-tab.md) | [Query](https://github.com/symgraph/idassist/blob/master/docs/tabs/query-tab.md) | [Actions](https://github.com/symgraph/idassist/blob/master/docs/tabs/actions-tab.md) | [Semantic Graph](https://github.com/symgraph/idassist/blob/master/docs/tabs/semantic-graph-tab.md) | [RAG](https://github.com/symgraph/idassist/blob/master/docs/tabs/rag-tab.md) | [Settings](https://github.com/symgraph/idassist/blob/master/docs/tabs/settings-tab.md) - Рабочие процессы: [Explain](https://github.com/symgraph/idassist/blob/master/docs/workflows/explain-workflow.md) | [Query](https://github.com/symgraph/idassist/blob/master/docs/workflows/query-workflow.md) | [Semantic Graph](https://github.com/symgraph/idassist/blob/master/docs/workflows/semantic-graph-workflow.md) ## Домашняя страница [https://symgraph.ai](https://symgraph.ai) ## Лицензия Подробности см. в файле LICENSE.