Hacker un jeu : obtenir 100 % de victoires dans Magic: The Gathering Arena
- Découverte d’une méthode pour forcer l’adversaire à abandonner automatiquement dans Magic: The Gathering: Arena
- Proposition de fournir le code source ainsi qu’une solution, avec l’intention signalée de rapporter le problème
Introduction
- Point de vue sur l’obfuscation du code côté client : l’obfuscation élève la barrière pour les personnes peu investies, mais constitue aussi un obstacle pour les développeurs passionnés qui signalent des failles de sécurité
- Dans un jeu de cartes, l’état de la partie est entièrement géré côté serveur, et le client ne reçoit que les informations nécessaires
- Le client ne disposant que d’informations limitées, le hacking est difficile
Premiers pas
- Début du hacking du jeu par l’analyse des communications réseau
- MTGA, écrit en C#, facilite la manipulation des objets du jeu à l’exécution
- Utilisation de la réflexion, qui permet d’accéder aux champs et méthodes privés
Trouver des indices
- La décompilation C# utilise des jetons de métadonnées pour les relier à des noms lisibles par des humains
- Découverte de la fonction
JoinMatch, supposée être le point de première connexion au serveur de jeu
L’implémentation de Sparky
- Sparky, la mascotte de MTGA, est le tutoriel et le bot d’entraînement pour les nouveaux joueurs
- La logique du bot s’exécute en local, et tout le processus de décision a lieu sur l’ordinateur de l’utilisateur
Le diable est dans les détails de l’implémentation
- Au lancement d’un match contre le bot, la logique réelle du bot est gérée via la classe
HeadlessClient - Le bot se connecte au serveur de jeu et fait avancer la partie sans avoir besoin de rendre visuellement le plateau de jeu
Prendre le contrôle du match
- Grâce à la réflexion, il est possible de modifier le comportement des objets du jeu
- Écriture d’un code permettant d’identifier son propre siège, puis de connecter un client sur l’autre siège afin de forcer l’adversaire à abandonner
L’avis de GN⁺
Le point le plus important de cet article est l’attitude responsable du développeur, qui partage sa découverte d’une faille de sécurité afin qu’elle puisse être corrigée. Il est particulièrement intéressant de constater que, même dans un système comme un jeu de cartes où le serveur gère entièrement l’état de la partie, il peut exister des vulnérabilités permettant de manipuler le résultat via des modifications côté client. Ces informations offrent aux développeurs de jeux une leçon précieuse pour renforcer la sécurité et rendre les parties plus équitables.
1 commentaires
Avis Hacker News
Une expérience de découverte de Linux en analysant le trafic réseau
L’efficacité impressionnante de l’IA pour le jeu Magic: The Gathering
La complexité et l’efficacité du développement d’une IA pour Magic: The Gathering
Intérêt pour des projets personnels autour de MTGA et pour le hacking de jeux
Le plaisir de jouer à Magic 93/94 avec son fils
L’importance de la logique de jeu côté client et la nécessité d’une validation côté serveur
Un bug dans League of Legends et son impact
Questions sur la connexion de l’IA en cours de partie et sur la gestion des abandons de l’adversaire
Expérience de réutilisation de paquets de connexion serveur dans Diablo 2
Intérêt pour le développement d’un émulateur de serveur et pour les matchs en LAN