
Servidor MCP para diffing binario automatizado.
Diaphora MCP es un servidor MCP (Model Context Protocol) para el diffing automatizado de binarios. Conecta Diaphora (el motor de diffing) e IDA Pro (el desensamblador) mediante el protocolo MCP, permitiendo que agentes de IA (como Claude Code) realicen comparaciones de archivos binarios, encuentren parches de seguridad y analicen cambios.
.i64 / .idb analizadas al formato SQLite de Diaphora (mediante el modo sin interfaz de idat.exe)idat.exe)git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .
El paquete intenta encontrar automáticamente IDA Pro y Diaphora en las ubicaciones de instalación estándar. Si no los encuentra, puede configurar las siguientes variables de entorno:
| Variable | Descripción | Ejemplo |
|---|---|---|
IDAT_PATH | Ruta completa a idat.exe | C:\Program Files\IDA Pro 9.3\idat.exe |
DIAPHORA_DIR | Carpeta que contiene diaphora.py | C:\Program Files\IDA Pro 9.3\plugins\diaphora-3.4.1 |
DIAPHORA_OUTPUT_ROOT | Directorio raíz permitido para nuevos archivos de exportación | D:\\diaphora-outputs |
DIAPHORA_PYTHON | Intérprete de Python para el diff | /usr/bin/python3 (por defecto usa sys.executable) |
Para Claude Code, puede especificarlas en ~/.claude.json (o el archivo de configuración correspondiente de su 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 binarios muy grandes (>100 MB), asegúrese de que el
timeoutsea al menos 7200 (2 horas).
Codex normalmente usa dos servidores MCP complementarios:
diaphora-mcp — este proyecto: exportación, diff con Diaphora y análisis de resultados;ida-pro-mcp — el servidor de inspección IDA upstream para idb_open, descompilación y análisis a nivel de dirección.idalib-mcp es el backend sin interfaz de ida-pro-mcp, no un servidor Diaphora separado. Después de instalarlo, reinicie Codex:
uv run ida-pro-mcp --install codex --transport streamable-http --scope global --ida-rpc http://127.0.0.1:8745/mcp
Para este proyecto, una configuración stdio es suficiente:
[mcp_servers.diaphora-mcp]
command = "python"
args = ["D:\\path\\to\\diaphora-mcp\\diaphora_mcp_server.py"]
startup_timeout_sec = 120
IDA Pro debe analizar primero los binarios (creando archivos .i64 o .idb). Después de eso:
┃ export_idb_to_diaphora(idb_path="old_version.i64")
┃ export_idb_to_diaphora(idb_path="new_version.i64")
O ejecute el pipeline completo en un solo comando:
┃ batch_export_and_diff(idb1="old.i64", idb2="new.i64")
No pase .i64 directamente a las herramientas de resultados: es una base de datos de IDA, no SQLite. Expórtela primero.
┃ # 1. Pipeline completo: exportar dos .i64 → diff → informe resumen
┃ batch_export_and_diff(idb1="v1.0.i64", idb2="v1.1.i64")
┃ # 2. Si las bases de datos ya están exportadas
┃ diff_diaphora_dbs(db1="v1.0.sqlite", db2="v1.1.sqlite")
┃ # 3. Análisis de seguridad de los resultados del diff
┃ analyze_diff_results(results_path="v1.0_vs_v1.1.diaphora")
┃ # 4. Clasificación por importancia de los cambios
┃ rank_changes(results_path="v1.0_vs_v1.1.diaphora", top_n=20)
┃ # 5. Encontrar cambios de causa raíz
┃ find_patch_root(results_path="v1.0_vs_v1.1.diaphora")
┃ # 6. Detectar probables parches de seguridad
┃ detect_security_patches(results_path="v1.0_vs_v1.1.diaphora")
┃ # 7. Generar informe completo
┃ summarize_patch(results_path="v1.0_vs_v1.1.diaphora")
Consulte examples/basic-session.md para una transcripción completa paso a paso de una sesión real de Diaphora MCP, desde la exportación de dos bases de datos IDB hasta la comparación de funciones individuales. También disponible en ruso.
Aquí hay un adelanto de lo que devuelve el servidor:
Entrada — comparar dos DLLs de SQLite3 (2015 vs 2023):
{"idb1_path": "old.i64", "idb2_path": "new.i64", "use_decompiler": false}
Salida — resumen después de exportar + diff:
{
"best_matches": 60,
"partial_matches": 993,
"multimatches": 52,
"unmatched_primary": 2647
}
La sesión recorre 6 llamadas a herramientas MCP, mostrando el JSON exacto de entrada/salida para cada paso, junto con el razonamiento del agente.
┃ # Obtener información de exportación de la base de datos
┃ get_export_info(db_path="app.sqlite")
┃ # Buscar funciones
┃ search_export_db(db_path="app.sqlite", name_pattern="%crypt%", min_instructions=50)
┃ # Recuperar pseudocódigo
┃ get_function_pseudocode(db_path="app.sqlite", address="401000")