Ghidra MCP Server

Expone datos de análisis binario de Ghidra, incluyendo funciones y pseudocódigo, a los LLMs.

Documentación

🔍 Ghidra MCP Server

Este proyecto te permite usar Ghidra en modo headless para extraer datos ricos de análisis binario (funciones, pseudocódigo, estructuras, enumeraciones, etc.) en un archivo JSON, y exponerlos a LLMs como Claude a través de Model Context Protocol (MCP).

Convierte a Ghidra en un backend interactivo de ingeniería inversa.


🚀 Características

  • Descompila un binario usando el modo headless de Ghidra
  • Extrae:
    • Pseudocódigo de funciones, nombres, parámetros, variables, cadenas, comentarios
    • Estructuras de datos (structs), enumeraciones y definiciones de funciones
  • Salida a ghidra_context.json
  • El servidor MCP expone herramientas como:
    • list_functions(), get_pseudocode(name)
    • list_structures(), get_structure(name)
    • list_enums(), get_enum(name)
    • list_function_definitions(), get_function_definition(name)

⚙️ Requisitos del sistema

  • macOS (probado)
  • Python 3.10+
  • Ghidra 11.3.1+
  • Java 21 (Temurin preferido)
  • Cliente MCP (p. ej. Claude Desktop)
  • mcp CLI (instala vía pip install mcp)

🧪 Instalación y Configuración

✅ 1. Instalar Java 21 (REQUERIDO por Ghidra 11.3.1)

brew install --cask temurin@21

Luego configúralo:

export JAVA_HOME=$(/usr/libexec/java_home -v 21)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc
source ~/.zshrc

Verifícalo:

java -version

Debería decir: openjdk version "21.0.x"...


✅ 2. Instalar Ghidra

Descarga y extrae Ghidra 11.3.1


✅ 3. Configurar el proyecto

cd ghidra_mcp
gcc -Wall crackme.c -o crackme

✅ 4. Instalar el servidor mediante MCP CLI

mcp install main.py

Esto registra el servidor MCP para que Claude u otros clientes puedan acceder a él.


✅ 5. Ejecutar en modo desarrollo (para pruebas)

mcp dev main.py

Esto habilita la recarga en caliente y los registros de desarrollador.


🛰️ Herramientas Disponibles

ToolDescripción
setup_context(...)Ejecutar Ghidra en un binario
list_functions()Todas las funciones
get_pseudocode(name)Pseudocódigo descompilado
list_structures()Todas las estructuras
get_structure(name)Detalles de una estructura
list_enums()Todas las enumeraciones
get_enum(name)Valores de enumeración
list_function_definitions()Todos los prototipos de funciones
get_function_definition()Tipo de retorno y argumentos

Ejemplo de Prompt

Analiza el archivo binario ubicado en <BINARY_PATH> usando Ghidra instalado en <GHIDRA_PATH>. Primero, configura el contexto de análisis usando ambas rutas, luego lista todas las funciones del binario. Examina la función de punto de entrada principal y proporciona una visión general de alto nivel de lo que hace el programa.

🧠 Problemas Comunes y Soluciones

❌ Ghidra falla con “versión de Java no compatible”

➡️ Solución: Instala Java 21, no 17 o 24:

brew install --cask temurin@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)

spawn uv ENOENT (Claude Desktop no puede encontrar tu binario UV)

➡️ Claude no puede localizar uv por nombre. Para solucionarlo:

  1. Ejecuta en tu terminal:
which uv

Ejemplo de salida:

/Users/yourname/.cargo/bin/uv
  1. Abre tu archivo de configuración de Claude Desktop:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. Actualízalo de la siguiente manera:
{
  "mcpServers": {
    "ghidra": {
      "command": "/Users/yourname/.cargo/bin/uv",
      "args": [
        "--directory",
        "/Users/yourname/Documents/ghidra_mcp",
        "run",
        "main.py"
      ]
    }
  }
}
  1. Reinicia Claude Desktop. Ahora deberías ver tus herramientas MCP personalizadas.

The operation couldn’t be completed. Unable to locate a Java Runtime.

➡️ Solución: Java no está instalado o JAVA_HOME no está configurado. Sigue las instrucciones de configuración anteriores.


📂 Estructura del Proyecto

ArchivoPropósito
main.pyServidor MCP con herramientas
export_context.pyScript de Ghidra que extrae JSON
crackme.cBinario C de ejemplo
crackmeBinario compilado para probar

👨‍💻 Autor

Tomi Bamimore
Ghidra por la NSA
MCP por Anthropic