Ce qui s’est passé après avoir envoyé un fichier EXE vieux de 27 ans à Claude 3.7 est stupéfiant
(reddit.com)À partir d’un binaire partiel plutôt que du code source (il manquait les DLL d’exécution),
retrouver l’objectif du programme d’origine, puis le réécrire en Python…
c’est clairement une intelligence « artificielle », pour le meilleur comme pour le pire.
Traduction :
Après des années de déceptions avec l’IA, j’ai vraiment pris une énorme claque. Ce texte n’est pas le sempiternel billet du genre « l’IA, c’est incroyable ». Jusqu’à aujourd’hui encore, j’étais sceptique.
Contexte : comme beaucoup, j’ai essayé ChatGPT et d’autres outils d’IA pour m’aider à coder. Le résultat ? De façon constante, c’était décevant. Un moteur de recherche amélioré qui recrache du mauvais code enveloppé dans des explications pleines d’assurance.
Le défi : ma petite-fille de 2 ans est venue me voir aujourd’hui. Je me suis souvenu d’une petite application simple que j’avais créée en 1997 avec Visual Basic 4. Mais exécuter un binaire vieux de 27 ans ? Sans anciennes DLL ni couche de compatibilité ? Voilà.
Le coup de poker : par curiosité, j’ai envoyé le vrai fichier EXE à Claude 3.7 et posé une question simple : « Pouvez-vous m’indiquer comment exécuter ce fichier ? Il semble avoir été créé avec Visual Basic 4. Le convertir en Python pourrait être une bonne idée. »
Le résultat attendu : une réponse générique du type « c’est un vieux fichier, il y a des risques de sécurité, etc. ».
Ce qui s’est réellement passé : Claude 3.7 a commencé par les avertissements attendus, puis les choses sont devenues intéressantes. D’une manière ou d’une autre, il a analysé le binaire et identifié des composants précis :
- « Form1 »
- « cntTimer »
- « btnExit »
- il a même détecté un fichier audio embarqué !
Puis il a fait ce qu’aucune autre IA n’avait fait : écrire une conversion Python complète avec Pygame :
- reproduction parfaite des fonctionnalités ;
- consignes d’installation claires ;
- ça a réellement fonctionné du premier coup
Temps nécessaire : moins de 5 minutes. Sans exagérer.
Quand j’ai demandé des ajustements, comme associer un son à la touche espace et ajouter des polices colorées, il a immédiatement fourni une mise à jour du code parfaite.
Pour la première fois depuis que j’utilise l’IA, j’ai été sincèrement impressionné. Ce n’était pas juste un tour de démonstration, mais une solution pratique qui m’a réellement fait gagner du temps.
Au final, j’ai dit à Claude que j’étais impressionné et j’ai maladroitement résumé pourquoi je trouvais ça génial avant de lui envoyer ça… puis il a réécrit le post Reddit. En fait, ça sonne « presque » normal. (Cette partie, c’est moi qui l’ai écrite.)
<Le même jour, 5 heures plus tard> mise à jour
J’ai publié une mise à jour / un résumé de ce post (rédigé par moi). Je ne sais pas si c’est la bonne manière de faire, mais au moins une personne sur Internet l’a dit, donc ça doit être vrai.
https://www.reddit.com/r/ClaudeAI/comments/1iz1i61/update_i_uploaded_a_27yearold_exe_file_to_claude/
<Mise à jour - 11 heures plus tard>
J’imagine que je suis le « papi de Reddit ». Amusant.
Quelques précisions :
- Oui, Claude autorisait bien l’envoi d’un EXE.
- Le fichier EXE compilé contient quelques chaînes reconnaissables, mais pas énormément.
- Claude a rédigé ce texte et ce titre. En plus de ça, le plus fort reste le one-shot.
- Il affichait du texte et jouait un fichier wav quand ma fille, qui a maintenant 29 ans, tapait sur le clavier.
J’ajoute le lien vers la conversation, car certaines personnes ne le voient pas dans les commentaires :
https://claude.ai/share/3eecebc5-ff9a-4363-a1e6-e5c245b81a16
<Mise à jour - 1 jour plus tard>
La republication de ce post sur Twitter/X a dépassé le million de vues. Post complet ici. J’ai envoyé à Claude le post avec tous les commentaires, dans le même contexte que celui où j’avais rédigé le script et la publication. Je lui ai demandé en particulier de résumer les critiques. Voici le résumé de Claude :
Contexte technique valable
Certaines personnes ont correctement souligné que les exécutables VB4 étaient compilés en p-code plutôt qu’en code machine, ce qui les rend plus faciles à analyser que des exécutables entièrement compilés. C’est tout à fait exact. Le VB d’avant .NET stockait un format de bytecode interprétable, ce qui permettait d’en extraire des informations plus facilement qu’à partir d’un binaire totalement compilé.
Scepticisme sur la complexité
D’autres ont fait remarquer que le code Python obtenu était relativement simple (environ 100 lignes). C’est parce que l’application elle-même n’était pas complexe, mais un petit programme aux fonctions basiques. Ce qui était impressionnant, ce n’était pas la complexité du code généré, mais le fait qu’il ait été possible de passer du binaire à un code fonctionnel sans aucun effort.
Malentendu sur le processus
Quelques critiques ont semblé penser que j’affirmais que Claude avait « décompilé » l’exécutable au sens traditionnel du terme. En réalité, comme je l’ai expliqué dans la conversation, il a analysé les chaînes visibles et en a déduit les fonctionnalités, ce qui reste impressionnant, mais n’équivaut pas à une vraie décompilation.
Scepticisme général envers l’IA
Dans l’industrie tech, il existe naturellement une vision sceptique des capacités de l’IA, et certains commentateurs rejettent par réflexe les démonstrations impressionnantes comme étant fausses, exagérées ou « rien de plus que de la reconnaissance de motifs ». C’est un schéma de réaction classique face aux progrès de l’IA. La critique qui me paraît la plus valable est que cette performance doit être replacée dans son contexte. Claude n’a pas effectué une véritable analyse binaire sur du code compilé arbitraire ; il a produit une inférence intelligente à partir des chaînes de texte d’un exécutable VB.
9 commentaires
En fait, ce n’est pas si différent que de lire et d’analyser un simple document texte, mais…
Waouh, est-ce qu’on pourrait aussi récupérer de vieux fichiers oubliés ? lol
Genre, si on met en ligne une vidéo d’un vieux jeu DOS, un fichier exe en ressortirait ou un truc du genre..
Comme indiqué dans le commentaire principal, pour un exécutable VB, il est possible de voir le code quasiment tel qu’il a été écrit, mais comme il s’agissait d’un exécutable C++, si cela avait été uniquement de l’assembleur, cela aurait probablement été encore impossible.
Parmi les points forts de l’IA, il y a sa capacité à comprendre les instructions et à les appliquer, ce qui fait qu’elle se débrouille plutôt bien, mine de rien, pour les migrations vers d’autres langages.
Je me demande si Claude n’avait pas, dans ses données d’entraînement, des documents liés au p-code de VB 4.0.
Sinon (s’il n’y avait rien de préentraîné à ce sujet), du point de vue d’une IA, quelle différence y aurait-il entre le p-code de VB 4.0 et du code machine x86 (ou arm, ou autre) ? Dans les deux cas, ce ne sont finalement que des suites de nombres obéissant à certaines règles. Si elle a réussi à en déduire le motif à partir d’un court échantillon, c’est effrayant d’une autre manière.
Avec des langages comme VB ou Python, quand on crée un
.exe, ce n’est pas une compilation en code machine, donc s’il ne reste que l’exécutable, on peut quand même en extraire le code source avec les noms de fonctions et de variables tels quels.Le fait qu’elle apprenne ce genre de règles pour les réutiliser... à ce rythme, il sera difficile pour la plupart des développeurs de survivre à l’avenir.
Mais de toute façon, l'assembleur a aussi des spécifications, donc si on les lui donne avec, j'ai l'impression qu'il le traduira rapidement.
Passer de l’assembleur à un code en langage naturel lisible relève du domaine de la recréation après suppression d’éléments inutiles — noms de variables, noms de fonctions, etc. — donc je pense qu’il faudra sans doute encore un peu de temps pour que le résultat soit vraiment satisfaisant.
Ça peut être facile aussi, haha
J’ai écrit un article scientifique sur quelque chose de similaire il y a une dizaine d’années.
Waouh, c’est assez étonnant.