Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
binary-ninja-headless-mcp — Servidor MCP Headless do Binary Ninja — fornecendo a agentes de IA capacidades profundas de engenharia reversa por meio de 180 ferramentas. | Kitploit
Ferramentas/GitHubGitHub/mrphrazer/binary-ninja-headless-mcp
Engenharia ReversaScripting e AutomaçãoDepuradoresFuzzingUtilitários e FrameworksAnálise de BináriosAprendizado e EducaçãoEngenharia Reversa Assistida por IA

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
GitHub
mrphrazer/binary-ninja-headless-mcp

binary-ninja-headless-mcp

Servidor MCP Headless do Binary Ninja — fornecendo a agentes de IA capacidades profundas de engenharia reversa por meio de 180 ferramentas.

Ver Repositório
235195há 3 mesesRevisado pelo Kitploit
Compartilhar

Binary Ninja Headless MCP

Um servidor headless Binary Ninja que fala MCP (Protocolo de Contexto de Modelo), dando a agentes de IA acesso completo a fluxos de trabalho profundos de engenharia reversa — desmontagem, IL, patches, tipos, referências cruzadas e mais — sem uma GUI.

Projetado para rodar no mesmo contêiner Docker que o runtime do agente. Sem sidecars, sem serviços extras.

Este projeto inteiro — código, testes e documentação — é 100% vibe coded.

Porquê

Os servidores MCP existentes do Binary Ninja são vinculados à GUI ou expõem uma superfície de ferramentas limitada. Este servidor é apenas headless e projetado para fluxos de trabalho orientados por agentes em ambientes de VM/contêiner em sandbox: o agente obtém controle total sobre o sistema de análise, automatizando grandes partes da engenharia reversa enquanto você discute interativamente e direciona o processo.

O objetivo é uma interface onde agentes possam inspecionar, refinar e estender uma análise ao longo do tempo — atualizando tipos, símbolos e metadados, melhorando incrementalmente o banco de dados de análise, aplicando patches e iterando com segurança usando desfazer/refazer, e executando scripts personalizados quando um fluxo de trabalho precisar de algo sob medida.

Funcionalidades

  • 181 ferramentas em 36 grupos de funcionalidades: análise, desmontagem, IL, patches, desfazer/refazer, tipos, fluxos de trabalho, memória, busca, referências cruzadas, scripts e mais.
  • Somente leitura por padrão com fluxos de trabalho seguros de mutação (desfazer/refazer, transações).
  • Acesso a scripts via binja.eval e binja.call para qualquer coisa que o catálogo de ferramentas não cubra.
  • Transportes Stdio e TCP.
  • Zero dependências de runtime além do próprio Binary Ninja.
  • Modo falso de backend para CI e desenvolvimento sem licença do Binary Ninja.

Pré-requisitos

  • Python 3.11+
  • Uma instalação do Binary Ninja com uma licença compatível com headless e o módulo Python binaryninja importável no seu runtime (para análise real)
  • Para CI/desenvolvimento sem Binary Ninja, use o modo falso de backend

Instalação

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

Ou instale diretamente da raiz do repositório sem clonar:

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

Início Rápido

Transporte Stdio (padrão):

root@kitploit:~
python3 binary_ninja_headless_mcp.py

Transporte TCP:

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

Modo falso de backend (nenhum Binary Ninja necessário):

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

Uso com Agentes de IA

Este servidor fala MCP padrão sobre stdio (padrão) ou tcp, então qualquer host de agente compatível com MCP pode usá-lo.

Claude Code

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

Ou adicione ao .mcp.json do seu projeto:

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

Host MCP Genérico

  • Registre um servidor chamado binary_ninja_headless_mcp.
  • Use o comando python3 com args ["binary_ninja_headless_mcp.py"] quando o cwd for a raiz do repositório, ou use um caminho absoluto do script em args.
  • Defina cwd para o caminho do repositório se você quiser que caminhos relativos como samples/ls sejam resolvidos corretamente.
  • Use transporte stdio a menos que seu host exija TCP.
  • Para modo falso (sem Binary Ninja instalado), adicione --fake-backend.
  • Verifique a conectividade chamando health.ping, depois session.open.

Padrão de Co-localização Docker

Modelo de implantação recomendado: execute o processo do agente e este servidor MCP na mesma imagem de contêiner.

Exemplo base:

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"]

Se você precisar de análise real do Binary Ninja no contêiner, adicione seu runtime do Binary Ninja + configuração de licença nesta mesma imagem e inicie o agente com este servidor MCP configurado.

Métodos MCP

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

Comportamento de tools/list:

  • Sem parâmetros explícitos de paginação, retorna o catálogo completo de ferramentas.
  • Se offset ou limit for fornecido, usa saída paginada (offset=0, limit=50 padrão no modo paginado).
  • Suporta filtragem via:
    • prefix (por exemplo binary.)
    • query (correspondência de substring contra nome/descrição da ferramenta)
  • Retorna metadados de paginação: offset, limit, total, has_more.
  • Quando uma página é truncada (has_more=true), inclui next_offset e uma dica notice.

Comportamento da resposta de chamada de ferramenta:

  • structuredContent é o payload completo canônico.
  • content[0].text é uma string de resumo compacta (não duplicação completa de JSON).
  • Essa divisão é intencional para manter o uso de contexto menor enquanto ainda expõe dados completos legíveis por máquina.

Qualidade e Testes

Este repositório é bem testado e possui portões de qualidade obrigatórios.

  • Suíte de testes: execute pytest --collect-only -q para a contagem atual de testes coletados.
  • Fluxo de trabalho de CI exige:
    • ruff format --check .
    • ruff check .
    • pytest
  • CI usa BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 para que as verificações sejam executadas sem exigir instalação do Binary Ninja.
  • Testes estruturais adicionais verificam consistência do registro de ferramentas e alcançabilidade do backend.

Controles de Contexto

  • O modo somente leitura é o padrão para sessões abertas (read_only=true).
  • binary.basic_blocks_at e function.basic_blocks são paginados (offset/limit).
  • memory.read tem um limite de resposta: length <= 65536.

Limitações

  • APIs Empresariais atualmente não são cobertas.
  • APIs do Depurador atualmente não são cobertas.

Modelo de Segurança

  • A comunicação MCP (stdio/tcp) não é autenticada por padrão.
  • O servidor expõe scripts arbitrários via binja.eval e acesso amplo à API via binja.call.
  • Isso é proposital para ambientes de contêiner confiáveis e orientados a agentes.
  • Não exponha este servidor diretamente a usuários ou redes não confiáveis.

Fluxo de Trabalho de Desenvolvimento Local

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

Fuzzer de Funcionalidades

Use o fuzzer de funcionalidades MCP embutido para exercitar uma ampla superfície de ferramentas contra samples/ls.

Backend real do Binary Ninja:

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

Execução de teste com backend falso:

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

Escreva um relatório JSON de cobertura:

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

Flags úteis:

  • --min-success-tools N: sai com código diferente de zero se menos de N ferramentas tiverem sucesso.
  • --verbose: imprime cada chamada de ferramenta durante o fuzzing.
  • --update-analysis: abre a sessão semente com update_analysis=true.

Catálogo de Funcionalidades

O servidor atualmente expõe 181 ferramentas em 36 grupos de funcionalidades.

analysis

  • analysis.status: Obter status da análise.
  • analysis.progress: Obter instantâneo do progresso da análise.
  • analysis.update: Acionar atualização assíncrona da análise.
  • analysis.update_and_wait: Executar atualização da análise e aguardar conclusão.
  • analysis.abort: Abortar análise.
  • analysis.set_hold: Segurar/liberar fila de análise.

annotation

  • annotation.rename_function: Renomear uma função.
  • annotation.rename_symbol: Renomear símbolo no endereço.
  • annotation.undefine_symbol: Indefinir símbolo de usuário no endereço.
  • annotation.define_symbol: Definir símbolo no endereço.
  • annotation.rename_data_var: Renomear variável de dados.
  • annotation.define_data_var: Definir variável de dados.
  • annotation.undefine_data_var: Indefinir variável de dados.
  • annotation.set_comment: Definir comentário no endereço.
  • annotation.get_comment: Obter comentário no endereço.
  • annotation.add_tag: Adicionar tag de dados de usuário no endereço.
  • annotation.get_tags: Obter tags no endereço.

arch

  • arch.info: Obter metadados de arquitetura e plataforma.
  • arch.disasm_bytes: Desmontar bytes com arquitetura selecionada.
  • arch.assemble: Montar texto de instrução com arquitetura selecionada.

baseaddr

  • baseaddr.detect: Executar detecção de endereço base.
  • baseaddr.reasons: Obter razões de detecção de endereço base.
  • baseaddr.abort: Abortar detecção de endereço base.

binary

  • binary.summary: Obter resumo do binário/sessão.
  • binary.save: Salvar visualização binária atual em um caminho de arquivo.
  • binary.functions: Listar funções com paginação.
  • binary.strings: Listar strings descobertas com paginação.
  • binary.search_text: Pesquisar texto/bytes brutos em uma sessão.
  • binary.sections: Listar seções com paginação.
  • binary.segments: Listar segmentos com paginação.
  • binary.symbols: Listar símbolos com paginação.
  • binary.data_vars: Listar variáveis de dados com paginação.
  • binary.get_function_at: Encontrar função por endereço.
  • binary.get_function_disassembly_at: Obter desmontagem completa para função que contém um endereço.
  • binary.get_function_il_at: Obter IL completo para função que contém um endereço.

binja

  • binja.info: Retornar informações de versão/instalação do Binary Ninja.
  • binja.call: Ponte genérica de API: chamar caminho alvo bn.* ou bv.*.
  • binja.eval: Avaliar código Python com bn, sessions e bv opcional.

data

  • data.typed_at: Obter variável de dados tipada em um endereço.

database

  • database.create_bndb: Criar .bndb a partir da sessão.
  • database.save_auto_snapshot: Salvar instantâneo automático.
  • database.info: Obter status do banco de dados para a sessão.
  • database.snapshots: Listar instantâneos do banco de dados.
  • database.read_global: Ler chave de string global do banco de dados.
  • database.write_global: Escrever chave de string global do banco de dados.

debug

  • debug.parsers: Listar analisadores de informações de depuração válidos para esta visualização.
  • debug.parse_and_apply: Analisar informações de depuração e aplicá-las à visualização.

disasm

  • disasm.linear: Obter linhas de desmontagem linear.
  • disasm.function: Obter desmontagem completa para função que contém um endereço.
  • disasm.range: Linhas de desmontagem de intervalo de endereços.

external

  • external.library_add: Adicionar biblioteca externa.
  • external.library_list: Listar bibliotecas externas.
  • external.library_remove: Remover biblioteca externa.
  • external.location_add: Adicionar mapeamento de localização externa.
  • external.location_get: Obter mapeamento de localização externa.
  • external.location_remove: Remover mapeamento de localização externa.

function

  • function.basic_blocks: Listar blocos básicos em uma função com paginação.
  • function.callers: Chamadores de uma função.
  • function.callees: Chamados de uma função.
  • function.variables: Listar variáveis de função.
  • function.var_refs: Listar referências de variáveis em MLIL/HLIL.
  • function.var_refs_from: Listar referências de variáveis originadas de um endereço.
  • function.ssa_var_def_use: Obter definição e usos de variável SSA.
  • function.ssa_memory_def_use: Obter definição e usos de memória SSA por versão de memória.
  • function.metadata_store: Armazenar metadados de função por chave.
  • function.metadata_query: Consultar metadados de função por chave.
  • function.metadata_remove: Remover metadados de função por chave.

health

  • health.ping: Verificação de saúde.

il

  • il.function: Listagem de função IL.
  • il.instruction_by_addr: Obter instrução IL por endereço de origem.
  • il.address_to_index: Mapear endereço para índice(s) IL.
  • il.index_to_address: Mapear índice IL para endereço de origem.
  • il.rewrite.capabilities: Listar suporte de reescrita IL para uma função e nível IL.
  • il.rewrite.noop_replace: Realizar substituição de expressão IL por no-op.
  • il.rewrite.translate_identity: Traduzir IL com callback de mapeamento de identidade.

loader

  • loader.rebase: Rebasear BinaryView.
  • loader.load_settings_types: Listar nomes de tipos de configurações do carregador.
  • loader.load_settings_get: Obter valores de configurações do carregador.
  • loader.load_settings_set: Definir um valor de configuração do carregador.

memory

  • memory.read: Ler bytes da visualização (length <= 65536).
  • memory.write: Escrever bytes (hex) na visualização.
  • memory.insert: Inserir bytes (hex) na visualização.
  • memory.remove: Remover bytes da visualização.
  • memory.reader_read: Ler valores inteiros via BinaryReader.
  • memory.writer_write: Escrever valores inteiros via BinaryWriter.

mcp

  • mcp.response_format: Explicar campos de resultado da ferramenta (structuredContent payload completo, content[0].text resumo).

metadata

  • metadata.store: Armazenar metadados por chave.
  • metadata.query: Consultar metadados por chave.
  • metadata.remove: Remover metadados por chave.

patch

  • patch.assemble: Montar e corrigir bytes de instrução no endereço.
  • patch.status: Inspecionar disponibilidade de patch no endereço.
  • patch.convert_to_nop: Corrigir instrução para NOP quando suportado.
  • patch.always_branch: Corrigir desvio condicional para sempre desviar quando suportado.
  • patch.never_branch: Corrigir desvio condicional para nunca desviar quando suportado.
  • patch.invert_branch: Corrigir desvio condicional por inversão quando suportado.
  • patch.skip_and_return_value: Corrigir instrução para pular e retornar valor quando suportado.

plugin

  • plugin.valid_commands: Listar comandos de plugin válidos no contexto.
  • plugin.execute: Executar um comando de plugin válido no contexto.

plugin_repo

  • plugin_repo.status: Listar repositórios de plugins e estados de plugins.
  • plugin_repo.check_updates: Verificar atualizações de repositório de plugins.
  • plugin_repo.plugin_action: Executar ação de instalar/desinstalar/habilitar/desabilitar em plugin de repositório.

project

  • project.create: Criar projeto.
  • project.open: Abrir projeto.
  • project.close: Fechar projeto rastreado.
  • project.list: Listar pastas/arquivos do projeto.
  • project.create_folder: Criar pasta do projeto.
  • project.create_file: Criar arquivo do projeto a partir de dados base64.
  • project.metadata_store: Armazenar metadados do projeto.
  • project.metadata_query: Consultar metadados do projeto.
  • project.metadata_remove: Remover metadados do projeto.

search

  • search.data: Pesquisar padrões de bytes brutos (string hex).
  • search.next_text: Encontrar próxima correspondência de texto.
  • search.all_text: Encontrar todas as correspondências de texto no intervalo (regex opcional).
  • search.next_data: Encontrar próxima correspondência de dados/padrão de byte.
  • search.all_data: Encontrar todas as correspondências de dados/padrão de byte no intervalo.
  • search.next_constant: Encontrar próxima ocorrência de constante.
  • search.all_constant: Encontrar todas as ocorrências de constante no intervalo.

section

  • section.add_user: Adicionar seção de usuário.
  • section.remove_user: Remover seção de usuário.

segment

  • segment.add_user: Adicionar segmento de usuário.
  • segment.remove_user: Remover segmento de usuário.

session

  • session.open: Abrir um binário e criar uma sessão.
  • session.open_bytes: Abrir uma sessão binária a partir de bytes codificados em base64.
  • session.open_existing: Abrir outra sessão a partir do arquivo de uma sessão existente.
  • session.close: Fechar uma sessão aberta.
  • session.list: Listar sessões abertas.
  • session.mode: Obter modo de segurança/determinismo da sessão.
  • session.set_mode: Atualizar modo de segurança/determinismo da sessão.

task

  • task.analysis_update: Iniciar tarefa de atualização de análise assíncrona.
  • task.search_text: Iniciar tarefa de busca assíncrona.
  • task.status: Obter status da tarefa.
  • task.result: Obter resultado da tarefa.
  • task.cancel: Cancelar tarefa (melhor esforço).

transform

  • transform.inspect: Inspecionar/processar pipeline de extração de transformação.

type

  • type.parse_string: Analisar uma única string de tipo.
  • type.parse_declarations: Analisar declarações C para tipos/variáveis/funções.
  • type.define_user: Definir tipo de usuário a partir da fonte do tipo.
  • type.rename: Renomear um tipo.
  • type.undefine_user: Indefinir um tipo de usuário.
  • type.import_library_type: Importar tipo da biblioteca de tipos.
  • type.import_library_object: Importar tipo de objeto da biblioteca de tipos.
  • type.export_to_library: Exportar tipo para uma biblioteca de tipos.

type_archive

  • type_archive.create: Criar e opcionalmente anexar um arquivo de tipos.
  • type_archive.open: Abrir e opcionalmente anexar um arquivo de tipos.
  • type_archive.list: Listar arquivos de tipos anexados.
  • type_archive.get: Obter um arquivo de tipos rastreado.
  • type_archive.pull: Extrair tipos de um arquivo de tipos.
  • type_archive.push: Enviar tipos para um arquivo de tipos.
  • type_archive.references: Consultar referências de entrada/saída do arquivo para um tipo.

type_library

  • type_library.create: Criar e opcionalmente anexar uma biblioteca de tipos.
  • type_library.load: Carregar e opcionalmente anexar uma biblioteca de tipos.
  • type_library.list: Listar bibliotecas de tipos anexadas à visualização.
  • type_library.get: Obter uma biblioteca de tipos rastreada.

uidf

  • uidf.parse_possible_value: Analisar string de conjunto de valores possíveis informada pelo usuário.
  • uidf.set_user_var_value: Definir valor de variável de usuário de função.
  • uidf.clear_user_var_value: Limpar valor de variável de usuário de função.
  • uidf.list_user_var_values: Listar todos os valores de variáveis de usuário para uma função.

undo

  • undo.begin: Iniciar transação de desfazer.
  • undo.commit: Confirmar transação de desfazer.
  • undo.revert: Reverter transação de desfazer.
  • undo.undo: Realizar desfazer.
  • undo.redo: Realizar refazer.

value

  • value.reg: Obter valor de registro em/após um endereço.
  • value.stack: Obter conteúdo da pilha em/após um endereço.
  • value.possible: Obter conjunto de valores possíveis IL em um endereço.
  • value.flags_at: Obter estado de leitura/gravação de flags IL levantadas em um endereço.

workflow

  • workflow.list: Listar fluxos de trabalho registrados.
  • workflow.describe: Descrever topologia e configurações do fluxo de trabalho.
  • workflow.clone: Clonar fluxo de trabalho.
  • workflow.insert: Inserir atividades antes de uma atividade.
  • workflow.insert_after: Inserir atividades após uma atividade.
  • workflow.remove: Remover atividade do fluxo de trabalho.
  • workflow.graph: Resumir grafo do fluxo de trabalho.
  • workflow.machine.status: Obter status da máquina de fluxo de trabalho.
  • workflow.machine.control: Controlar runtime da máquina de fluxo de trabalho.

xref

  • xref.code_refs_to: Referências de código para um endereço.
  • xref.code_refs_from: Referências de código de um endereço.
  • xref.data_refs_to: Referências de dados para um endereço.
  • xref.data_refs_from: Referências de dados de um endereço.

Contato

Para mais informações, entre em contato com Tim Blazytko (@mr_phrazer).

Baixar ferramenta
  • binary.functions_at: Listar funções em um endereço.
  • binary.basic_blocks_at: Listar blocos básicos em um endereço com paginação.