
Servidor MCP que conecta a engenharia reversa do Ghidra com ferramentas de IA: 256 ferramentas para decompilação, emulação P-code, depuração ao vivo, análise de fluxo de dados, operações em lote e aplicação de convenções nos modos headless e GUI.
Se você achar isso útil, por favor ⭐ dê uma estrela no repositório — isso ajuda outras pessoas a descobri-lo!
Se o Ghidra MCP economiza seu tempo, considere patrocinar o projeto. Tanto o suporte único quanto o recorrente ajudam a financiar atualizações de compatibilidade, robustez de produção, documentação e novas ferramentas.
Um servidor Model Context Protocol (MCP) pronto para produção que conecta as poderosas capacidades de engenharia reversa do Ghidra com ferramentas modernas de IA e frameworks de automação. 271 ferramentas MCP, fluxos de trabalho de IA testados em batalha e a integração Ghidra-MCP mais abrangente disponível — agora incluindo emulação P-code, integração com depurador ao vivo e análise de fluxo de dados via grafo PCode.
A maioria das implementações Ghidra MCP oferece um punhado de ferramentas somente leitura e está tudo resolvido. Este projeto é diferente — foi construído por um engenheiro reverso que o usa diariamente em binários reais, não como uma demonstração.
Você já passou por isso: seis meses em um projeto você encontra ProcessItem, process_items, handleItem e ItemProc no mesmo código — quatro funções fazendo a mesma coisa, nomeadas por quatro sessões ou engenheiros diferentes sem um contrato compartilhado. Corrigir leva mais tempo do que deveria, e o problema vai acontecer de novo.
A v5.0 move as convenções de "coisas para lembrar" para a camada de ferramentas, onde elas podem realmente ser aplicadas.
Para agentes de IA, isso significa saída consistente em todas as sessões, todos os modelos, todas as execuções — sem colar um guia de estilo em cada prompt. A ferramenta conhece as regras; o modelo só precisa tomar a decisão.
Para equipes, elimina toda a classe de comentários de revisão que diz "essa não é nossa convenção de nomenclatura". A arbitragem de convenções fica na ferramenta, não na revisão de código.
Para trabalho solo em escala, analyze_function_completeness fornece uma pontuação de 0–100% que mede honestamente: deduções estruturais (artefatos de compilador não corrigíveis) são perdoadas em sua pontuação efetiva, a escala logarítmica impede que uma categoria ruim enterre todo o resto, e a qualidade comentada em níveis de placa significa que você sabe exatamente o que está faltando e por quê.
Nota de compatibilidade: os nomes das ferramentas MCP são normalizados para o GitHub Copilot CLI e validação CAPI. Os nomes das ferramentas expostas usam apenas letras minúsculas, dígitos, underscores e hífens; caminhos HTTP aninhados como
/debugger/statussão anunciados como nomes comodebugger_status_2quando necessário para evitar colisões com ferramentas de ponte estáticas.
EmulatorHelper do Ghidra; resolva hashes de API por força bruta em milissegundosUsuários de servidor Ghidra compartilhado: clientes Ghidra 12.1.2 exigem um servidor Ghidra na versão 12.1, 12.0.5 ou uma versão compatível mais recente. Atualize o servidor antes de usar este plugin a partir de um cliente 12.1.
O Ghidra 12.1.2 inclui o Jython como uma extensão opcional. Scripts Java funcionam por padrão, mas scripts
.pyemghidra_scripts/exigem a instalação da extensão Jython em File > Install Extensions e reiniciar o Ghidra.
Recomendado para todas as plataformas: use
python -m tools.setupdiretamente.
ensure-prereqsinstala os requisitos de runtime Python e os JARs do Ghidra necessários no repositório Maven local.deploycopia a saída da build, instala a extensão do perfil de usuário e corrige a configuração do usuário do Ghidra.
deploy salva/fecha uma instância do Ghidra já em execução e correspondente quando
necessário, instala a extensão, inicia o Ghidra, aguarda a saúde do MCP e executa
verificações de fumaça no esquema.
Caminho de build suportado: python -m tools.setup build usa Maven internamente e é o fluxo de trabalho canônico utilizado pelas tarefas e documentos do repositório. ```bash
mvn clean package assembly:single -DskipTests
INPUT: ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
Nota para Debian/Kali/Ubuntu 23.04+ (PEP 668): estas distribuições marcam o Python do sistema como gerenciado externamente, portanto um simples
pip installfalha comerror: externally-managed-environment. Não contorne isso com--break-system-packages— isso pode corromper ferramentas gerenciadas pelo apt. Em vez disso, use uv (recomendado — ele cria e gerencia um.venvlocal ao projeto automaticamente, e é o que os comandos deste repositório usam):curl -LsSf https://astral.sh/uv/install.sh | sh uv run bridge-mcp-ghidra # resolves deps into .venv and starts the bridgeou um ambiente virtual clássico:
python3 -m venv .venv && source .venv/bin/activate pip install -e . bridge-mcp-ghidra
Isto irá:
~/.m2/repository localGhidraMCP-<version>.zip com Maven~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/preferences com LastExtensionImportDirectoryCaminhos no Linux: A extensão é instalada em
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. Os arquivos de configuração do Ghidra estão em$HOME/.config/ghidra/ghidra_<version>_PUBLIC/.
A extensão é instalada em ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
Nota:
--ghidra-versioné necessário ao usar o caminho do Homebrew porque o caminho não contém string de versão.
Na janela principal do projeto: Tools > GhidraMCP > Start MCP Server
~/.cursor/mcp.json): ```json
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
@Pandoriaantje mantém pacotes comunitários do AUR:
ghidra-mcp-git — segue o branch mainghidra-mcp — segue releases com tagsInstale com o seu helper AUR de preferência, ex.:```bash yay -S ghidra-mcp # or ghidra-mcp-git
### Uso Básico
#### Opção 1: Transporte Stdio (Recomendado para ferramentas de IA)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
Para adicionar a bridge ao Autohand Code a partir de um checkout clonado:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Adicione `--scope project` antes de `ghidra` para salvar o servidor na configuração `.autohand` do projeto atual em vez da sua configuração de usuário.
#### Opção 2: Transporte HTTP Streamable (Recomendado para clientes web/HTTP)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
Configuração do cliente MCP para o transporte HTTP (adicione ao arquivo de configuração MCP do seu cliente):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
Clientes baseados em navegador (ex.: [MCP Inspector](https://github.com/modelcontextprotocol/inspector))
funcionam imediatamente: os transportes HTTP respondem a requisições preflight CORS (`OPTIONS`) e expõem
os cabeçalhos `mcp-session-id` / `mcp-protocol-version` para scripts. Origens permitidas espelham a
política do cabeçalho Host — loopback em qualquer porta é sempre permitido, além do host de bind e quaisquer
hosts listados em `GHIDRA_MCP_ALLOWED_HOSTS`.
#### Opção 3: Transporte SSE (Obsoleto — use streamable-http em vez disso)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
Defina GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1 para fazer a ponte recusar qualquer chamada com escopo de programa que omita um seletor de programa, retornando um erro claro em vez de permitir que a chamada dependa do "programa atual" compartilhado do servidor (aquele que switch_program e a aba GUI ativa movem).```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
Sem isso, uma chamada que deixa `program=` de fora é executada contra o programa atual, o que é aceitável para um fluxo de trabalho com um único programa, mas perigoso quando vários programas estão abertos: a chamada pode ler ou editar o binário errado sem erro. O perigo é maior quando mais de um cliente compartilha um servidor, pois cada um move a variável global do programa atual sob os outros.
Com o modo estrito ativado, toda chamada com escopo de programa deve nomear seu alvo. Isso cobre todo seletor que escolhe um programa aberto: o simples `program=` e os `source_program`/`target_program` ou `program_a`/`program_b` das ferramentas entre programas (declarados obrigatórios, mas o servidor ainda recorre ao programa atual quando um chega vazio). Um seletor esquecido aparece como um erro alto na primeira chamada ruim, em vez de uma gravação silenciosa no binário errado. Ferramentas sem seletor de programa (`open_program` e `close_program` usam `path`/`name`) não são afetadas. Desativado por padrão: com a variável não definida, a ponte envia chamadas inalteradas.
#### Reduzindo a sobrecarga de contexto das ferramentas
A ponte expõe um grande catálogo. Para manter a superfície de ferramentas do modelo pequena, execute com `--lazy` (carrega apenas `listing,function,program` na conexão) e deixe o modelo **descobrir** o restante sob demanda, em vez de registrar tudo:
- `search_tools("rename function")` — pesquisa por palavra-chave no **catálogo inteiro**,
incluindo ferramentas cujo grupo não está carregado. Cada resultado informa se a ferramenta está
chamável agora e, se não, a chamada exata `load_tool_group(...)` para ativá-la.
- `list_tool_groups()` — lista todas as categorias e seu estado de carregamento.
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — carrega ou
descarta uma categoria em tempo de execução.
- `check_tools("rename_or_label,batch_set_comments")` — confirma se ferramentas específicas
estão chamáveis no momento.
`search_tools` funciona tanto no modo imediato quanto no `--lazy`, então agentes que honram `tools/list_changed` obtêm descoberta completa sem o custo de contexto adiantado.
#### Opcional: Iniciar o servidor de depuração independente```bash
uv sync --group debugger
uv run python -m debugger
O servidor debugger escuta em http://127.0.0.1:8099/ por omissão e é
necessário para as ferramentas proxy debugger_* expostas pela ponte MCP.
Flags do servidor debugger:
Defina GHIDRA_DEBUGGER_URL no .env se alterar a porta ou o anfitrião padrão para que a ponte o consiga encontrar.
http://127.0.0.1:8089/ por omissãocurl http://127.0.0.1:8089/check_connection
curl http://127.0.0.1:8089/get_version
## Apoie Este Projeto
Se o Ghidra MCP economiza seu tempo de engenharia ou engenharia reversa, considere [patrocinar o projeto](https://github.com/sponsors/bethington).
- Patrocínio único ajuda a financiar correções, atualizações de compatibilidade e trabalho de lançamento.
- Patrocínio recorrente ajuda a manter a manutenção, documentação e hardening de produção em andamento.
- Suporte empresarial ajuda a priorizar a confiabilidade a longo prazo para a ponte, servidor headless, integração com depurador e ferramentas de fluxo de trabalho.
## 🔒 Segurança
O GhidraMCP é projetado para **desenvolvimento apenas em localhost**. A configuração padrão — servidor HTTP vinculado a `127.0.0.1`, sem autenticação — é segura em uma estação de trabalho confiável de usuário único e corresponde ao comportamento pré-v5.4.1.
**Se você expuser o servidor além do loopback, configure estas três variáveis de ambiente primeiro.** O servidor se recusa a iniciar em uma vinculação não-loopback sem um token.
| Variável de ambiente | Efeito |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | Quando definida, toda requisição HTTP deve conter `Authorization: Bearer <token>`. Comparação segura contra timing. `/mcp/health`, `/health`, `/check_connection` são isentos. |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | Defina como `1`, `true` ou `yes` para ativar `/run_script_inline` e `/run_ghidra_script`. **Desativado por padrão a partir da v5.4.1** — esses endpoints executam Java arbitrário contra o processo do Ghidra. No modo headless, isso também aciona a inicialização do `BundleHost` do OSGi na inicialização do servidor (framework Felix, ~centenas de ms); deixe desativado se você não precisar de execução de scripts. |
| `GHIDRA_MCP_FILE_ROOT` | Quando definida com um caminho de diretório, os endpoints de caminho de sistema de arquivos (`/load_program`, `/import_file`, `/open_project`, `/delete_file`, etc.) canonicalizam a entrada e exigem que ela esteja dentro desta raiz. Previne path-traversal. |
A aplicação da qualidade de nomes é separada da segurança. Por padrão, `rename_function_by_address` e endpoints de escrita global rejeitam nomes que falham nas verificações de qualidade internas, e escritas em campos de struct aplicam a convenção de prefixo de campo interna. Desative a camada de convenção interna com **Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement**. A mesma caixa de seleção em Tool Options cobre `rename_data`, `rename_global_variable`, `set_global`, o prefixo/guarda de tipo `apply_data_type`, e correções automáticas de prefixo húngaro em campos de struct em `create_struct`, `add_struct_field` e `modify_struct_field`. A configuração é lida quando o servidor MCP inicia ou reinicia. Avisos de convenção de função/global ainda são retornados quando a aplicação está desabilitada.
### Exemplo: expondo a uma LAN privada com autenticação```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
Quando se conecta a um Servidor Ghidra compartilhado, o GhidraMCP pode suprimir a caixa de diálogo de senha automaticamente. Ele resolve as credenciais nesta ordem (o primeiro valor não vazio vence):
Nota de compatibilidade: clientes Ghidra 12.1.2 exigem Servidor Ghidra 12.1.2, 12.0.5 ou um servidor compatível mais recente. Servidores compartilhados mais antigos não são alvos seguros para uma atualização do cliente 12.1.
GHIDRA_SERVER_PASSWORD (ou arquivo .env no diretório de instalação do Ghidra ou ~)~/.ghidra-cred — arquivo de senha de linha única no seu diretório home<ghidra-install-dir>/.ghidra-credO nome de usuário é resolvido de forma similar: variável de ambiente GHIDRA_SERVER_USER → propriedade do sistema user.name.
Se nenhuma senha for encontrada, o Ghidra exibe seu prompt GUI normal. Defina essas opções em .env (veja .env.template para o bloco completo) para ativar a autenticação silenciosa.
/run_script_inline ou /run_ghidra_script, exporte GHIDRA_MCP_ALLOW_SCRIPTS=1. Esta é uma mudança de quebra deliberada; o padrão anterior era inseguro.Causa: Plugin não habilitado ou instalado incorretamente.
Solução:
Causa: Servidor não iniciado ou porta errada.
Solução:
pip install falha com error: externally-managed-environmentCausa: PEP 668. Distribuições da família Debian (Debian 12+, Kali, Ubuntu 23.04+) marcam o Python do sistema como gerenciado externamente, então o pip install global é bloqueado para proteger pacotes gerenciados pelo apt.
Solução: Use um ambiente virtual — nunca --break-system-packages. O caminho recomendado é uv, que gerencia um .venv local ao projeto automaticamente:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
Ou um venv clássico:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger falha com ModuleNotFoundError para pybag ou comtypesCausa: O servidor de depuração autônomo usa dependências Python opcionais apenas para Windows que não são instaladas por padrão.
Solução:```text uv sync --group debugger uv run python -m debugger
Se você tiver tanto um Python global quanto um venv de projeto, certifique-se de instalar
e executar a partir do mesmo interpretador.
### 500 Erros Internos do Servidor
**Causa:** Exceção no servidor, geralmente devido à falta de dados do programa.
**Solução:**
1. Certifique-se de que um binário está carregado no CodeBrowser
2. Execute a análise automática primeiro: **Analysis > Auto Analyze**
3. Verifique o console do Ghidra (**Window > Console**) para exceções Java
4. Algumas operações exigem binários totalmente analisados
### 404 Erros Não Encontrados
**Causa:** O endpoint não existe ou URL incorreta.
**Solução:**
1. Verifique se o endpoint existe: `curl http://127.0.0.1:8089/get_version`
2. Verifique se há erros de digitação no nome do endpoint
3. Certifique-se de estar usando o método HTTP correto (GET vs POST)
### Scripts Python do Ghidra falham com "No script provider found"
**Causa:** No Ghidra 12.1.2, o suporte a Jython não está mais habilitado por padrão. Scripts `.py` precisam da extensão Jython empacotada; scripts Python 3 devem usar PyGhidra em vez do Gerenciador de Scripts do Ghidra.
**Solução:**
1. No Front End do Ghidra, vá em **File > Install Extensions**.
2. Marque **Jython**, reinicie o Ghidra e atualize o Gerenciador de Scripts.
3. Para novas automações, prefira scripts Java do Ghidra ou PyGhidra.
### Extensão não aparece em Instalar Extensões
**Causa:** O arquivo JAR está no local errado.
**Solução:**
1. Local de instalação manual: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. Ou use: **File > Install Extensions > Add** e selecione o arquivo ZIP
3. Certifique-se de que o JAR/ZIP foi construído para sua versão do Ghidra
### Build falha com "Ghidra dependencies not found"
**Causa:** JARs do Ghidra não instalados no repositório Maven local.```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
271 ferramentas MCP suportadas por endpoints HTTP, agrupadas por categoria de catálogo. Gerado a partir de tests/endpoints.json por python -m tools.gen_readme_api_reference --write; o esquema ativo em /mcp/schema é autoritativo em tempo de execução. Padrões de uso: docs/prompts/TOOL_USAGE_GUIDE.md.
analysis_status - Obter status de análise automática para programas abertosclose_program - Fechar um programa aberto pelo caminho do projeto ou nomecreate_property_map - Criar um mapa de propriedade do usuário para armazenar valores tipados chaveados por endereçodelete_property_map - Excluir um mapa de propriedade do usuário e todos os valores que ele contémexit_ghidra - Salvar e sair do Ghidraget_address_spaces - Listar todos os espaços de endereço físicos e de sobreposição no programa (sobreposições incluem flag is_overlay e nome overlayed_space)get_current_program_info - Obter informações do programa atualget_language_metadata - Despejar a descrição da linguagem do programa: espaços de endereço, registradores, símbolos padrão, endianness, tamanho de ponteiro (issue #192)get_program_options - Ler todas as opções em um grupo de opções do programa com tipos, valores atuais, padrões e descriçõesget_property - Ler o valor armazenado em um endereço em um mapa de propriedadecreate_folder - Criar uma pasta no projetodelete_file - Excluir um arquivo do projetodelete_project - Excluir um projeto Ghidralist_projects - Listar projetos Ghidra disponíveismove_file - Mover um arquivo para outra pasta do projetomove_folder - Mover uma pasta para outro localproject_info - Obter informações detalhadas do projeto, incluindo ferramentas em execução e programas abertosDisponível no servidor headless autônomo (GhidraMCPHeadlessServer).
archive_project - Arquivar o projeto atualmente aberto em um arquivo .gar nativo do Ghidracheckin_program - Fazer check-in de um programa aberto de volta ao Servidor Ghidra compartilhado como uma nova versãoclose_project - Fechar o projeto atualmente abertocreate_project - Criar um novo projeto Ghidraexport_program - Exportar um programa aberto ou residente no projeto para um Arquivo Zip Ghidra (.gzf)get_project_info - Obter informações sobre o projeto atualmente abertoimport_program - Importar um Arquivo Zip Ghidra (.gzf) para o projeto atualmente aberto como um novo DomainFile sob target_folder (padrão '/')load_program - Carregar um arquivo binário no servidor headless para análiseload_program_from_project - Carregar programa a partir do projeto Ghidra (headless)open_project - Abrir um projeto Ghidra existente (arquivo .gpr ou diretório)restore_project - Restaurar um arquivo .gar do Ghidra em um novo projeto em disco em list_bookmarks - Listar marcadoreslist_calling_conventions - Listar convenções de chamada disponíveislist_classes - Listar nomes de namespaces/classeslist_data_items - Listar dados definidoslist_data_items_by_xrefs - Listar dados ordenados por contagem de xrefslist_exports - Listar símbolos exportadoslist_external_locations - Listar locais externoslist_functions - Listar funções com endereçoslist_functions_enhanced - Listar funções com metadadoslist_globals - Listar variáveis globaislist_imports - Listar símbolos importadoslist_methods - Listar todos os nomes de funções com paginaçãoget_current_address - Obter endereço do cursor (somente GUI)get_current_function - Obter função no cursor (somente GUI)get_current_selection - Obter intervalos de endereços destacados na listagem do CodeBrowser (somente GUI)get_entry_points - Obter pontos de entrada do programaget_enum_values - Obter valores de enumeraçãoget_external_location - Obter detalhes do local externoget_full_call_graph - Obter grafo de chamadas completoget_function_by_address - Obter função no endereçoget_function_call_graph - Obter grafo de chamadasget_function_callees - Obter funções chamadasget_function_callers - Obter funções que chamamget_function_count - Retornar o número de funções no programa carregadofind_similar_functions - Encontrar funções semelhantessearch_byte_patterns - Pesquisar padrões de bytessearch_data_types - Pesquisar tipos de dadossearch_functions - Pesquisar funções por nomesearch_functions_enhanced - Pesquisa avançada de funçõessearch_strings - Pesquisar strings definidas por um padrão de regex/substringdecompile_function - Descompilar funçãodisassemble_bytes - Desmontar intervalo de bytesdisassemble_function - Desmontar funçãoforce_decompile - Forçar descompilação novaadd_function_tag - Anexar uma ou mais tags a uma funçãobatch_add_function_tags - Anexar tags a várias funções em uma transaçãobatch_remove_function_tags - Desanexar tags de várias funções em uma transaçãoclear_flow_and_repair - Executar a ação 'Clear Flow and Repair' da GUI do Ghidra em um intervalo de semente: limpa o fluxo de instruções alcançável a partir da semente, então repara corpos de função e remonta o fluxo retido (ClearFlowAndRepairCmd com clear_data=false, clear_labels=false, repair=true)create_function_tag - Criar uma definição de tag de função em todo o programa com um comentário opcionaldelete_function_tag - Excluir uma definição de tag de função em todo o programaget_function_tags - Listar todas as tags atribuídas a uma função específicalist_class_members - Listar as funções membro de uma classe C++list_function_tags - Listar todas as definições de tag de função em todo o programa com suas contagens de usoremove_function_tag - Desanexar uma ou mais tags de uma funçãoadd_memory_reference - Criar uma referência cruzada definida pelo usuário entre dois endereços de memória que o analisador automático não pode inferir (tabelas de ponteiros preenchidas em tempo de execução, vtables, ponteiros de função vinculados tardiamente, tabelas de salto/switch perdidas)get_bulk_xrefs - Obter xrefs para múltiplos endereçosget_function_xrefs - Obter referências cruzadas de funçãoget_xrefs_from - Obter referências a partir do endereçoget_xrefs_to - Obter referências para o endereçoremove_reference - Remover referência(s) cruzada(s) de memória de um endereço para outro — o inverso de add_memory_referenceadd_struct_field - Adicionar campo de estruturaanalyze_global_completeness - Pontuar a completude da documentação de uma variável global em uma escala orçada de 0 a 100 — o análogo de endereço de dados de analyze_function_completenessapply_data_type - Aplicar tipo de dadosaudit_global - Auditar o estado da documentação de uma variável globalaudit_globals_in_function - Auditar todas as variáveis globais referenciadas dentro de uma função em uma chamadabatch_set_variable_types - Definir múltiplos tipos de variáveisclone_data_type - Clonar tipo de dadoscreate_array_type - Criar tipo arraycreate_data_type_category - Criar categoria de tipo de dadoscreate_enum - Criar enumeraçãocreate_function_signature - Criar tipo de assinatura de funçãobatch_create_labels - Criar múltiplos rótulosbatch_delete_labels - Excluir múltiplos rótulosbatch_rename_function_components - Renomear componentes de função em lotecreate_label - Criar rótulodelete_label - Excluir rótulo no endereçorename_data - Renomear símbolo de dadosrename_external_location - Renomear local externorename_function - Renomear função por nomerename_function_by_address - Renomear função por endereçorename_global_variable - Renomear variável globalrename_label - Renomear rótulorename_or_label - Renomear ou criar rótulobatch_set_comments - Definir múltiplos comentáriosclear_function_comments - Limpar todos os comentários de uma funçãodelete_bookmark - Excluir marcadorget_comment - Obter comentários de listagem (placa/pré/eol/pós/repetível) em QUALQUER endereço, incluindo endereços de dados (diferente de get_plate_comment que requer uma função)get_plate_comment - Obter comentário de placaset_bookmark - Definir marcadorset_comment - Definir um comentário de listagem de um tipo específico (placa/pré/eol/pós/repetível) em QUALQUER endereço, incluindo endereços de dadosset_decompiler_comment - Definir PRE_COMMENTset_disassembly_comment - Definir EOL_COMMENTset_plate_comment - Definir comentário de placaanalyze_api_call_chains - Analisar cadeias de chamadas de APIanalyze_call_graph - Analisar padrões de grafo de chamadas de funçãoanalyze_control_flow - Analisar fluxo de controleanalyze_data_region - Analisar região de dadosanalyze_dataflow - Rastrear propagação de valor através de uma função (grafo PCode, para frente/para trás)analyze_for_documentation - Análise de documentação RE composta (descompilar + classificar + variáveis + completude)analyze_function_complete - Análise abrangente de função com uma única chamadaanalyze_function_completeness - Analisar completude da documentaçãoanalyze_struct_field_usage - Analisar uso de campo de estruturaapply_data_classification - Aplicar classificação de dadosbatch_analyze_completeness - Analisar completude em lote para múltiplas funçõesarchive_ingest_function - Ingerir a documentação de uma única função no arquivo entre versões (re_kb.functions no bsim Postgres)archive_ingest_program - Ingerir em massa todas as funções em um programa no arquivo de documentação entre versõesbatch_string_anchor_report - Relatório de strings de arquivo fonte e suas funções FUN_*bulk_fuzzy_match - Correspondência de função entre binários em massafind_similar_functions_fuzzy - Correspondência de função difusa entre bináriosmerge_program_documentation - Mesclagem em massa: copiar toda a documentação RE (nomes de função, assinaturas, comentários de placa, comentários de instrução em EOL/PRE/POST, rótulos não padrão e símbolos globais) de um programa para outro em endereços correspondentesapply_function_documentation - Aplicar documentação de funçãocheck_connection - Endpoint de verificação de saúdecompare_programs_documentation - Comparar documentação entre programasconvert_number - Converter número entre basesdiff_functions - Diferenciar duas funçõesfind_undocumented_by_string - Encontrar funções não documentadas que referenciam stringget_bulk_function_hashes - Obter hashes de função em massaget_function_documentation - Exportar documentação de funçãoget_function_hash - Obter hash de funçãoget_function_signature - Obter assinatura de recurso da funçãoget_metadata - Obter metadados do programaget_version - Obter versão do pluginemulate_function - Emular uma única função com entradas de registrador/memória controladasemulate_hash_batch - Resolução de hash de API por força brutarun_ghidra_script - Executar script com captura de saídarun_script_inline - Executar código de script inlineserver_admin_set_permissions - Definir permissões de usuário em um repositórioserver_admin_terminate_all_checkouts - Encerrar todos os checkouts em uma pasta recursivamenteserver_admin_terminate_checkout - Encerrar todos os checkouts em um único arquivoserver_admin_users - Listar todos os usuários no servidorserver_authenticate - Registrar credenciais do servidor para autenticação programáticaserver_checkouts - Listar todos os arquivos com checkout em uma pasta, incluindo checkouts do lado do servidorserver_connect - Conectar a um servidor Ghidraserver_disconnect - Desconectar do servidor Ghidraserver_repositories - Listar repositórios no servidor conectadoserver_repository_create - Criar um novo repositório no servidorserver_repository_file - Obter informações do arquivo de um repositório do servidorEm hosts Windows onde o proxy do depurador WinDbg da ponte está ativo (GHIDRA_DEBUGGER_URL), nomes conflitantes recebem um sufixo _2 (ex. debugger_status_2).
debugger_dynamic_to_static - Traduzir um endereço dinâmico de tempo de execução do trace atual de volta para um endereço de programa Ghidra estáticodebugger_interrupt - Interromper (invadir) o alvo em execuçãodebugger_launch - Lançar um executável através do lançador do depurador Trace RMI do Ghidradebugger_launch_offers - Listar opções disponíveis de lançamento/anexação do depurador para o programa atualdebugger_list_breakpoints - Listar todos os pontos de interrupção no trace atualdebugger_modules - Listar módulos (DLLs/EXEs) carregados no processo depuradodebugger_read_memory - Ler memória do processo depuradodebugger_registers - Ler registradores da CPU do snapshot de trace de depuração atualdebugger_remove_breakpoint - Remover um ponto de interrupção em um endereçodebugger_resume - Retomar a execução do processo depuradodebugger_set_breakpoint - Definir um ponto de interrupção de execução de software em um endereço no traceprompt_policy - Ativar, desativar ou consultar temporariamente o tratamento de prompts de automação com escopodebugger_* quando GHIDRA_DEBUGGER_URL aponta para o servidor de depuração independente.check_tools - Relatar quais ferramentas estão atualmente registradas e podem ser chamadasconnect_instance - Conectar a ponte a uma instância específica do Ghidraimport_file - Importar um binário do disco para o projeto atual e abri-lolist_instances - Descobrir instâncias Ghidra MCP em execução (UDS + varredura de porta TCP)list_tool_groups - Listar grupos de ferramentas e seu estado de carregamentoload_tool_group - Registrar as ferramentas dinâmicas de um grupo de ferramentas no cliente MCPsearch_tools - Pesquisar todo o catálogo de ferramentas por palavra-chaveunload_tool_group - Cancelar o registro das ferramentas dinâmicas de um grupo de ferramentasVeja CHANGELOG.md para o histórico de versões.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### Componentes
- **python/bridge_mcp_ghidra/** — Pacote servidor MCP em Python (distribuído como a wheel `ghidra-mcp-bridge`; script de console `bridge-mcp-ghidra`) que traduz o protocolo MCP para chamadas HTTP (225 entradas de catálogo)
- **GhidraMCP.jar** — Plugin do Ghidra que expõe capacidades de análise via HTTP (175 endpoints de GUI)
- **GhidraMCPHeadlessServer** — Servidor headless autônomo — 183 endpoints, sem necessidade de GUI
- **ghidra_scripts/** — Coleção de scripts de automação para tarefas comuns
## 🔧 Desenvolvimento
### Compilando a partir do Código Fonte```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
O sistema de build autoritativo hoje é o Maven. tools.setup, as tarefas do VS Code e o fluxo de deploy documentado constroem todos através do pom.xml e escrevem artefatos em target/. O build.gradle permanece no repositório como um fallback manual para usuários diretos do Ghidra/Gradle, mas não é o caminho principal.
Flags comuns aceitas pela maioria dos comandos:
Os tiers de teste de deploy são opt-in porque os tiers de benchmark podem importar/redefinir Benchmark.dll e BenchmarkDebug.exe no projeto Ghidra ativo. Use --test release antes de lançar versões, ou defina GHIDRA_MCP_DEPLOY_TESTS=release em um .env local quando quiser que cada deploy na sua máquina execute a regressão de benchmark ao vivo. Veja Testes e Regressão de Lançamento.```text
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup bump-version --new X.Y.Z --tag
python -m tools.setup run-tests
python -m tools.setup --help
### Estrutura do Projeto```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
Os JARs do Ghidra devem ser instalados no repositório Maven local (~/.m2/repository) antes da compilação.
Esta é uma configuração única por máquina, e novamente quando sua versão do Ghidra for alterada.
-Deploy agora instala estes automaticamente por padrão.
A ferramenta impõe consistência de versão entre:
pom.xml (ghidra.version)--ghidra-path (ex.: ghidra_12.1.2_PUBLIC)Se estes não coincidirem, a implantação falha rapidamente com um erro claro.
Se você vir um erro de incompatibilidade de versão, alinhe ambos os valores:
pom.xml → ghidra.version--ghidra-path (ghidra_X.Y.Z_PUBLIC)Em seguida, execute novamente:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
[No input content provided. Please paste the Markdown text you wish to have translated.]```text
# Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
Bibliotecas Necessárias (14 JARs, ~37MB):
Nota: As bibliotecas NÃO estão incluídas no repositório (veja
.gitignore). Você deve instalá-las a partir da sua instalação do Ghidra antes de compilar.
Ponto de entrada de automação:
python -m tools.setupé a interface suportada para configuração/compilação/implantação/versionamento- use
ensure-prereqs,build,deploy,preflight,clean-allebump-versiondiretamente- esses comandos atualmente usam Maven como backend de compilação Java canônico
GhidraMCP inclui um modo de servidor headless para análise automatizada sem a GUI do Ghidra.
docker-compose up -d ghidra-mcp
curl http://localhost:8089/check_connection
### Fluxo de Trabalho da API Headless```bash
# 1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
# 3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
# 4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
# 5. Get metadata
curl http://localhost:8089/get_metadata
Variáveis de ambiente para Docker:
GHIDRA_MCP_PORT - Porta do servidor (padrão: 8089)GHIDRA_MCP_BIND_ADDRESS - Endereço de vinculação (padrão: 0.0.0.0 no Docker)JAVA_OPTS - Opções JVM (padrão: -Xmx4g -XX:+UseG1GC)Consulte CONTRIBUTING.md para diretrizes detalhadas de contribuição.
git checkout -b feature/amazing-feature)mvn clean package assembly:single -DskipTests ou GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Este projeto está licenciado sob a Licença Apache 2.0 - consulte o arquivo LICENSE para obter detalhes.
Consulte CHANGELOG.md para histórico de versões e notas de lançamento.
Este projeto foi originalmente derivado de LaurieWired/GhidraMCP em agosto de 2025 e desde então foi substancialmente reescrito e estendido. Reconhecemos o trabalho original de LaurieWired como ponto de partida. Consulte NOTICE para atribuição de licença.
Este projeto se beneficiou do trabalho de contribuidores dedicados:
@heeen — Contribuições significativas incluindo:
save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)@huehuehuehueing — Contribuições significativas incluindo:
Suporte a prefixo de espaço de endereço — adicionou a sintaxe <space>:<hex> (ex.: mem:1000, code:ff00) à análise de endereços em toda a superfície de endpoints, desbloqueando alvos multi-espaço como firmware embarcado (#84, closes #65)
Parâmetro program opcional + correções de esquema de parâmetros obrigatórios — tornou program opcional em todos os endpoints com um fallback sensato de currentProgram, e corrigiu vários bugs de esquema obrigatório-vs-opcional que o catálogo havia herdado (#92)
Originou #44 (ferramentas de tipo de dado / enum) — a questão que motivou a camada de aplicação de enum + struct da v5.0
Equipe Ghidra - Pela incrível plataforma de engenharia reversa
Model Context Protocol - Pelo framework padronizado de integração com IA
Contribuidores - Pelos testes, feedback e melhorias
Pronto para implantação em produção com confiabilidade de nível empresarial e capacidades abrangentes de análise binária.
| Nível | Comportamento | Exemplo |
|---|
| Correção automática | Aplicado silenciosamente | campo count em um uint32 → prefixado automaticamente como dwCount ao salvar |
| Aviso | A alteração é aplicada, aviso retornado | processData → "o nome deve estar em PascalCase com um verbo: ProcessData" |
| Rejeitar | Alteração bloqueada com explicação | alteração de tipo undefined → undefined → "no-op rejeitado, tipo inalterado" |
| Flag | Default | Description |
|---|
--transport | stdio | stdio (ferramentas de IA), streamable-http (clientes web), sse (obsoleto) |
--mcp-host | 127.0.0.1 | Host de ligação para transportes HTTP |
--mcp-port | — | Porta para transportes HTTP |
--lazy | off | Carrega apenas os grupos de ferramentas padrão na conexão. Inicialização mais rápida, mas clientes MCP que não suportam tools/list_changed verão uma lista de ferramentas incompleta. Não recomendado para Claude Code. |
--no-lazy | (default) | Carrega todos os grupos de ferramentas imediatamente na conexão. Necessário para a maioria dos clientes de IA. |
--default-groups | listing,function,program | Grupos separados por vírgula carregados na conexão quando --lazy está definido. |
| Flag | Padrão | Descrição |
|---|
--port | 8099 | Porta do servidor HTTP |
--host | 127.0.0.1 | Endereço de escuta (0.0.0.0 para expor na LAN) |
--exports-dir | — | Caminho para um diretório dll_exports/ para resolução ordinal-para-nome |
--log-level | INFO | DEBUG, INFO, WARNING ou ERROR |
import_file - Importar um arquivo binário do disco para o projeto Ghidra atual e abri-lolist_open_programs - Listar programas abertoslist_option_groups - Listar grupos de opções do programa (exlist_project_files - Listar arquivos do projetolist_properties - Listar entradas (endereço, valor) armazenadas em um mapa de propriedade, com paginaçãolist_property_maps - Listar mapas de propriedade definidos pelo usuário — armazenamentos chave→valor por endereço tipadosopen_program - Abrir programa a partir do projetoreanalyze - Acionar análise automática completa em um programaremove_program_option - Remover uma opção de um grupo de opções do programaremove_property - Remover o valor armazenado em um único endereço em um mapa de propriedadesave_all_programs - Salvar todos os programas abertossave_program - Salvar programa atualset_image_base - Definir o endereço base do programa (rebaseia todos os endereços)set_program_option - Definir uma opção de programa tipadaset_property - Definir um valor em um endereço em um mapa de propriedadeswitch_program - Alternar programa atualparent_dir/project_nameserver_status - Verificar status de conexão do servidor headlesslist_namespaces - Listar todos os namespaceslist_scripts - Listar scripts Ghidra disponíveislist_segments - Listar segmentos de memórialist_strings - Listar strings definidasget_function_jump_targets - Obter alvos de saltoget_function_labels - Obter rótulos na funçãoget_function_variables - Listar todas as variáveis em uma funçãoget_struct_layout - Obter layout da estruturaget_valid_data_types - Obter nomes válidos de tipos de dadossearch_functions_by_tag - Listar todas as funções que têm uma tag especificada anexadaset_decompiler_variable_type - Definir um tipo de variável ou parâmetro do descompilador (alto nível) por nomeset_function_no_return - Definir atributo no-returnset_function_tag_comment - Atualizar o comentário/descrição em uma tag de função existente em todo o programaset_function_this_type - Definir o tipo de descompilador/banco de dados do ponteiro 'this' implícito (ECX em x86 __thiscall/__fastcall)set_variables - Definir tipos e nomes para múltiplas variaveis atomicamentecreate_pointer_type - Criar tipo ponteirocreate_struct - Criar estruturacreate_typedef - Criar typedefcreate_union - Criar uniãodelete_data_type - Excluir tipo de dadosembed_struct_field - Substituir um campo de estrutura por um tipo de estrutura embutido por valor (exget_data_type_size - Obter tamanho do tipo de dados em bytesget_type_size - Obter tamanho e informações do tipo de dadosimport_data_types - Importar tipos de dados de GDTlist_data_type_categories - Listar categorias de tipos de dadoslist_data_types - Listar tipos de dadosmodify_struct_field - Modificar campo de estruturamodify_struct_field_type - Definir o tipo de um campo de estrutura por nome ou deslocamento (offset:N)move_data_type_to_category - Mover tipo de dados para categoriarecreate_struct - Substituir uma estrutura em uma etapa: opcionalmente remover um tipo existente com o mesmo nome, depois criar com campos JSON (mesma forma que create_struct)remove_struct_field - Remover campo de estruturaresize_struct - Aumentar ou diminuir uma estrutura existente pelo tamanho total em bytesresolve_duplicate_type - Encontrar tipos de dados duplicados por nome simples; excluir stubs /Demangler de tamanho 1 não utilizados quando um tipo canônico maior existeset_function_prototype - Definir protótipo de função (tipo de retorno, tipos de parâmetros, convenção de chamada)set_global - Aplicar atomicamente nome + tipo + comentário de placa + comprimento de array a uma variável globalset_local_variable_type - Definir tipo de variávelset_parameter_type - Definir tipo de parâmetroset_variable_storage - Definir armazenamento de variávelvalidate_data_type - Validar sintaxe do tipo de dadosvalidate_data_type_exists - Verificar se o tipo de dados existevalidate_function_prototype - Validar protótipo de funçãorename_variable - Renomear uma variável em uma funçãorename_variables - Renomear variáveis em lotebatch_apply_documentation - Aplicar toda a documentação a uma função em uma chamadabatch_decompile - Descompilar múltiplas funções de uma vezcan_rename_at_address - Verificar se o endereço pode ser renomeadoclear_instruction_flow_override - Limpar substituição de fluxoconfigure_analyzer - Configurar um plugin de análisecreate_function - Criar função no endereçocreate_memory_block - Criar bloco de memóriadelete_function - Excluir função no endereçodetect_array_bounds - Detectar limites de arraydetect_crypto_constants - Detectar constantes criptográficasdetect_malware_behaviors - Detectar comportamentos de malwareextract_iocs_with_context - Extrair IOCs com contextofind_anti_analysis_techniques - Encontrar técnicas anti-análisefind_code_gaps - Encontrar lacunas de bytes indefinidos entre funções em memória executávelfind_dead_code - Encontrar código mortofind_next_undefined_function - Encontrar próxima função indefinidaget_assembly_context - Obter contexto de montagemget_field_access_context - Obter contexto de acesso a campoget_function_pcode - Despejar P-code bruto para uma função (issue #192)inspect_memory_content - Inspecionar bytes de memórialist_analyzers - Listar plugins de análise disponíveisread_memory - Ler memória brutarun_analysis - Executar análise automática no programa atualsearch_instructions - Pesquisar instruções por mnemônico e/ou substring de operandosuggest_field_names - Sugerir nomes de campohealth - Endpoint de verificação de saúde para servidor headlessmcp_health - Saúde do servidor HTTP: estatísticas do pool, tempo de atividade, memória, contagem de solicitações ativasmcp_schema - Esquema de API legível por máquina com metadados de endpointtool_goto_address - Navegar na listagem do CodeBrowser e no descompilador para um endereço específicotool_launch_codebrowser - Abrir um arquivo no CodeBrowser, iniciando um novo se necessáriotool_running_tools - Listar todas as janelas de ferramentas Ghidra em execuçãoserver_repository_files - Listar arquivos em uma pasta de repositório do servidorserver_version_control_add - Adicionar um arquivo ao controle de versãoserver_version_control_checkin - Fazer check-in de um arquivo sob controle de versãoserver_version_control_checkout - Fazer checkout de um arquivo sob controle de versãoserver_version_control_undo_checkout - Desfazer um checkout de arquivoserver_version_history - Obter histórico de versões de um arquivodebugger_stack_trace - Obter o backtrace da pilha de chamadas para a thread atualdebugger_static_to_dynamic - Traduzir um endereço de programa Ghidra estático para um endereço dinâmico de tempo de execução no trace atualdebugger_status - Obter status do depurador: trace ativo, thread, estado de execução, contagem de módulosdebugger_step_into - Avançar passo a passo para a próxima instrução (segue chamadas)debugger_step_out - Sair da função atual (executar até o retorno)debugger_step_over - Avançar sobre a próxima instrução (não segue chamadas)debugger_traces - Listar todos os traces de depuração abertos| Comando | O que faz |
|---|
ensure-prereqs | Instale dependências Python + JARs Maven do Ghidra de uma só vez. Comece aqui em uma nova máquina. |
preflight | Valide Python, ferramenta de build, caminho do Ghidra e disponibilidade de JAR sem fazer alterações. Adicione --strict para também verificar a acessibilidade da rede. |
build | Construa o JAR do plugin e o ZIP da extensão via Maven (ou Gradle quando TOOLS_SETUP_BACKEND=gradle). |
deploy | Copie a extensão construída para o perfil do Ghidra e corrija FrontEndTool.xml para ativação automática. |
start-ghidra | Inicie a instalação configurada do Ghidra. |
clean | Remova as saídas de build do Maven/Gradle (target/, build/). |
clean-all | Remova as saídas de build mais artefatos de cache local (JARs Ghidra .m2, etc.). |
install-ghidra-deps | Instale apenas os JARs do Ghidra em ~/.m2. Útil quando o ambiente de build muda. |
install-python-deps | Instale os grupos de dependências Python via uv sync. |
run-tests | Execute o conjunto de testes offline Java (nenhum Ghidra ativo necessário). |
verify-version | Verifique se as strings de versão são consistentes entre pom.xml, CHANGELOG.md e README.md. |
bump-version --new X.Y.Z | Atualize atomicamente todas as referências de versão. Passe --tag para criar uma tag git. |
| Flag | Descrição |
|---|
--ghidra-path PATH | Diretório de instalação do Ghidra. Padrão é GHIDRA_PATH do .env. |
--dry-run | Imprima ações sem executá-las. |
--force | Reinstale JARs do Ghidra mesmo se já estiverem presentes (install-ghidra-deps, ensure-prereqs). |
--with-debugger | Force a instalação dos requisitos Python do depurador (apenas Windows). |
--use-debugger-toggle | Leia INSTALL_DEBUGGER_DEPS do .env para decidir se instala dependências do depurador. |
--test TIER | (apenas deploy) Opte por tiers de regressão de deploy ao vivo como release ou debugger-live. |
--strict | (apenas preflight) Também verifica a acessibilidade da rede para Maven Central e PyPI. |
| Biblioteca | Caminho de Origem | Finalidade |
|---|
| Base.jar | Features/Base/lib/ | Funcionalidade principal do Ghidra |
| Decompiler.jar | Features/Decompiler/lib/ | Mecanismo de descompilação |
| PDB.jar | Features/PDB/lib/ | Suporte a símbolos PDB da Microsoft |
| FunctionID.jar | Features/FunctionID/lib/ | Identificação de funções |
| SoftwareModeling.jar | Framework/SoftwareModeling/lib/ | API do modelo de programa |
| Project.jar | Framework/Project/lib/ | Gerenciamento de projetos |
| Docking.jar | Framework/Docking/lib/ | Framework de acoplamento de interface |
| Generic.jar | Framework/Generic/lib/ | Utilitários genéricos |
| Utility.jar | Framework/Utility/lib/ | Utilitários principais |
| Gui.jar | Framework/Gui/lib/ | Componentes de GUI |
| FileSystem.jar | Framework/FileSystem/lib/ | Suporte a sistema de arquivos |
| Graph.jar | Framework/Graph/lib/ | Análise de grafos/grafos de chamada |
| DB.jar | Framework/DB/lib/ | Operações de banco de dados |
| Emulation.jar | Framework/Emulation/lib/ | Emulação de P-code |
| Endpoint | Método | Descrição |
|---|
/load_program | POST | Carregar arquivo binário para análise |
/run_analysis | POST | Executar análise automática do Ghidra |
/list_functions | GET | Listar todas as funções descobertas |
/list_exports | GET | Listar símbolos exportados |
/list_imports | GET | Listar símbolos importados |
/decompile_function | GET | Descompilar função para código C |
/create_function | POST | Criar função no endereço |
/get_metadata | GET | Obter metadados do programa |
/create_project | POST | Criar um projeto Ghidra |
/list_analyzers | GET | Listar analisadores disponíveis |
/server/status | GET | Verificar conexão com o Ghidra Server |
| Métrica | Valor |
|---|
| Versão | 5.17.0 |
| Ferramentas MCP | 249 totalmente implementadas |
| Endpoints GUI | 196 (GhidraMCPPlugin) |
| Endpoints Headless | 195 (GhidraMCPHeadlessServer) |
| Compilação | ✅ 100% sucesso |
| Eficiência em Lote | 93% de redução de chamadas de API |
| Fluxos de Trabalho com IA | 7 fluxos de trabalho de documentação comprovados |
| Scripts Ghidra | Scripts de automação incluídos |
| Documentação | Abrangente com prompts de IA |