Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
ida-pro-mcp — Asistente de ingeniería inversa impulsado por IA que conecta IDA Pro con modelos de lenguaje a través de MCP. | Kitploit
Herramientas/GitHubGitHub/mrexodia/ida-pro-mcp
Análisis EstáticoAnálisis Dinámico (Sandboxing)Análisis de CódigoExplotaciónIngeniería InversaDepuradoresAnálisis de MalwareAnálisis de BinariosAprendizaje y EducaciónReversing Asistido por IAAnálisis de Firmware
11.3k1.3khace 4 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
mrexodia/ida-pro-mcp

ida-pro-mcp

Asistente de ingeniería inversa impulsado por IA que conecta IDA Pro con modelos de lenguaje a través de MCP.

Ver RepositorioSitio web

IDA Pro MCP

Servidor MCP sencillo para permitir el vibe reversing en IDA Pro.

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

Los binarios y el prompt del vídeo están disponibles en el repositorio mcp-reversing-dataset.

Requisitos previos

  • Python (3.11 o superior)
    • Usa idapyswitch para cambiar a la versión más reciente de Python
  • IDA Pro (8.3 o superior, se recomienda 9), IDA Free no es compatible
  • Cliente MCP compatible (elige el que prefieras)
    • Amazon Q Developer CLI
    • Augment Code
    • Claude
    • Claude Code
    • Cline
    • Codex
    • Copilot CLI
    • Crush
    • Cursor
    • Gemini CLI
    • Kilo Code
    • Kiro
    • LM Studio
    • Opencode
    • Qodo Gen
    • Qwen Coder
    • Roo Code
    • Trae
    • VS Code
    • VS Code Insiders
    • Warp
    • Windsurf
    • Zed
    • Kimi Code
    • Otros clientes MCP: Ejecuta ida-pro-mcp --config para obtener la configuración JSON de tu cliente.

Nota: Esto requiere tener idalib activado globalmente y uv instalado:

root@kitploit:~
# windows
uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"

Instalación (Claude Code)

Para instalar el IDA Pro MCP más reciente en Claude Code:

root@kitploit:~
claude plugin marketplace add mrexodia/claude-marketplace
claude plugin uninstall ida-pro-mcp@mrexodia
claude plugin install ida-pro-mcp@mrexodia

Instalación (Codex)

Para instalar el IDA Pro MCP más reciente en Codex:

root@kitploit:~
codex plugin marketplace add mrexodia/codex-marketplace
codex plugin remove ida-pro-mcp@mrexodia
codex plugin add ida-pro-mcp@mrexodia

Instalación (Kimi Code)

Para instalar el IDA Pro MCP más reciente en Kimi Code, ejecuta este comando de barra en el chat:

root@kitploit:~
/plugins install https://github.com/mrexodia/ida-pro-mcp/tree/main
/reload

Esto instala el servidor MCP idalib y la habilidad idapython. Los plugins se copian a $KIMI_CODE_HOME/plugins/managed/, por lo que uv debe estar en tu PATH. La primera sesión después de la instalación es más lenta, porque uv resuelve las dependencias antes de que el servidor responda.

Instalación (GUI)

Nota: el plugin MCP ya no se recomienda y finalmente quedará obsoleto. Usa idalib-mcp en su lugar.

Si quieres configurar el servidor MCP manualmente desde la GUI de IDA:

root@kitploit:~
pip uninstall ida-pro-mcp
pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip

Configura los servidores MCP e instala el plugin de IDA:

root@kitploit:~
ida-pro-mcp --install

Importante: Asegúrate de reiniciar completamente IDA y tu cliente MCP para que la instalación surta efecto. Algunos clientes (como Claude) se ejecutan en segundo plano y deben cerrarse desde el icono de la bandeja.

Ingeniería de prompts

Los LLM son propensos a las alucinaciones y debes ser específico con tus prompts. En 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 prompt; no dudes en iniciar una discusión o abrir un issue si obtienes buenos resultados con otro prompt:

root@kitploit:~
Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:

- Inspect the decompilation and add comments with your findings
- Rename variables to more sensible names
- Change the variable and argument types if necessary (especially pointer and array types)
- Change function names to be more descriptive
- If more details are necessary, disassemble the function and add comments with your findings
- NEVER convert number bases yourself. Use the `int_convert` MCP tool if needed!
- Do not attempt brute forcing, derive any solutions purely from the disassembly and simple python scripts
- Create a report.md with your findings and steps taken at the end
- When you find a solution, prompt to user for feedback with the password you found

Este prompt fue solo el primer experimento; comparte si encontraste formas de mejorar el resultado.

Otro prompt de @can1357:

root@kitploit:~
Your task is to create a complete and comprehensive reverse engineering analysis. Reference AGENTS.md to understand the project goals and ensure the analysis serves our purposes.

Use the following systematic methodology:

1. **Decompilation Analysis**
   - Thoroughly inspect the decompiler output
   - Add detailed comments documenting your findings
   - Focus on understanding the actual functionality and purpose of each component (do not rely on old, incorrect comments)

2. **Improve Readability in the Database**
   - Rename variables to sensible, descriptive names
   - Correct variable and argument types where necessary (especially pointers and array types)
   - Update function names to be descriptive of their actual purpose

3. **Deep Dive When Needed**
   - If more details are necessary, examine the disassembly and add comments with findings
   - Document any low-level behaviors that aren't clear from the decompilation alone
   - Use sub-agents to perform detailed analysis

4. **Important Constraints**
   - NEVER convert number bases yourself - use the int_convert MCP tool if needed
   - Use MCP tools to retrieve information as necessary
   - Derive all conclusions from actual analysis, not assumptions

5. **Documentation**
   - Produce comprehensive RE/*.md files with your findings
   - Document the steps taken and methodology used
   - When asked by the user, ensure accuracy over previous analysis file
   - Organize findings in a way that serves the project goals outlined in AGENTS.md or CLAUDE.md

Transmisión en vivo que analiza los prompts y muestra análisis de malware del mundo real:

Consejos para mejorar la precisión de los LLM

Los grandes modelos de lenguaje (LLM) son herramientas potentes, pero a veces pueden tener dificultades con cálculos matemáticos complejos o mostrar "alucinaciones" (inventar hechos). Asegúrate de indicar al LLM que use la herramienta MCP int_convert y es posible que también necesites math-mcp para ciertas operaciones.

Otra cosa a tener en cuenta es que los LLM no se desempeñan bien con código ofuscado. Antes de intentar usar un LLM para resolver el problema, examina el binario y dedica tiempo a eliminar (automáticamente) los siguientes elementos:

  • Cifrado de cadenas
  • Hash de importaciones
  • 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 librerías de código abierto y la STL de C++; esto mejorará aún más la precisión.

Transportes y MCP headless

Puedes ejecutar un servidor SSE para conectarte a la interfaz de usuario de esta manera:

root@kitploit:~
uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse

Después de instalar idalib, también puedes ejecutar un servidor MCP headless. Puedes iniciarlo con un binario inicial:

root@kitploit:~
uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable

O iniciarlo sin binario y abrir archivos arbitrarios más tarde con idb_open(...):

root@kitploit:~
uv run idalib-mcp --host 127.0.0.1 --port 8745

Para clientes basados en stdio, usa:

root@kitploit:~
uv run idalib-mcp --stdio

Los workers de base de datos son persistentes: cada uno se ejecuta como un proceso separado que sobrevive al supervisor que lo creó. Cuando un nuevo supervisor (por stdio o HTTP) llama a idb_open para un binario que ya está abierto por un worker en este host, el supervisor adopta ese worker de forma transparente; no hay un modo "compartido" separado que activar. Los workers se cierran solos cuando no reciben ninguna solicitud durante un intervalo de inactividad.

Nota: La funcionalidad idalib fue aportada por Willi Ballenthin.

Modelo de sesión headless de idalib

idalib-mcp es un supervisor que mantiene cada base de datos abierta en su propio proceso worker de idalib. Los workers se registran en un directorio de descubrimiento local del host y sobreviven al supervisor que los creó; cualquier supervisor posterior que quiera la misma ruta adopta al worker en ejecución. Un worker se cierra solo cuando no recibe ninguna solicitud durante su TTL de inactividad (1 hora por defecto). Llama a idb_close para liberar un worker de inmediato (liberando un lugar hacia --max-workers); las instancias de GUI/worker adoptadas se separan en lugar de terminar.

idb_open selecciona el backend mediante su parámetro mode:

  • prefer_headless (predeterminado): crea un worker de idalib (o adopta uno que ya tenga el archivo abierto).
  • force_headless: igual, pero nunca adopta una GUI en ejecución, aunque tenga el archivo abierto.
  • prefer_gui: adopta una GUI en ejecución para el archivo; de lo contrario, crea un worker de idalib.
  • force_gui: adopta una GUI en ejecución para el archivo; de lo contrario, inicia un nuevo proceso de GUI de IDA.

Cada llamada a herramienta debe incluir un argumento database explícito. No existe una "base de datos actual" implícita: los llamadores indican la sesión sobre la que quieren operar.

root@kitploit:~
uv run idalib-mcp --stdio --max-workers 4

Flujo típico:

root@kitploit:~
idb_open("/path/to/binary_a.exe", preferred_session_id="binary_a")
idb_open("/path/to/library.dll", preferred_session_id="library")

decompile("main", database="binary_a")
xrefs_to("ImportantExport", database="library")

database debe ser el ID de sesión devuelto por idb_open (o mostrado en idb_list); no se aceptan nombres de archivo ni rutas.

Herramientas de gestión

  • idb_open(input_path, mode="prefer_headless", run_auto_analysis=True, build_caches=True, init_hexrays=True, preferred_session_id=""): Abre un binario, pone en marcha los subsistemas (caché de cadenas, Hex-Rays) y devuelve su ID de sesión. Si un worker o una GUI para esta ruta ya se está ejecutando en el host, se adopta esa instancia y se ignora preferred_session_id.
  • idb_list(): Lista las sesiones abiertas y las instancias de GUI de IDA en ejecución. Cada entrada tiene adopted (True si este supervisor la gestiona, False para GUIs/workers descubiertos pero aún no abiertos mediante idb_open), backend (worker o gui), is_active y los IDs de proceso.
  • idb_close(database, save=True): Guarda (opcionalmente), anula el registro de la sesión y termina el worker que posee, liberando un lugar hacia --max-workers. Las instancias de GUI/worker adoptadas se separan, no se terminan.

Controles del worker:

  • --max-workers N: máximo de workers de base de datos simultáneos (0 = ilimitado, predeterminado 4).
  • IDA_MCP_MAX_WORKERS: valor de entorno predeterminado para --max-workers.

Recursos MCP

Los recursos representan estado navegable (datos de solo lectura) siguiendo la filosofía de MCP.

Estado principal del IDB:

  • ida://idb/metadata - Información del archivo IDB (ruta, arquitectura, base, tamaño, hashes)
  • ida://idb/segments - Segmentos de memoria con permisos
  • ida://idb/entrypoints - Puntos de entrada (main, callbacks TLS, etc.)

Estado de la interfaz:

  • ida://cursor - Posición actual del cursor y función
  • ida://selection - Rango de selección actual

Información de tipos:

  • ida://types - Todos los tipos locales
  • ida://structs - Todas las estructuras/uniones
  • ida://struct/{name} - Definición de estructura con campos

Búsquedas:

  • ida://import/{name} - Detalles de la importación por nombre
  • ida://export/{name} - Detalles de la exportación por nombre
  • ida://xrefs/from/{addr} - Referencias cruzadas desde una dirección

Funciones principales

  • lookup_funcs(queries): Obtiene la(s) función(es) por dirección o nombre (detección automática, acepta lista o cadena separada por comas).
  • int_convert(inputs): Convierte números a diferentes formatos (decimal, hexadecimal, bytes, ASCII, binario).
  • list_funcs(queries): Lista funciones (paginadas y filtradas).
  • list_globals(queries): Lista variables globales (paginadas y filtradas).
  • imports(offset, count): Lista todos los símbolos importados con nombres de módulo (paginado).
  • decompile(addr): Descompila la función en la dirección indicada.
  • disasm(addr): Desensambla la función con todos los detalles (argumentos, marco de pila, etc.).
  • xrefs_to(addrs): Obtiene todas las referencias cruzadas a la(s) dirección(es).
  • xrefs_to_field(queries): Obtiene referencias cruzadas a campo(s) específico(s) de estructura.
  • callees(addrs): Obtiene las funciones llamadas por la(s) función(es) en la(s) dirección(es).

Operaciones de modificación

  • add_bookmark(addr, name, prefix): Añade o reemplaza el marcador de IDA en una dirección; establece prefix="" para no usar prefijo.
  • set_comments(items): Establece comentarios en la(s) dirección(es) tanto en la vista de desensamblado como en la del descompilador.
  • patch_asm(items): Parchea instrucciones de ensamblador en la(s) dirección(es).
  • declare_type(decls): Declara tipo(s) C en la biblioteca de tipos local.
  • define_func(items): Define función(es) en la(s) dirección(es). Opcionalmente especifica end para límites explícitos.
  • define_code(items): Convierte bytes en instrucción(es) de código en la(s) dirección(es).
  • undefine(items): Indefine elemento(s) en la(s) dirección(es), convirtiéndolos de nuevo a bytes sin procesar. Opcionalmente especifica end o size.

Operaciones de lectura de memoria

  • get_bytes(addrs): Lee bytes sin procesar en la(s) dirección(es).
  • get_int(queries): Lee valores enteros usando ty (i8/u64/i16le/i16be/etc.).
  • get_string(addrs): Lee cadena(s) terminada(s) en nulo.
  • get_global_value(queries): Lee el/los valor(es) de variables globales por dirección o nombre (detección automática, valores en tiempo de compilación).

Operaciones de marco de pila

  • stack_frame(addrs): Obtiene las variables del marco de pila de la(s) función(es).
  • declare_stack(items): Crea variable(s) de pila en el/los desplazamiento(s) especificado(s).
  • delete_stack(items): Elimina variable(s) de pila por nombre.

Operaciones de estructuras

  • read_struct(queries): Lee valores de campos de estructura en dirección(es) específica(s).
  • search_structs(filter): Busca estructuras por patrón de nombre.

Operaciones del depurador (extensión)

Las herramientas del depurador están ocultas por defecto. Actívalas con el parámetro de consulta ?ext=dbg:

root@kitploit:~
http://127.0.0.1:13337/mcp?ext=dbg

Control:

  • dbg_start(): Inicia el proceso del depurador.
  • dbg_exit(): Sale del proceso del depurador.
  • dbg_continue(): Continúa la ejecución.
  • dbg_run_to(addr): Ejecuta hasta la dirección.
  • dbg_step_into(): Ejecuta paso a paso (entrar en la instrucción).
  • dbg_step_over(): Ejecuta paso a paso (saltar sobre la instrucción).

Puntos de interrupción:

  • dbg_bps(): Lista todos los puntos de interrupción.
  • dbg_add_bp(addrs): Añade punto(s) de interrupción.
  • dbg_delete_bp(addrs): Elimina punto(s) de interrupción.
  • dbg_toggle_bp(items): Activa/desactiva punto(s) de interrupción.

Registros:

  • dbg_regs(): Todos los registros del hilo actual.
  • dbg_regs_all(): Todos los registros de todos los hilos.
  • dbg_regs_remote(tids): Todos los registros de hilo(s) específico(s).
  • dbg_gpregs(): Registros de propósito general del hilo actual.
  • dbg_gpregs_remote(tids): Registros de propósito general de hilo(s) específico(s).
  • dbg_regs_named(names): Registros con nombre del hilo actual.
  • dbg_regs_named_remote(tid, names): Registros con nombre de un hilo específico.

Pila y memoria:

  • dbg_stacktrace(): Pila de llamadas con información de módulo/símbolo.
  • dbg_read(regions): Lee memoria del proceso depurado.
  • dbg_write(regions): Escribe memoria en el proceso depurado.

Operaciones avanzadas de análisis

  • py_eval(code): Ejecuta código Python arbitrario en el contexto de IDA (devuelve un dict con result/stdout/stderr, admite evaluación estilo Jupyter).
  • analyze_funcs(addrs): Análisis exhaustivo de funciones (descompilación, ensamblador, referencias cruzadas, funciones llamadas, llamadores, cadenas, constantes, bloques básicos).

Coincidencia de patrones y búsqueda

  • find_regex(queries): Busca cadenas con expresiones regulares sin distinción de mayúsculas/minúsculas (paginado).
  • find_bytes(patterns, limit=1000, offset=0): Encuentra patrón(es) de bytes en el binario (p. ej., "48 8B ?? ??"). Límite máximo: 10000.
  • find_insns(sequences, limit=1000, offset=0): Encuentra secuencia(s) de instrucciones en el código. Límite máximo: 10000.
  • find(type, targets, limit=1000, offset=0): Búsqueda avanzada (valores inmediatos, cadenas, referencias a datos/código). Límite máximo: 10000.

Análisis de flujo de control

  • basic_blocks(addrs): Obtiene bloques básicos con sucesores y predecesores.

Operaciones de tipos

  • set_type(edits): Aplica tipo(s) a funciones, variables globales, locales o de pila.
  • infer_types(addrs): Infiere tipos en la(s) dirección(es) usando Hex-Rays o heurísticas.

Operaciones de exportación

  • export_funcs(addrs, format): Exporta función(es) en el formato especificado (json, c_header o prototypes).

Operaciones de grafo

  • callgraph(roots, max_depth): Construye un grafo de llamadas a partir de la(s) función(es) raíz con profundidad configurable.

Operaciones por lotes

  • rename(batch): Operación unificada de renombrado por lotes para funciones, variables globales, locales y de pila (acepta un dict con claves opcionales func, data, local, stack).
  • patch(patches): Parchea múltiples secuencias de bytes a la vez.
  • put_int(items): Escribe valores enteros usando ty (i8/u64/i16le/i16be/etc.).

Características clave:

  • API con seguridad de tipos: todas las funciones usan parámetros fuertemente tipados con esquemas TypedDict para un mejor soporte de IDE y salidas estructuradas de LLM
  • Diseño por lotes primero: la mayoría de las operaciones aceptan tanto elementos individuales como listas
  • Manejo de errores consistente: todas las operaciones por lotes devuelven [{..., error: null|string}, ...]
  • Paginación basada en cursor: las funciones de búsqueda devuelven cursor: {next: offset} o {done: true} (límite predeterminado: 1000, máximo impuesto: 10000 para evitar desbordamiento de tokens)
  • Rendimiento: las cadenas se almacenan en caché con invalidación basada en MD5 para evitar llamadas repetidas a build_strlist en proyectos grandes

Desarrollo

Añadir nuevas funciones es un proceso muy fácil y simplificado. Solo tienes que añadir una nueva función @tool a los archivos de API modulares en src/ida_pro_mcp/ida_mcp/api_*.py y tu función estará disponible en el servidor MCP sin ningún boilerplate adicional. A continuación hay un vídeo en el que añado la función get_metadata en menos de 2 minutos (incluyendo las pruebas):

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

Para probar el propio servidor MCP:

root@kitploit:~
npx -y @modelcontextprotocol/inspector

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

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

root@kitploit:~
uv run ida-pro-mcp --install

Genera el changelog de los commits directos a main:

root@kitploit:~
git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"
Descargar herramienta
  • idb_save(session_id, path=""): Guarda el IDB de una sesión en disco. Se reenvía como una herramienta de worker normal (con database=<id> inyectado): la misma firma en ambos backends.
  • Salud por base de datos: llama a server_health(database=<id>) (reenviado). idb_list() informa de is_active mediante la sonda TCP/RPC del supervisor.