Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ida-pro-mcp — Ассистент для реверс-инжиниринга на базе ИИ, который связывает IDA Pro с языковыми моделями через MCP. | Kitploit
Инструменты/GitHubGitHub/mrexodia/ida-pro-mcp
Статический анализДинамический анализ (песочница)Анализ КодаЭксплуатацияОбратная инженерияОтладчикиАнализ вредоносных программАнализ Бинарных ФайловОбучение и ОбразованиеОбратная Разработка с Помощью ИИАнализ ПрошивокТоп в Обратная Разработка с Помощью ИИ №1
11.3k1.3k3013 дней назадПроверено Kitploit
Топ в Анализ Бинарных Файлов №20
Топ в Отладчики №17
Топ в Обратная инженерия №18
GitHubmrexodia/ida-pro-mcp

ida-pro-mcp

Ассистент для реверс-инжиниринга на базе ИИ, который связывает IDA Pro с языковыми моделями через MCP.

РепозиторийСайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

IDA Pro MCP

Простой MCP-сервер для вайб-реверс-инжиниринга в IDA Pro.

https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0

Бинарники и промпт из видео доступны в репозитории mcp-reversing-dataset.

Предварительные требования

  • Python (3.11 или выше)
    • Используйте idapyswitch, чтобы переключиться на последнюю версию Python
  • IDA Pro (8.3 или выше, рекомендуется 9), IDA Free не поддерживается
  • Поддерживаемые MCP-клиенты (выберите любой понравившийся)
    • Amazon Q Developer CLI
    • Augment Code
    • Claude
    • Claude Code
    • Cline
    • Codex
    • Copilot CLI
    • Crush
  • Cursor
  • Gemini CLI
  • Kilo Code
  • Kiro
  • LM Studio
  • Opencode
  • Qodo Gen
  • Qwen Coder
  • Roo Code
  • Trae
  • VS Code
  • VS Code Insiders
  • Warp
  • Windsurf
  • Zed
  • Kimi Code
  • Другие MCP-клиенты: выполните ida-pro-mcp --config, чтобы получить JSON-конфигурацию для вашего клиента.
  • Примечание: для этого требуется глобально активированная idalib и установленный uv:

    root@kitploit:~
    # windows
    uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
    # macos
    uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
    

    Установка (Claude Code)

    Чтобы установить последнюю версию IDA Pro MCP в Claude Code:

    root@kitploit:~
    claude plugin marketplace add mrexodia/claude-marketplace
    claude plugin uninstall ida-pro-mcp@mrexodia
    claude plugin install ida-pro-mcp@mrexodia
    

    Установка (Codex)

    Чтобы установить последнюю версию IDA Pro MCP в Codex:

    root@kitploit:~
    codex plugin marketplace add mrexodia/codex-marketplace
    codex plugin remove ida-pro-mcp@mrexodia
    codex plugin add ida-pro-mcp@mrexodia
    

    Установка (Kimi Code)

    Чтобы установить последнюю версию IDA Pro MCP в Kimi Code, выполните эту слэш-команду в чате:

    root@kitploit:~
    /plugins install https://github.com/mrexodia/ida-pro-mcp/tree/main
    /reload
    

    При этом устанавливаются MCP-сервер idalib и навык idapython. Плагины копируются в $KIMI_CODE_HOME/plugins/managed/, поэтому uv должен быть в вашем PATH. Первая сессия после установки будет медленнее, потому что uv разрешает зависимости до ответа сервера.

    Установка (GUI)

    Примечание: плагин MCP больше не рекомендуется и со временем будет объявлен устаревшим. Используйте вместо него idalib-mcp.

    Если вы хотите настроить MCP-сервер вручную из графического интерфейса IDA:

    root@kitploit:~
    pip uninstall ida-pro-mcp
    pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip
    

    Настройте MCP-серверы и установите плагин IDA:

    root@kitploit:~
    ida-pro-mcp --install
    

    Важно: обязательно полностью перезапустите IDA и ваш MCP-клиент, чтобы установка вступила в силу. Некоторые клиенты (например, Claude) работают в фоновом режиме, и их нужно завершать через значок в трее.

    Промпт-инжиниринг

    LLM склонны к галлюцинациям, поэтому в промптах нужно быть конкретным. В реверс-инжиниринге особенно проблематично преобразование между целыми числами и байтами. Ниже приведён минимальный пример промпта; не стесняйтесь начать обсуждение или открыть issue, если у вас хорошие результаты с другим промптом:

    root@kitploit:~
    Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:
    
    - Inspect the decompilation and add comments with your findings
    - Rename variables to more sensible names
    - Change the variable and argument types if necessary (especially pointer and array types)
    - Change function names to be more descriptive
    - If more details are necessary, disassemble the function and add comments with your findings
    - NEVER convert number bases yourself. Use the `int_convert` MCP tool if needed!
    - Do not attempt brute forcing, derive any solutions purely from the disassembly and simple python scripts
    - Create a report.md with your findings and steps taken at the end
    - When you find a solution, prompt to user for feedback with the password you found
    

    Этот промпт был лишь первым экспериментом — пожалуйста, поделитесь, если нашли способы улучшить результат!

    Ещё один промпт от @can1357:

    root@kitploit:~
    Your task is to create a complete and comprehensive reverse engineering analysis. Reference AGENTS.md to understand the project goals and ensure the analysis serves our purposes.
    
    Use the following systematic methodology:
    
    1. **Decompilation Analysis**
       - Thoroughly inspect the decompiler output
       - Add detailed comments documenting your findings
       - Focus on understanding the actual functionality and purpose of each component (do not rely on old, incorrect comments)
    
    2. **Improve Readability in the Database**
       - Rename variables to sensible, descriptive names
       - Correct variable and argument types where necessary (especially pointers and array types)
       - Update function names to be descriptive of their actual purpose
    
    3. **Deep Dive When Needed**
       - If more details are necessary, examine the disassembly and add comments with findings
       - Document any low-level behaviors that aren't clear from the decompilation alone
       - Use sub-agents to perform detailed analysis
    
    4. **Important Constraints**
       - NEVER convert number bases yourself - use the int_convert MCP tool if needed
       - Use MCP tools to retrieve information as necessary
       - Derive all conclusions from actual analysis, not assumptions
    
    5. **Documentation**
       - Produce comprehensive RE/*.md files with your findings
       - Document the steps taken and methodology used
       - When asked by the user, ensure accuracy over previous analysis file
       - Organize findings in a way that serves the project goals outlined in AGENTS.md or CLAUDE.md
    

    Прямой эфир с обсуждением промптов и разбором реального вредоносного ПО:

    Советы по повышению точности LLM

    Большие языковые модели (LLM) — мощные инструменты, но иногда они с трудом справляются со сложными математическими вычислениями или демонстрируют «галлюцинации» (выдумывание фактов). Обязательно укажите LLM использовать MCP-инструмент int_convert; для некоторых операций вам также может понадобиться math-mcp.

    Ещё один момент, о котором стоит помнить: LLM плохо работают с обфусцированным кодом. Прежде чем пытаться использовать LLM для решения задачи, осмотритесь в бинарнике и потратьте некоторое время на (автоматическое) устранение следующего:

    • Шифрование строк
    • Хеширование импортов
    • Флаттенинг потока управления
    • Шифрование кода
    • Приёмы противодействия декомпиляции

    Также стоит использовать такой инструмент, как Lumina или FLIRT, чтобы попытаться распознать весь код открытых библиотек и C++ STL — это ещё больше повысит точность.

    Транспорты и headless MCP

    Вы можете запустить SSE-сервер для подключения к пользовательскому интерфейсу следующим образом:

    root@kitploit:~
    uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse
    

    После установки idalib вы также можете запустить headless MCP-сервер. Можно начать с указанием исходного бинарника:

    root@kitploit:~
    uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable
    

    Или запуститься без бинарника и открывать произвольные файлы позже с помощью idb_open(...):

    root@kitploit:~
    uv run idalib-mcp --host 127.0.0.1 --port 8745
    

    Для клиентов на основе stdio используйте:

    root@kitploit:~
    uv run idalib-mcp --stdio
    

    Рабочие процессы баз данных постоянны: каждый из них работает как отсоединённый процесс, переживающий породивший его супервизор. Когда новый супервизор (через stdio или HTTP) вызывает idb_open для бинарника, который уже открыт в рабочем процессе на этом хосте, супервизор прозрачно перенимает этот процесс — включать отдельный «общий» режим не нужно. Рабочие процессы завершаются сами, если в течение интервала простоя к ним не поступало ни одного запроса.

    Примечание: функция idalib была добавлена Willi Ballenthin.

    Модель сессий headless idalib

    idalib-mcp — это супервизор, который держит каждую открытую базу данных в собственном рабочем процессе idalib. Рабочие процессы регистрируются в локальном для хоста каталоге обнаружения и переживают породивший их супервизор; любой последующий супервизор, которому нужен тот же путь, перенимает запущенный рабочий процесс. Рабочий процесс завершается сам, если в течение idle TTL (по умолчанию 1 час) к нему не поступало запросов. Вызов idb_close позволяет освободить рабочий процесс заранее (освободив слот в счёт --max-workers); перенятые экземпляры GUI/рабочих процессов отсоединяются, а не уничтожаются.

    idb_open выбирает внутреннюю реализацию через параметр mode:

    • prefer_headless (по умолчанию): запустить рабочий процесс idalib (или перенять тот, который уже открыл файл).
    • force_headless: то же самое, но никогда не перенимать запущенный GUI, даже если в нём открыт файл.
    • prefer_gui: перенять запущенный GUI для файла; в противном случае запустить рабочий процесс idalib.
    • force_gui: перенять запущенный GUI для файла; в противном случае запустить новый процесс IDA GUI.

    Каждый вызов инструмента должен содержать явный аргумент database. Неявной «текущей базы данных» не существует — вызывающая сторона сама называет сессию, с которой хочет работать.

    root@kitploit:~
    uv run idalib-mcp --stdio --max-workers 4
    

    Типичный сценарий:

    root@kitploit:~
    idb_open("/path/to/binary_a.exe", preferred_session_id="binary_a")
    idb_open("/path/to/library.dll", preferred_session_id="library")
    
    decompile("main", database="binary_a")
    xrefs_to("ImportantExport", database="library")
    

    database должен быть ID сессии, возвращённым idb_open (или показанным в idb_list); имена файлов и пути не принимаются.

    Инструменты управления

    • idb_open(input_path, mode="prefer_headless", run_auto_analysis=True, build_caches=True, init_hexrays=True, preferred_session_id=""): открывает бинарник, прогревает подсистемы (кэш строк, Hex-Rays) и возвращает ID его сессии. Если на хосте уже запущен рабочий процесс или GUI для этого пути, такой экземпляр перенимается, а preferred_session_id игнорируется.
    • idb_list(): выводит список открытых сессий и запущенных экземпляров IDA GUI. Каждая запись содержит adopted (True, если этим супервизором она управляется, False для экземпляров GUI/рабочих процессов, обнаруженных, но ещё не открытых через idb_open), backend (worker или gui), is_active и идентификаторы процессов.
    • idb_close(database, save=True): сохранить (опционально), дерегистрировать сессию и завершить принадлежащий ей рабочий процесс, освободив слот в счёт --max-workers. Перенятые экземпляры GUI/рабочих процессов отсоединяются, а не уничтожаются.
    • idb_save(session_id, path=""): сохранить IDB сессии на диск. Прокидывается как обычный инструмент рабочего процесса (добавляется database=<id>) — одинаковая сигнатура в обеих реализациях.
    • Проверка состояния для каждой базы данных: вызывайте server_health(database=<id>) (прокидывается). idb_list() сообщает is_active по результатам TCP/RPC-проверки супервизора.

    Параметры рабочих процессов:

    • --max-workers N: максимальное число одновременных рабочих процессов баз данных (0 = без ограничений, по умолчанию 4).
    • IDA_MCP_MAX_WORKERS: значение по умолчанию из переменной окружения для --max-workers.

    Ресурсы MCP

    Ресурсы представляют обозреваемое состояние (данные только для чтения) в соответствии с философией MCP.

    Основное состояние IDB:

    • ida://idb/metadata — информация о файле IDB (путь, архитектура, база, размер, хеши)
    • ida://idb/segments — сегменты памяти с правами доступа
    • ida://idb/entrypoints — точки входа (main, TLS-колбэки и т. д.)

    Состояние интерфейса:

    • ida://cursor — текущая позиция курсора и функция
    • ida://selection — текущий диапазон выделения

    Информация о типах:

    • ida://types — все локальные типы
    • ida://structs — все структуры/объединения
    • ida://struct/{name} — определение структуры с полями

    Поиск:

    • ida://import/{name} — сведения об импорте по имени
    • ida://export/{name} — сведения об экспорте по имени
    • ida://xrefs/from/{addr} — перекрёстные ссылки с адреса

    Основные функции

    • lookup_funcs(queries): получить функцию(и) по адресу или имени (автоопределение; принимает список или строку через запятую).
    • int_convert(inputs): преобразовать числа в разные форматы (десятичный, шестнадцатеричный, байты, ASCII, двоичный).
    • list_funcs(queries): вывести список функций (постранично, с фильтрацией).
    • list_globals(queries): вывести список глобальных переменных (постранично, с фильтрацией).
    • imports(offset, count): вывести список всех импортированных символов с именами модулей (постранично).
    • decompile(addr): декомпилировать функцию по указанному адресу.
    • disasm(addr): дизассемблировать функцию с полным описанием (аргументы, стековый кадр и т. д.).
    • xrefs_to(addrs): получить все перекрёстные ссылки на адрес(а).
    • xrefs_to_field(queries): получить перекрёстные ссылки на конкретное(ые) поле(я) структуры.
    • callees(addrs): получить функции, вызываемые функцией(ями) по указанному(ым) адресу(ам).

    Операции модификации

    • add_bookmark(addr, name, prefix): добавить или заменить закладку IDA по адресу; укажите prefix="", чтобы убрать префикс.
    • set_comments(items): установить комментарии по адресу(ам) и в представлении дизассемблера, и в представлении декомпилятора.
    • patch_asm(items): пропатчить ассемблерные инструкции по адресу(ам).
    • declare_type(decls): объявить C-тип(ы) в библиотеке локальных типов.
    • define_func(items): определить функцию(и) по адресу(ам). При желании можно указать end для явных границ.
    • define_code(items): преобразовать байты в инструкцию(и) кода по адресу(ам).
    • undefine(items): снять определение элемента(ов) по адресу(ам), преобразовав их обратно в сырые байты. При желании можно указать end или size.

    Операции чтения памяти

    • get_bytes(addrs): прочитать сырые байты по адресу(ам).
    • get_int(queries): прочитать целочисленные значения с использованием ty (i8/u64/i16le/i16be и т. д.).
    • get_string(addrs): прочитать строку(и), завершающуюся нулевым байтом.
    • get_global_value(queries): прочитать значение(я) глобальной переменной по адресу или имени (автоопределение; значения времени компиляции).

    Операции со стековым кадром

    • stack_frame(addrs): получить переменные стекового кадра для функции(й).
    • declare_stack(items): создать переменную(ые) стека по указанному(ым) смещению(ям).
    • delete_stack(items): удалить переменную(ые) стека по имени.

    Операции со структурами

    • read_struct(queries): прочитать значения полей структуры по конкретному(ым) адресу(ам).
    • search_structs(filter): искать структуры по шаблону имени.

    Операции отладчика (расширение)

    Инструменты отладчика по умолчанию скрыты. Включите их параметром запроса ?ext=dbg:

    root@kitploit:~
    http://127.0.0.1:13337/mcp?ext=dbg
    

    Управление:

    • dbg_start(): запустить процесс отладчика.
    • dbg_exit(): завершить процесс отладчика.
    • dbg_continue(): продолжить выполнение.
    • dbg_run_to(addr): выполнить до адреса.
    • dbg_step_into(): шаг с заходом в инструкцию.
    • dbg_step_over(): шаг с обходом инструкции.

    Точки останова:

    • dbg_bps(): вывести список всех точек останова.
    • dbg_add_bp(addrs): добавить точку(и) останова.
    • dbg_delete_bp(addrs): удалить точку(и) останова.
    • dbg_toggle_bp(items): включить/отключить точку(и) останова.

    Регистры:

    • dbg_regs(): все регистры текущего потока.
    • dbg_regs_all(): все регистры всех потоков.
    • dbg_regs_remote(tids): все регистры указанного(ых) потока(ов).
    • dbg_gpregs(): регистры общего назначения текущего потока.
    • dbg_gpregs_remote(tids): регистры общего назначения указанного(ых) потока(ов).
    • dbg_regs_named(names): именованные регистры текущего потока.
    • dbg_regs_named_remote(tid, names): именованные регистры указанного потока.

    Стек и память:

    • dbg_stacktrace(): стек вызовов с информацией о модулях/символах.
    • dbg_read(regions): прочитать память отлаживаемого процесса.
    • dbg_write(regions): записать память в отлаживаемый процесс.

    Расширенные операции анализа

    • py_eval(code): выполнить произвольный Python-код в контексте IDA (возвращает dict с result/stdout/stderr; поддерживает вычисления в стиле Jupyter).
    • analyze_funcs(addrs): комплексный анализ функций (декомпиляция, ассемблер, перекрёстные ссылки, вызываемые и вызывающие функции, строки, константы, базовые блоки).

    Поиск по шаблону

    • find_regex(queries): искать строки регулярным выражением без учёта регистра (постранично).
    • find_bytes(patterns, limit=1000, offset=0): найти байтовый(ые) шаблон(ы) в бинарнике (например, "48 8B ?? ??"). Максимальный лимит: 10000.
    • find_insns(sequences, limit=1000, offset=0): найти последовательность(и) инструкций в коде. Максимальный лимит: 10000.
    • find(type, targets, limit=1000, offset=0): расширенный поиск (непосредственные значения, строки, ссылки на данные/код). Максимальный лимит: 10000.

    Анализ потока управления

    • basic_blocks(addrs): получить базовые блоки с преемниками и предшественниками.

    Операции с типами

    • set_type(edits): применить тип(ы) к функциям, глобальным переменным, локальным переменным или переменным стека.
    • infer_types(addrs): вывести типы по адресу(ам) с помощью Hex-Rays или эвристик.

    Операции экспорта

    • export_funcs(addrs, format): экспортировать функцию(и) в указанном формате (json, c_header или prototypes).

    Операции с графами

    • callgraph(roots, max_depth): построить граф вызовов из корневой(ых) функции(й) с настраиваемой глубиной.

    Пакетные операции

    • rename(batch): унифицированная пакетная операция переименования для функций, глобальных переменных, локальных переменных и переменных стека (принимает dict с опциональными ключами func, data, local, stack).
    • patch(patches): пропатчить несколько байтовых последовательностей за раз.
    • put_int(items): записать целочисленные значения с использованием ty (i8/u64/i16le/i16be и т. д.).

    Ключевые особенности:

    • Типобезопасный API: все функции используют строго типизированные параметры со схемами TypedDict для лучшей поддержки в IDE и структурированных выходных данных LLM
    • Пакетно-ориентированный дизайн: большинство операций принимают как одиночные элементы, так и списки
    • Единообразная обработка ошибок: все пакетные операции возвращают [{..., error: null|string}, ...]
    • Постраничная выдача на основе курсора: функции поиска возвращают cursor: {next: offset} или {done: true} (лимит по умолчанию: 1000, принудительный максимум: 10000 для предотвращения переполнения токенов)
    • Производительность: строки кэшируются с инвалидацией на основе MD5, чтобы избежать повторных вызовов build_strlist в больших проектах

    Разработка

    Добавление новых функций — очень простой и отлаженный процесс. Всё, что нужно сделать, — добавить новую функцию @tool в модульные файлы API в src/ida_pro_mcp/ida_mcp/api_*.py, и ваша функция станет доступна в MCP-сервере без какого-либо дополнительного шаблонного кода! Ниже видео, где я добавляю функцию get_metadata менее чем за 2 минуты (включая тестирование):

    https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64

    Чтобы протестировать сам MCP-сервер:

    root@kitploit:~
    npx -y @modelcontextprotocol/inspector
    

    Это откроет веб-интерфейс на http://localhost:5173 и позволит вам взаимодействовать с MCP-инструментами для тестирования.

    Для тестирования я создаю символическую ссылку на плагин IDA, а затем отправляю JSON-RPC-запрос напрямую на http://localhost:13337/mcp. После включения символических ссылок вы можете выполнить следующую команду:

    root@kitploit:~
    uv run ida-pro-mcp --install
    

    Сформируйте журнал изменений из прямых коммитов в main:

    root@kitploit:~
    git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"
    
    Скачать инструмент