Ghidra MCP Server
Expõe dados de análise binária do Ghidra, incluindo funções e pseudocódigo, para LLMs.
Documentação
🔍 Ghidra MCP Server
Este projeto permite que você use Ghidra em modo headless para extrair dados ricos de análise binária (funções, pseudocódigo, structs, enums, etc.) para um arquivo JSON e expô-los a LLMs como Claude via Model Context Protocol (MCP).
Ele transforma o Ghidra em um backend interativo de engenharia reversa.
🚀 Recursos
- Descompila um binário usando o modo headless do Ghidra
- Extrai:
- Pseudocódigo de funções, nomes, parâmetros, variáveis, strings, comentários
- Estruturas de dados (structs), enums e definições de funções
- Saída para
ghidra_context.json - O servidor MCP expõe ferramentas como:
list_functions(),get_pseudocode(name)list_structures(),get_structure(name)list_enums(),get_enum(name)list_function_definitions(),get_function_definition(name)
⚙️ Requisitos do Sistema
- macOS (testado)
- Python 3.10+
- Ghidra 11.3.1+
- Java 21 (Temurin preferido)
- Cliente MCP (ex.: Claude Desktop)
mcpCLI (instale viapip install mcp)
🧪 Instalação e Configuração
✅ 1. Instale o Java 21 (OBRIGATÓRIO para Ghidra 11.3.1)
brew install --cask temurin@21
Em seguida, configure-o:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc
source ~/.zshrc
Verifique:
java -version
Deve dizer: openjdk version "21.0.x"...
✅ 2. Instale o Ghidra
Baixe e extraia Ghidra 11.3.1
✅ 3. Configure o projeto
cd ghidra_mcp
gcc -Wall crackme.c -o crackme
✅ 4. Instale o servidor via MCP CLI
mcp install main.py
Isso registra o servidor MCP para que Claude ou outros clientes possam acessá-lo.
✅ 5. Execute em modo de desenvolvimento (para testes)
mcp dev main.py
Isso permite recarga automática (hot reload) e logs de desenvolvedor.
🛰️ Ferramentas Disponíveis
| Ferramenta | Descrição |
|---|---|
setup_context(...) | Executa o Ghidra em um binário |
list_functions() | Todas as funções |
get_pseudocode(name) | Pseudocódigo descompilado |
list_structures() | Todas as structs |
get_structure(name) | Detalhes de uma struct |
list_enums() | Todos os enums |
get_enum(name) | Valores de enum |
list_function_definitions() | Todos os protótipos de função |
get_function_definition() | Tipo de retorno e argumentos |
Exemplo de Prompt
Analise o arquivo binário localizado em <BINARY_PATH> usando o Ghidra instalado em <GHIDRA_PATH>. Primeiro, configure o contexto de análise usando ambos os caminhos, depois liste todas as funções no binário. Examine a função de ponto de entrada principal e forneça uma visão geral de alto nível do que o programa faz.
🧠 Problemas Comuns e Correções
❌ O Ghidra falha com “versão Java não suportada”
➡️ Correção: Instale Java 21, não 17 ou 24:
brew install --cask temurin@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
❌ spawn uv ENOENT (O Claude Desktop não consegue encontrar seu binário UV)
➡️ O Claude não consegue localizar uv pelo nome. Para corrigir:
- Execute no seu terminal:
which uv
Exemplo de saída:
/Users/yourname/.cargo/bin/uv
- Abra o arquivo de configuração do Claude Desktop:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
- Atualize-o da seguinte forma:
{
"mcpServers": {
"ghidra": {
"command": "/Users/yourname/.cargo/bin/uv",
"args": [
"--directory",
"/Users/yourname/Documents/ghidra_mcp",
"run",
"main.py"
]
}
}
}
- Reinicie o Claude Desktop. Agora você deve ver suas ferramentas MCP personalizadas.
❌ The operation couldn’t be completed. Unable to locate a Java Runtime.
➡️ Correção: Java não instalado ou JAVA_HOME não definido. Siga as instruções de configuração acima.
📂 Estrutura do Projeto
| Arquivo | Finalidade |
|---|---|
main.py | Servidor MCP com ferramentas |
export_context.py | Script Ghidra que extrai JSON |
crackme.c | Binário C de exemplo |
crackme | Binário compilado para teste |