Comprendre un logiciel sans disposer de son code source change la donne lorsqu’une entreprise doit maintenir un ancien outil, préparer une migration ou retrouver une règle métier oubliée. REA, pour Reverse Engineer Anything, propose de rendre cette exploration accessible aux agents de programmation. Son rôle réel mérite toutefois d’être précisé : ce n’est pas un décompilateur autonome, mais une passerelle entre une IA et des outils spécialisés. L’agent formule des demandes, récupère des éléments techniques et les interprète pour aider à comprendre, puis éventuellement réécrire, une fonctionnalité. Entre cette promesse et une application reconstruite, plusieurs étapes restent indispensables : installer les bons moteurs, distinguer les preuves des hypothèses, tester les résultats et respecter les droits associés au programme étudié. Pour un entrepreneur, l’intérêt n’est donc pas de « copier une application en quelques minutes ». Il consiste à transformer une boîte noire en problème documenté, avec un périmètre clair et des décisions techniques mieux informées.
En bref
- REA relie un agent de codage à des outils de rétro-ingénierie grâce au protocole MCP et à une interface en ligne de commande.
- L’examen approfondi d’un exécutable natif nécessite un moteur compatible, comme Ghidra, Hopper ou IDA.
- Les exemples publiés par le projet illustrent des résultats ciblés, pas la reconstruction garantie de logiciels complets.
- Une réécriture fiable exige des preuves, des tests et une vérification des contraintes juridiques et de confidentialité.
REA et la rétro-ingénierie assistée par IA : comprendre la chaîne de travail
Le nom Reverse Engineer Anything annonce une ambition large. En pratique, REA organise l’accès à des capacités d’analyse existantes. Il fournit un serveur MCP, c’est-à-dire une interface permettant à un agent compatible d’appeler des outils externes, ainsi qu’une interface en ligne de commande. Le raisonnement appartient au modèle ; l’extraction technique dépend des composants mobilisés.
Cette distinction évite un malentendu fréquent. Un assistant conversationnel ne retrouve pas spontanément le fonctionnement exact d’un exécutable à partir de son nom. Il lui faut des observations : instructions, chaînes de caractères, références entre fonctions ou comportements enregistrés. La passerelle sert à obtenir ces éléments dans un format exploitable, plutôt qu’à remplacer le travail d’investigation par une intuition.
Comment REA transmet les demandes à Ghidra, Hopper ou IDA
Le circuit suit une logique simple. Tu poses une question à ton agent de programmation ; celui-ci sollicite une capacité exposée par le serveur ; l’outil spécialisé effectue l’opération ; les résultats reviennent à l’assistant. Pour un programme natif, un moteur compatible peut notamment produire de l’assembleur et du pseudocode, puis révéler les relations entre différentes routines.
Le pseudocode ressemble à un langage de programmation lisible, mais il ne constitue pas le code source original. La compilation a pu supprimer des noms, transformer des boucles, regrouper des calculs ou éliminer des branches inutilisées. L’analyse reconstruit une représentation du comportement observé. Elle ne récupère pas automatiquement les commentaires, les intentions des développeurs ni l’architecture historique du projet.
Prenons Atelier Nova, une petite entreprise fictive qui conserve un ancien utilitaire de conversion de fichiers. Son prestataire a disparu, et certaines transformations restent indispensables à la facturation. La bonne question n’est pas « recrée tout le logiciel », mais « identifie comment cette fonction convertit les montants et traite les erreurs ». Ce cadrage réduit le volume à examiner et rend la vérification possible.
Passer d’une explication plausible à une hypothèse vérifiable
L’assistant peut repérer une chaîne associée à un message d’erreur, retrouver les fonctions qui la référencent et examiner les appels voisins. Il peut ensuite proposer une interprétation : validation du format, conversion numérique, arrondi. Chaque proposition gagne cependant à être reliée à un élément observable, comme une condition précise ou un résultat reproduit sur plusieurs entrées.
Une méthode solide sépare trois niveaux : ce que l’outil a effectivement extrait, ce que le modèle en déduit et ce qu’un test confirme. Si une routine multiplie une valeur par cent, cela ne prouve pas, à lui seul, qu’elle convertit des euros en centimes. Le contexte des appels et les exemples d’utilisation doivent soutenir cette lecture.
Pour Atelier Nova, cette discipline produit un livrable utile : une description de la transformation, les éléments qui l’étayent et une liste de cas encore non résolus. Une telle documentation facilite ensuite le dialogue avec un développeur. Elle permet aussi de décider si une réécriture ciblée suffit ou si une migration plus large devient nécessaire.
Le gain se mesure donc moins au nombre de lignes générées qu’à la réduction des zones d’ombre. Une interprétation traçable vaut davantage qu’une réponse spectaculaire mais invérifiable. Avant d’obtenir cette traçabilité, encore faut-il préparer un environnement adapté à la cible et aux informations qu’elle contient.

Installer REA : préparer Node.js, les moteurs et un environnement maîtrisé
Le démarrage repose sur une commande courte : npx rea-agents setup. Cette simplicité concerne la configuration de la passerelle, pas l’ensemble de la chaîne technique. Le programme d’installation peut préparer la connexion avec ton agent, présenter les modifications et préserver les réglages existants. Il ne remplace ni les dépendances spécialisées ni les licences nécessaires à certains logiciels.
Les prérequis fournis pour le projet indiquent Node.js 22.19 ou une version ultérieure de la branche 22, Node.js 24.11 ou une version ultérieure de la branche 24, ainsi que la branche 26 et les suivantes lorsqu’elles sont disponibles et prises en charge. La documentation de la version utilisée reste la référence : une commande récupérant la dernière publication peut évoluer avec le paquet.
Vérifier les dépendances avant la première analyse
Commence par contrôler ton environnement avec node –version, puis identifie le format du fichier à étudier. Un exécutable natif appelle un moteur compatible, comme Ghidra, Hopper ou IDA. Un paquet Android nécessite, selon les indications du projet, JADX utilisable sans interface graphique et un JDK complet. L’exploration web s’appuie sur un navigateur de la famille Chrome.
Pour les fonctions JavaScript et .NET décrites par le projet, aucune installation supplémentaire de moteur natif n’est annoncée. Cela ne signifie pas que toutes les applications de ces familles seront immédiatement transparentes. Un emballage particulier, une protection ou une dépendance externe peut modifier le travail nécessaire. L’objectif est de préparer les bonnes capacités, pas de promettre une lecture universelle.
Atelier Nova commence ainsi par une copie de son utilitaire et quelques fichiers de test anonymisés. L’équipe note la version du paquet, celle du moteur et les paramètres retenus. Cette fiche évite un problème classique : obtenir un résultat intéressant, puis ne plus savoir le reproduire après une mise à jour. Pour une activité professionnelle, la reproductibilité protège aussi le budget d’investigation.
Utiliser la ligne de commande sans perdre les résultats
La documentation fournie donne cet exemple pour une cible native : npx -y rea-agents@latest analyze /chemin/vers/binaire –provider ghidra –json. Il demande une analyse avec Ghidra et une restitution structurée en JSON. Le chemin, le moteur et les options doivent correspondre à l’installation réelle ; la présence du nom d’un fournisseur ne suffit pas à rendre son logiciel disponible.
Les commandes inspect et analyze répondent à des besoins différents, et des fonctions dédiées existent pour certaines familles d’applications. Consulte l’aide de la version exécutée plutôt que de reprendre un tutoriel ancien. Avec une installation appropriée, rea –help présente les commandes disponibles ; via npx, l’aide du paquet permet également d’examiner son interface.
Chaque invocation doit être traitée comme une opération distincte. Enregistre les sorties utiles et associe-les au fichier étudié, idéalement identifié par son empreinte numérique. Une empreinte permet de distinguer deux exécutables portant le même nom. Cette précaution paraît administrative, mais elle évite d’attribuer une observation à la mauvaise version lors d’une comparaison.
Enfin, sépare installation et exécution. Examiner un fichier sans le lancer n’entraîne pas les mêmes risques qu’observer son comportement en fonctionnement. Pour cette seconde étape, privilégie un environnement isolé, sans accès inutile aux dossiers professionnels ni aux identifiants. Une configuration réussie est celle qui rend l’expérience reproductible sans exposer davantage que nécessaire.
Binaires, Electron, .NET et Android : ce que REA permet réellement d’observer
Un fichier exécutable, une application Electron et un site web ne livrent pas les mêmes indices. Leur traitement dépend de la manière dont ils sont construits et distribués. Choisir la bonne méthode commence par identifier ce qui se trouve réellement entre tes mains : instructions machine, langage intermédiaire, scripts, ressources ou interface chargée dans un navigateur.
Cette différence influence directement le coût d’une investigation. Une application contenant des scripts lisibles peut révéler rapidement ses modules et ses échanges internes. Un programme natif optimisé demande souvent davantage de travail pour retrouver les limites des fonctions et comprendre les structures de données. L’obfuscation, lorsqu’elle est présente, ajoute encore des obstacles sans changer cette logique de départ.
| Type de cible | Éléments accessibles | Point de vigilance |
|---|---|---|
| Binaire natif | Instructions, pseudocode, chaînes, symboles présents et références | La profondeur dépend du moteur et des protections |
| JavaScript et Electron | Modules, imports, archives ASAR et échanges IPC repérables | Des composants natifs peuvent nécessiter un autre outil |
| .NET | Métadonnées, instructions CIL et dépendances déclarées | L’obfuscation et les appels externes compliquent l’interprétation |
| APK Android | Code et ressources accessibles avec la chaîne adaptée | Le code natif et les services distants restent des sujets distincts |
| Site web | Ressources reçues, comportements observables et échanges autorisés | Le code privé du serveur n’est pas exposé |
REA face aux applications Electron et aux assemblages .NET
Electron associe des technologies web à une application de bureau. Une partie du code peut être regroupée dans une archive ASAR, que les outils adaptés peuvent examiner sans démarrer le programme. Les imports, les routes et les cartes de source présentes fournissent alors des repères. Leur absence ne bloque pas toute exploration, mais réduit parfois la lisibilité.
Les échanges IPC méritent une attention particulière. Ils relient notamment l’interface aux opérations prises en charge par d’autres processus. Pour Atelier Nova, suivre un bouton « exporter » jusqu’au traitement correspondant peut révéler où le fichier est préparé. Si ce parcours rejoint un module natif, l’investigation change de niveau et nécessite les capacités appropriées.
Dans l’univers .NET, les métadonnées décrivent notamment des types et des méthodes, tandis que le CIL représente les instructions intermédiaires. Ces éléments peuvent aider à comprendre une bibliothèque ou à comparer deux versions compilées. Observer une différence ne suffit cependant pas à en connaître l’impact métier : il faut relier la modification aux usages concernés.
Pourquoi une analyse web ne dévoile pas un SaaS entier
Sur un site, le navigateur reçoit des documents, des scripts et des réponses réseau. Leur observation peut expliquer comment une interface prépare une requête ou affiche un résultat. Elle ne donne pas accès au traitement privé exécuté chez l’éditeur. Un calcul visible à l’écran peut donc dépendre d’une règle distante totalement absente des ressources téléchargées.
Imaginons qu’Atelier Nova utilise un service de devis en ligne. L’équipe peut constater qu’un formulaire transmet une quantité et reçoit un prix. Cela ne révèle ni le moteur tarifaire complet, ni ses exceptions, ni les données internes mobilisées. Une API publique ou un export documenté sera souvent une solution plus robuste pour préparer une intégration.
Sur Android, la même prudence s’impose : le paquet installé ne contient pas nécessairement toute la logique du service. Certaines fonctions résident dans des bibliothèques natives ou dépendent d’un compte distant. Une reconstruction locale peut reproduire un écran sans reproduire le comportement réel. Il faut donc distinguer présentation, traitement embarqué et dépendances extérieures.
Pour chaque cible, définis ce que tu souhaites établir : le format d’un fichier, un calcul, une interaction ou une dépendance. Cette précision transforme les observations en réponse exploitable. Le périmètre visible fixe le périmètre de ce qui peut être démontré, ce qui devient décisif lorsqu’un projet présente des exemples de reconstruction impressionnants.
Reconstruire une application avec REA : lire les démonstrations sans surinterpréter
Les cas publiés par un projet servent à montrer ce que sa méthode peut accomplir. Ils ne constituent pas, à eux seuls, une évaluation indépendante. Les exemples associés à REA concernent notamment DX-Ball, Notion et TH04. Chacun documente un problème délimité ; aucun ne permet d’affirmer que n’importe quelle application peut être reconstruite intégralement avec le même effort.
Cette nuance compte pour une décision d’entreprise. Un résultat spectaculaire peut donner envie de remplacer immédiatement un logiciel ancien. Pourtant, retrouver une fonction et livrer un produit maintenable relèvent de deux chantiers différents. Le second inclut l’interface, les erreurs, la sécurité, les dépendances, les mises à jour et les conditions réelles d’utilisation.
DX-Ball, Notion et TH04 : trois enseignements techniques distincts
Dans le cas DX-Ball, le projet rapporte qu’une réécriture en C d’une fonction de panoramique reproduit les 63 octets compilés concernés et passe 3 205 cas de test. Le résultat porte sur cette routine et sur les vérifications décrites. Il ne prouve ni la reconstruction du jeu complet ni l’absence de défauts dans toutes les situations possibles.
L’exemple Notion suit un parcours lié au presse-papiers, depuis l’interface jusqu’au processus principal d’Electron, avec prise en compte du contenu riche. Son intérêt réside dans la compréhension d’une chaîne d’événements. Il montre comment relier plusieurs composants autour d’une action précise, sans établir que l’ensemble de l’application ou son service distant a été reproduit.
Le cas TH04 met en avant un piège plus discret : les unités utilisées pour les angles. Supposer automatiquement des degrés ou des radians conduit à un calcul incorrect lorsque le programme emploie une convention particulière. Cette leçon dépasse le jeu étudié. Dans une application métier, une unité monétaire, un fuseau horaire ou une échelle de mesure peut provoquer le même type d’erreur.
Les récits de réalisation en quelques minutes doivent être lus comme des témoignages contextualisés, non comme des délais contractuels. Le temps dépend de la préparation, de la connaissance du logiciel et du périmètre retenu. Sans protocole reproductible et vérification indépendante, un chronomètre ne constitue pas une mesure générale de productivité.
Construire un protocole de validation avant la réécriture
Atelier Nova peut appliquer une méthode plus utile qu’un défi de vitesse. L’équipe collecte des exemples d’entrée et les sorties produites par son ancien convertisseur, puis demande une implémentation limitée au traitement identifié. Elle réserve une partie des exemples pour une vérification distincte. Cette séparation réduit le risque de produire une solution ajustée uniquement aux démonstrations initiales.
- Définir le contrat : préciser les entrées acceptées, les résultats attendus et les erreurs prévues.
- Relier les hypothèses aux observations : conserver les références techniques qui expliquent chaque règle importante.
- Tester les limites : inclure valeurs nulles, formats invalides, tailles extrêmes et cas d’arrondi.
- Documenter les écarts : distinguer les différences volontaires des comportements encore inexpliqués.
Deux niveaux de réussite doivent rester séparés : produire les mêmes résultats observables et générer exactement les mêmes octets compilés. La seconde exigence est beaucoup plus spécifique et dépend notamment du compilateur et de ses options. Pour un remplacement métier, une équivalence fonctionnelle correctement définie est souvent plus pertinente qu’une identité binaire.
La comparaison automatisée, parfois appelée test différentiel, consiste à soumettre les mêmes entrées à l’ancienne version et à la nouvelle. Elle révèle les divergences, mais pas tous les défauts possibles. Une reconstruction devient crédible lorsque son domaine de validité est explicite, avec des tests, des limites connues et un usage juridiquement autorisé.
REA, légalité et confidentialité : cadrer un usage professionnel responsable
La disponibilité d’un outil ne crée aucun droit supplémentaire sur les programmes examinés. REA peut servir à la recherche, à l’apprentissage, à la préservation ou à l’interopérabilité, mais chaque usage reste soumis à son contexte. Posséder une copie ou une licence ne donne pas une autorisation générale de décompiler, modifier et redistribuer tout ce qu’elle contient.
En France, l’article L122-6-1 du Code de la propriété intellectuelle prévoit notamment une exception encadrée pour obtenir les informations nécessaires à l’interopérabilité d’un logiciel créé de façon indépendante. Cette possibilité comporte plusieurs conditions. Elle ne doit pas être assimilée à un droit de reproduire un produit concurrent ou de réutiliser librement les éléments protégés découverts.
Interopérabilité : définir le besoin avant d’examiner le programme
Le cadre vise notamment une personne ayant le droit d’utiliser le logiciel, des informations qui ne sont pas déjà facilement et rapidement accessibles et des opérations limitées aux parties nécessaires. Les renseignements obtenus ne peuvent pas être détournés vers d’autres objectifs ni communiqués au-delà de ce que l’interopérabilité exige. Leur utilisation pour développer un logiciel dont l’expression est substantiellement similaire demeure exclue.
Pour Atelier Nova, la première étape consiste donc à chercher une documentation, un format d’échange ou une interface officielle. Si l’objectif est simplement d’exporter des factures, une fonction existante peut suffire. Quand une investigation devient nécessaire, son périmètre doit être consigné : quel obstacle empêche la compatibilité, quelles parties doivent être étudiées et quelles informations sont réellement indispensables ?
Une validation juridique adaptée au projet est particulièrement utile avant une réutilisation commerciale. Les contrats, les territoires concernés, les données personnelles et les éventuelles mesures de protection peuvent modifier l’analyse. Présenter une démarche comme éducative ne neutralise pas automatiquement ces contraintes. Le but annoncé et les opérations effectivement réalisées doivent rester cohérents.
Ce que l’agent reçoit peut sortir de ton environnement local
Autre frontière à surveiller : l’analyse locale ne garantit pas la confidentialité de tous ses résultats. Si ton agent utilise un modèle hébergé, les extraits et observations transmis peuvent être envoyés au fournisseur. Les règles applicables dépendent du produit, du contrat, du type de compte et des réglages retenus. Il faut les vérifier avant de traiter un logiciel sensible.
Une chaîne de caractères peut contenir une adresse interne, un identifiant, voire un secret oublié dans le programme. Des captures réseau peuvent également exposer des jetons ou des données clients. Pour limiter ce risque, prépare des jeux d’essai anonymisés, retire les éléments inutiles et restreins les capacités accessibles à l’agent. Une consigne de prudence ne remplace pas ces contrôles techniques.
Atelier Nova peut aussi distinguer les tâches : extraction locale dans un environnement isolé, sélection des éléments pertinents, puis transmission contrôlée à l’assistant. Cette organisation ajoute une étape, mais réduit les informations partagées et facilite la relecture. Elle protège particulièrement les échanges avec des prestataires lorsque le logiciel contient des données appartenant à plusieurs clients.
Les licences des moteurs restent indépendantes de celle de la passerelle. Une distribution open source ne fournit ni activation ni droit d’usage pour un outil commercial tiers. De même, observer un service web ne justifie pas de contourner une authentification ou d’explorer des ressources sans autorisation. Les interfaces publiques et les environnements de test autorisés restent les voies à privilégier.
Avant une expérimentation professionnelle, formalise une fiche courte : autorisation, objectif, fichiers concernés, environnement, données transmissibles et critères d’arrêt. Associe ensuite chaque résultat à une preuve et à un test. Le bon cadre transforme la curiosité technique en investigation exploitable, sans confondre accessibilité d’une fonction, droit de l’étudier et droit de la réimplémenter.
REA est-il un décompilateur autonome ?
Non. REA fournit une passerelle MCP et une interface en ligne de commande pour connecter un agent IA à des capacités d’analyse. L’examen approfondi d’un binaire natif dépend d’un moteur compatible installé séparément, comme Ghidra, Hopper ou IDA.
Peut-on retrouver le code source original d’une application ?
La décompilation peut produire une représentation lisible du comportement, mais elle ne restitue pas automatiquement le projet original. Les commentaires, certains noms et des choix d’architecture peuvent avoir disparu pendant la compilation. Une réécriture doit ensuite être vérifiée par des tests.
REA permet-il de reconstruire entièrement un SaaS ?
L’observation du navigateur donne accès aux ressources reçues et aux comportements visibles, pas au code privé du serveur. Elle ne suffit donc pas à reproduire toute la logique d’un service. Pour une intégration, commence par sa documentation et son API publique.
Les analyses restent-elles toujours sur l’ordinateur ?
Les outils peuvent fonctionner localement, mais les résultats transmis à un agent utilisant un modèle hébergé peuvent être envoyés à son fournisseur. Vérifie le contrat, les réglages de conservation et les règles de confidentialité avant de partager des éléments sensibles.
Quel premier test choisir pour évaluer REA ?
Choisis un petit programme que tu as le droit d’examiner et dont tu connais le comportement. Délimite une fonction, prépare plusieurs entrées avec leurs résultats attendus et compare les observations à ces références avant d’élargir l’investigation.

