IDA Pro MCP
Простой MCP-сервер , позволяющий реверсировать вибрации в IDA Pro.
https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0
Двоичные файлы и приглашение к видео доступны в репозитории mcp-reversing-dataset .
Доступные функции:
check_connection()
: проверка того, запущен ли плагин IDA.get_metadata()
: Получить метаданные о текущем IDB.get_function_by_name(name)
: получить функцию по ее имени.get_function_by_address(address)
: получить функцию по ее адресу.get_current_address()
: получить адрес, выбранный пользователем в данный момент.get_current_function()
: получить функцию, выбранную пользователем в данный момент.convert_number(text, size)
: Преобразование числа (десятичного, шестнадцатеричного) в различные представления.list_functions(offset, count)
: список всех функций в базе данных (с разбивкой на страницы).list_globals_filter(offset, count, filter)
: список соответствующих глобальных переменных в базе данных (постранично, отфильтровано).list_globals(offset, count)
: список всех глобальных переменных в базе данных (с разбивкой на страницы).list_strings_filter(offset, count, filter)
: список совпадающих строк в базе данных (постранично, отфильтровано).list_strings(offset, count)
: список всех строк в базе данных (с разбивкой на страницы).decompile_function(address)
: Декомпилировать функцию по указанному адресу.disassemble_function(start_address)
: получить ассемблерный код (адрес: инструкция; комментарий) для функции.get_xrefs_to(address)
: Получить все перекрестные ссылки на указанный адрес.get_xrefs_to_field(struct_name, field_name)
: получить все перекрестные ссылки на именованное поле структуры (член).get_entry_points()
: получить все точки входа в базе данных.set_comment(address, comment)
: Установить комментарий для указанного адреса в дизассемблированной функции и псевдокоде.rename_local_variable(function_address, old_name, new_name)
: переименовать локальную переменную в функции.rename_global_variable(old_name, new_name)
: переименовать глобальную переменную.set_global_variable_type(variable_name, new_type)
: устанавливает тип глобальной переменной.rename_function(function_address, new_name)
: переименовать функцию.set_function_prototype(function_address, prototype)
: Установить прототип функции.declare_c_type(c_declaration)
: создание или обновление локального типа из объявления C.set_local_variable_type(function_address, variable_name, new_type)
: устанавливает тип локальной переменной.
Небезопасные функции (требуется флаг --unsafe
):
dbg_get_call_stack()
: получить текущий стек вызовов.dbg_get_registers()
: Получить все регистры и их значения. Эта функция доступна только при отладке.dbg_run_to(address)
: запустить отладчик по указанному адресу.dbg_exit_process()
: Выход из отладчика.dbg_continue_process()
: Продолжить отладку.dbg_enable_breakpoint(address, enable)
: включение или отключение точки останова по указанному адресу.dbg_list_breakpoints()
: список всех точек останова в программе.dbg_set_breakpoint(address)
: Установить точку останова по указанному адресу.dbg_delete_breakpoint(address)
: удалить точку останова по указанному адресу.dbg_start_process()
: Запустить отладчик.
Предпосылки
- Python ( 3.11 или выше )
- Используйте
idapyswitch
для перехода на последнюю версию Python
- Используйте
- IDA Pro (8.3 или выше, рекомендуется 9)
- Поддерживаемый клиент MCP (выберите понравившийся)
- Клайн
- Ру Код
- Клод
- Курсор
- Режим агента VSCode
- Виндсерфинг
- Другие клиенты MCP : запустите
ida-pro-mcp --config
, чтобы получить конфигурацию JSON для вашего клиента.
Установка
Установите (или обновите) пакет IDA Pro MCP:
Настройте серверы MCP и установите плагин IDA:
Важно : убедитесь, что вы полностью перезапустили IDA/Visual Studio Code/Claude, чтобы установка вступила в силу. Claude работает в фоновом режиме, и вам нужно выйти из него с помощью значка в трее.
https://github.com/user-attachments/assets/65ed3373-a187-4dd5-a807-425dca1d8ee9
Оперативное проектирование
LLM склонны к галлюцинациям, и вам нужно быть конкретными с вашими подсказками. Для обратного проектирования преобразование между целыми числами и байтами особенно проблематично. Ниже приведен минимальный пример подсказки, не стесняйтесь начинать обсуждение или открывать проблему, если у вас хорошие результаты с другой подсказкой:
Ваша задача — проанализировать crackme в IDA Pro. Вы можете использовать инструменты MCP для извлечения информации. В общем случае используйте следующую стратегию:
- Проверьте декомпиляцию и добавьте комментарии с вашими выводами.
- Переименуйте переменные в более разумные имена.
- При необходимости измените типы переменных и аргументов (особенно типы указателей и массивов).
- Измените названия функций на более описательные.
- Если необходимы дополнительные сведения, разберите функцию и добавьте комментарии с вашими выводами.
- НИКОГДА не конвертируйте системы счисления самостоятельно. При необходимости используйте инструмент MCP convert_number!
- Не пытайтесь использовать метод полного перебора, извлекайте любые решения исключительно из дизассемблирования и простых скриптов Python.
- Создайте отчет report.md с вашими выводами и предпринятыми шагами в конце.
- Когда вы найдете решение, попросите пользователя отправить отзыв с найденным вами паролем.
Эта подсказка была всего лишь первым экспериментом. Пожалуйста, поделитесь, если вы нашли способы улучшить результат!
Советы по повышению точности LLM
Большие языковые модели (LLM) — мощные инструменты, но иногда они могут испытывать трудности со сложными математическими вычислениями или демонстрировать «галлюцинации» (выдумывание фактов). Обязательно укажите LLM использовать conver_number
MCP, а также вам может понадобиться math-mcp для определенных операций.
Еще одна вещь, которую следует иметь в виду, заключается в том, что LLM не будут хорошо работать с запутанным кодом. Прежде чем пытаться использовать LLM для решения проблемы, осмотрите двоичный файл и потратьте некоторое время на (автоматическое) удаление следующих вещей:
- Шифрование строк
- Импорт хеширования
- Управляемое выравнивание потока
- Шифрование кода
- Антидекомпиляционные трюки
Вам также следует использовать такой инструмент, как Lumina или FLIRT, чтобы попытаться разрешить весь код библиотеки с открытым исходным кодом и C++ STL, это еще больше повысит точность.
SSE Транспорт и безголовый MCP
Вы можете запустить сервер SSE для подключения к пользовательскому интерфейсу следующим образом:
После установки idalib
вы также можете запустить headless-сервер SSE:
Примечание . Функцию idalib
предоставил Вилли Баллентин .
Ручная установка
Примечание : этот раздел предназначен для LLM и опытных пользователей, которым нужны подробные инструкции по установке.
Ручная установка сервера MCP (код Cline/Roo)
Чтобы установить сервер MCP самостоятельно, выполните следующие действия:
- Установить uv глобально:
- Windows:
pip install uv
- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows:
- Клонируйте этот репозиторий, для этого примера
C:\MCP\ida-pro-mcp
. - Перейдите к конфигурации серверов Cline/Roo Code MCP (см. снимок экрана).
- Нажмите на вкладку Установлено .
- Нажмите «Настроить серверы MCP» , чтобы открыть
cline_mcp_settings.json
. - Добавьте сервер
ida-pro-mcp
:
Чтобы проверить, работает ли соединение, можно выполнить следующий вызов инструмента:
Установка плагина IDA
Плагин IDA Pro будет установлен автоматически при запуске сервера MCP. Если вы отключили опцию --install-plugin
, выполните следующие шаги:
- Скопируйте ( не перемещайте )
src/ida_pro_mcp/mcp-plugin.py
в папку плагинов (%appdata%\Hex-Rays\IDA Pro\plugins
в Windows). - Откройте IDB и нажмите
Edit -> Plugins -> MCP
чтобы запустить сервер.
Сравнение с другими серверами MCP
Существует несколько серверов IDA Pro MCP, но я создал свой собственный по нескольким причинам:
- Установка должна быть полностью автоматизирована.
- Архитектура других плагинов затрудняет быстрое добавление новых функций (слишком много шаблонного кода ненужных зависимостей).
- Изучать новые технологии весело!
Если вы хотите с ними ознакомиться, вот список (в том порядке, в котором я их обнаружил):
- https://github.com/taida957789/ida-mcp-server-plugin (только протокол SSE, требуется установка зависимостей в IDAPython).
- https://github.com/fdrechsler/mcp-server-idapro (MCP-сервер на TypeScript, для добавления новых функций требуется избыточный шаблонный код).
- https://github.com/MxIris-Reverse-Engineering/ida-mcp-server (пользовательский протокол сокетов, шаблон).
Не стесняйтесь открывать PR, чтобы добавить свой сервер IDA Pro MCP здесь.
Разработка
Добавление новых функций — это очень простой и оптимизированный процесс. Все, что вам нужно сделать, это добавить новую функцию @jsonrpc
в mcp-plugin.py
, и ваша функция будет доступна на сервере MCP без дополнительного шаблона! Ниже представлено видео, в котором я добавляю функцию get_metadata
менее чем за 2 минуты (включая тестирование):
https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64
Чтобы протестировать сам сервер MCP:
Откроется веб-интерфейс по адресу http://localhost:5173 , который позволит вам взаимодействовать с инструментами MCP для тестирования.
Для тестирования я создаю символическую ссылку на плагин IDA, а затем отправляю запрос JSON-RPC напрямую на http://localhost:13337/mcp
. После включения символических ссылок вы можете выполнить следующую команду:
Сгенерировать журнал изменений прямых коммитов в main
:
local-only server
The server can only run on the client's local machine because it depends on local resources.
Tools
MCP Server для автоматизированного обратного проектирования с помощью IDA Pro.
Related MCP Servers
- AsecurityAlicenseAqualityAiDD MCP Server provides a secure interface for AI agents to perform file system operations and code analysis, enhancing AI-assisted development workflows across multiple programming languages.Last updated -2962PythonApache 2.0
- AsecurityAlicenseAqualityA Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.Last updated -19443PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.Last updated -814PythonMIT License
- AsecurityAlicenseAqualityMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.Last updated -2428PythonMIT License