>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Java

Hoe je de Random Number Generator in Minecraft kunt kraken en elke betovering krijgt die je wilt

Op het eerste gezicht lijkt Minecraft een eenvoudige sandbox voor het bouwen van blokken. In werkelijkheid draait het spel onder de motorkap een hele reeks wiskundige algoritmen die wereldgeneratie, mob-spawning en itemdrops bepalen. Voor een lange tijd beschouwden spelers het betoveren van voorwerpen aan de betoveringstafel als pure roulette. Je besteedt 30 levels aan opgehoopte ervaring, in de hoop "Silk Touch" of "Efficiëntie V" te krijgen, en het spel geeft je een bescheiden "Onbreekbaarheid III".

Je kunt wiskunde niet voor de gek houden, maar je kunt het wel berekenen. Elke speler krijgt een verborgen numerieke waarde toegewezen — de XP-seed — bij het spawnen in de wereld of na elke betovering. Dit is precies wat bepaalt welke betoveringsopties de tafel zal tonen. De EnchantmentCracker-repository door ontwikkelaar Earthcomputer is specifiek gemaakt om deze verborgen parameter te decoderen en het giswerk te verwijderen.

Hoe het kraken van de betoverings-seed werkt

Minecraft Java Edition gebruikt een standaard lineaire congruentiegenerator (LCG) voor pseudo-willekeurige nummergeneratie. Wanneer je de betoveringstafelinterface opent, neemt het spel je huidige XP-seed, voert het door een algoritme, en toont drie beschikbare opties.

Elke betoveringsoptie geeft ons een stukje informatie over de interne staat van de PRNG. Het hulpmiddel werkt als volgt:

  1. Je plaatst een voorwerp in de betoveringstafel en voert de hints die je op het scherm ziet in het programma in (het vereiste level en de betoveringsnaam in de tooltip).
  2. Je voert een goedkope eerste-level betovering uit of gooit het voorwerp in een boek om de seed te verschuiven.
  3. Je voert de nieuwe gewijzigde gegevens in het hulpmiddel in.
  4. Het gereedschap gebruikt wiskundige statusfiltering om de exacte 32-bit XP-seed van je personage te berekenen.

Zodra de seed is gekraakt, verdwijnt de wiskundige onzekerheid. Het programma kent de exacte volgorde van alle toekomstige betoveringen. Als de betoveringen die je nodig hebt niet in de volgende poging zitten, berekent het hulpmiddel precies hoeveel willekeurige nummers er "overgeslagen" moeten worden (bijvoorbeeld door voorwerpen te gooien of armor stands te manipuleren) om de juiste set betoveringen op de eerste regel van de tafel te krijgen.

Eerlijke disclaimer van de auteur

De repository README begroet ons met een onverwachte waarschuwing van de auteur zelf. Earthcomputer schrijft rechtstreeks: je hebt dit standalone programma hoogstwaarschijnlijk helemaal niet nodig.

De reden is dat het handmatig invoeren van getallen uit de spelinterface in een apart venster een vermoeiend proces is. Eén cijfer verkeerd, en je moet de hele berekening helemaal opnieuw beginnen. Daarom heeft de auteur een handig alternatief gemaakt in de vorm van een Fabric client mod clientcommands. De mod leest gegevens rechtstreeks uit het geheugen van de client en automatiseert het proces via een commando /cenchant.

Dus waarom is de standalone EnchantmentCracker-repository dan wel nodig?

Ten eerste is het een prima leervoorbeeld van hoe het reverse-engineeren van algoritmen en PRNG-analyse worden verpakt in een standalone desktop GUI-toepassing in Java. Ten tweede staan niet alle servers toe dat je met gewijzigde clients meedoet. Als je ergens speelt waar elke externe tool wordt gevolgd door anti-cheat, blijft een extern hulpmiddel de enige veilige optie.

Bouwen en uitvoeren vanuit de broncode

Het project is geschreven in Java en maakt gebruik van het Gradle build-systeem. Binnenin vind je een werkende op Swing gebaseerde grafische interface.

Om een vooraf gebouwde release te draaien, heb je Java geïnstalleerd nodig. Download het archief van de releases-sectie en voer het uitvoerbare bestand uit in de bin map:

  • Op Windows is dit het enchcracker.bat bestand.
  • Op Linux en macOS — het enchcracker script.

Als je het project zelf vanuit de broncode wilt bouwen, is de procedure standaard:

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

Een kant-en-klaar zip-archief met uitvoerbare scripts verschijnt in de build/distributions map. Je kunt de toepassing ook rechtstreeks draaien zonder eerst te bouwen met het ./gradlew run commando.

Voor degenen die in de code willen duiken, importeert het project gemakkelijk in IntelliJ IDEA of Eclipse. Het project maakt geen gebruik van complexe externe bibliotheken, dus de structuur is transparant.

Lokalisatie en bijdragen aan het project

De repository heeft ondersteuning voor meerdere talen via standaard Java .properties bestanden in de resources/i18n map. De ontwikkelaar geeft eerlijk toe dat ze alleen Engels kent, dus ze kunnen de vertalingen zelf niet onderhouden.

Als je op zoek bent naar een eenvoudige manier om je eerste Pull Request naar een open project te doen, is het toevoegen van lokalisatie of het corrigeren van een vertaling een geweldig startpunt. De auteur is zelfs bereid om vertalingen via reguliere Issues te accepteren als iemand nog geen ervaring heeft met werken met Git.

Wie zou de broncode moeten bestuderen

EnchantmentCracker is een compact maar compleet project met een interessant verhaal. Het toont hoe een wiskundige kwetsbaarheid in spelcode wordt omgezet in een praktisch hulpmiddel voor spelers en onderzoekers.

De projectcode is de moeite waard om te bekijken als je geïnteresseerd bent in:

  • Hoe pseudo-willekeurige nummergeneratoren in games worden geanalyseerd en geanonimiseerd in de praktijk.
  • Hoe de structuur van een cross-platform Java-toepassing die via Gradle wordt gebouwd, is georganiseerd.
  • Hoe desktop utility-implementatie met verwisselbare lokalisatie eruitziet in basis-Java.

Zelfs in een spel met een miljoen-spelerspubliek kunnen willekeurigheidsmechanismen worden onderworpen aan strikte wiskundige berekening als je weet waar je moet kijken.

Gerelateerde projecten