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 (выберите понравившийся)
Другие клиенты 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 uvLinux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
Клонируйте этот репозиторий, для этого примера
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
- Asecurity-licenseAqualityA Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.Last updated -19479MIT License
- Asecurity-licenseAqualityA Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.Last updated -1271MIT License
- Asecurity-licenseAqualityMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.Last updated -2445MIT License
- -security-license-qualityAn MCP server that allows LLMs to autonomously reverse engineer applications by exposing Ghidra functionality, enabling decompilation, analysis, and automatic renaming of methods and data.Last updated -6,169Apache 2.0