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

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

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

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

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

Категории

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

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHub
mrexodia/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/рабочих процессов отсоединяются, а не уничтожаются.

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

  • --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"
Скачать инструмент
  • idb_save(session_id, path=""): сохранить IDB сессии на диск. Прокидывается как обычный инструмент рабочего процесса (добавляется database=<id>) — одинаковая сигнатура в обеих реализациях.
  • Проверка состояния для каждой базы данных: вызывайте server_health(database=<id>) (прокидывается). idb_list() сообщает is_active по результатам TCP/RPC-проверки супервизора.