Présentation de REA

REA (Reverse Engineering for Your Coding Agent) est un outil en ligne de commande qui expose les artefacts d’un programme (code assembleur, code décompilé, appels de fonctions) à un agent de génération de texte. L’installation s’effectue en une seule commande :

npx rea-agents@latest setup
. Le script crée un plan d’installation, le valide, puis redémarre l’agent afin qu’il puisse interroger REA via une connexion de débogage locale.

Architecture et flux de travail

Le cœur de REA repose sur trois composants : (1) un wrapper npx qui télécharge le binaire rea-agents, (2) un serveur de debugging qui se connecte à la cible (ex. calc.exe ou le script index.js du jeu Dinosaur), et (3) une API JSON qui renvoie les instructions sélectionnées et les métadonnées associées. Lorsqu’un agent demande « Pourquoi 200 + 10 % donne 220 ? », REA extrait les instructions x64 suivantes :

0x180124945: MOV EAX, dword ptr [R13 + 0x18]
0x180124949: CMP EAX, 0x5c
0x18012494c: JZ 0x180124aba
0x180124952: CMP EAX, 0x5b
0x180124955: JZ 0x180124aba
…
0x180124a34: CALL 0x180123c10

Ces octets sont décodés, les branches sont étiquetées (0x5b = division, 0x5c = multiplication) et les appels sont associés à leurs fonctions auxiliaires. Le résultat est présenté sous forme de pseudo‑code lisible, que l’agent reformule en langage naturel.

Études de cas techniques

Deux démonstrations illustrent la chaîne complète. Dans le jeu Chrome Dinosaur, REA récupère le script JavaScript chargé :

if (this.currentSpeed < this.config.MAX_SPEED) {
    this.currentSpeed += this.config.ACCELERATION;
}
. Les constantes extraites sont ACCELERATION = 0.001, MAX_SPEED = 13 et SPEED = 6. Après 4 000 itérations, la vitesse mesurée est 10.0 ; après 10 000, elle atteint 13.0, arrondie à une décimale. L’agent utilise ces valeurs pour créer un mini‑jeu où l’utilisateur contrôle la vitesse via un curseur.

Pour Windows Calculator, REA expose la logique du bouton « % ». Le code retourné est :

if (operation == multiply || operation == divide) {
    percent = current / 100;
} else {
    percent = current * previous / 100;
}

Cette règle explique pourquoi 200 + 10 % produit 220 : le pourcentage est appliqué au premier opérande (200 × 10 / 100 = 20, puis addition). En mode multiplication, le même pourcentage devient un facteur décimal (200 × 0.1 = 20). L’agent reconstruit ainsi un petit calculateur fonctionnel à partir du binaire.

Analyse des limites et perspectives

REA dépend d’une connexion de débogage locale ; il ne peut pas analyser des exécutables protégés par des anti‑debuggers ou des binaires non‑x64 sans modules complémentaires. La précision du pseudo‑code repose sur la capacité du désassembleur intégré à identifier correctement les appels externes ; les fonctions inlinées ou fortement obfusquées peuvent rester ambiguës. De plus, le processus d’interrogation repose sur la capacité du LLM à interpréter les fragments d’assembleur ; un mauvais prompt peut conduire à une explication erronée. Malgré ces contraintes, REA montre qu’un agent de code peut automatiser la chaîne de rétro‑ingénierie : extraction binaire → décodage → génération de description → reconstruction fonctionnelle. Les évolutions futures pourraient inclure le support de formats ELF/Linux, l’intégration de signatures de vulnérabilité (CVE) et la génération automatique de tests unitaires à partir du code récupéré.