Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
binary-ninja-headless-mcp — Serveur MCP Headless Binary Ninja — offrant aux agents IA des capacités profondes de rétro-ingénierie via 180 outils. | Kitploit
Outils/GitHubGitHub/mrphrazer/binary-ninja-headless-mcp
Rétro-ingénierieScripting et AutomatisationDébogueursFuzzingUtilitaires et FrameworksAnalyse de BinairesApprentissage et ÉducationRétro-Ingénierie Assistée par IA

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
GitHub
mrphrazer/binary-ninja-headless-mcp

binary-ninja-headless-mcp

Serveur MCP Headless Binary Ninja — offrant aux agents IA des capacités profondes de rétro-ingénierie via 180 outils.

Voir le dépôt
23519il y a 3 moisVérifié par Kitploit

Binary Ninja Headless MCP

Un serveur Binary Ninja sans interface graphique qui parle le MCP (Model Context Protocol), offrant aux agents IA un accès complet à des workflows avancés de rétro-ingénierie — désassemblage, IL, patching, types, références croisées, et plus — sans GUI.

Conçu pour fonctionner dans le même conteneur Docker que l'exécution de l'agent. Pas de sidecars, pas de services supplémentaires.

Ce projet entier — code, tests et documentation — est 100 % vibe codé.

Pourquoi

Les serveurs MCP Binary Ninja existants sont soit liés à une interface graphique, soit n'exposent qu'une surface d'outils limitée. Ce serveur est uniquement sans interface graphique et conçu pour des workflows pilotés par agent dans des environnements VM/conteneurs sandboxés : l'agent obtient un contrôle total sur le système d'analyse, automatisant de grandes parties de la rétro-ingénierie pendant que vous discutez et orientez le processus de manière interactive.

L'objectif est une interface où les agents peuvent inspecter, affiner et étendre une analyse au fil du temps — mettre à jour les types, symboles et métadonnées, améliorer la base de données d'analyse de manière incrémentale, appliquer des correctifs et itérer en toute sécurité avec annulation/répétition, et exécuter des scripts personnalisés lorsqu'un workflow nécessite quelque chose de spécifique.

Fonctionnalités

  • 181 outils répartis dans 36 groupes de fonctionnalités : analyse, désassemblage, IL, patching, annulation/répétition, types, workflows, mémoire, recherche, références croisées, scripts, et plus.
  • Lecture seule par défaut avec des workflows de mutation sûrs (annulation/répétition, transactions).
  • Accès aux scripts via binja.eval et binja.call pour tout ce que le catalogue d'outils ne couvre pas.
  • Transports stdio et TCP.
  • Zéro dépendance d'exécution en dehors de Binary Ninja lui-même.
  • Mode backend factice pour l'intégration continue et le développement sans licence Binary Ninja.

Prérequis

  • Python 3.11+
  • Une installation de Binary Ninja avec une licence compatible sans interface graphique et le module Python binaryninja importable dans votre environnement d'exécution (pour une analyse réelle)
  • Pour l'intégration continue/le développement sans Binary Ninja, utilisez le mode backend factice

Installation

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

Ou installez directement depuis la racine du dépôt sans cloner :

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

Démarrage rapide

Transport stdio (par défaut) :

root@kitploit:~
python3 binary_ninja_headless_mcp.py

Transport TCP :

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

Mode backend factice (Binary Ninja non requis) :

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

Utilisation avec les agents IA

Ce serveur parle MCP standard via stdio (par défaut) ou tcp, donc tout hôte d'agent compatible MCP peut l'utiliser.

Claude Code

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

Ou ajoutez-le au fichier .mcp.json de votre projet :

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

Hôte MCP générique

  • Enregistrez un serveur nommé binary_ninja_headless_mcp.
  • Utilisez la commande python3 avec les arguments ["binary_ninja_headless_mcp.py"] lorsque cwd est la racine du dépôt, ou utilisez un chemin de script absolu dans args.
  • Définissez cwd sur le chemin du dépôt si vous voulez que les chemins relatifs comme samples/ls soient résolus correctement.
  • Utilisez le transport stdio sauf si votre hôte nécessite TCP.
  • Pour le mode factice (Binary Ninja non installé), ajoutez --fake-backend.
  • Vérifiez la connectivité en appelant health.ping, puis session.open.

Modèle de co-localisation Docker

Modèle de déploiement recommandé : exécutez le processus d'agent et ce serveur MCP dans la même image de conteneur.

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

Si vous avez besoin d'une analyse Binary Ninja réelle dans le conteneur, ajoutez votre environnement d'exécution Binary Ninja + configuration de licence dans cette même image et démarrez l'agent avec ce serveur MCP configuré.

Méthodes MCP

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

Comportement de tools/list :

  • Sans paramètres de pagination explicites, retourne le catalogue complet d'outils.
  • Si offset ou limit est fourni, utilise une sortie paginée (offset=0, limit=50 par défaut en mode paginé).
  • Prend en charge le filtrage via :
    • prefix (par exemple binary.)
    • query (correspondance de sous-chaîne avec le nom/la description de l'outil)
  • Retourne les métadonnées de pagination : offset, limit, total, has_more.
  • Lorsqu'une page est tronquée (has_more=true), inclut next_offset et un indice notice.

Comportement de la réponse d'appel d'outil :

  • structuredContent est la charge utile canonique complète.
  • content[0].text est une chaîne de résumé compacte (pas de duplication JSON complète).
  • Cette séparation est intentionnelle pour réduire l'utilisation du contexte tout en exposant toujours les données complètes lisibles par machine.

Qualité et tests

Ce dépôt est bien testé et comporte des barrières de qualité obligatoires.

  • Suite de tests : exécutez pytest --collect-only -q pour le nombre actuel de tests collectés.
  • Le workflow CI impose :
    • ruff format --check .
    • ruff check .
    • pytest
  • CI utilise BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pour que les vérifications s'exécutent sans nécessiter l'installation de Binary Ninja.
  • Des tests structurels supplémentaires vérifient la cohérence du registre d'outils et l'accessibilité du backend.

Contrôles de contexte

  • Le mode lecture seule est la valeur par défaut pour les sessions ouvertes (read_only=true).
  • binary.basic_blocks_at et function.basic_blocks sont paginés (offset/limit).
  • memory.read a une limite stricte de réponse : length <= 65536.

Limitations

  • Les API Enterprise ne sont actuellement pas couvertes.
  • Les API du débogueur ne sont actuellement pas couvertes.

Modèle de sécurité

  • La communication MCP (stdio/tcp) est non authentifiée par défaut.
  • Le serveur expose des scripts arbitraires via binja.eval et un accès large aux API via binja.call.
  • C'est fait exprès pour des environnements d'agents conteneurisés et de confiance.
  • N'exposez pas ce serveur directement à des utilisateurs ou réseaux non fiables.

Workflow de développement local

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

Fuzzer de fonctionnalités

Utilisez le fuzzer de fonctionnalités MCP intégré pour exercer une large surface d'outils sur samples/ls.

Backend Binary Ninja réel :

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

Exécution de test rapide avec backend factice :

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

Écrire un rapport de couverture JSON :

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

Indicateurs utiles :

  • --min-success-tools N : se termine avec un code non nul si moins de N outils ont réussi.
  • --verbose : affiche chaque appel d'outil pendant le fuzzing.
  • --update-analysis : ouvre la session de départ avec update_analysis=true.

Catalogue de fonctionnalités

Le serveur expose actuellement 181 outils répartis dans 36 groupes de fonctionnalités.

analyse

  • analysis.status : Obtenir le statut de l'analyse.
  • analysis.progress : Obtenir un instantané de l'avancement de l'analyse.
  • analysis.update : Déclencher une mise à jour asynchrone de l'analyse.
  • analysis.update_and_wait : Exécuter une mise à jour de l'analyse et attendre la fin.
  • analysis.abort : Annuler l'analyse.
  • analysis.set_hold : Mettre en attente/libérer la file d'attente de l'analyse.

annotation

  • annotation.rename_function : Renommer une fonction.
  • annotation.rename_symbol : Renommer un symbole à une adresse.
  • annotation.undefine_symbol : Supprimer la définition d'un symbole utilisateur à une adresse.
  • annotation.define_symbol : Définir un symbole à une adresse.
  • annotation.rename_data_var : Renommer une variable de données.
  • annotation.define_data_var : Définir une variable de données.
  • annotation.undefine_data_var : Supprimer la définition d'une variable de données.
  • annotation.set_comment : Définir un commentaire à une adresse.
  • annotation.get_comment : Obtenir un commentaire à une adresse.
  • annotation.add_tag : Ajouter une étiquette de données utilisateur à une adresse.
  • annotation.get_tags : Obtenir les étiquettes à une adresse.

arch

  • arch.info : Obtenir les métadonnées de l'architecture et de la plateforme.
  • arch.disasm_bytes : Désassembler des octets avec l'architecture sélectionnée.
  • arch.assemble : Assembler du texte d'instruction avec l'architecture sélectionnée.

baseaddr

  • baseaddr.detect : Lancer la détection de l'adresse de base.
  • baseaddr.reasons : Obtenir les raisons de la détection de l'adresse de base.
  • baseaddr.abort : Annuler la détection de l'adresse de base.

binary

  • binary.summary : Obtenir un résumé du binaire/session.
  • binary.save : Sauvegarder la vue binaire actuelle dans un chemin de fichier.
  • binary.functions : Lister les fonctions avec pagination.
  • binary.strings : Lister les chaînes découvertes avec pagination.
  • binary.search_text : Rechercher du texte/octets bruts dans une session.
  • binary.sections : Lister les sections avec pagination.
  • binary.segments : Lister les segments avec pagination.
  • binary.symbols : Lister les symboles avec pagination.
  • binary.data_vars : Lister les variables de données avec pagination.
  • binary.get_function_at : Trouver une fonction par adresse.
  • binary.get_function_disassembly_at : Obtenir le désassemblage complet pour la fonction contenant une adresse.

binja

  • binja.info : Retourner les informations de version/installation de Binary Ninja.
  • binja.call : Pont API générique : appeler le chemin cible bn.* ou bv.*.
  • binja.eval : Évaluer du code Python avec bn, sessions, et bv optionnel.

data

  • data.typed_at : Obtenir une variable de données typée à une adresse.

database

  • database.create_bndb : Créer un .bndb à partir de la session.
  • database.save_auto_snapshot : Sauvegarder un instantané automatique.
  • database.info : Obtenir le statut de la base de données pour la session.
  • database.snapshots : Lister les instantanés de la base de données.
  • database.read_global : Lire une clé chaîne globale de la base de données.
  • database.write_global : Écrire une clé chaîne globale de la base de données.

debug

  • debug.parsers : Lister les analyseurs d'informations de débogage valides pour cette vue.
  • debug.parse_and_apply : Analyser les informations de débogage et les appliquer à la vue.

disasm

  • disasm.linear : Obtenir des lignes de désassemblage linéaire.
  • disasm.function : Obtenir le désassemblage complet pour la fonction contenant une adresse.
  • disasm.range : Lignes de désassemblage pour une plage d'adresses.

external

  • external.library_add : Ajouter une bibliothèque externe.
  • external.library_list : Lister les bibliothèques externes.
  • external.library_remove : Supprimer une bibliothèque externe.
  • external.location_add : Ajouter un mappage d'emplacement externe.
  • external.location_get : Obtenir un mappage d'emplacement externe.
  • external.location_remove : Supprimer un mappage d'emplacement externe.

function

  • function.basic_blocks : Lister les blocs de base dans une fonction avec pagination.
  • function.callers : Appelants d'une fonction.
  • function.callees : Appelés d'une fonction.
  • function.variables : Lister les variables d'une fonction.
  • function.var_refs : Lister les références de variables en MLIL/HLIL.
  • function.var_refs_from : Lister les références de variables provenant d'une adresse.
  • function.ssa_var_def_use : Obtenir la définition et les utilisations de variable SSA.
  • function.ssa_memory_def_use : Obtenir la définition et les utilisations de mémoire SSA par version mémoire.
  • function.metadata_store : Stocker des métadonnées de fonction par clé.
  • function.metadata_query : Interroger des métadonnées de fonction par clé.
  • function.metadata_remove : Supprimer des métadonnées de fonction par clé.

health

  • health.ping : Vérification de santé.

il

  • il.function : Liste des fonctions IL.
  • il.instruction_by_addr : Obtenir une instruction IL par adresse source.
  • il.address_to_index : Mapper une adresse vers un/des index IL.
  • il.index_to_address : Mapper un index IL vers une adresse source.
  • il.rewrite.capabilities : Lister les capacités de réécriture IL pour une fonction et un niveau IL.
  • il.rewrite.noop_replace : Effectuer un remplacement d'expression IL par NOP.
  • il.rewrite.translate_identity : Traduire IL avec un callback de mappage d'identité.

loader

  • loader.rebase : Rebaser la BinaryView.
  • loader.load_settings_types : Lister les noms de types de paramètres du chargeur.
  • loader.load_settings_get : Obtenir les valeurs des paramètres du chargeur.
  • loader.load_settings_set : Définir une valeur de paramètre du chargeur.

memory

  • memory.read : Lire des octets de la vue (length <= 65536).
  • memory.write : Écrire des octets (hex) dans la vue.
  • memory.insert : Insérer des octets (hex) dans la vue.
  • memory.remove : Supprimer des octets de la vue.
  • memory.reader_read : Lire des valeurs entières via BinaryReader.
  • memory.writer_write : Écrire des valeurs entières via BinaryWriter.

mcp

  • mcp.response_format : Expliquer les champs de résultat d'outil (structuredContent charge utile complète, content[0].text résumé).

metadata

  • metadata.store : Stocker des métadonnées par clé.
  • metadata.query : Interroger des métadonnées par clé.
  • metadata.remove : Supprimer des métadonnées par clé.

patch

  • patch.assemble : Assembler et patcher les octets d'instruction à une adresse.
  • patch.status : Inspecter la disponibilité du patch à une adresse.
  • patch.convert_to_nop : Patcher une instruction en NOP quand c'est supporté.
  • patch.always_branch : Patcher un branchement conditionnel pour toujours brancher quand c'est supporté.
  • patch.never_branch : Patcher un branchement conditionnel pour ne jamais brancher quand c'est supporté.
  • patch.invert_branch : Patcher un branchement conditionnel par inversion quand c'est supporté.
  • patch.skip_and_return_value : Patcher une instruction pour sauter et retourner une valeur quand c'est supporté.

plugin

  • plugin.valid_commands : Lister les commandes de plugin valides dans le contexte.
  • plugin.execute : Exécuter une commande de plugin valide dans le contexte.

plugin_repo

  • plugin_repo.status : Lister les dépôts de plugins et les états des plugins.
  • plugin_repo.check_updates : Vérifier les mises à jour du dépôt de plugins.
  • plugin_repo.plugin_action : Exécuter une action d'installation/désinstallation/activation/désactivation sur un plugin du dépôt.

project

  • project.create : Créer un projet.
  • project.open : Ouvrir un projet.
  • project.close : Fermer le projet suivi.
  • project.list : Lister les dossiers/fichiers du projet.
  • project.create_folder : Créer un dossier de projet.
  • project.create_file : Créer un fichier de projet à partir de données en base64.
  • project.metadata_store : Stocker des métadonnées de projet.
  • project.metadata_query : Interroger des métadonnées de projet.
  • project.metadata_remove : Supprimer des métadonnées de projet.

search

  • search.data : Rechercher des motifs d'octets bruts (chaîne hexadécimale).
  • search.next_text : Trouver la correspondance texte suivante.
  • search.all_text : Trouver toutes les correspondances texte dans une plage (regex optionnel).
  • search.next_data : Trouver la correspondance de données/motif d'octets suivante.
  • search.all_data : Trouver toutes les correspondances de données/motifs d'octets dans une plage.
  • search.next_constant : Trouver l'occurrence suivante d'une constante.
  • search.all_constant : Trouver toutes les occurrences d'une constante dans une plage.

section

  • section.add_user : Ajouter une section utilisateur.
  • section.remove_user : Supprimer une section utilisateur.

segment

  • segment.add_user : Ajouter un segment utilisateur.
  • segment.remove_user : Supprimer un segment utilisateur.

session

  • session.open : Ouvrir un binaire et créer une session.
  • session.open_bytes : Ouvrir une session binaire à partir d'octets encodés en base64.
  • session.open_existing : Ouvrir une autre session à partir du fichier d'une session existante.
  • session.close : Fermer une session ouverte.
  • session.list : Lister les sessions ouvertes.
  • session.mode : Obtenir le mode de sécurité/déterminisme de la session.
  • session.set_mode : Mettre à jour le mode de sécurité/déterminisme de la session.

task

  • task.analysis_update : Démarrer une tâche de mise à jour asynchrone de l'analyse.
  • task.search_text : Démarrer une tâche de recherche asynchrone.
  • task.status : Obtenir le statut de la tâche.
  • task.result : Obtenir le résultat de la tâche.
  • task.cancel : Annuler la tâche (au mieux).

transform

  • transform.inspect : Inspecter/traiter le pipeline d'extraction de transformation.

type

  • type.parse_string : Analyser une chaîne de type unique.
  • type.parse_declarations : Analyser des déclarations C pour types/variables/fonctions.
  • type.define_user : Définir un type utilisateur à partir d'une source de type.
  • type.rename : Renommer un type.
  • type.undefine_user : Supprimer la définition d'un type utilisateur.
  • type.import_library_type : Importer un type depuis une bibliothèque de types.
  • type.import_library_object : Importer un type d'objet depuis une bibliothèque de types.
  • type.export_to_library : Exporter un type dans une bibliothèque de types.

type_archive

  • type_archive.create : Créer et éventuellement attacher une archive de types.
  • type_archive.open : Ouvrir et éventuellement attacher une archive de types.
  • type_archive.list : Lister les archives de types attachées.
  • type_archive.get : Obtenir une archive de types suivie.
  • type_archive.pull : Récupérer des types depuis une archive de types.
  • type_archive.push : Envoyer des types vers une archive de types.
  • type_archive.references : Interroger les références entrantes/sortantes de l'archive pour un type.

type_library

  • type_library.create : Créer et éventuellement attacher une bibliothèque de types.
  • type_library.load : Charger et éventuellement attacher une bibliothèque de types.
  • type_library.list : Lister les bibliothèques de types attachées à la vue.
  • type_library.get : Obtenir une bibliothèque de types suivie.

uidf

  • uidf.parse_possible_value : Analyser une chaîne d'ensemble de valeurs possibles informé par l'utilisateur.
  • uidf.set_user_var_value : Définir la valeur de variable utilisateur d'une fonction.
  • uidf.clear_user_var_value : Effacer la valeur de variable utilisateur d'une fonction.
  • uidf.list_user_var_values : Lister toutes les valeurs de variables utilisateur pour une fonction.

undo

  • undo.begin : Commencer une transaction d'annulation.
  • undo.commit : Valider une transaction d'annulation.
  • undo.revert : Annuler une transaction d'annulation.
  • undo.undo : Effectuer une annulation.
  • undo.redo : Effectuer une répétition.

value

  • value.reg : Obtenir la valeur d'un registre à/après une adresse.
  • value.stack : Obtenir le contenu de la pile à/après une adresse.
  • value.possible : Obtenir l'ensemble de valeurs possibles IL à une adresse.
  • value.flags_at : Obtenir l'état de lecture/écriture des drapeaux IL levés à une adresse.

workflow

  • workflow.list : Lister les workflows enregistrés.
  • workflow.describe : Décrire la topologie et les paramètres du workflow.
  • workflow.clone : Cloner un workflow.
  • workflow.insert : Insérer des activités avant une activité.
  • workflow.insert_after : Insérer des activités après une activité.
  • workflow.remove : Supprimer une activité de workflow.
  • workflow.graph : Résumer le graphe du workflow.
  • workflow.machine.status : Obtenir le statut de la machine de workflow.
  • workflow.machine.control : Contrôler l'exécution de la machine de workflow.

xref

  • xref.code_refs_to : Références de code vers une adresse.
  • xref.code_refs_from : Références de code depuis une adresse.
  • xref.data_refs_to : Références de données vers une adresse.
  • xref.data_refs_from : Références de données depuis une adresse.

Contact

Pour plus d'informations, contactez Tim Blazytko (@mr_phrazer).

Télécharger l’outil
  • binary.get_function_il_at : Obtenir l'IL complet pour la fonction contenant une adresse.
  • binary.functions_at : Lister les fonctions à une adresse.
  • binary.basic_blocks_at : Lister les blocs de base à une adresse avec pagination.