Compiler du code ne le rend pas secret, la preuve par Age of Empires et une dose d'IA

L’IA ne cesse de nous étonner au fur et à mesure que nous continuons à nous en servir. Dans cet article, on va faire un bond dans le passé.

Bienvenue dans les années 90.

Une époque où l'on faisait des LAN avec ses potes sur ses jeux préférés jusqu'à plus d'heure. Une époque où vous pouviez vous prêter ou échanger vos meilleurs jeux simplement avec un CD (et un générateur de clefs).

Je vous parle d'un temps. Que les moins de 20 ans ne peuvent pas connaître.

Si vous avez grandi dans les années 90, vous connaissez ces rituels. Comme “Le magazine de jeux vidéo” qu'on attendait tous les mois : Joystick, Player One, Gen4. Quelque part entre le test du dernier jeu de baston et la pub pleine page pour une carte 3D hors de prix : la page des codes de triche. Deux colonnes serrées, une police minuscule, des dizaines de jeux passés en revue. Et nous, penchés dessus, recopiant religieusement sur un carnet à spirale les codes du seul jeu qui nous intéressait. Quelques mots, quelques commandes, et vous passiez d’une défaite cuisante à une victoire incontestable.

L’un des jeux les plus célèbre jeu de cette époque ? Bien sûr “Age of Empires”, sorti en 1997.

Age of Empires

(source gamesnostalgia : Age of Empires)

Et je vais vous montrer que 29 ans plus tard, nous n’avons ni besoin d’un vieux magazine, ni d’un forum, ni d’un site web pour retrouver ces fameux “cheat codes” que nous aimions tant utiliser. Il nous suffit tout simplement du jeu… et une bonne dose d’IA pour faire des miracles.

Pour ça, nous allons récupérer une version du jeu sur NostalgieGeek, évidemment. La rétro, jusqu'au bout. Rien d’autre : pas de code source, juste un bon vieux binaire des familles.

Si vous avez une petite faim, n’oubliez pas de taper ‘Food’ et on commence.

C'est quoi “regarder dans un jeu” ?

Je vous rassure, il n'y a pas de prérequis techniques ici. Tout le monde peut le faire.

Avant de lâcher l'IA dans les entrailles d'Age of Empires, posons une question bête :

Qu'est-ce qu'on regarde, au juste ?

Un exécutable, c'est quoi ?

C'est le fameux fichier “.exe” sur lequel vous double-cliquez pour lancer un jeu. À l'intérieur, pas de belles phrases de code bien lisibles : juste des instructions en langage machine, écrites pour votre processeur. Lui les comprend parfaitement 🙂. Un humain, beaucoup moins. 😵

Pourquoi ? Parce que le code d'origine écrit par les développeurs a été compilé :

  • Transformé,
  • compressé
  • optimisé

Tout cela pour que la machine l’avale directement. Au passage, tout ce qui était lisible (les noms, les commentaires, la mise en forme) est totalement perdu dans le processus.

La rétro-ingénierie, c'est le chemin inverse

Le principe de la Rétro-Ingénierie est de partir du “.exe” et essayer de “reconstruire” une version lisible de ce qu'il contient.

C'est comme retrouver une recette à partir du plat fini : vous ne récupérerez jamais la fiche exacte du chef, mais en goûtant et en observant, vous comprenez les ingrédients et la logique (certains utilisent aussi un spectromètre de masse). Le résultat n'est pas parfait, les noms de variables ont disparu, les structures sont approximatives, mais l'essentiel est là.

Voilà tout le mystère. Maintenant, sortons les outils. 🛠️

Une IA, deux skills, et c'est parti

Spoiler : c'est beaucoup plus simple que vous ne le pensez.

Pas de laboratoire secret, pas de station de hacking avec trois écrans et un sweat à capuche. Voici tout notre arsenal de spécialistes en rétro-ingénierie.

L'outil central : Claude Code

On utilise Claude Code, propulsé par le modèle Claude Sonnet 4.6. C'est la version de Claude spécialisée pour lire, comprendre et manipuler du code. Nous aurions pu utiliser Opus, mais cette version suffit largement pour ce que nous voulons faire.

Le truc cool ? Pas besoin d'être développeur, tout le monde pourrait le réaliser. Et on lui parle en français, normalement, comme un collègue. Et il répond pareil.

Les skills : les super-pouvoirs à la demande

Un skill, c'est une capacité supplémentaire qu'on ajoute à l'IA pour qu'elle sache manipuler un outil précis. Comme un plugin qu'on installe pour étendre ce qu'elle peut faire.

On est allés piocher dans la bibliothèque skills.sh, et on en a pris deux :

  • décompression (zip ou équivalent): pour ouvrir et extraire les fichiers du jeu.
  • décompilation C/C++ : pour transformer le binaire illisible en pseudo-code qu'on peut suivre.

Deux skills. C'est tout. Pas besoin de passer longtemps pour les trouver.

Le prompt : on a fait au plus simple

Voici, mot pour mot, ce qu'on a demandé à l'IA. Pas de prompt à rallonge, pas de formule magique d'expert :

Étape 1, extraire le jeu :

« je voudrais que tu extrait/désassemble tous les .exe qui sont dans ce dossier, chaque fichier traité stockera son résultat dans un dossier à côté de lui avec son nom suffixé "-extracted" »

Cela a permis d’ouvrir tous les “.exe” et d’en voir le contenu en quelques minutes.

Étape 2, chercher les codes :

« je voudrais, en cherchant dans ce code, si on pouvait trouver les codes secrets pour avoir des bonus dans le jeu »

Relisez le second prompt : « Les codes secrets pour avoir des bonus dans le jeu ». Il n’y a pas un seul terme technique, pas de jargon de rétro-ingénierie. Juste une demande formulée comme on parlerait à un ami.

Et c'est exactement là que ça devient vertigineux : deux skills + une phrase en français approximatif = une capacité d'analyse qui, hier encore, demandait des heures d'expertise pointue.

Maintenant, voyons ce que l'IA nous a recraché.

L’IA a cherché, l’IA a trouvé

Accrochez-vous, c'est maintenant que ça devient bluffant pour une personne qui n’a pas de compétence dans le domaine.

Le déroulé : ce que l'IA a fait, étape par étape

On a lancé les deux prompts. L'IA a enchaîné toute seule :

  1. 🗜️ Décompression de l'archive du jeu.
  2. 🔍 Désassemblage du fichier EMPIRES.EXE, le cerveau du jeu.
  3. 📍Localisation d'une liste de mots-clés suspects, rangés « en clair » dans une zone précise du fichier (la section .data, pour les curieux).
  4. 🧠 Identification de l'unique bout de code qui surveille le chat et compare ce que vous tapez à ces mots-clés.

Et là, le verdict tombe.

Le verdict brut de Claude Code

Pas de tri, pas de retouche, pas de mise en scène. Voici mot pour mot ce que l'IA nous a répondu :

Codes secrets (cheats) trouvés dans EMPIRES.EXE

=================================================

Méthode : la table de chaînes de triche est stockée en clair dans la section .data du binaire (offsets fichier 0x14a468-0x14a52c). Chaque chaîne n'est référencée qu'une seule fois dans tout le code, dans une unique fonction de dépouillement du chat (autour de 0x4c99b0-0x4ca194 dans EMPIRES_disasm.txt).

Cette fonction compare le texte tapé dans le chat à chacun de ces mots-clés.

Les vrais codes trouvés ici sont de simples mots-clés à taper directement

dans le chat en partie solo :

  • FOOD -> +1000 nourriture*

  • WOOD -> +1000 bois*

  • GOLD -> +1000 or*

  • STONE -> +1000 pierre*

  •                \(confirmé : la constante 1000\.0 est ajoutée au stock\)*
    
  • DIEDIEDIE -> tue l'unité actuellement sélectionnée*

  • SUICIDE -> fin de partie pour soi (code interne 101)*

  • VICTORY -> déclare la victoire (code interne 102)*

  • RESIGN -> abandonne la partie (code interne 103)*

  • PLAYER1..PLAYER8-> change le joueur actif/contrôlé*

  • GAIA -> change le joueur actif vers "Gaia" (neutre)*

  • QUICK -> mode debug "rapide" (construction accélérée)*

  • ZEUS <num> -> révèle vraisemblablement la carte pour le joueur <num>*

  • RUNPLAY <num> -> charge un replay/test interne (outil de QA)*

  • TIMSAYSCHEAT -> interrupteur maître : vérifié EN PREMIER, avant le test*

  •                "triches autorisées ?"\. Bascule développeur interne*
    
  •                \(clin d'œil à un programmeur Ensemble Studios, "Tim"\)\.*
    
  • LUMBERPULT -> code reconnu, envoie une commande interne ; effet précis*

  • GIVEMENUKE non confirmé (catapulte à bois / toggle "nuke" de debug).*

Tous ces codes (sauf TIMSAYSCHEAT) ne fonctionnent que si la vérification

interne "triches autorisées" renvoie vrai - typiquement en partie solo.

Elle nous a même trouvé un détail culturel : le clin d'œil au dev « Tim » d'Ensemble Studios.

Le moment de vérité : on confronte au wiki

Pour vérifier, on a comparé avec la liste de cheat codes disponible sur aoe.heavengames.com, une référence pour les fans d'AoE. Verdict en trois temps.

La plupart des codes : carton plein.
  • FOOD,
  • WOOD,
  • GOLD,
  • STONE,
  • SUICIDE,
  • VICTORY,
  • RESIGN,
  • QUICK,
  • PLAYER#,
  • GAIA,
  • TIMSAYSCHEAT,
  • GIVEMENUKE...

Tous présents, tous bien identifiés. Rien qu'en lisant le fichier.

Quelques nuances d'interprétation

L'IA a parfaitement lu “quels” mots déclenchent une triche, mais sur l'effet exact en jeu, elle s'est parfois avancée :

  • DIEDIEDIE : tue l'unité sélectionnée => détruit tous les autres joueurs
  • ZEUS : révèle la carte => Used to enable/disable cheats

Rien de dramatique me direz vous et l'IA avait elle-même mis un « vraisemblablement » sur “ZEUS”. Mais ça rappelle une règle d'or : lire le code, oui ; deviner son comportement réel, ça se vérifie.

On trouve de nouvelles choses

L’IA a même trouvé un autre mot clef : “LUMBERPULT”. Ce code-là... n'est même pas dans la liste du wiki. L'IA l'a déterré directement du binaire.

Quand on lui demande d’en préciser l’usage, voici sa réponse :

Ce que je peux confirmer à 100% : c'est un vrai mot-clé, vérifié juste après le test "triches activées", qui déclenche une action bien réelle dans le code, celle-ci met à zéro un seul flag (un octet) sur un sous-objet du joueur ciblé, via une chaîne de pointeurs (joueur[N] → +0x24 → +0x90 → octet à +0x118 = 0). Sans les noms de structures internes du jeu, je ne peux pas dire à quoi correspond ce flag précis (option de debug ? affichage ? IA ?). Donc "LUMBERPULT" est réel, mais son effet en jeu reste non identifié, je préfère le dire plutôt que d'inventer une explication plausible.

Cela vous permet de voir qu’en regardant directement dans le code, on peut apprendre beaucoup de choses.

Et la facture, dans tout ça ?

  • ⏱️ Moins d'une heure de travail.
  • 🪙 Moins de 30% d’une session Claude Pro

Le même que celui que vous utilisez peut-être déjà pour rédiger vos mails ou résumer vos réunions.

En temps normal, combien de temps faut-il à un expert en rétro-ingénierie avec les outils traditionnels ? Comptez une journée. Minimum. Et un niveau de compétence que la plupart des développeurs n'ont pas.

En quelques minutes, avec un abonnement grand public, on a retrouvé tous les cheat codes.

La rétro-ingénierie est devenu l'affaire de tous

Récapitulons ce qu'on vient de faire : on a pris un exécutable compilé, sans code source, sans documentation, et on en a extrait des informations cachées. En moins d'une heure. Sans la moindre expertise. Avec un abonnement à 20€.

Et c'est là qu'il faut s'arrêter une seconde.

Pendant des années, la rétro-ingénierie engineering était réservée à une poignée d'initiés :

  • chercheurs en sécurité
  • hackers chevronnés
  • ingénieurs spécialisés.

Des années de formation, des outils austères, des heures de travail acharné. Pour faire ce qu'une IA abat aujourd'hui en quelques minutes, sur commande, en français approximatif.

Les cheat codes d'Age of Empires ne menacent personne : FOOD,`GOLD, DIEDIEDIE, etc… Au pire, vous gâchez une partie en solo.

Mais la technique, elle, est totalement générique. Et c'est maintenant que le ton change.

Le même procédé, exactement, s'applique à :

  • 📱 une application mobile Android ou iOS : les APK et IPA se décomposent très bien
  • 💻 un logiciel desktop que vous distribuez à vos utilisateurs
  • 🔌 le firmware d'un objet connecté
  • 📦 n'importe quel binaire que vous livrez à l'extérieur.

Et ce qu'on y trouve, parfois et qu'on ne devrait JAMAIS y laisser traîner :

  • des clés d'API codées en dur 🔑
  • des identifiants de bases de données
  • des URLs d'environnements de recette ou de staging
  • des tokens d'authentification oubliés après un debug
  • des commentaires de développeurs qui dévoilent une faille ou toute la logique métier

Souvenez-vous : dans Age of Empires, les mots-clés étaient rangés “en clair” dans le fichier. Vos secrets, s'ils sont mal protégés, sont rangés exactement au même endroit, lisibles avec exactement la même méthode.

Compiler du code ne le rend pas secret.

Ça le rend juste “moins lisible” pour un humain sans outils. Pour une IA équipée des bons skills, la barrière est désormais très, très mince.

Concrètement, à partir de demain :

  • Auditez ce que vous compilez et distribuez.
  • Ne laissez jamais un secret dans votre code, même “juste pour le dev”, même “personne ne regardera jamais”.
  • Utilisez un gestionnaire de secrets (Vault, AWS Secrets Manager, variables d'environnement), jamais le code source.

Parce que ce que vous avez laissé là “temporairement” peut être trouvé aujourd'hui, par n'importe qui, avec un abonnement à 20€ par mois.

En résumant simplement :

  • un exécutable n'est pas un coffre-fort
  • c'est une boîte transparente, il faut juste les bons outils pour la lire
  • et ces outils sont désormais entre toutes les mains.

Je ne reconnais plus Ni les murs, ni les rues

La rétro-ingénierie d'hier non plus, elle n’est plus la même. Bienvenue dans la nouvelle ère. 🚀