>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Java

Comment craquer le générateur de nombres aléatoires dans Minecraft et obtenir n'importe quels enchantements

À première vue, Minecraft ressemble à un bac à sable simple pour construire des blocs. En réalité, sous le capot, le jeu exécute tout un ensemble d'algorithmes mathématiques qui contrôlent la génération du monde, l'apparition des mobs et les drops d'objets. Pendant longtemps, les joueurs ont considéré l'enchantement des objets à la table d'enchantement comme une vraie roulette. Vous dépensez 30 niveaux d'expérience accumulée, en espérant obtenir "Touchesoin" ou "Efficacité V", et le jeu vous donne un modeste "Solidité III".

Vous ne pouvez pas tromper les mathématiques, mais vous pouvez les calculer. Une valeur numérique cachée — la graine XP — est assignée à chaque personnage lorsqu'il apparaît dans le monde ou après chaque enchantement. C'est exactement ce qui détermine quelles options d'enchantement la table va proposer. Le dépôt EnchantmentCracker du développeur Earthcomputer a été créé spécifiquement pour décoder ce paramètre caché et supprimer l'élément de devinette.

Comment fonctionne le craquage de la graine d'enchantement

Minecraft Java Edition utilise un générateur congruentiel linéaire standard (LCG) pour la génération de nombres pseudo-aléatoires. Lorsque vous ouvrez l'interface de la table d'enchantement, le jeu prend votre graine XP actuelle, la passe à travers un algorithme, et affiche trois options disponibles.

Chaque option d'enchantement nous donne une information sur l'état interne du PRNG. L'utilitaire fonctionne comme suit :

  1. Vous placez un objet dans la table d'enchantement et entrez les indices que vous voyez à l'écran dans le programme (le niveau requis et le nom de l'enchantement dans l'infobulle).
  2. Vous effectuez un enchantement bon marché de premier niveau ou lancez l'objet dans un livre pour décaler la graine.
  3. Vous entrez les nouvelles données modifiées dans l'utilitaire.
  4. L'outil utilise un filtrage d'état mathématique pour calculer la graine XP exacte en 32 bits de votre personnage.

Une fois la graine craquée, l'incertitude mathématique disparaît. Le programme connaît l'ordre exact de tous les enchantements futurs. Si les enchantements dont vous avez besoin ne sont pas dans la prochaine tentative, l'utilitaire calcule exactement combien de nombres aléatoires doivent être "sautés" (par exemple, en lançant des objets ou en manipulant des supports d'armure) pour que le bon ensemble d'enchantements apparaisse sur la première ligne de la table.

Avertissement honnête de l'auteur

Le README du dépôt nous accueille avec un avertissement inattendu de l'auteur lui-même. Earthcomputer écrit directement : vous n'avez très probablement pas besoin d'utiliser ce programme autonome.

La raison est que saisir manuellement les chiffres depuis l'interface du jeu dans une fenêtre séparée est un processus fastidieux. Un chiffre de travers, et vous devrez recommencer tout le calcul depuis le début. C'est pourquoi l'auteur a créé une alternative pratique sous forme de mod client Fabric clientcommands. Le mod lit les données directement depuis la mémoire du client et automatise le processus via une commande /cenchant.

Alors pourquoi le dépôt EnchantmentCracker autonome est-il nécessaire ?

Premièrement, c'est un excellent exemple d'apprentissage de la façon dont le reverse-engineering des algorithmes et l'analyse du PRNG sont conditionnés dans une application GUI de bureau autonome en Java. Deuxièmement, tous les serveurs ne vous permettent pas de rejoindre avec des clients modifiés. Si vous jouez quelque part où n'importe quel mod tiers est détecté par l'anti-cheat, un utilitaire externe reste la seule option sûre.

Compilation et exécution depuis les sources

Le projet est écrit en Java et utilise le système de build Gradle. Vous y trouverez une interface graphique fonctionnelle basée sur Swing.

Pour exécuter une version préconstruite, vous aurez besoin de Java installé. Téléchargez l'archive depuis la section des releases et exécutez le fichier exécutable dans le dossier bin :

  • Sur Windows, c'est le fichier enchcracker.bat.
  • Sur Linux et macOS — le script enchcracker.

Si vous voulez compiler le projet vous-même depuis les sources, la procédure est standard :

git clone https://github.com/Earthcomputer/EnchantmentCracker
cd EnchantmentCracker
./gradlew build

Une archive zip prête avec les scripts exécutables apparaîtra dans le répertoire build/distributions. Vous pouvez également exécuter l'application directement sans compilation préalable avec la commande ./gradlew run.

Pour ceux qui veulent explorer le code, le projet s'importe facilement dans IntelliJ IDEA ou Eclipse. Le projet ne dépend pas de bibliothèques tierces complexes, donc la structure est transparente.

Localisation et contribution au projet

Le dépôt supporte plusieurs langues grâce aux fichiers Java .properties standard dans le dossier resources/i18n. Le développeur admet honnêtement qu'il ne connaît que l'anglais, donc il ne peut pas maintenir les traductions lui-même.

Si vous cherchez un moyen facile de faire votre première Pull Request sur un projet open, ajouter une localisation ou corriger une traduction est un excellent point d'entrée. L'auteur est même prêt à accepter les traductions via les Issues réguliers si quelqu'un n'a pas encore d'expérience avec Git.

Qui devrait étudier le code source

EnchantmentCracker est un projet compact mais complet avec une histoire intéressante. Il montre comment une vulnérabilité mathématique dans le code d'un jeu se transforme en outil pratique pour les joueurs et les chercheurs.

Le code du projet mérite qu'on y jette un œil si vous êtes intéressé par :

  • Comment les générateurs de nombres pseudo-aléatoires dans les jeux sont analysés et désanonymisés en pratique.
  • Comment la structure d'une application Java multiplateforme compilée via Gradle est organisée.
  • À quoi ressemble l'implémentation d'un utilitaire de bureau avec une localisation interchangeable en Java de base.

Même dans un jeu avec un million de joueurs, les mécaniques d'aléatoire peuvent être soumises à un calcul mathématique strict si vous savez où regarder.

Projets similaires