>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Java

Jak złamać generator liczb losowych w Minecraft i zdobyć dowolne zaklęcia

Na pierwszy rzut oka Minecraft wygląda jak prosta piaskownica do budowania z bloków. W rzeczywistości pod maską gra uruchamia cały stos algorytmów matematycznych, które kontrolują generowanie świata, spawn mobów i dropy przedmiotów. Przez długi czas gracze traktowali zaklęcia na stole do zaklęć jako czystą ruletkę. Wydajesz 30 poziomów zebranego doświadczenia, mając nadzieję na "Jedwabisty Dotyk" lub "Efektywność V", a gra daje ci skromnego "Niezniszczalność III".

Nie można oszukać matematyki, ale można ją obliczyć. Każda postać otrzymuje ukrytą wartość numeryczną — seed XP — gdy spawnuje się w świecie lub po każdym zaklęciu. To właśnie dokładnie determinuje, jakie opcje zaklęć stół zaproponuje. Repozytorium EnchantmentCracker autorstwa dewelopera Earthcomputer zostało stworzone specjalnie po to, by zdekodować ten ukryty parametr i wyeliminować element zgadywania.

Jak działa łamanie seeda zaklęć

Minecraft Java Edition wykorzystuje standardowy liniowy generator kongruencyjny (LCG) do generowania liczb pseudolosowych. Gdy otwierasz interfejs stołu do zaklęć, gra pobiera twój aktualny seed XP, przepuszcza go przez algorytm i pokazuje trzy dostępne opcje.

Każda opcja zaklęcia dostarcza nam fragment informacji o wewnętrznym stanie PRNG. Działanie narzędzia wygląda następująco:

  1. Kładziesz przedmiot na stole do zaklęć i wprowadzasz podpowiedzi widoczne na ekranie do programu (wymagany poziom i nazwę zaklęcia w etykietce).
  2. Wykonujesz tanie zaklęcie pierwszego poziomu lub wrzucasz przedmiot do książki, aby przesunąć seed.
  3. Wprowadzasz nowe zmienione dane do narzędzia.
  4. Narzędzie wykorzystuje matematyczne filtrowanie stanu, aby obliczyć dokładny 32-bitowy seed XP twojej postaci.

Gdy seed zostanie złamany, matematyczna niepewność znika. Program zna dokładną kolejność wszystkich przyszłych zaklęć. Jeśli potrzebnych zaklęć nie ma w następnym podejściu, narzędzie oblicza dokładnie, ile liczb losowych trzeba "pominąć" (na przykład przez wrzucanie przedmiotów lub manipulację stojakami na zbroje), aby odpowiedni zestaw zaklęć pojawił się w pierwszej linii stołu.

Szczera uwaga autora

Plik README repozytorium wita nas nieoczekiwanym ostrzeżeniem od samego autora. Earthcomputer pisze wprost: najprawdopodobniej nie potrzebujesz używać tego samodzielnego programu.

Powód jest taki, że ręczne wprowadzanie liczb z interfejsu gry do osobnego okna to żmudny proces. Jedna cyfra źle wpisana i będziesz musiał zaczynać całe obliczenia od nowa. Dlatego autor stworzył wygodną alternatywę w postaci modyfikacji klienta Fabric clientcommands. Modyfikacja odczytuje dane bezpośrednio z pamięci klienta i automatyzuje proces za pomocą komendy /cenchant.

Więc dlaczego potrzebne jest samodzielne repozytorium EnchantmentCracker?

Po pierwsze, to świetny przykład uczenia się, jak inżynieria wsteczna algorytmów i analiza PRNG są pakowane w samodzielną aplikację GUI na pulpicie w Javie. Po drugie, nie wszystkie serwery pozwalają dołączyć z zmodyfikowanymi klientami. Jeśli grasz gdzieś, gdzie jakakolwiek modyfikacja zewnętrzna jest wykrywana przez anty-cheat, zewnętrzne narzędzie pozostaje jedyną bezpieczną opcją.

Kompilacja i uruchomienie ze źródeł

Projekt jest napisany w Javie i wykorzystuje system budowania Gradle. Wewnątrz znajdziesz działającą graficzną aplikację opartą na Swing.

Aby uruchomić wstępnie zbudowaną wersję, potrzebujesz zainstalowanej Javy. Pobierz archiwum z sekcji releases i uruchom plik wykonywalny w folderze bin:

  • W systemie Windows jest to plik enchcracker.bat.
  • W systemach Linux i macOS — skrypt enchcracker.

Jeśli chcesz samodzielnie zbudować projekt ze źródeł, procedura jest standardowa:

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

Gotowe archiwum zip ze skryptami wykonywalnymi pojawi się w katalogu build/distributions. Możesz też uruchomić aplikację bezpośrednio bez wcześniejszego budowania za pomocą polecenia ./gradlew run.

Dla tych, którzy chcą zagłębić się w kod, projekt łatwo importuje się do IntelliJ IDEA lub Eclipse. Projekt nie opiera się na złożonych bibliotekach zewnętrznych, więc struktura jest przejrzysta.

Lokalizacja i wsparcie projektu

Repozytorium ma obsługę wielu języków poprzez standardowe pliki .properties w folderze resources/i18n. Deweloper szczerze przyznaje, że zna tylko angielski, więc nie może samodzielnie utrzymywać tłumaczeń.

Jeśli szukasz łatwego sposobu na złożenie pierwszego Pull Requesta do projektu open source, dodanie lokalizacji lub poprawienie tłumaczenia to świetny punkt wejścia. Autor jest nawet skłonny zaakceptować tłumaczenia przez zwykłe Issues, jeśli ktoś nie ma jeszcze doświadczenia w pracy z Git.

Kto powinien studiować kod źródłowy

EnchantmentCracker to kompaktowy, ale kompletny projekt z interesującym kontekstem. Pokazuje, jak matematyczna podatność w kodzie gry przeradza się w praktyczne narzędzie dla graczy i badaczy.

Kod projektu warto przejrzeć, jeśli interesuje cię:

  • Jak generatory liczb pseudolosowych w grach są analizowane i deanonimizowane w praktyce.
  • Jak zorganizowana jest struktura międzyplatformowej aplikacji Java budowanej przez Gradle.
  • Jak wygląda implementacja narzędzia pulpitu z wymienną lokalizacją w czystej Javie.

Nawet w grze z milionową publicznością, mechanika losowości może zostać poddana ścisłym obliczeniom matematycznym, jeśli wiesz, gdzie szukać.

Powiązane projekty