IDA Pro
Interactúa con IDA Pro para tareas de ingeniería inversa y análisis binario.
Documentación
Servidor MCP de IDA Pro
Un servidor de Model Context Protocol (MCP) que permite a los asistentes de IA interactuar con IDA Pro para tareas de ingeniería inversa y análisis de binarios.
Resumen
Este proyecto proporciona un puente entre los asistentes de IA e IDA Pro, un popular desensamblador y depurador utilizado para la ingeniería inversa de software. Consta de tres componentes principales:
- Plugin de Control Remoto de IDA Pro (
ida_remote_server.py): Un plugin de IDA Pro que crea un servidor HTTP para controlar remotamente las funciones de IDA Pro. - Cliente Remoto de IDA (
idaremoteclient.ts): Un cliente TypeScript para interactuar con el Servidor de Control Remoto de IDA Pro. - Servidor MCP (
index.ts): Un servidor de Model Context Protocol que expone la funcionalidad de IDA Pro a los asistentes de IA.
Características
- Ejecutar scripts de Python en IDA Pro desde asistentes de IA
- Recuperar información sobre binarios:
- Cadenas
- Importaciones
- Exportaciones
- Funciones
- Capacidades avanzadas de análisis de binarios:
- Buscar valores inmediatos en instrucciones
- Buscar cadenas de texto en el binario
- Buscar secuencias de bytes específicas
- Obtener desensamblado para rangos de direcciones
- Automatizar operaciones de IDA Pro a través de una interfaz estandarizada
- Comunicación segura entre componentes
Requisitos previos
- IDA Pro 8.3 o posterior
- Node.js 18 o posterior
- TypeScript
Ejemplo de uso de ida_remote_server.py
curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}
Ejemplo de uso del Servidor MCP

Instalación
1. Instalar el Plugin de Control Remoto de IDA Pro
-
Copie
ida_remote_server.pya su directorio de plugins de IDA Pro:- Windows:
%PROGRAMFILES%\IDA Pro\plugins - macOS:
/Applications/IDA Pro.app/Contents/MacOS/plugins - Linux:
/opt/idapro/plugins
- Windows:
-
Inicie IDA Pro y abra un archivo binario.
-
El plugin iniciará automáticamente un servidor HTTP en
127.0.0.1:9045.
2. Instalar el Servidor MCP
-
Clone este repositorio:
git clone <repository-url> cd ida-server -
Instale las dependencias:
npm install -
Compile el proyecto:
npm run build -
Configure el servidor MCP en el archivo de configuración MCP de su asistente de IA:
{ "mcpServers": { "ida-pro": { "command": "node", "args": ["path/to/ida-server/dist/index.js"], "env": {} } } }
Uso
Una vez instalado y configurado, el servidor MCP proporciona la siguiente herramienta a los asistentes de IA:
run_ida_command
Ejecuta un script de Python de IDA Pro.
Parámetros:
scriptPath(obligatorio): Ruta absoluta al archivo de script a ejecutaroutputPath(opcional): Ruta absoluta para guardar la salida del script
Ejemplo:
# Example IDA Pro script (save as /path/to/script.py)
import idautils
# Count functions
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")
# Get the first 5 function names
functions = list(idautils.Functions())[:5]
for func_ea in functions:
print(f"Function: {ida_name.get_ea_name(func_ea)} at {hex(func_ea)}")
# Return data
return_value = function_count
El asistente de IA puede entonces usar este script con:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
<arguments>
{
"scriptPath": "/path/to/script.py"
}
</arguments>
</use_mcp_tool>
search_immediate_value
Busca valores inmediatos en las instrucciones del binario.
Parámetros:
value(obligatorio): Valor a buscar (número o cadena)radix(opcional): Base para la conversión de números (predeterminado: 16)startAddress(opcional): Dirección de inicio para la búsquedaendAddress(opcional): Dirección de fin para la búsqueda
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
<arguments>
{
"value": "42",
"radix": 10
}
</arguments>
</use_mcp_tool>
search_text
Busca cadenas de texto en el binario.
Parámetros:
text(obligatorio): Texto a buscarcaseSensitive(opcional): Si la búsqueda distingue entre mayúsculas y minúsculas (predeterminado: falso)startAddress(opcional): Dirección de inicio para la búsquedaendAddress(opcional): Dirección de fin para la búsqueda
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
<arguments>
{
"text": "password",
"caseSensitive": false
}
</arguments>
</use_mcp_tool>
search_byte_sequence
Busca una secuencia de bytes específica en el binario.
Parámetros:
bytes(obligatorio): Secuencia de bytes a buscar (por ejemplo, "90 90 90" para tres NOP)startAddress(opcional): Dirección de inicio para la búsquedaendAddress(opcional): Dirección de fin para la búsqueda
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
<arguments>
{
"bytes": "90 90 90"
}
</arguments>
</use_mcp_tool>
get_disassembly
Obtiene el desensamblado para un rango de direcciones.
Parámetros:
startAddress(obligatorio): Dirección de inicio para el desensambladoendAddress(opcional): Dirección de fin para el desensambladocount(opcional): Número de instrucciones a desensamblar
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
<arguments>
{
"startAddress": "0x401000",
"count": 10
}
</arguments>
</use_mcp_tool>
get_functions
Obtiene la lista de funciones del binario.
Parámetros:
- Ninguno requerido
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_exports
Obtiene la lista de exportaciones del binario.
Parámetros:
- Ninguno requerido
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_strings
Obtiene la lista de cadenas del binario.
Parámetros:
- Ninguno requerido
Ejemplo:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
API de Control Remoto de IDA Pro
El Plugin de Control Remoto de IDA Pro expone los siguientes endpoints HTTP:
GET /api/info: Obtener información del pluginGET /api/strings: Obtener cadenas del binarioGET /api/exports: Obtener exportaciones del binarioGET /api/imports: Obtener importaciones del binarioGET /api/functions: Obtener lista de funcionesGET /api/search/immediate: Buscar valores inmediatos en instruccionesGET /api/search/text: Buscar texto en el binarioGET /api/search/bytes: Buscar secuencias de bytes en el binarioGET /api/disassembly: Obtener desensamblado para un rango de direccionesPOST /api/execute: Ejecutar script de Python (JSON/Formulario)POST /api/executebypath: Ejecutar script de Python desde una ruta de archivoPOST /api/executebody: Ejecutar script de Python desde el cuerpo sin procesar
Consideraciones de Seguridad
Por defecto, el Plugin de Control Remoto de IDA Pro solo escucha en 127.0.0.1 (localhost) por razones de seguridad. Esto evita el acceso remoto a su instancia de IDA Pro.
Si necesita permitir el acceso remoto, puede modificar la variable DEFAULT_HOST en ida_remote_server.py, pero tenga en cuenta las implicaciones de seguridad.
Desarrollo
Compilación desde el código fuente
npm run build
Ejecución de pruebas
npm test
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulte el archivo LICENSE para obtener más detalles.
Autor
Florian Drechsler (@fdrechsler) fd@fdrechsler.com