OGhidra conecta Modelos de Linguagem Grandes (LLMs) via Ollama com a plataforma de engenharia reversa Ghidra, possibilitando análise binária orientada por IA por meio de linguagem natural. Interaja com o Ghidra usando consultas conversacionais e automatize fluxos de trabalho complexos de engenharia reversa.
Para a versão que usa um Orchestrator inspirado no Claude, veja https://github.com/llnl/OGhidra/tree/orchestrator
OGhidra conecta Grandes Modelos de Linguagem à plataforma de engenharia reversa do Ghidra, permitindo análise binária orientada por IA através de linguagem natural. Analise binários de forma conversacional, automatize fluxos de trabalho complexos e mantenha privacidade total com modelos de IA locais.
Tutorial de Configuração no YouTube
OGhidra aprimora o Ghidra com capacidades de IA, permitindo que você:
graph TD
A[User Query] --> B[Planning Phase]
B --> C{Execution Phase}
C -- Tool Calls --> D[Ghidra/LLM]
D --> C
C --> E[Review Phase]
E -- Agentic Loop --> B
E --> F[Final Response]
style E fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333,stroke-width:2pxLoop Agente: OGhidra usa um sistema de planejamento adaptativo. Após cada ciclo de execução, os resultados são revisados e a IA pode optar por coletar mais informações ou refinar sua análise antes de fornecer a resposta final.
python --versionjava -version# Clone repository
git clone https://github.com/LLNL/OGhidra.git
cd OGhidra
# Install dependencies (choose one)
uv sync # Using UV (recommended)
pip install -r requirements.txt # Using pip
# Configure environment
cp .env.example .env
# Edite .env com suas configurações
As etapas de construção do plugin OGhidraMCP abaixo têm como alvo o Ghidra 12.0.3 (recomendado). Há também um tutorial em vídeo no YouTube: https://www.youtube.com/watch?v=hBD92FUgR0Y
Como desenvolvedor, você precisará construir a extensão GhidraMCP antes de instalá-la no Ghidra:
Pré-requisitos:
Opção 1: Usando os scripts de construção automatizados:
Windows:
# Set the path to your Ghidra installation (will attempt to find last run copy of Ghidra if not set)
set GHIDRA_INSTALL_DIR=C:\path\to\ghidra_12.0.3_PUBLIC
# Run the build script
build_ghidra_plugin.bat
Unix/Linux/Mac:
# Set the path to your Ghidra installation (will attempt to find the last run copy of Ghidra if not set)
export GHIDRA_INSTALL_DIR=/path/to/ghidra_12.0.3_PUBLIC
# Run the build script (make it executable first if needed)
chmod +x build_ghidra_plugin.sh
./build_ghidra_plugin.sh
Opção 2: Processo de construção manual:
Crie/atualize OGhidraMCP/gradle.properties com o caminho de instalação do Ghidra:
GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.0.3_PUBLIC
On Unix/Linux/macOS:
cd OGhidraMCP
$GHIDRA_INSTALL_DIR/support/gradle/gradlew buildExtension --info
On Windows:
cd OGhidraMCP
"%GHIDRA_INSTALL_DIR%\support\gradle\gradlew.bat" buildExtension --info
Localize a extensão construída:
OGhidraMCP/dist/ghidra_12.0.3_PUBLIC_YYYYMMDD_OGhidraMCP.zipApós ter construído a extensão com sucesso:
Instale no Ghidra:
OGhidraMCP/dist/ghidra_12.0.3_PUBLIC_YYYYMMDD_OGhidraMCP.zip)Ative o plugin:
OGhidraMCPhttp://localhost:8080/methodsVOCÊ PRECISA TER O CODE BROWSER ABERTO
# Para Ollama (modelos locais)
ollama pull gemma3:27b # Bom equilíbrio (20GB RAM)
ollama pull nomic-embed-text # Modelo de embedding para RAG
# Modelos alternativos
ollama pull gpt-oss:120b # Alta qualidade (80GB RAM)
ollama pull devstral-2:123b # Alta qualidade (80GB RAM)
ollama pull devstral-2:123b-cloud # Modelo na Nuvem
# Modo GUI (recomendado)
uv run main.py --ui
# CLI Interativa
uv run main.py --interactive
# Na CLI interativa, teste a conexão
health
Se você iniciou o modo GUI, use:
curl http://localhost:8080/methods
Edite .env para configurar seu provedor de IA:
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434/
OLLAMA_MODEL=gemma3:27b
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
LLM_PROVIDER=external
EXTERNAL_PROVIDER=google
EXTERNAL_API_KEY=your-api-key-here
EXTERNAL_MODEL=gemini-3.1-flash-lite-preview
EXTERNAL_EMBEDDING_MODEL=gemini-embedding-001
LLM_PROVIDER=custom_api
CUSTOM_API_URL=https://api.example.com/v1/chat/completions
CUSTOM_API_KEY=your-api-key-here
CUSTOM_API_MODEL=your-model-name
CUSTOM_API_EMBEDDING_MODEL=your-embedding-model
Ajuste com base na janela de contexto do seu modelo:
# Orçamento de contexto em tokens (ajuste conforme o limite do seu modelo)
CONTEXT_BUDGET=100000 # 100K tokens para modelos de médio porte
# 200K+ para modelos de ponta
# Configurações de execução
MAX_EXECUTION_STEPS=5 # Passos por ciclo de planejamento
MAX_AGENTIC_CYCLES=3 # Quantos ciclos de planejar-executar-revisar
AGENTIC_LOOP_ENABLED=true # Ativar replanejamento adaptativo
Acesso com um clique a tarefas comuns de engenharia reversa:
| Ferramenta | Descrição |
|---|---|
| Analyze Current Function | Aprofundamento no comportamento da função selecionada |
| Rename Current Function | IA sugere nomes significativos com base na análise |
| Rename All Functions | Renomeação em massa com opções Smart/Full/Rename-Only |
| Analyze Imports | Identifica bibliotecas e dependências externas |
| Analyze Strings | Encontra URLs, credenciais, dados de configuração |
| Generate Report | Avaliação abrangente de segurança |
Defina metas de análise especializadas:
# Na GUI: Use o menu suspenso "Task Mode"
# Na CLI: defina task_mode <mode>
task_mode malware # Análise de malware com detecção de padrões
task_mode vuln # Foco em pesquisa de vulnerabilidades
task_mode general # Engenharia reversa geral
Detecção automática de mais de 12 padrões de malware:
Os padrões disparam alertas automáticos no contexto da IA com mapeamentos MITRE ATT&CK.
Construa conhecimento rico e consultável a partir da análise binária:
# Enumere todas as funções com resumos da IA
# Escolha entre:
- Rename Only: Processa apenas nomes genéricos de funções
- Smart Enumeration: Foco em funções relevantes para segurança
- Full Enumeration: Analisa todas as funções no binário
Recursos:
Salve e restaure sessões de análise:
# Salvar progresso
File → Save Session
# Carregar trabalho anterior
File → Load Session
# Salvamento automático após operações em massa
# As sessões incluem:
- Funções analisadas com resumos
- Vetores RAG para busca semântica
- Estatísticas de desempenho
- Estado da interface
OGhidra suporta dois tipos de backend:
Use a seguinte opção de linha de comando para escolher um backend:
--ghidra-backend={http,pyghidra}
| Opção de Backend | Descrição |
|---|---|
http | Usa o backend GhidraMCP |
pyghidra | Usa o backend PyGhidra |
Especifique um arquivo de projeto Ghidra (.gpr) ao iniciar o OGhidra:
--pyghidra-project=/path/to/project.gpr
PyGhidra requer um projeto Ghidra válido para iniciar o OGhidra.
Especifique qual binário dentro do projeto Ghidra deve ser analisado:
--pyghidra-program=<program_name>
exemplo de chamada para selecionar um programa em um projeto Ghidra:
uv run main.py --ui --ghidra-backend=pyghidra --pyghidra-project=/path/to/project.gpr --pyghidra-program=<program_name>
Requisitos:
Você também pode fornecer um caminho de binário diretamente:
--pyghidra-binary=/path/to/binary
Quando esta opção é usada, PyGhidra automaticamente:
.gpr)exemplo de chamada para iniciar um binário diretamente:
uv run main.py --ui --ghidra-backend=pyghidra --pyghidra-binary=/path/to/binary
uv run main.py --ui# Na GUI: Clique no botão "Generate Report"
# O relatório inclui:
- Resumo Executivo
- Inventário de Funções (funções renomeadas com comportamento)
- Análise de Segurança (funções de alto risco, padrões)
- Análise de Imports
- Análise de Strings
- Recomendações
OGhidra usa embeddings vetoriais para busca semântica sobre funções analisadas:
# Ativar no .env
RESULT_CACHE_ENABLED=true
TIERED_CONTEXT_ENABLED=true
Benefícios:
A compressão de contexto em camadas mantém informações relevantes:
CURRENT_LOOP_MAX_CHARS=2000 # Recente: detalhes completos
PREV_LOOP_MAX_CHARS=400 # Anterior: resumos
OLDER_LOOP_MAX_CHARS=100 # Mais antigo: apenas referências
Rastreie todas as interações com IA para depuração:
LLM_LOGGING_ENABLED=true
LLM_LOG_FILE=logs/llm_interactions.log
LLM_LOG_FORMAT=json
# Verifique se o plugin está carregado
# Abra o codebrowser!
# Verifique se o servidor está em execução
curl http://localhost:8080/methods
# Verifique se o Ollama está em execução
ollama list
# Verifique a conectividade
curl http://localhost:11434/api/tags
# Reinicie o serviço do Ollama
ollama serve
# Reduza o orçamento de contexto
CONTEXT_BUDGET=50000
# Ative a compactação
COMPACTION_ENABLED=true
COMPACTION_THRESHOLD=0.75
gemma3:9bmax_workers=2 em operações em massaRESULT_CACHE_ENABLED=falseCUSTOM_API_REQUEST_DELAY=2.0┌─────────────────────────────────────────────────────────────┐
│ OGhidra UI │
│ (GUI / Interactive CLI) │
└────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Bridge (src/bridge.py) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ • Agentic Loop: Plan → Execute → Review → Replan │ │
│ │ • Tool Router: Ghidra client, LLM client, CAG manager │ │
│ │ • Context Manager: Budget allocation, compression │ │
│ └────────────────────────────────────────────────────────┘ │
└───────────┬────────────────────────┬────────────────────────┘
│ │
▼ ▼
┌───────────────────────┐ ┌─────────────────────────┐
│ Ghidra Client │ │ LLM Clients │
│ • GhidraMCP Plugin │ │ • Ollama (local) │
│ • Binary operations │ │ • External APIs │
│ • Decompilation │ │ • Custom endpoints │
└───────────────────────┘ └─────────────────────────┘
│ │
└────────────┬───────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ CAG Manager (Knowledge System) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ • Vector Store: Semantic search over functions │ │
│ │ • Pattern Detector: 12+ malware techniques │ │
│ │ • Metadata Extractor: Structured function analysis │ │
│ │ • Session Store: Persistent analysis state │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Aceitamos contribuições! Áreas de interesse:
Veja CODE_OF_CONDUCT.md para as diretrizes da comunidade.
Se você usar OGhidra em sua pesquisa, por favor cite:
@software{oghidra2025,
title = {OGhidra: AI-Powered Reverse Engineering with Ghidra},
author = {Enoch Wang},
year = {2025},
url = {https://github.com/LLNL/OGhidra}
}
OGhidra se baseia em excelentes projetos de código aberto:
OGhidra é distribuído sob os termos da licença BSD 3-Clause com uma alternativa de licença comercial.
LLNL-CODE-2013290