Thème d'affichage

WTF : il parvient à jouer à DOOM avec des enregistrements DNS

Nicolas Lecointre · 29 Mar 2026 à 10h23
WTF : il parvient à jouer à DOOM avec des enregistrements DNS

Vous le savez déjà, la question "Can it run DOOM?" est une tradition sacrée de l'informatique depuis les années 90. Calculatrices, tests de grossesse, thermostats, neurones humains cultivés en labo : rien n’est épargné.

Mais Adam Rice, chercheur en sécurité et créateur de challenges CTF ("Capture the Flag"), a trouvé un nouveau support auquel personne n’avait (sans grande surprise) pensé : le DNS.

Oui, le protocole de résolution de noms de domaine. La couche la plus invisible de votre stack réseau, le truc le plus ennuyeux d'Internet, celui qu'on oublie systématiquement jusqu'au jour où notre site ne répond plus, où tout semble pété, et où après 45 minutes de debug acharné vous réalisez que le coupable, c’était juste ce bon vieux DNS.

Le key-value store que personne n'a demandé

Le raisonnement de Rice est d'une logique imparable : les enregistrements de type TXT du DNS peuvent contenir à peu près n'importe quoi. À la base, ils servent surtout à prouver qu'un domaine vous appartient (validation SPF, DKIM, Google Search Console…), mais dans les faits, personne ne vérifie vraiment ce qu'on y met.

Chaque record peut stocker environ 2000 caractères, et une zone DNS peut en contenir des milliers. Le tout est distribué mondialement, mis en cache sur des serveurs répartis aux quatre coins du globe, et interrogeable par quiconque dispose d'une connexion internet.

Autrement dit, le DNS peut être vu comme une espèce de base de données clé-valeur gratuite, distribuée mondialement et sans serveur à gérer.

Comme l’explique Rice sur son blog : si on peut y stocker des données arbitraires, on peut techniquement y stocker un fichier, et si on peut y stocker un fichier, on peut techniquement y stocker un programme.

Il a d'abord testé le concept avec une photo de canard encodée en Base64, découpée en petits morceaux de 2000 caractères chacun et uploadée en TXT records. Le canard est parti en morceaux dans le DNS, il en est ressorti intact avec des hashes identiques. Proof of concept validé.

Meme joueur du grenier la blague est valide avec le texte Le PoC est valide

Il a ensuite envisagé d'y stocker un film entier, mais 1 Go de données nécessiterait environ 670 000 records répartis sur des centaines de domaines. Tester oui, mais pas à l’excès.

Un annuaire qui fait tourner des FPS

Pour DOOM, ça tombe bien, les chiffres sont plus raisonnables. Après compression, le fichier WAD passe de 4 Mo à 1,7 Mo et les DLL du moteur de jeu de 4,4 Mo à 1,2 Mo.

Le tout tient dans environ 1 966 enregistrements TXT sur une seule zone Cloudflare Pro (le tier gratuit plafonne à 185 records, ce qui obligerait à dispatcher DOOM sur une dizaine de domaines différents). L'upload des quelques 2000 records via l'API Cloudflare a pris environ 15 minutes.

Aperçu des enregistrements DNS pour DOOM

Côté moteur, il a utilisé managed-doom, un port C# pur du jeu original. Le problème : le port lisait ses données depuis le disque dur et compilait en exécutable natif, deux choses incompatibles avec l'idée de tout charger en mémoire.

Rice a donc patché le code pour accepter des MemoryStreams, remplacé la bibliothèque de fenêtrage par des appels Win32 directs, et viré l'audio pour économiser de la place. DOOM tourne sans le moindre son, mais à ce niveau de cursed, les démons n’ont plus vraiment besoin d'hurler.

Petit aparté : Rice explique s'être appuyé sur Claude (l'IA d'Anthropic) pour les bouts de C#, langage qu'il ne maîtrise pas (on appréciera la transparence).

Du DNS au frag en quelques secondes

Le script de lancement fait environ 250 lignes de PowerShell. Il résout les quelques 2000 requêtes DNS en 10 à 20 secondes, réassemble tout en mémoire, charge les assemblies .NET par réflexion et lance le jeu.

Rien n'est écrit sur le disque, rien n'est installé, aucune dépendance supplémentaire n'est requise.

Démo de DOOM over DNS

Le DNS a bientôt 45 ans. Il a été conçu pour mapper des noms d'hôtes vers des adresses IP, point. Quand l'IETF (l'organisme qui définit les standards techniques d'Internet) a rédigé le RFC 1035 en 1987, personne n'imaginait qu'on s'en servirait un jour pour distribuer un FPS. Et pourtant, le protocole le plus soporifique d'Internet se révèle aussi l'un des plus détournables.

Le code source complet est disponible sur GitHub, pour celles et ceux parmi vous qui voudraient transformer leur registrar en salle d'arcade.

À propos de l'auteur

Nicolas Lecointre

Nicolas Lecointre

Chief Happiness Officer des développeurs, ceinture noire de sudo. Pour rire, j'ai créé Les Joies du Code. J'utilise Vim depuis 10 ans parce que je sais pas comment le quitter.

Voir sa page auteur

À lire également

Articles similaires