Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
binary-ninja-headless-mcp — Headless Binary Ninja MCP server — fornendo agli agenti AI profonde capacità di reverse engineering tramite 180 strumenti. | Kitploit
Strumenti/GitHubGitHub/mrphrazer/binary-ninja-headless-mcp
Reverse EngineeringScripting e AutomazioneDebuggerFuzzingUtilità e FrameworkAnalisi di BinariApprendimento e FormazioneReverse Engineering Assistito dall'IA

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
GitHub
mrphrazer/binary-ninja-headless-mcp

binary-ninja-headless-mcp

Headless Binary Ninja MCP server — fornendo agli agenti AI profonde capacità di reverse engineering tramite 180 strumenti.

Vedi Repository
2351953 mesi faRevisionato da Kitploit
Condividi

Binary Ninja Headless MCP

Un server Binary Ninja headless che parla MCP (Model Context Protocol), fornendo agli agenti AI pieno accesso a flussi di lavoro complessi di reverse engineering — disassemblaggio, IL, patching, tipi, xref e altro — senza GUI.

Progettato per funzionare nello stesso container Docker del runtime dell'agente. Niente sidecar, niente servizi aggiuntivi.

L'intero progetto — codice, test e documentazione — è realizzato al 100% con vibe coding.

Perché

I server MCP per Binary Ninja esistenti sono legati alla GUI o espongono una superficie strumentale limitata. Questo server è solo headless e progettato per flussi di lavoro guidati da agenti in ambienti VM/container sandbox: l'agente ha il pieno controllo del sistema di analisi, automatizzando gran parte del reverse engineering mentre tu interagisci e guidi il processo in modo interattivo.

L'obiettivo è un'interfaccia in cui gli agenti possano ispezionare, perfezionare ed estendere un'analisi nel tempo — aggiornando tipi, simboli e metadati, migliorando incrementalmente il database di analisi, applicando patch e iterando in modo sicuro con undo/redo, ed eseguendo script personalizzati quando un flusso di lavoro necessita di qualcosa di ad hoc.

Caratteristiche

  • 181 strumenti in 36 gruppi di funzionalità: analisi, disassemblaggio, IL, patching, undo/redo, tipi, flussi di lavoro, memoria, ricerca, xref, scripting e altro.
  • Sola lettura di default con flussi di mutazione sicuri (undo/redo, transazioni).
  • Accesso scripting tramite binja.eval e binja.call per tutto ciò che il catalogo strumenti non copre.
  • Trasporti Stdio e TCP.
  • Zero dipendenze runtime oltre a Binary Ninja stesso.
  • Modalità backend fittizio per CI e sviluppo senza licenza Binary Ninja.

Prerequisiti

  • Python 3.11+
  • Un'installazione di Binary Ninja con una licenza headless e il modulo Python binaryninja importabile nel tuo runtime (per analisi reali)
  • Per CI/sviluppo senza Binary Ninja, usa la modalità backend fittizio

Installazione

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

Oppure installa direttamente dalla root del repository senza clonare:

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

Avvio Rapido

Trasporto Stdio (default):

root@kitploit:~
python3 binary_ninja_headless_mcp.py

Trasporto TCP:

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

Modalità backend fittizio (nessun Binary Ninja richiesto):

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

Utilizzo con Agenti AI

Questo server parla MCP standard su stdio (default) o tcp, quindi qualsiasi host agente compatibile con MCP può utilizzarlo.

Claude Code

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

Oppure aggiungilo al .mcp.json del tuo progetto:

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 Generico

  • Registra un server chiamato binary_ninja_headless_mcp.
  • Usa il comando python3 con argomenti ["binary_ninja_headless_mcp.py"] quando cwd è la root del repository, oppure usa un percorso assoluto dello script in args.
  • Imposta cwd sul percorso del repo se vuoi che percorsi relativi come samples/ls vengano risolti correttamente.
  • Usa il trasporto stdio a meno che il tuo host non richieda TCP.
  • Per la modalità fittizia (nessun Binary Ninja installato), aggiungi --fake-backend.
  • Verifica la connettività chiamando health.ping, poi session.open.

Pattern di Co-Localizzazione Docker

Modello di deployment consigliato: esegui il processo agente e questo server MCP nella stessa immagine container.

Esempio 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 hai bisogno di analisi reale con Binary Ninja all'interno del container, aggiungi il tuo runtime Binary Ninja + configurazione licenza nella stessa immagine e avvia l'agente con questo server MCP configurato.

Metodi MCP

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

Comportamento di tools/list:

  • Senza parametri espliciti di paginazione, restituisce il catalogo completo degli strumenti.
  • Se vengono forniti offset o limit, usa output paginato (offset=0, limit=50 di default in modalità paginata).
  • Supporta il filtraggio tramite:
    • prefix (ad esempio binary.)
    • query (corrispondenza parziale su nome/descrizione dello strumento)
  • Restituisce metadati di paginazione: offset, limit, total, has_more.
  • Quando una pagina è troncata (has_more=true), include next_offset e un suggerimento notice.

Comportamento della risposta alle chiamate strumento:

  • structuredContent è il payload completo canonico.
  • content[0].text è una stringa riassuntiva compatta (non una duplicazione JSON completa).
  • Questa suddivisione è intenzionale per mantenere ridotto l'uso del contesto, esponendo comunque dati completi e leggibili dalle macchine.

Qualità e Testing

Questo repository è ben testato e ha gate di qualità obbligatori.

  • Suite di test: esegui pytest --collect-only -q per il conteggio corrente dei test raccolti.
  • Il workflow CI impone:
    • ruff format --check .
    • ruff check .
    • pytest
  • La CI usa BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 in modo che i controlli vengano eseguiti senza richiedere l'installazione di Binary Ninja.
  • Ulteriori test strutturali verificano la consistenza del registro strumenti e la raggiungibilità del backend.

Controlli di Contesto

  • La modalità sola lettura è l'impostazione predefinita per le sessioni aperte (read_only=true).
  • binary.basic_blocks_at e function.basic_blocks sono paginati (offset/limit).
  • memory.read ha un limite massimo di risposta: length <= 65536.

Limitazioni

  • Le API Enterprise non sono attualmente coperte.
  • Le API del debugger non sono attualmente coperte.

Modello di Sicurezza

  • La comunicazione MCP (stdio/tcp) non è autenticata di default.
  • Il server espone scripting arbitrario tramite binja.eval e ampio accesso API tramite binja.call.
  • Questo è voluto per ambienti agenti containerizzati fidati.
  • Non esporre questo server direttamente a utenti o reti non fidati.

Flusso di Lavoro per Sviluppo Locale

root@kitploit:~
ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
## Fuzzer di Funzionalità

Usa il fuzzer MCP integrato per testare un'ampia superficie strumentale su `samples/ls`.

Backend Binary Ninja reale:

```bash
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337

Esecuzione di prova con backend fittizio:

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

Scrivi un report di copertura JSON:

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

Flag utili:

  • --min-success-tools N: esce con codice diverso da zero se meno di N strumenti hanno successo.
  • --verbose: stampa ogni chiamata strumento durante il fuzzing.
  • --update-analysis: apre la sessione seed con update_analysis=true.

Catalogo delle Funzionalità

Il server espone attualmente 181 strumenti in 36 gruppi di funzionalità.

analysis

  • analysis.status: Ottieni stato dell'analisi.
  • analysis.progress: Ottieni snapshot del progresso dell'analisi.
  • analysis.update: Attiva aggiornamento asincrono dell'analisi.
  • analysis.update_and_wait: Esegui aggiornamento analisi e attendi il completamento.
  • analysis.abort: Interrompi analisi.
  • analysis.set_hold: Metti in attesa/rilascia coda di analisi.

annotation

  • annotation.rename_function: Rinomina una funzione.
  • annotation.rename_symbol: Rinomina simbolo all'indirizzo.
  • annotation.undefine_symbol: Annulla definizione simbolo utente all'indirizzo.
  • annotation.define_symbol: Definisci simbolo all'indirizzo.
  • annotation.rename_data_var: Rinomina variabile dati.
  • annotation.define_data_var: Definisci variabile dati.
  • annotation.undefine_data_var: Annulla definizione variabile dati.
  • annotation.set_comment: Imposta commento all'indirizzo.
  • annotation.get_comment: Ottieni commento all'indirizzo.
  • annotation.add_tag: Aggiungi tag dati utente all'indirizzo.
  • annotation.get_tags: Ottieni tag all'indirizzo.

arch

  • arch.info: Ottieni metadati architettura e piattaforma.
  • arch.disasm_bytes: Disassembla byte con architettura selezionata.
  • arch.assemble: Assembla testo istruzioni con architettura selezionata.

baseaddr

  • baseaddr.detect: Esegui rilevamento indirizzo base.
  • baseaddr.reasons: Ottieni motivi rilevamento indirizzo base.
  • baseaddr.abort: Interrompi rilevamento indirizzo base.

binary

  • binary.summary: Ottieni riepilogo binario/sessione.
  • binary.save: Salva la vista binaria corrente in un percorso file.
  • binary.functions: Elenca funzioni con paginazione.
  • binary.strings: Elenca stringhe scoperte con paginazione.
  • binary.search_text: Cerca testo/byte grezzi in una sessione.
  • binary.sections: Elenca sezioni con paginazione.
  • binary.segments: Elenca segmenti con paginazione.
  • binary.symbols: Elenca simboli con paginazione.
  • binary.data_vars: Elenca variabili dati con paginazione.
  • binary.get_function_at: Trova funzione per indirizzo.
  • binary.get_function_disassembly_at: Ottieni disassemblaggio completo per la funzione contenente un indirizzo.
  • binary.get_function_il_at: Ottieni IL completo per la funzione contenente un indirizzo.

binja

  • binja.info: Restituisci versione/info installazione Binary Ninja.
  • binja.call: Ponte API generico: chiama percorso target bn.* o bv.*.
  • binja.eval: Valuta codice Python con bn, sessions e bv opzionale.

data

  • data.typed_at: Ottieni variabile dati tipizzata a un indirizzo.

database

  • database.create_bndb: Crea .bndb dalla sessione.
  • database.save_auto_snapshot: Salva snapshot automatico.
  • database.info: Ottieni stato database per sessione.
  • database.snapshots: Elenca snapshot database.
  • database.read_global: Leggi chiave stringa globale database.
  • database.write_global: Scrivi chiave stringa globale database.

debug

  • debug.parsers: Elenca parser info debug validi per questa vista.
  • debug.parse_and_apply: Analizza info debug e applicale alla vista.

disasm

  • disasm.linear: Ottieni righe di disassemblaggio lineare.
  • disasm.function: Ottieni disassemblaggio completo per funzione contenente un indirizzo.
  • disasm.range: Righe di disassemblaggio per intervallo di indirizzi.

external

  • external.library_add: Aggiungi libreria esterna.
  • external.library_list: Elenca librerie esterne.
  • external.library_remove: Rimuovi libreria esterna.
  • external.location_add: Aggiungi mappatura posizione esterna.
  • external.location_get: Ottieni mappatura posizione esterna.
  • external.location_remove: Rimuovi mappatura posizione esterna.

function

  • function.basic_blocks: Elenca blocchi di base in una funzione con paginazione.
  • function.callers: Chiamanti di una funzione.
  • function.callees: Chiamati di una funzione.
  • function.variables: Elenca variabili funzione.
  • function.var_refs: Elenca riferimenti a variabili in MLIL/HLIL.
  • function.var_refs_from: Elenca riferimenti variabili originati da un indirizzo.
  • function.ssa_var_def_use: Ottieni definizione e usi variabile SSA.
  • function.ssa_memory_def_use: Ottieni definizione e usi memoria SSA per versione memoria.
  • function.metadata_store: Archivia metadati funzione per chiave.
  • function.metadata_query: Interroga metadati funzione per chiave.
  • function.metadata_remove: Rimuovi metadati funzione per chiave.

health

  • health.ping: Controllo di integrità.

il

  • il.function: Elenco IL funzione.
  • il.instruction_by_addr: Ottieni istruzione IL per indirizzo sorgente.
  • il.address_to_index: Mappa indirizzo a indice/indici IL.
  • il.index_to_address: Mappa indice IL a indirizzo sorgente.
  • il.rewrite.capabilities: Elenca supporto riscrittura IL per una funzione e livello IL.
  • il.rewrite.noop_replace: Esegui sostituzione espressione IL con NOP.
  • il.rewrite.translate_identity: Traduci IL con callback mappatura identità.

loader

  • loader.rebase: Cambia base di BinaryView.
  • loader.load_settings_types: Elenca nomi tipi impostazioni loader.
  • loader.load_settings_get: Ottieni valori impostazioni loader.
  • loader.load_settings_set: Imposta un valore impostazione loader.

memory

  • memory.read: Leggi byte dalla vista (length <= 65536).
  • memory.write: Scrivi byte (hex) nella vista.
  • memory.insert: Inserisci byte (hex) nella vista.
  • memory.remove: Rimuovi byte dalla vista.
  • memory.reader_read: Leggi valori interi tramite BinaryReader.
  • memory.writer_write: Scrivi valori interi tramite BinaryWriter.

mcp

  • mcp.response_format: Spiega campi risultato strumento (structuredContent payload completo, content[0].text riepilogo).

metadata

  • metadata.store: Archivia metadati per chiave.
  • metadata.query: Interroga metadati per chiave.
  • metadata.remove: Rimuovi metadati per chiave.

patch

  • patch.assemble: Assembla e applica patch byte istruzione all'indirizzo.
  • patch.status: Ispeziona disponibilità patch all'indirizzo.
  • patch.convert_to_nop: Applica patch all'istruzione in NOP quando supportato.
  • patch.always_branch: Applica patch al salto condizionale per saltare sempre quando supportato.
  • patch.never_branch: Applica patch al salto condizionale per non saltare mai quando supportato.
  • patch.invert_branch: Applica patch al salto condizionale invertendolo quando supportato.
  • patch.skip_and_return_value: Applica patch all'istruzione per saltare e restituire valore quando supportato.

plugin

  • plugin.valid_commands: Elenca comandi plugin validi per contesto.
  • plugin.execute: Esegui un comando plugin valido per contesto.

plugin_repo

  • plugin_repo.status: Elenca repository plugin e stati plugin.
  • plugin_repo.check_updates: Controlla aggiornamenti repository plugin.
  • plugin_repo.plugin_action: Esegui azione installa/disinstalla/abilita/disabilita su plugin del repository.

project

  • project.create: Crea progetto.
  • project.open: Apri progetto.
  • project.close: Chiudi progetto tracciato.
  • project.list: Elenca cartelle/file progetto.
  • project.create_folder: Crea cartella progetto.
  • project.create_file: Crea file progetto da dati base64.
  • project.metadata_store: Archivia metadati progetto.
  • project.metadata_query: Interroga metadati progetto.
  • project.metadata_remove: Rimuovi metadati progetto.

search

  • search.data: Cerca pattern byte grezzi (stringa hex).
  • search.next_text: Trova corrispondenza testo successiva.
  • search.all_text: Trova tutte le corrispondenze testo nell'intervallo (regex opzionale).
  • search.next_data: Trova corrispondenza dati/pattern byte successiva.
  • search.all_data: Trova tutte le corrispondenze dati/pattern byte nell'intervallo.
  • search.next_constant: Trova occorrenza costante successiva.
  • search.all_constant: Trova tutte le occorrenze costanti nell'intervallo.

section

  • section.add_user: Aggiungi sezione utente.
  • section.remove_user: Rimuovi sezione utente.

segment

  • segment.add_user: Aggiungi segmento utente.
  • segment.remove_user: Rimuovi segmento utente.

session

  • session.open: Apri un binario e crea una sessione.
  • session.open_bytes: Apri una sessione binaria da byte codificati in base64.
  • session.open_existing: Apri un'altra sessione dal file di una sessione esistente.
  • session.close: Chiudi una sessione aperta.
  • session.list: Elenca sessioni aperte.
  • session.mode: Ottieni modalità sicurezza/determinismo sessione.
  • session.set_mode: Aggiorna modalità sicurezza/determinismo sessione.

task

  • task.analysis_update: Avvia task asincrono di aggiornamento analisi.
  • task.search_text: Avvia task asincrono di ricerca.
  • task.status: Ottieni stato task.
  • task.result: Ottieni risultato task.
  • task.cancel: Annulla task (best-effort).

transform

  • transform.inspect: Ispeziona/elabora pipeline di estrazione trasformazione.

type

  • type.parse_string: Analizza una singola stringa di tipo.
  • type.parse_declarations: Analizza dichiarazioni C per tipi/variabili/funzioni.
  • type.define_user: Definisci tipo utente da sorgente tipo.
  • type.rename: Rinomina un tipo.
  • type.undefine_user: Annulla definizione tipo utente.
  • type.import_library_type: Importa tipo da libreria tipi.
  • type.import_library_object: Importa tipo oggetto da libreria tipi.
  • type.export_to_library: Esporta tipo in una libreria tipi.

type_archive

  • type_archive.create: Crea e opzionalmente allega un archivio tipi.
  • type_archive.open: Apri e opzionalmente allega un archivio tipi.
  • type_archive.list: Elenca archivi tipi allegati.
  • type_archive.get: Ottieni un archivio tipi tracciato.
  • type_archive.pull: Estrai tipi da un archivio tipi.
  • type_archive.push: Invia tipi a un archivio tipi.
  • type_archive.references: Interroga riferimenti entranti/uscenti dell'archivio per un tipo.

type_library

  • type_library.create: Crea e opzionalmente allega una libreria tipi.
  • type_library.load: Carica e opzionalmente allega una libreria tipi.
  • type_library.list: Elenca librerie tipi allegate alla vista.
  • type_library.get: Ottieni una libreria tipi tracciata.

uidf

  • uidf.parse_possible_value: Analizza stringa set valori possibili fornita dall'utente.
  • uidf.set_user_var_value: Imposta valore variabile utente funzione.
  • uidf.clear_user_var_value: Cancella valore variabile utente funzione.
  • uidf.list_user_var_values: Elenca tutti i valori variabili utente per una funzione.

undo

  • undo.begin: Inizia transazione undo.
  • undo.commit: Conferma transazione undo.
  • undo.revert: Annulla transazione undo.
  • undo.undo: Esegui undo.
  • undo.redo: Esegui redo.

value

  • value.reg: Ottieni valore registro a/dopo un indirizzo.
  • value.stack: Ottieni contenuto stack a/dopo un indirizzo.
  • value.possible: Ottieni set valori possibili IL a un indirizzo.
  • value.flags_at: Ottieni stato lettura/scrittura flag IL sollevati a un indirizzo.

workflow

  • workflow.list: Elenca flussi di lavoro registrati.
  • workflow.describe: Descrivi topologia e impostazioni flusso di lavoro.
  • workflow.clone: Clona flusso di lavoro.
  • workflow.insert: Inserisci attività prima di un'attività.
  • workflow.insert_after: Inserisci attività dopo un'attività.
  • workflow.remove: Rimuovi attività dal flusso di lavoro.
  • workflow.graph: Riepiloga grafo del flusso di lavoro.
  • workflow.machine.status: Ottieni stato macchina del flusso di lavoro.
  • workflow.machine.control: Controlla runtime della macchina del flusso di lavoro.

xref

  • xref.code_refs_to: Riferimenti codice a un indirizzo.
  • xref.code_refs_from: Riferimenti codice da un indirizzo.
  • xref.data_refs_to: Riferimenti dati a un indirizzo.
  • xref.data_refs_from: Riferimenti dati da un indirizzo.

Contatti

Per maggiori informazioni, contatta Tim Blazytko (@mr_phrazer).

Scarica lo strumento
  • binary.functions_at: Elenca funzioni a un indirizzo.
  • binary.basic_blocks_at: Elenca blocchi di base a un indirizzo con paginazione.