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

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

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

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

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

Категории

Все категории
Loading categories
binary-ninja-headless-mcp — Headless Binary Ninja MCP server — предоставляющий агентам ИИ глубокие возможности реверс-инжиниринга через 180 инструментов. | Kitploit
Инструменты/GitHubGitHub/mrphrazer/binary-ninja-headless-mcp
Обратная инженерияСкриптинг и автоматизацияОтладчикиФаззингУтилиты и фреймворкиАнализ Бинарных ФайловОбучение и ОбразованиеОбратная Разработка с Помощью ИИ

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
GitHub
mrphrazer/binary-ninja-headless-mcp

binary-ninja-headless-mcp

Headless Binary Ninja MCP server — предоставляющий агентам ИИ глубокие возможности реверс-инжиниринга через 180 инструментов.

Репозиторий
235193 месяцев назадПроверено Kitploit

Binary Ninja Headless MCP

Сервер Binary Ninja без графического интерфейса, работающий по протоколу MCP (Model Context Protocol), предоставляющий AI-агентам полный доступ к глубоким процессам реверс-инжиниринга — дизассемблированию, IL, патчингу, типам, перекрёстным ссылкам и многому другому — без GUI.

Спроектирован для запуска в том же Docker-контейнере, что и среда выполнения агента. Без сайдкаров, без дополнительных сервисов.

Весь этот проект — код, тесты и документация — на 100% сделан по принципу vibe coding.

Зачем

Существующие MCP-серверы Binary Ninja либо привязаны к GUI, либо предоставляют ограниченный набор инструментов. Этот сервер работает исключительно без GUI и предназначен для управляемых агентами процессов в изолированных средах VM/контейнеров: агент получает полный контроль над системой анализа, автоматизируя большие части реверс-инжиниринга, пока вы интерактивно обсуждаете и направляете процесс.

Цель — интерфейс, в котором агенты могут со временем просматривать, уточнять и расширять анализ: обновлять типы, символы и метаданные, инкрементально улучшать базу данных анализа, безопасно применять патчи и итерации с помощью отмены/повтора, а также запускать пользовательские скрипты, когда рабочий процесс требует чего-то особенного.

Возможности

  • 181 инструмент в 36 функциональных группах: анализ, дизассемблирование, IL, патчинг, отмена/повтор, типы, рабочие процессы, память, поиск, перекрёстные ссылки, скриптинг и многое другое.
  • По умолчанию только для чтения с безопасными рабочими процессами модификации (отмена/повтор, транзакции).
  • Доступ к скриптингу через binja.eval и binja.call для всего, что не покрывается каталогом инструментов.
  • Транспорты Stdio и TCP.
  • Ноль зависимостей во время выполнения помимо самого Binary Ninja.
  • Режим фиктивного бэкенда для CI и разработки без лицензии Binary Ninja.

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

  • Python 3.11+
  • Установленный Binary Ninja с лицензией, поддерживающей работу без GUI, и модулем binaryninja Python, доступным для импорта в вашей среде выполнения (для реального анализа)
  • Для CI/разработки без Binary Ninja используйте режим фиктивного бэкенда

Установка

root@kitploit:~
git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .

Или установите напрямую из корня репозитория без клонирования:

root@kitploit:~
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git

Быстрый старт

Транспорт Stdio (по умолчанию):

root@kitploit:~
python3 binary_ninja_headless_mcp.py

Транспорт TCP:

root@kitploit:~
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765

Режим фиктивного бэкенда (Binary Ninja не требуется):

root@kitploit:~
python3 binary_ninja_headless_mcp.py --fake-backend

Использование с AI-агентами

Этот сервер использует стандартный MCP через stdio (по умолчанию) или tcp, поэтому любой хост агента, поддерживающий MCP, может его использовать.

Claude Code

root@kitploit:~
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py

Или добавьте его в .mcp.json вашего проекта:

root@kitploit:~
{
  "mcpServers": {
    "binary_ninja_headless_mcp": {
      "command": "python3",
      "args": ["binary_ninja_headless_mcp.py"],
      "cwd": "/path/to/binary-ninja-headless-mcp"
    }
  }
}

Codex

root@kitploit:~
codex mcp add binary_ninja_headless_mcp -- python3 binary_ninja_headless_mcp.py

Универсальный MCP-хост

  • Зарегистрируйте сервер с именем binary_ninja_headless_mcp.
  • Используйте команду python3 с аргументами ["binary_ninja_headless_mcp.py"], когда cwd указывает на корень репозитория, или используйте абсолютный путь к скрипту в args.
  • Установите cwd в путь к репозиторию, если хотите, чтобы относительные пути, такие как samples/ls, разрешались правильно.
  • Используйте транспорт stdio, если ваш хост не требует TCP.
  • Для фиктивного режима (Binary Ninja не установлен) добавьте --fake-backend.
  • Проверьте связь, вызвав health.ping, затем session.open.

Паттерн совместного размещения в Docker

Рекомендуемая модель развёртывания: запуск процесса агента и этого MCP-сервера в одном образе контейнера.

Пример базового образа:

root@kitploit:~
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN python -m pip install --upgrade pip && pip install ruff pytest
CMD ["python3", "binary_ninja_headless_mcp.py"]

Если вам нужен реальный анализ Binary Ninja внутри контейнера, добавьте среду выполнения Binary Ninja + настройку лицензии в этот же образ и запустите агента с настроенным MCP-сервером.

Методы MCP

  • initialize
  • ping
  • tools/list
  • tools/call
  • shutdown

Поведение tools/list:

  • Без явных параметров постраничного вывода возвращает полный каталог инструментов.
  • Если указаны offset или limit, используется постраничный вывод (по умолчанию offset=0, limit=50 в постраничном режиме).
  • Поддерживает фильтрацию через:
    • prefix (например, binary.)
    • query (поиск по подстроке в имени/описании инструмента)
  • Возвращает метаданные постраничного вывода: offset, limit, total, has_more.
  • Когда страница усечена (has_more=true), включает next_offset и подсказку notice.

Поведение ответов на вызовы инструментов:

  • structuredContent — это каноническая полная нагрузка.
  • content[0].text — это компактная строка сводки (не полное дублирование JSON).
  • Это разделение сделано намеренно, чтобы уменьшить использование контекста, но при этом предоставлять полные машиночитаемые данные.

Качество и тестирование

Этот репозиторий хорошо протестирован и имеет принудительные шлюзы качества.

  • Набор тестов: выполните pytest --collect-only -q для получения текущего количества собранных тестов.
  • CI-процесс обеспечивает:
    • ruff format --check .
    • ruff check .
    • pytest
  • В CI используется BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1, поэтому проверки выполняются без необходимости установки Binary Ninja.
  • Дополнительные структурные тесты проверяют согласованность реестра инструментов и доступность бэкенда.

Управление контекстом

  • Режим только для чтения используется по умолчанию для открытых сеансов (read_only=true).
  • binary.basic_blocks_at и function.basic_blocks имеют постраничный вывод (offset/limit).
  • memory.read имеет жёсткое ограничение ответа: length <= 65536.

Ограничения

  • API уровня Enterprise в настоящее время не охвачены.
  • API отладчика в настоящее время не охвачены.

Модель безопасности

  • Взаимодействие по MCP (stdio/tcp) по умолчанию не аутентифицировано.
  • Сервер предоставляет произвольный скриптинг через binja.eval и широкий доступ к API через binja.call.
  • Это сделано намеренно для доверенных контейнеризированных сред агентов.
  • Не открывайте прямой доступ к этому серверу для недоверенных пользователей или сетей.

Локальный рабочий процесс разработки

root@kitploit:~
ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q

Фаззер функций

Используйте встроенный MCP-фаззер функций для тестирования широкого спектра инструментов на samples/ls.

Реальный бэкенд Binary Ninja:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337

Дымовое тестирование фиктивного бэкенда:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20

Записать отчёт о покрытии в JSON:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json

Полезные флаги:

  • --min-success-tools N: завершается с ненулевым кодом, если успешно выполнилось менее N инструментов.
  • --verbose: выводить каждый вызов инструмента во время фаззинга.
  • --update-analysis: открыть начальный сеанс с update_analysis=true.

Каталог функций

Сервер в настоящее время предоставляет 181 инструмент в 36 функциональных группах.

analysis

  • analysis.status: Получить статус анализа.
  • analysis.progress: Получить снимок прогресса анализа.
  • analysis.update: Запустить асинхронное обновление анализа.
  • analysis.update_and_wait: Запустить обновление анализа и дождаться завершения.
  • analysis.abort: Прервать анализ.
  • analysis.set_hold: Приостановить/возобновить очередь анализа.

annotation

  • annotation.rename_function: Переименовать функцию.
  • annotation.rename_symbol: Переименовать символ по адресу.
  • annotation.undefine_symbol: Отменить определение пользовательского символа по адресу.
  • annotation.define_symbol: Определить символ по адресу.
  • annotation.rename_data_var: Переименовать переменную данных.
  • annotation.define_data_var: Определить переменную данных.
  • annotation.undefine_data_var: Отменить определение переменной данных.
  • annotation.set_comment: Установить комментарий по адресу.
  • annotation.get_comment: Получить комментарий по адресу.
  • annotation.add_tag: Добавить пользовательский тег данных по адресу.
  • annotation.get_tags: Получить теги по адресу.

arch

  • arch.info: Получить метаданные архитектуры и платформы.
  • arch.disasm_bytes: Дизассемблировать байты с выбранной архитектурой.
  • arch.assemble: Ассемблировать текст инструкции с выбранной архитектурой.

baseaddr

  • baseaddr.detect: Запустить определение базового адреса.
  • baseaddr.reasons: Получить причины определения базового адреса.
  • baseaddr.abort: Прервать определение базового адреса.

binary

  • binary.summary: Получить сводку бинарного файла/сеанса.
  • binary.save: Сохранить текущее представление бинарного файла в файл.
  • binary.functions: Список функций с постраничным выводом.
  • binary.strings: Список обнаруженных строк с постраничным выводом.
  • binary.search_text: Поиск необработанного текста/байтов в сеансе.
  • binary.sections: Список секций с постраничным выводом.
  • binary.segments: Список сегментов с постраничным выводом.
  • binary.symbols: Список символов с постраничным выводом.
  • binary.data_vars: Список переменных данных с постраничным выводом.
  • binary.get_function_at: Найти функцию по адресу.
  • binary.get_function_disassembly_at: Получить полный дизассемблер для функции, содержащей адрес.
  • : Получить полный IL для функции, содержащей адрес.

binja

  • binja.info: Вернуть информацию о версии/установке Binary Ninja.
  • binja.call: Универсальный мост API: вызов цели пути bn.* или bv.*.
  • binja.eval: Вычислить код Python с bn, sessions и опционально bv.

data

  • data.typed_at: Получить типизированную переменную данных по адресу.

database

  • database.create_bndb: Создать .bndb из сеанса.
  • database.save_auto_snapshot: Сохранить автоматический снимок.
  • database.info: Получить статус базы данных для сеанса.
  • database.snapshots: Список снимков базы данных.
  • database.read_global: Прочитать глобальный строковый ключ базы данных.
  • database.write_global: Записать глобальный строковый ключ базы данных.

debug

  • debug.parsers: Список парсеров отладочной информации, применимых к данному представлению.
  • debug.parse_and_apply: Разобрать отладочную информацию и применить её к представлению.

disasm

  • disasm.linear: Получить строки линейного дизассемблера.
  • disasm.function: Получить полный дизассемблер для функции, содержащей адрес.
  • disasm.range: Строки дизассемблера для диапазона адресов.

external

  • external.library_add: Добавить внешнюю библиотеку.
  • external.library_list: Список внешних библиотек.
  • external.library_remove: Удалить внешнюю библиотеку.
  • external.location_add: Добавить отображение внешнего расположения.
  • external.location_get: Получить отображение внешнего расположения.
  • external.location_remove: Удалить отображение внешнего расположения.

function

  • function.basic_blocks: Список базовых блоков в функции с постраничным выводом.
  • function.callers: Вызывающие функции.
  • function.callees: Вызываемые функции.
  • function.variables: Список переменных функции.
  • function.var_refs: Список ссылок на переменные в MLIL/HLIL.
  • function.var_refs_from: Список ссылок на переменные, исходящих из адреса.
  • function.ssa_var_def_use: Получить определение и использование SSA-переменной.
  • function.ssa_memory_def_use: Получить определение и использование SSA-памяти по версии памяти.
  • function.metadata_store: Сохранить метаданные функции по ключу.
  • function.metadata_query: Запросить метаданные функции по ключу.
  • function.metadata_remove: Удалить метаданные функции по ключу.

health

  • health.ping: Проверка работоспособности.

il

  • il.function: Список IL-функции.
  • il.instruction_by_addr: Получить IL-инструкцию по исходному адресу.
  • il.address_to_index: Преобразовать адрес в индекс/индексы IL.
  • il.index_to_address: Преобразовать индекс IL в исходный адрес.
  • il.rewrite.capabilities: Список возможностей перезаписи IL для одной функции и уровня IL.
  • il.rewrite.noop_replace: Выполнить замену IL-выражения на no-op.
  • il.rewrite.translate_identity: Транслировать IL с помощью обратного вызова тождественного отображения.

loader

  • loader.rebase: Перебазировать BinaryView.
  • loader.load_settings_types: Список имён типов настроек загрузчика.
  • loader.load_settings_get: Получить значения настроек загрузчика.
  • loader.load_settings_set: Установить одно значение настройки загрузчика.

memory

  • memory.read: Прочитать байты из представления (length <= 65536).
  • memory.write: Записать байты (в hex) в представление.
  • memory.insert: Вставить байты (в hex) в представление.
  • memory.remove: Удалить байты из представления.
  • memory.reader_read: Прочитать целочисленные значения через BinaryReader.
  • memory.writer_write: Записать целочисленные значения через BinaryWriter.

mcp

  • mcp.response_format: Объяснить поля результата инструмента (structuredContent полная нагрузка, content[0].text сводка).

metadata

  • metadata.store: Сохранить метаданные по ключу.
  • metadata.query: Запросить метаданные по ключу.
  • metadata.remove: Удалить метаданные по ключу.

patch

  • patch.assemble: Ассемблировать и записать байты инструкции по адресу.
  • patch.status: Проверить доступность патча по адресу.
  • patch.convert_to_nop: Заменить инструкцию на NOP, если поддерживается.
  • patch.always_branch: Заменить условный переход на безусловный, если поддерживается.
  • patch.never_branch: Заменить условный переход на отсутствие перехода, если поддерживается.
  • patch.invert_branch: Заменить условный переход на инвертированный, если поддерживается.
  • patch.skip_and_return_value: Заменить инструкцию на пропуск и возврат значения, если поддерживается.

plugin

  • plugin.valid_commands: Список команд плагинов, допустимых в контексте.
  • plugin.execute: Выполнить команду плагина, допустимую в контексте.

plugin_repo

  • plugin_repo.status: Список репозиториев плагинов и их состояний.
  • plugin_repo.check_updates: Проверить обновления репозиториев плагинов.
  • plugin_repo.plugin_action: Выполнить действие установки/удаления/включения/отключения для плагина из репозитория.

project

  • project.create: Создать проект.
  • project.open: Открыть проект.
  • project.close: Закрыть отслеживаемый проект.
  • project.list: Список папок/файлов проекта.
  • project.create_folder: Создать папку проекта.
  • project.create_file: Создать файл проекта из данных в base64.
  • project.metadata_store: Сохранить метаданные проекта.
  • project.metadata_query: Запросить метаданные проекта.
  • project.metadata_remove: Удалить метаданные проекта.

search

  • search.data: Поиск необработанных байтовых шаблонов (hex-строка).
  • search.next_text: Найти следующее текстовое совпадение.
  • search.all_text: Найти все текстовые совпадения в диапазоне (опционально regex).
  • search.next_data: Найти следующее совпадение данных/байтового шаблона.
  • search.all_data: Найти все совпадения данных/байтового шаблона в диапазоне.
  • search.next_constant: Найти следующее вхождение константы.
  • search.all_constant: Найти все вхождения константы в диапазоне.

section

  • section.add_user: Добавить пользовательскую секцию.
  • section.remove_user: Удалить пользовательскую секцию.

segment

  • segment.add_user: Добавить пользовательский сегмент.
  • segment.remove_user: Удалить пользовательский сегмент.

session

  • session.open: Открыть бинарный файл и создать сеанс.
  • session.open_bytes: Открыть сеанс бинарного файла из байтов в base64.
  • session.open_existing: Открыть другой сеанс из файла существующего сеанса.
  • session.close: Закрыть один открытый сеанс.
  • session.list: Список открытых сеансов.
  • session.mode: Получить режим безопасности/детерминизма сеанса.
  • session.set_mode: Обновить режим безопасности/детерминизма сеанса.

task

  • task.analysis_update: Запустить задачу асинхронного обновления анализа.
  • task.search_text: Запустить асинхронную задачу поиска.
  • task.status: Получить статус задачи.
  • task.result: Получить результат задачи.
  • task.cancel: Отменить задачу (по возможности).

transform

  • transform.inspect: Инспектировать/обработать конвейер извлечения трансформаций.

type

  • type.parse_string: Разобрать одну строку типа.
  • type.parse_declarations: Разобрать C-объявления типов/переменных/функций.
  • type.define_user: Определить пользовательский тип из источника типа.
  • type.rename: Переименовать тип.
  • type.undefine_user: Отменить определение пользовательского типа.
  • type.import_library_type: Импортировать тип из библиотеки типов.
  • type.import_library_object: Импортировать тип объекта из библиотеки типов.
  • type.export_to_library: Экспортировать тип в библиотеку типов.

type_archive

  • type_archive.create: Создать и опционально присоединить архив типов.
  • type_archive.open: Открыть и опционально присоединить архив типов.
  • type_archive.list: Список присоединённых архивов типов.
  • type_archive.get: Получить один отслеживаемый архив типов.
  • type_archive.pull: Извлечь типы из архива типов.
  • type_archive.push: Отправить типы в архив типов.
  • type_archive.references: Запросить входящие/исходящие ссылки архива для одного типа.

type_library

  • type_library.create: Создать и опционально присоединить библиотеку типов.
  • type_library.load: Загрузить и опционально присоединить библиотеку типов.
  • type_library.list: Список библиотек типов, присоединённых к представлению.
  • type_library.get: Получить одну отслеживаемую библиотеку типов.

uidf

  • uidf.parse_possible_value: Разобрать строку набора возможных значений, заданных пользователем.
  • uidf.set_user_var_value: Установить значение пользовательской переменной функции.
  • uidf.clear_user_var_value: Очистить значение пользовательской переменной функции.
  • uidf.list_user_var_values: Список всех значений пользовательских переменных для функции.

undo

  • undo.begin: Начать транзакцию отмены.
  • undo.commit: Завершить транзакцию отмены.
  • undo.revert: Откатить транзакцию отмены.
  • undo.undo: Выполнить отмену.
  • undo.redo: Выполнить повтор.

value

  • value.reg: Получить значение регистра по/после адреса.
  • value.stack: Получить содержимое стека по/после адреса.
  • value.possible: Получить набор возможных значений IL по адресу.
  • value.flags_at: Получить состояние чтения/записи флагов поднятого IL по адресу.

workflow

  • workflow.list: Список зарегистрированных рабочих процессов.
  • workflow.describe: Описать топологию и настройки рабочего процесса.
  • workflow.clone: Клонировать рабочий процесс.
  • workflow.insert: Вставить активности перед активностью.
  • workflow.insert_after: Вставить активности после активности.
  • workflow.remove: Удалить активность рабочего процесса.
  • workflow.graph: Суммировать граф рабочего процесса.
  • workflow.machine.status: Получить статус машины рабочего процесса.
  • workflow.machine.control: Управлять временем выполнения машины рабочего процесса.

xref

  • xref.code_refs_to: Ссылки на код по адресу.
  • xref.code_refs_from: Ссылки на код из адреса.
  • xref.data_refs_to: Ссылки на данные по адресу.
  • xref.data_refs_from: Ссылки на данные из адреса.

Контакты

Для получения дополнительной информации обращайтесь к Tim Blazytko (@mr_phrazer).

Скачать инструмент
binary.get_function_il_at
  • binary.functions_at: Список функций по адресу.
  • binary.basic_blocks_at: Список базовых блоков по адресу с постраничным выводом.