lunes, 19 de octubre de 2026

REA (Reverse Engineering Anything). Análisis

Introducción

Créditos:

  1. Melina Blanco
  2. Jorge Marfil y Jorge Marfil
  3. Pau Berenguer

La ingeniería inversa es muy util cuando quieres migrar de lenguaje, por ejmplo pasar código de Visual Basic 6 o Java  a Python. Pero a veces por el motivo que fuere, no se dispone de las fuentes originales. 

Ahí es donde entra en acción REA que según dicen es capaza de obtener código fuente de un lenguaje  de alto nivel a partir de código ejecutable.

Hay herramientas de ingeniería inversa que són las que llama REA:

  • Ghidra que es gratis y desarrollada por la NSA (National Security Agence) de 2019 c0n licencia Apache.
  • Hopper para Mac
  • Ida Pro que es la versión cara que va desde 1100 € a 8600 € por año.
El principal escollo de las herramientas anteriores es que son engorrosas de usar.

 Un problema que tiene estas herramienta es que a veces no puede encontrar el nombre real de las funciones y las llama "funct" mas la posicón de memoria. A veces es casi irreconocible el código que devuelve pues es casi ensamblador. Por eso REA intentar aprovechar este código y convertirlo al lengiaje de alto nivel deseado. Y una vez puesto, que sea compatible en la mayoría de sistemas operativos

Puede haber algún problema de patentes si intentas analizar y replicar software ya existente. Todo depende del nivel que entres. Pero las leyes cambian y seguramente a partir de este proyecto viral, de seguro van a haber cambios en la legislación.

¿Que és REA?

Es un servidor Open Source que utiliza un software MCP (Model Control Protocol) que es un conector de interoperabilidad entre diferentes herramientas por ejemplo decompiladores, debuggers, inspectores web .. ,con agentes de IA (Claude Code, Codex, Cursor) para generar ingeniería inversa y por tanto la obtención de código fuente o versión nuestra de la aplicación que le hemos pasado.


Imagen de Melina Blanco

Pero REA integra aplicaciones de obtencion de pseudocódigo (Ghidra, Frida, JEB, Hopper, Playwright y ADP)

Si le pides que te analice una aplicación te explica 3 cosas sin inventarse nada, es decir te dice cuales han sido sus límites:

  1. Como funciona
  2. De donde sacó cada elemento (Evidencia)
  3. Lo que no ha podido averiguar.

El código fuente original no te lo puede dar, pero si puede darte un esquema de las funciones que entran en juego. Y a continuación el agente de IA, basándose en ese exquema crea un código fuente y lo pureba y va ajustándolo con tu ayuda.

En el readme, se ve lo que puede leer:



Al analizar el programa (entre las opciones de la tabla anterior, se devuelve:
  1. Pseudocódigo parecido a C (a partir del códigp máquina)
  2. A veces JS y módulos
  3. Ensamblador (instruciones del procesador)
  4. Mapas de módulos
  5. Rutas de llamadas
  6. Actividad de red del programa.
Y ahora el agentge escribe y prueba una implementación.

Aparte de analizar el programa completo también podemos analizar una parte concreta del programa, o ver como ejecuta una determinada acción o que nos muestre la estructura del programa, o incluso investigar dispositivos. Todo ello enfocado a obtener nuestra propia implementación.

Prerrequisitos

Cloud code: En Ubuntu ejecutar:

curl -fsSL https://claude.ai/install.sh | bash

Y ahora comprobar si funciona:

claude --version

Y me ha respondido

2.1.303 (Claude Code)

Y aquí tenemos un problema, y es que no podemos utilizar Claude Code sin tener una subscripción de pago

¿Como instalarlo?

Para ello:
  1. Melina ha creado una carpeta para este proyecto y la añade utilizando Claude Code
  2. Escribe este propmt a Claude Code: "Copia este repo e instala REA:  https://github.com/morluto/rea. Pau además le pide que instale tods las dependencias, que lo conecte correctamente con Claude y que verifique que funcione antes de terminar.
  3. Lo que hace es clonar el repositorio en esa carpeta para poder ser utilizado.
  4. Cuando acaba de instalarlo aparece una especie de log  donde dice donde lo ha instalado, que comando utilizar para ejecutarlo. También indica que programas se requieren en su caso lo dice que le falta Hopper o GLH.
  5. Pau reinicia Claude y ejecuta el comando "/mcp" en la terminal y debe de salir entre otros "rea" 
  6. Pide reiniciar sesión de Claude Code para que surta efectos la nueva configuración.
Para Android hace falta instalar JADX y JDK

Ahora Melina le pide que copie y cree una nueva versión de la aplicación Loom que usa ella, copiando lo más básico que pueda, añadiéndole un toque personal de camaleones que es su empresa y que lo meta dentro de una carpeta.

En cambio Pau le pide que investigue una característica concreta y después le dice que use ese concimiento dento de nuestro proyecto.

Para ello utiliza el model Opus 5.5 con esfuerzo Medio pues considera que es suificiente y no quiere que se gasten muchis tokens. Ha tardado alrededor de 6 minutos.

¿Se puede trabajar igual sin REA?

Para aquellas personas más versadas en ingeniería inversa, tal vez con Claude Code se puede pedir que jonstale Ghidra y que a partir de ahí haga lo mismo. Pero para las personas que no tienen una metodología clara de actuar es mejor iniciarse en este proceso con REA.

Cuidadín!

Jorge Marfil nos da una serie de consejos para no tener problemas. Lo que ha hecho es hacer una aplicación que le pasas un código y te deja pasar o no en base a una serie de premisas. Y para ofuscar mas la aplicación a pasado un programa para no dar ningún nombnre a las funcionas para no dar pistas a los programas de ingeniería inversa sobre el proceso de validación.

A continuación le pasa un agente que llama a REA (MCP) y este a un programa de ingenieria inversa y le informa que tiene 242 funciones nuevas sin nombre explícito como ya se había acordado.

Cada HALLAZGO, viene con su procedencia, con el porcentaje de seguridad del modelo y lo que no ha conseguido averiguar. Que se resume en tres palabras: código, referencias e incógnitas

Posibles problemas:
  1. Se pueden abrir binarios de los que no se sabe nada.
  2. Dentro de cada binario puede haber instrucciones ocultas para que las lea el agente y las tome por órdenes que las puede obedecer.
  3. Para ello se recomienda ejecutarlo en un "sandbox" o entorno cerrado donde si algo sale mal, no afecte a nada fuera de él.
  4. Los programas se pueden ejecutar con tus permisos y puede dañar el sistema. Para ello se pide leer sin ejecutar. Pero entonces ya no se pueden hacer pruebas.
Hay que tenr bien acotado el programa respecto a su comportamiento. Así se puede testear correctamente los resultados. Es decir que sea comprobable!

El funcionamiento de REA es que le pide en este caso a Ghida que obtenga solo algunas funciones, descartando las demás. Es decir REA es capaz de buscar solo las llamadas que hacen falta.