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.

IDA Pro Server MCP server

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:

  1. 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.
  2. Cliente Remoto de IDA (idaremoteclient.ts): Un cliente TypeScript para interactuar con el Servidor de Control Remoto de IDA Pro.
  3. 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

Roo Output

Instalación

1. Instalar el Plugin de Control Remoto de IDA Pro

  1. Copie ida_remote_server.py a su directorio de plugins de IDA Pro:

    • Windows: %PROGRAMFILES%\IDA Pro\plugins
    • macOS: /Applications/IDA Pro.app/Contents/MacOS/plugins
    • Linux: /opt/idapro/plugins
  2. Inicie IDA Pro y abra un archivo binario.

  3. El plugin iniciará automáticamente un servidor HTTP en 127.0.0.1:9045.

2. Instalar el Servidor MCP

  1. Clone este repositorio:

    git clone <repository-url>
    cd ida-server
    
  2. Instale las dependencias:

    npm install
    
  3. Compile el proyecto:

    npm run build
    
  4. 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 ejecutar
  • outputPath (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úsqueda
  • endAddress (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 buscar
  • caseSensitive (opcional): Si la búsqueda distingue entre mayúsculas y minúsculas (predeterminado: falso)
  • startAddress (opcional): Dirección de inicio para la búsqueda
  • endAddress (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úsqueda
  • endAddress (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 desensamblado
  • endAddress (opcional): Dirección de fin para el desensamblado
  • count (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 plugin
  • GET /api/strings: Obtener cadenas del binario
  • GET /api/exports: Obtener exportaciones del binario
  • GET /api/imports: Obtener importaciones del binario
  • GET /api/functions: Obtener lista de funciones
  • GET /api/search/immediate: Buscar valores inmediatos en instrucciones
  • GET /api/search/text: Buscar texto en el binario
  • GET /api/search/bytes: Buscar secuencias de bytes en el binario
  • GET /api/disassembly: Obtener desensamblado para un rango de direcciones
  • POST /api/execute: Ejecutar script de Python (JSON/Formulario)
  • POST /api/executebypath: Ejecutar script de Python desde una ruta de archivo
  • POST /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