local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Integrates with GitHub for repository management, as the MCP server itself is hosted on GitHub and references GitHub resources.
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
: comprueba 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_strings(offset, count)
: enumera todas las cadenas en la base de datos (paginadas).search_strings(pattern, offset, count)
: busca cadenas que contengan el patrón dado (sin distinguir entre mayúsculas y minúsculas).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_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.
Prerrequisitos
- Python ( 3.11 o superior )
- Utilice
idapyswitch
para cambiar a la versión más nueva de Python
- Utilice
- IDA Pro (8.3 o superior, se recomienda 9)
- Cliente MCP compatible (elija el que prefiera)
Instalación
Instalar (o actualizar) el paquete IDA Pro MCP:
Configure los servidores MCP e instale el complemento IDA:
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.
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:
- Instalar uv globalmente:
- Windows:
pip install uv
- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows:
- Clonar este repositorio, para este ejemplo
C:\MCP\ida-pro-mcp
. - Navegue hasta la configuración de los servidores MCP de Cline/Roo Code (ver captura de pantalla).
- Haga clic en la pestaña Instalado .
- Haga clic en Configurar servidores MCP , lo que abrirá
cline_mcp_settings.json
. - Agregue el servidor
ida-pro-mcp
:
Para comprobar si la conexión funciona, puede realizar la siguiente llamada a la herramienta:
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:
- Copie ( no mueva )
src/ida_pro_mcp/mcp-plugin.py
en su carpeta de complementos (%appdata%\Hex-Rays\IDA Pro\plugins
en Windows). - 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:
- La instalación debe ser completamente automatizada.
- La arquitectura de otros complementos dificulta agregar nuevas funcionalidades rápidamente (demasiadas dependencias innecesarias).
- ¡Aprender nuevas tecnologías es divertido!
Si quieres revisarlos, aquí hay una lista (en el orden en que los descubrí):
- https://github.com/taida957789/ida-mcp-server-plugin (solo protocolo SSE, requiere instalar dependencias en IDAPython).
- https://github.com/fdrechsler/mcp-server-idapro (Servidor MCP en TypeScript, se requiere un exceso de código repetitivo para agregar nueva funcionalidad).
- https://github.com/MxIris-Reverse-Engineering/ida-mcp-server (protocolo de socket personalizado, repetitivo).
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í:
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:
Generar el registro de cambios de confirmaciones directas al main
: