
diaphora-mcp v1.0.6
Servidor MCP para diffing binário automatizado.
Diaphora MCP
Diaphora MCP é um servidor MCP (Model Context Protocol) para diffing binário automatizado. Ele conecta o Diaphora (o motor de diffing) e o IDA Pro (o descompilador) através do protocolo MCP, permitindo que agentes de IA (como o Claude Code) realizem comparação de arquivos binários, encontrem patches de segurança e analisem alterações.
Funcionalidades
- Exportação: Converte bases de dados
.i64/.idbanalisadas para o formato SQLite do Diaphora (via modo headlessidat.exe) - Diffing: Compara duas bases de dados exportadas, filtra resultados por tipo de correspondência e proporção
- Análise de Vulnerabilidades: Pesquisa alterações relevantes de segurança usando correspondência de palavras-chave e heurísticas
- Detecção de Patches: Detecta automaticamente novas verificações de limites, verificações nulas, tratamento de erros e alterações criptográficas
- Classificação: Classifica funções alteradas por importância com base no CFG, saltos de complexidade e indicadores de segurança
- Grafo de Chamadas: Compara caminhos de chamada (BFS, até N níveis) e detecta alterações de causa raiz em cascatas de chamadas
- Transferência de Metadados: Prepara nomes, comentários e protótipos para transferência entre bases de dados
- Integração com IDA Pro MCP: Todas as ferramentas retornam endereços e caminhos de bases de dados prontos para serem passados diretamente para as ferramentas do IDA Pro MCP
Instalação
1. Dependências
- Python 3.10+
- IDA Pro 8.x / 9.x (para exportações headless via
idat.exe) - Plugin Diaphora instalado no IDA
- Claude Code (ou qualquer outro cliente compatível com MCP)
2. Instalação do Pacote
git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .
3. Configuração de Caminhos
O pacote tenta encontrar automaticamente o IDA Pro e o Diaphora nos locais de instalação padrão. Se não forem encontrados, pode definir as seguintes variáveis de ambiente:
| Variável | Descrição | Exemplo |
|---|---|---|
IDAT_PATH | Caminho completo para o idat.exe | C:\Program Files\IDA Pro 9.3\idat.exe |
DIAPHORA_DIR | Pasta que contém o diaphora.py | C:\Program Files\IDA Pro 9.3\plugins\diaphora-3.4.1 |
DIAPHORA_OUTPUT_ROOT | Diretório raiz permitido para novos ficheiros de exportação | D:\\diaphora-outputs |
DIAPHORA_PYTHON | Interpretador Python para o diff | /usr/bin/python3 (padrão para sys.executable) |
No Claude Code, pode especificá-los em ~/.claude.json (ou no ficheiro de configuração correspondente do seu cliente MCP):
{
"mcpServers": {
"diaphora": {
"command": "python",
"args": ["path/to/repo/diaphora_mcp_server.py"],
"env": {
"IDAT_PATH": "C:\\Program Files\\IDA Pro 9.3\\idat.exe",
"DIAPHORA_DIR": "C:\\Program Files\\IDA Pro 9.3\\plugins\\diaphora-3.4.1"
},
"timeout": 7200
}
}
}
Nota: Para binários muito grandes (>100 MB), certifique-se de que o
timeouté pelo menos 7200 (2 horas).
3.1. Codex e IDA MCP headless
O Codex normalmente utiliza dois servidores MCP complementares:
diaphora-mcp— este projeto: exportação, diff Diaphora e análise de resultados;ida-pro-mcp— o servidor de inspeção IDA upstream paraidb_open, descompilação e análise ao nível do endereço.
idalib-mcp é o backend headless do ida-pro-mcp, não um servidor Diaphora separado. Após instalá-lo, reinicie o Codex:
uv run ida-pro-mcp --install codex --transport streamable-http --scope global --ida-rpc http://127.0.0.1:8745/mcp
Para este projeto, uma configuração stdio é suficiente:
[mcp_servers.diaphora-mcp]
command = "python"
args = ["D:\\path\\to\\diaphora-mcp\\diaphora_mcp_server.py"]
startup_timeout_sec = 120
4. Preparação de Bases de Dados para o Diffing
O IDA Pro deve analisar primeiro os binários (criando ficheiros .i64 ou .idb). Depois disso:
┃ export_idb_to_diaphora(idb_path="old_version.i64")
┃ export_idb_to_diaphora(idb_path="new_version.i64")
Ou execute todo o pipeline num único comando:
┃ batch_export_and_diff(idb1="old.i64", idb2="new.i64")
Não passe .i64 diretamente para as ferramentas de resultados: é uma base de dados IDA, não SQLite. Exporte primeiro.
Início Rápido
┃ # 1. Pipeline completo: exportar dois .i64 → diff → relatório resumido
┃ batch_export_and_diff(idb1="v1.0.i64", idb2="v1.1.i64")
┃ # 2. Se as bases de dados já estiverem exportadas
┃ diff_diaphora_dbs(db1="v1.0.sqlite", db2="v1.1.sqlite")
┃ # 3. Análise de segurança dos resultados do diff
┃ analyze_diff_results(results_path="v1.0_vs_v1.1.diaphora")
┃ # 4. Classificação por importância das alterações
┃ rank_changes(results_path="v1.0_vs_v1.1.diaphora", top_n=20)
┃ # 5. Encontrar alterações de causa raiz
┃ find_patch_root(results_path="v1.0_vs_v1.1.diaphora")
┃ # 6. Detetar patches de segurança prováveis
┃ detect_security_patches(results_path="v1.0_vs_v1.1.diaphora")
┃ # 7. Gerar relatório completo
┃ summarize_patch(results_path="v1.0_vs_v1.1.diaphora")
Exemplo (Transcrição de Sessão ao Vivo)
Consulte examples/basic-session.md para uma transcrição passo a passo completa de uma sessão real do Diaphora MCP — desde a exportação de duas bases de dados IDB até à comparação de funções individuais. Também disponível em Russo.
Aqui está uma prévia do que o servidor retorna:
Entrada — comparar duas DLLs SQLite3 (2015 vs 2023):
{"idb1_path": "old.i64", "idb2_path": "new.i64", "use_decompiler": false}
Saída — resumo após exportação + diff:
{
"best_matches": 60,
"partial_matches": 993,
"multimatches": 52,
"unmatched_primary": 2647
}
A sessão percorre 6 chamadas de ferramentas MCP, mostrando o JSON de entrada/saída exato para cada passo, com o raciocínio do agente ao lado.
Investigar uma Única Base de Dados
┃ # Obter informação de exportação da base de dados
┃ get_export_info(db_path="app.sqlite")
┃ # Procurar funções
┃ search_export_db(db_path="app.sqlite", name_pattern="%crypt%", min_instructions=50)
┃ # Obter pseudocódigo
┃ get_function_pseudocode(db_path="app.sqlite", address="401000")