Skip to main content
Glama

IDA Pro MCP

MIT License
2,280
  • Linux
  • Apple

IDA Pro MCP

Servidor MCP simple para permitir la inversión de vibración en IDA Pro.

https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0

Los binarios y el mensaje para el video están disponibles en el repositorio mcp-reversing-dataset .

Funcionalidad disponible:

  • check_connection() : verifica si el complemento IDA se está ejecutando.
  • get_metadata() : obtiene metadatos sobre el IDB actual.
  • get_function_by_name(name) : obtiene una función por su nombre.
  • get_function_by_address(address) : obtiene una función por su dirección.
  • get_current_address() : Obtiene la dirección actualmente seleccionada por el usuario.
  • get_current_function() : Obtiene la función actualmente seleccionada por el usuario.
  • convert_number(text, size) : Convierte un número (decimal, hexadecimal) a diferentes representaciones.
  • list_functions(offset, count) : enumera todas las funciones en la base de datos (paginadas).
  • list_globals_filter(offset, count, filter) : lista los globales coincidentes en la base de datos (paginados, filtrados).
  • list_globals(offset, count) : enumera todos los globales en la base de datos (paginados).
  • list_strings_filter(offset, count, filter) : lista de cadenas coincidentes en la base de datos (paginadas, filtradas).
  • list_strings(offset, count) : enumera todas las cadenas en la base de datos (paginadas).
  • decompile_function(address) : Descompila una función en la dirección dada.
  • disassemble_function(start_address) : Obtener el código de ensamblaje (dirección: instrucción; comentario) para una función.
  • get_xrefs_to(address) : obtiene todas las referencias cruzadas a la dirección dada.
  • get_xrefs_to_field(struct_name, field_name) : obtiene todas las referencias cruzadas a un campo de estructura nombrado (miembro).
  • get_entry_points() : obtiene todos los puntos de entrada en la base de datos.
  • set_comment(address, comment) : establece un comentario para una dirección determinada en el desensamblaje de la función y el pseudocódigo.
  • rename_local_variable(function_address, old_name, new_name) : cambia el nombre de una variable local en una función.
  • rename_global_variable(old_name, new_name) : cambia el nombre de una variable global.
  • set_global_variable_type(variable_name, new_type) : Establece el tipo de una variable global.
  • rename_function(function_address, new_name) : Cambiar el nombre de una función.
  • set_function_prototype(function_address, prototype) : Establece el prototipo de una función.
  • declare_c_type(c_declaration) : crea o actualiza un tipo local a partir de una declaración C.
  • set_local_variable_type(function_address, variable_name, new_type) : Establece el tipo de una variable local.

Funciones inseguras (se requiere el indicador --unsafe ):

  • dbg_get_call_stack() : obtiene la pila de llamadas actual.
  • dbg_get_registers() : Obtiene todos los registros y sus valores. Esta función solo está disponible durante la depuración.
  • dbg_run_to(address) : ejecuta el depurador en la dirección especificada.
  • dbg_exit_process() : Salir del depurador.
  • dbg_continue_process() : Continuar el depurador.
  • dbg_enable_breakpoint(address, enable) : habilita o deshabilita un punto de interrupción en la dirección especificada.
  • dbg_list_breakpoints() : enumera todos los puntos de interrupción en el programa.
  • dbg_set_breakpoint(address) : establece un punto de interrupción en la dirección especificada.
  • dbg_delete_breakpoint(address) : elimina un punto de interrupción en la dirección especificada.
  • dbg_start_process() : Inicia el depurador.

Prerrequisitos

Instalación

Instalar (o actualizar) el paquete IDA Pro MCP:

pip install --upgrade git+https://github.com/mrexodia/ida-pro-mcp

Configure los servidores MCP e instale el complemento IDA:

ida-pro-mcp --install

Importante : Asegúrese de reiniciar completamente IDA/Visual Studio Code/Claude para que la instalación surta efecto. Claude se ejecuta en segundo plano y debe cerrarlo desde el icono de la bandeja del sistema.

https://github.com/user-attachments/assets/65ed3373-a187-4dd5-a807-425dca1d8ee9

Ingeniería rápida

Los LLM son propensos a alucinaciones, por lo que es necesario ser específico con las indicaciones. Para la ingeniería inversa, la conversión entre enteros y bytes es especialmente problemática. A continuación, se muestra un ejemplo mínimo de indicación; no dude en iniciar una discusión o abrir un problema si obtiene buenos resultados con una indicación diferente:

Su tarea consiste en analizar un crackme en IDA Pro. Puede usar las herramientas MCP para recuperar información. En general, utilice la siguiente estrategia:

  • Inspeccione la descompilación y agregue comentarios con sus hallazgos.
  • Cambiar el nombre de las variables a nombres más sensatos
  • Cambie los tipos de variables y argumentos si es necesario (especialmente los tipos de puntero y matriz)
  • Cambiar los nombres de las funciones para que sean más descriptivos
  • Si se necesitan más detalles, desmonte la función y agregue comentarios con sus hallazgos.
  • NUNCA conviertas bases numéricas tú mismo. Usa la herramienta "convert_number" de MCP si es necesario.
  • No intentes forzar el problema, obtén cualquier solución únicamente del desensamblaje y de scripts simples de Python.
  • Crea un informe.md con tus hallazgos y los pasos seguidos al final
  • Cuando encuentre una solución, solicite al usuario que envíe sus comentarios con la contraseña que encontró.

Este mensaje fue solo el primer experimento. ¡Compártelo si encontraste formas de mejorar el resultado!

Consejos para mejorar la precisión del LLM

Los Modelos de Lenguaje Grandes (LLM) son herramientas potentes, pero a veces pueden presentar dificultades con cálculos matemáticos complejos o presentar alucinaciones (inventar datos). Asegúrese de indicarle al LLM que use el MCP " conver_number "; también podría necesitar "math-mcp" para ciertas operaciones.

Otro aspecto a tener en cuenta es que los LLM no funcionarán bien con código ofuscado. Antes de intentar usar un LLM para resolver el problema, revise el binario y dedique tiempo a eliminar (automáticamente) lo siguiente:

  • Cifrado de cadenas
  • Hashing de importación
  • Aplanamiento del flujo de control
  • Cifrado de código
  • Trucos anti-descompilación

También deberías usar una herramienta como Lumina o FLIRT para intentar resolver todo el código de la biblioteca de código abierto y el STL de C++; esto mejorará aún más la precisión.

Transporte SSE y MCP sin cabeza

Puede ejecutar un servidor SSE para conectarse a la interfaz de usuario de la siguiente manera:

uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse

Después de instalar idalib también puedes ejecutar un servidor SSE sin cabeza:

uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable

Nota : La función idalib fue aportada por Willi Ballenthin .

Instalación manual

Nota : Esta sección es para LLM y usuarios avanzados que necesitan instrucciones de instalación detalladas.

Instalación manual del servidor MCP (Código Cline/Roo)

Para instalar el servidor MCP usted mismo, siga estos pasos:

  1. Instalar uv globalmente:
    • Windows: pip install uv
    • Linux/Mac: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Clonar este repositorio, para este ejemplo C:\MCP\ida-pro-mcp .
  3. Navegue hasta la configuración de los servidores MCP de Cline/Roo Code (ver captura de pantalla).
  4. Haga clic en la pestaña Instalado .
  5. Haga clic en Configurar servidores MCP , lo que abrirá cline_mcp_settings.json .
  6. Agregue el servidor ida-pro-mcp :
{ "mcpServers": { "github.com/mrexodia/ida-pro-mcp": { "command": "uv", "args": [ "--directory", "c:\\MCP\\ida-pro-mcp", "run", "server.py", "--install-plugin" ], "timeout": 1800, "disabled": false } } }

Para comprobar si la conexión funciona, puede realizar la siguiente llamada a la herramienta:

<use_mcp_tool> <server_name>github.com/mrexodia/ida-pro-mcp</server_name> <tool_name>check_connection</tool_name> <arguments></arguments> </use_mcp_tool>

Instalación del complemento IDA

El complemento IDA Pro se instalará automáticamente al iniciar el servidor MCP. Si desactivó la opción --install-plugin , siga estos pasos:

  1. Copie ( no mueva ) src/ida_pro_mcp/mcp-plugin.py en su carpeta de complementos ( %appdata%\Hex-Rays\IDA Pro\plugins en Windows).
  2. Abra un IDB y haga clic en Edit -> Plugins -> MCP para iniciar el servidor.

Comparación con otros servidores MCP

Hay algunos servidores IDA Pro MCP circulando, pero creé el mío por algunas razones:

  1. La instalación debe ser completamente automatizada.
  2. La arquitectura de otros complementos dificulta agregar nuevas funcionalidades rápidamente (demasiadas dependencias innecesarias).
  3. ¡Aprender nuevas tecnologías es divertido!

Si quieres revisarlos, aquí hay una lista (en el orden en que los descubrí):

No dudes en abrir un PR para agregar tu servidor IDA Pro MCP aquí.

Desarrollo

Añadir nuevas funciones es un proceso súper sencillo y optimizado. Solo tienes que añadir una nueva función @jsonrpc a mcp-plugin.py y tu función estará disponible en el servidor MCP sin necesidad de texto repetitivo adicional. A continuación, un vídeo donde añadí la función get_metadata en menos de 2 minutos (incluidas las pruebas):

https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64

Para probar el servidor MCP en sí:

uv run mcp dev src/ida_pro_mcp/server.py

Esto abrirá una interfaz web en http://localhost:5173 y le permitirá interactuar con las herramientas MCP para realizar pruebas.

Para realizar pruebas, creo un enlace simbólico al complemento IDA y luego envío una solicitud JSON-RPC directamente a http://localhost:13337/mcp . Después de habilitar los enlaces simbólicos, puede ejecutar el siguiente comando:

uv run ida-pro-mcp --install

Generar el registro de cambios de confirmaciones directas al main :

git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"

Related MCP Servers

  • A
    security
    A
    license
    A
    quality
    AiDD MCP Server provides a secure interface for AI agents to perform file system operations and code analysis, enhancing AI-assisted development workflows across multiple programming languages.
    Last updated -
    29
    62
    Python
    Apache 2.0
    • Apple
    • Linux
  • A
    security
    A
    license
    A
    quality
    A Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.
    Last updated -
    19
    443
    Python
    MIT License
    • Apple
  • A
    security
    A
    license
    A
    quality
    A Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.
    Last updated -
    8
    14
    Python
    MIT License
    • Linux
    • Apple
  • A
    security
    A
    license
    A
    quality
    MCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.
    Last updated -
    24
    28
    Python
    MIT License

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mrexodia/ida-pro-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server