YouMind
Iniciar sesión

Cómo hacer ingeniería inversa de cualquier cosa con Opus 5.5 (Curso completo)

@0xMovez
INGLÉS12 oct 2026
171K
271
38
8
557

TL;DR

Esta guía detalla un flujo de trabajo de 11 pasos para usar Claude Opus 5.5 y el conjunto de herramientas REA para la ingeniería inversa de binarios. Cubre la instalación, el análisis, el manejo de ofuscación y la realización de reconstrucciones legales en sala limpia.

La mayoría de la gente que intenta hacer ingeniería inversa de un binario lo abre en un editor hexadecimal, se pasa veinte minutos haciendo scroll y se rinde.

No saben qué herramienta carga el archivo. No saben qué prompt extrae la lógica. No saben cómo convertir un muro de código ensamblador en algo que realmente puedan reconstruir.

Este curso de 11 pasos convertirá a Claude Opus 5.5 en una máquina capaz de transformar cualquier cosa en código abierto.

Sigue mi Substack para recibir información fresca sobre IA:

movez.substack.com

La ingeniería inversa no consiste en crackear. Consiste en entender algo lo suficientemente bien como para construir tu propia versión.

El 7 de octubre de 2026, Amjad Masad, CEO de Replit, publicó una sola línea:

https://x.com/amasad/status/2107671204639465961

Debajo, un desarrollador llamado @morluto respondió con las pruebas: un conjunto de herramientas que permite a los agentes controlar Hopper y Ghidra para llegar muy lejos.

Ese proyecto es REA, y superó las 110.000 estrellas en GitHub en cuestión de días.

Movez - inline image

https://github.com/morluto/rea

No es puro humo. Esa misma semana, un proyecto de código abierto llamado WordCraft lanzó una reimplementación desde cero (clean-room) de Microsoft y Adobe escrita íntegramente en Rust:

Movez - inline image

https://getartcraft.com/apps

Se construyó observando el comportamiento de Word y Adobe y leyendo las especificaciones públicas de sus formatos de archivo, sin tocar nunca su código.

Movez - inline image

Este curso te muestra el camino completo, desde un binario sellado hasta una reconstrucción como esa, con Opus 5.5 encargándose de la lectura.

01. El motor - cómo lee un binario un agente

Opus 5.5 no puede ejecutar un desensamblador por sí solo. Lee texto y escribe texto.

La ingeniería inversa con un agente funciona porque hay una herramienta entre el modelo y el binario: carga el archivo en un motor de desensamblado real, expone los resultados como funciones invocables y permite que el modelo haga preguntas.

Movez - inline image

Esa herramienta es REA, y el motor que hay debajo es Hopper, Ghidra o IDA.

El ciclo es sencillo y se repite: el modelo le pide a REA que inspeccione el objetivo, REA devuelve los hallazgos con las pruebas exactas que los respaldan (direcciones, bytes, pseudocódigo, puntos de llamada), y el modelo usa esos datos para formular la siguiente pregunta o para escribir y probar una reimplementación.

Movez - inline image

Todo se ejecuta localmente en tu máquina. No se sube nada, salvo los hallazgos que el modelo necesita para razonar, y cada conclusión se etiqueta como observación, inferencia o dato desconocido.

**

02. La instalación - rea-agents más un desensamblador

La configuración registra el servidor MCP de REA con tu agente e instala las instrucciones del flujo de trabajo correspondiente.

Un solo comando lo hace todo: te muestra cada cambio antes de escribir nada y hace una copia de seguridad de lo que modifica.

Movez - inline image

Tú pones el desensamblador: Hopper en macOS es la opción más sencilla, Ghidra es gratis y multiplataforma, e IDA si ya tienes licencia.

python
1# 1. Registra REA con tu agente (Claude Code, Codex, Cursor, Gemini CLI...)
2npx rea-agents setup # muestra los cambios previstos y pide confirmación antes de escribir
3
4# 2. Un proveedor de análisis profundo. Hopper es el más fluido en macOS;
5# setup puede instalarlo tras tu aprobación. Ghidra e IDA los aportas tú.
6# 3. Instala la CLI de rea para usarla en la terminal y en scripts
7npm install --global rea-agents
8rea --help
9
10# 4. Reinicia tu agente y confirma que las herramientas están activas
11claude
12> /mcp
13 rea: connected
14 open_binary, binary_overview, analyze_function, decompile,
15 list_procedures, search, xrefs, trace, inspect_artifact,
16 analyze_javascript_application, inspect_managed_artifact ...

Los requisitos son modestos: Node.js 22 o superior y npm. El análisis nativo necesita uno de los tres motores; la inspección estática de JavaScript y .NET no requiere ninguno. Mantén REA actualizado, porque las versiones incluyen correcciones frecuentes.

python
1# Reglas internas de ingeniería inversa ( CLAUDE.MD )
2
3## Autoridad
4- Analiza únicamente objetivos que sean de tu propiedad o que estés autorizado a examinar. Indica el motivo una sola vez.
5- Cada afirmación debe ir etiquetada: observación (lo vi), inferencia (lo deduje) o desconocido.
6- Cita las pruebas: dirección, bytes, pseudocódigo o punto de llamada. Nada de afirmaciones sin fuentes.
7
8## Flujo de trabajo
9- Empieza por el resumen más pequeño, no por un volcado completo. Amplía solo cuando haya una laguna concreta.
10- Reutiliza la sesión abierta; nunca repitas un análisis idéntico.
11- Separa los hechos estáticos de los de ejecución. Nunca asumas comportamiento en tiempo de ejecución a partir de lecturas estáticas.
12
13## Reconstrucción
14- Construye a partir del COMPORTAMIENTO y de especificaciones públicas, nunca copiando código o recursos.
15- Mantén un registro de obligaciones: cada comportamiento recuperado necesita pasar una prueba antes de darlo por "terminado".

Opus 5.5 incluye cinco niveles de esfuerzo: low, medium, high, xhigh y max. Úsalos así:

  • Medium para inspeccionar y navegar
  • High para anotar funciones normales
  • Max para código ofuscado y cualquier cosa con cálculos intensivos de punteros.

El nivel de esfuerzo es el ajuste que más influye en la calidad de todo este curso.

03. El enrutador - 20 tipos de objetivo, una herramienta para cada uno

El primer error de los principiantes es abrir un desensamblador cuando el objetivo es una app de Electron cuyo JavaScript está ahí mismo, a la vista.

REA dirige el objetivo a la herramienta adecuada, y tu primer prompt debería hacer lo mismo. Nombra el archivo, nombra la función y deja que el agente elija la herramienta de entrada.

Movez - inline image
python
1Quiero entender cómo funciona [FEATURE] en [APP], que se encuentra en [ABSOLUTE PATH].
2
3Primero, dime qué tipo de objetivo es (nativo, Electron/JS, .NET, Go, APK, WASM)
4y elige la herramienta de REA correcta para abrirlo. No empieces todavía con el análisis profundo.
5
6Luego, dame un mapa de un párrafo: con qué está construida la app, cuál es su tamaño y
7dónde buscarías primero [FEATURE]. Mantén separadas las observaciones, inferencias y datos desconocidos,
8y cita pruebas para todo lo que afirmes.

Apuntar REA a una app de Electron devuelve módulos, importaciones y límites IPC en segundos, sin necesidad de ningún desensamblador.

Apuntarlo a un Mach-O o ELF nativo abre una base de datos de Hopper y te ofrece el camino nativo, más difícil pero más profundo. Saber en cuál de los dos estás te ahorrará horas.

https://x.com/_vmlops/status/2106690704244420687

04. Reconocimiento - resumen, cadenas y grafo de llamadas

No abras ningún código todavía. Primero pídele a REA un mapa de todo el archivo. Un solo comando te dice sobre qué tipo de máquina se ejecuta, cuántas funciones contiene y todo el texto legible que esconde.

Ese texto es la pista más rápida que tienes: direcciones web, mensajes de error y nombres de funciones te dicen qué hace la aplicación antes de leer una sola línea de código.

python
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }
2rea.binary_overview {}
3 arch: arm64
4 functions: 1,284 identified
5 segments: __TEXT __DATA __LINKEDIT
6 entry: _main @ 0x1000051c0
7
8rea.search { query: "http" } # strings + code refs
9 0x10004a2c0 "https://api.target.app/v3/sync"
10 0x10004a300 "Authorization: Bearer "
11 0x10004a330 "offline cache miss, falling back"
12
13rea.xrefs { address: "0x100012ab0" } # who calls this?
14 147 references -> core config loader, called everywhere

REA también cuenta cuántas veces se llama a cada función (ese recuento se denomina referencias cruzadas, o xrefs).

Movez - inline image

Una función a la que se llama 147 veces es el corazón de la aplicación y merece tu mayor esfuerzo. Una a la que se llama dos veces es una pequeña utilidad que puedes ignorar hasta que sea relevante. Empieza por la parte superior de esa lista y ve bajando.

05. Descompilar - una función convertida en pseudocódigo

Ahora elige una de esas funciones tan solicitadas y conviértela en algo que puedas leer. Un descompilador toma las instrucciones de máquina en bruto y las reescribe como código similar a C.

Tiene un aspecto tosco: nombres como var_28, lógica enrevesada, conversiones de tipo por todas partes. Pero puedes leerlo, y que sea legible es todo lo que Opus 5.5 necesita.

Ejecútalo desde la línea de comandos para guardar el resultado, o desde dentro de un chat.

python
1# Descompila una función por su dirección, en formato JSON para redirigir o guardar
2rea decompile /Applications/Target.app/.../Target 0x100012ab0 \
3 --provider hopper --json > fn_config_loader.json
4
5# O busca una función por nombre y sigue las referencias
6rea function /path/to/Target parseConfig --provider hopper --json
7rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json
8rea trace /path/to/Target "sync" --provider hopper --json
python
1// 0x100012ab0 xrefs: 147
2void sub_100012ab0(void* arg0) {
3 void* var_20 = objc_msgSend(cls_NSJSONSerialization,
4 sel_JSONObjectWithData_options_error, arg0, 0x0, 0x0);
5 if (var_20 != 0x0) {
6 void* var_28 = objc_msgSend(var_20, sel_objectForKey, @"endpoints");
7 void* var_30 = objc_msgSend(var_20, sel_objectForKey, @"auth_mode");
8 void* var_38 = objc_msgSend(var_20, sel_objectForKey, @"retry_count");
9 objc_msgSend(g_sharedConfig, sel_setEndpoints, var_28);
10 objc_msgSend(g_sharedConfig, sel_setAuthMode, var_30);
11 objc_msgSend(g_sharedConfig, sel_setRetryCount,
12 objc_msgSend(var_38, sel_intValue));
13 }
14}

La demostración oficial de REA rastrea una llamada de sonido en el antiguo juego DX-Ball hasta la función auxiliar que decide el balance de audio izquierda-derecha, y luego convierte ese pseudocódigo a medio terminar en C.

Movez - inline image

El resultado supera los 3.205 casos de prueba originales y reproduce cada uno de los 63 bytes compilados.

Movez - inline image

Guía completa en rea.tools/showcase.

06. Anotar - haz que Opus ponga nombre a cada variable

Ese código tosco es solo la mitad del trabajo. Ahora entrégaselo a Opus 5.5 y pídele que lo explique y lo limpie.

Renombra las variables crípticas con nombres reales, explica en una frase para qué sirve la función, identifica el patrón que sigue e incluso detecta errores que la aplicación original dejó pasar.

Pega este prompt en Claude:

python
1Aquí tienes el pseudocódigo descompilado de una función con 147 referencias cruzadas.
2
3Para esta función:
41. Renombra cada variable con un nombre significativo según cómo se utiliza.
52. Explica su propósito en una sola frase.
63. Enumera las estructuras de datos que lee y escribe.
74. Identifica el patrón (singleton, factory, máquina de estados, observer...).
85. Reescríbela en Swift limpio e idiomático (o en el lenguaje que sugieran las
9 convenciones de llamada), con comentarios de documentación.
106. Señala cualquier falta de gestión de errores, validación de entradas o comprobación de seguridad.
11
12Razónalo todo con esfuerzo xhigh antes de responder: analiza qué es cada
13valor antes de decidir los nombres. Marca cualquier cosa de la que no estés seguro.
14
15[pega el pseudocódigo]

La descompilación te dice qué hace el código. Opus 5.5 te dice por qué, y te da los nombres para reconstruirlo.

https://x.com/0x0SojalSec/status/2108389060192706674

https://x.com/0x0SojalSec/status/2108031166502896035

No todos los objetivos necesitan un desensamblador. La demostración de Notion de REA localiza la función del portapapeles en el JavaScript de la aplicación, la sigue a través de las capas de Electron hasta el proceso principal y muestra exactamente cómo construye el portapapeles enriquecido: un rastreo completo sin una sola línea de ensamblador. Mira:

07. Ofuscación - el benchmark de Tigress

Algunas aplicaciones están diseñadas para resistir exactamente lo que estás haciendo. Su código se revuelve a propósito: la lógica se baraja, el texto se cifra y se añaden ramas falsas para hacerte perder el tiempo.

Esto se llama ofuscación, y es el único punto donde incluso el mejor modelo tiene problemas. Elastic Security Labs lo midió poniendo a Claude Opus frente al ofuscador Tigress en 20 tareas. Ten presentes estos números.

Movez - inline image

De esos números se extraen dos lecciones prácticas.

  • Primero, un intento fallido cuesta aproximadamente el doble que uno exitoso, porque el modelo sigue intentándolo con más fuerza antes de rendirse; así que establece un límite de gasto por función y detente pronto.
  • Segundo, elimina la basura del código descompilado antes de enviarlo (una herramienta gratuita llamada Caveman quita alrededor del 75 %) para que el modelo centre su atención en la lógica real y no en el relleno.

Los cinco trucos con los que te vas a encontrar de verdad, y el aspecto que tienen al abrir el código:

Movez - inline image
python
1Esta función parece estar ofuscada. Trabaja con esfuerzo máximo (max).
2
31. Identifica las técnicas presentes (aplanamiento del flujo de control, predicados opacos,
4 código muerto, cifrado de cadenas, división de funciones) y señala dónde aparece
5 cada una en este código concreto.
62. Resuélvelas: elimina las ramas muertas, evalúa los predicados opacos, deshaz el
7 aplanamiento del dispatch, descifra las cadenas en línea si la clave es recuperable.
83. Muestra la función limpia resultante.
94. Puntúa tu confianza del 1 al 10. Si es inferior a 6, dime exactamente qué partes son inciertas
10 y qué contexto adicional las resolvería. No adivines en silencio.
11
12[pega el pseudocódigo ofuscado]

08. El enjambre - un controlador que gestiona trabajadores

Un solo chat no puede leer bien 500 funciones. Olvida lo que ha visto, llama a lo mismo de tres formas distintas y empieza a contradecirse.

La solución es un equipo pequeño: un chat controlador que reparte el trabajo y varios chats trabajadores que se encargan de una función cada uno.

El controlador mantiene la visión global y vuelve a unir las piezas.

Movez - inline image

No necesitas construir nada especial para esto; los dos prompts siguientes son toda la configuración.

python
1Eres un controlador de ingeniería inversa. El mapa de funciones está en functions.json
2(dirección, nombre, tamaño, xref_count).
3
41. Agrupa las funciones por proximidad en el grafo de llamadas; ordena los grupos por número de xrefs.
52. Asigna cada grupo a un trabajador. Nunca analices una función tú mismo.
63. Inyecta las estructuras ya resueltas en las instrucciones de cada trabajador para mantener la coherencia de los nombres.
74. Cuando un trabajador devuelva una confianza inferior a 6, pon en cola una segunda pasada con el contexto
8 de sus vecinos ya resueltos.
95. Lleva la cuenta del gasto acumulado de tokens e infórmalo tras cada grupo.
python
1Eres un trabajador. Recibes una función descompilada y las estructuras resueltas hasta ahora.
2Devuelve exactamente: dirección, propósito, confianza (1-10), structs_used, structs_new,
3clean_source, flags. Reutiliza los nombres de estructura existentes; nunca inventes un segundo nombre para
4una estructura que el controlador ya te dio. Solo una función. Detente al terminar.

https://x.com/victor_explore/status/2109466356454510612

09. Sala limpia (clean room) - cuatro reglas para mantenerte en la legalidad

Una reconstrucción en sala limpia significa que copias lo que hace la aplicación, nunca el código que hay dentro. Si lo haces bien, lo que publiques será completamente tuyo. Si lo haces mal, estarás cargando con los derechos de autor de otra persona.

Movez - inline image

Cuatro reglas te mantienen a salvo, y el equipo de WordCraft comprueba automáticamente las cuatro en cada compilación.

  1. Observa, nunca copies. Ejecuta el objetivo como caja negra, observa lo que hace, captura pantalla solo de su propia ventana. Nunca leas, desensambles ni pegues su código. Nunca copies textos más allá de los nombres básicos de las funciones.
  2. Especificaciones, no código fuente. Los formatos de archivo proceden de estándares públicos (OOXML es ECMA-376 / ISO 29500, además de las especificaciones publicadas de RTF y ODF), nunca de leer el parser de un competidor o cualquier código GPL/LGPL.
  3. Solo recursos originales. Cada icono, fuente, plantilla y sonido se genera por código, es de dominio público o tiene licencia abierta, con una línea en un archivo de atribuciones. De lo contrario, una comprobación de CI hace fallar la compilación.
  4. Separa los dos trabajos. Un agente recupera el comportamiento y escribe una especificación. Un contexto distinto implementa basándose únicamente en esa especificación, sin mirar nunca el análisis original. Esta separación es la frontera de la sala limpia.
python
1A partir del análisis completado, escribe una especificación de sala limpia para una reimplementación.
2
3Describe SOLO EL COMPORTAMIENTO. Incluye: cada interfaz pública, el modelo de datos, cada
4función visible para el usuario como requisito verificable, los formatos de archivo leídos y escritos
5(según el comportamiento observado y la especificación pública), y la gestión de errores.
6
7NO incluyas: direcciones u offsets, nombres de variables del descompilado, ensamblador,
8ni nada copiado del original. Un desarrollador que nunca haya visto el binario debe ser
9capaz de implementar una versión compatible solo con este documento.
10
11Genera markdown con las secciones: Arquitectura, Modelo de datos, API pública, Formatos de archivo,
12Casos de prueba.

Trabajar a partir de una descripción no es solo una cobertura legal. Te permite tomar las decisiones correctas para tu propio lenguaje y tus necesidades, en lugar de heredar decisiones que el autor original tomó hace décadas.

Movez - inline image

WordCraft es más rápido que Word en algunos aspectos precisamente porque no copió las tripas de Word.

10. Creando aplicaciones - doce herramientas profesionales, un solo método

WordCraft no es un caso aislado. Es una aplicación de un catálogo de doce del equipo de ArtCraft, cada una una reconstrucción en sala limpia de una herramienta por la que ya pagas, todas escritas desde cero en Rust y publicadas gratis y en abierto en GitHub.

Su lema es "Doce aplicaciones. Un oficio", y ese oficio es el método del paso 9: observar el original, leer las especificaciones públicas y construir una versión nueva basándose únicamente en el comportamiento.

Movez - inline image

La recompensa de ese método compartido es la misma en todas partes. Sin Electron: cada aplicación es nativa en macOS, Windows y Linux, y todas excepto FilmCraft funcionan también en una pestaña del navegador mediante WebAssembly.

Y como cada acción dentro de ellas es un comando con nombre, las doce pueden ser controladas por un agente de IA desde el primer momento.

Todas las aplicaciones Craft se construyen de la misma manera, y vale la pena copiar su estructura. Cada una se apila en capas, y cada capa usa únicamente la que tiene debajo, desde las medidas básicas en la parte inferior hasta la ventana en pantalla en la superior.

Estas son las capas de WordCraft:

Movez - inline image

Y cada acción es simplemente un comando con nombre, por lo que un clic de ratón, un atajo de teclado y un agente de IA desencadenan exactamente lo mismo. Eso es lo que hace que cualquiera de ellas pueda ser controlada por un agente.

python
1controlar WordCraft mediante MCP
2
3# Automatización de documentos sin interfaz gráfica
4claude mcp add wordcraft -- wordcraft-cli mcp
5
6# O controlar la aplicación de escritorio en ejecución
7wordcraft --control 7981 &
8claude mcp add wordcraft-app -- wordcraft-cli mcp --connect 127.0.0.1:7981
9
10# Herramientas: list_commands, execute, batch, type_text, select_text,
11# inspect_document, render_page, save_document (+ screenshot/click/key en vivo)
12> Abre report.docx, pon todos los encabezados en negrita de 14 pt y exporta a PDF
13 ✓ select.all-headings -> 12 seleccionados
14 ✓ format.font-size 14 · format.bold
15 ✓ export report.pdf (texto seleccionable, marcadores conservados)

https://x.com/yuhasbeentaken/status/2109235513102057828

11. Verificar y publicar - demostrar paridad, exponer MCP

Nunca tuviste el código fuente del original, así que no puedes compararlo línea por línea.

En su lugar, comparas comportamientos: dale al original y a tu reconstrucción las mismas entradas y comprueba que producen la misma salida.

python
1Crea un entorno de pruebas de comportamiento que compare el binario original y mi reconstrucción.
2
3Genera 50 entradas: 30 normales, 10 extremas (vacías, tamaño máximo, unicode, caracteres especiales),
410 erróneas (mal formadas, campos faltantes, corruptas). Ejecuta cada una en ambos. Compara la salida
5byte a byte donde sea posible, semánticamente en el resto. Informa de la tasa de coincidencia, una lista
6de divergencias y la gravedad de cada una (cosmética / de comportamiento / crítica). Guárdalo en report.md.

Esta es también la prueba más convincente que puedes mostrarle a cualquiera (el apartado de ingeniería inversa al principio del artículo).

Movez - inline image

Después, publica tu reconstrucción igual que hicieron REA y WordCraft: como un servidor MCP, para que el agente de la siguiente persona pueda controlarla igual que tú controlaste REA.

Ponle a cada función un nombre y una descripción claros, envuélvela en una herramienta de línea de comandos sencilla y haz que se instale con un solo comando.

https://x.com/0xMovez/status/2108884063515746410

Y prueba sobre la marcha, no al final, porque un error descubierto después de haber construido tres capas encima sale muchísimo más caro de arreglar.

Seis errores que te arruinan un fin de semana

  1. Abrir un desensamblador en una app de Electron. Si el JavaScript está ahí mismo, enrútalo a analyze_javascript_application y sáltate por completo la vía nativa.
  2. Volcarlo todo antes de leer nada. Pídele primero un resumen a REA. Extraer toda la aplicación de golpe entierra la lógica real entre ruido y dispara tu factura.
  3. Leer las funciones en el orden del archivo. Ordénalas por número de referencias cruzadas. La función con 147 xrefs es la arquitectura; la utilidad con 2 xrefs puede esperar.
  4. Empecinarse con la ofuscación de nivel 3. El benchmark resuelve el 0 % de las multicapa. Fija un presupuesto, guarda el contexto de las funciones vecinas y vuelve más tarde.
  5. Dejar que el modelo copie código en tu reconstrucción. Eso rompe la sala limpia. Primero la especificación en un contexto, luego la implementación a partir de ella en otro.
  6. Publicar sin un informe de paridad. "Creo que coincide" no es una prueba. 50 pruebas de comportamiento y una tasa de coincidencia sí lo son.

Conclusión:

Instala REA. Lee el binario. Reconstrúyelo como algo tuyo.

Enruta el objetivo, mapea su superficie, descompila las funciones críticas, deja que Opus 5.5 le ponga nombre a todo, rompe la ofuscación que valga la pena romper, escala con un enjambre, documenta la especificación de forma limpia y publica la reconstrucción mediante MCP.

Once pasos. Un modelo. Cero código copiado.

Guardar con un clic

Lee artículos virales en profundidad con IA en YouMind

Guarda la fuente, haz preguntas concretas, resume el argumento y convierte un artículo viral en notas reutilizables en un único espacio de trabajo con IA.

Explora YouMind
Para creadores

Convierte tu Markdown en un artículo de 𝕏 impecable

Cuando publicas tus propios textos largos, dar formato en 𝕏 a imágenes, tablas y bloques de código es un fastidio. YouMind convierte un borrador completo en Markdown en un artículo de 𝕏 impecable y listo para publicar.

Prueba Markdown a 𝕏

Más patrones por descifrar

Artículos virales recientes

Explorar más artículos virales