Proč je X-ray jiný než každý jiný cheat
Každý jiný cheat na tomhle webu vyrobí něco, na co server může ukázat. Fly modul hlásí pozici, kterou gravitace nedovolí. Reach modul trefí z příliš velké dálky. Timer posílá pakety rychleji, než je tick smyčka umí vyrobit.
X-ray nevyrobí nic. Upraví vykreslování klienta tak, že kámen je průhledný a ruda ne. Každý paket, který klient potom pošle, je naprosto obyčejný: hráč někam dojde a rozbije blok, přesně jako každý jiný hráč, který někam dojde a rozbije blok. Není co chytat, protože cheat nic nelegálního neposílá.
Tenhle jediný fakt určuje všechno o tom, jak se má X-ray řešit, a je to ta část, kterou většina diskusí přeskočí.
Co se místo toho dá měřit
Když se nedá chytit skutek, dá se počítat výsledek. Hráč, který normálně těží, přemístí na každou nalezenou rudu velké množství kamene — to je podstata těžby. Hráč, který láme jen rudu, ne. Na dostatečně velkém vzorku je poměr mezi tím dvojím rozdělí.
Důležité slovo je „dostatečně velkém". Rozmístění rudy je náhodné, žíly se shlukují a šťastný úsek je normální věc, která normálnímu hráči potká. Poměr spočítaný přes krátkou session neříká vůbec nic. Začne něco znamenat, teprve když je vzorek tak velký, že štěstí přestává být věrohodným vysvětlením — a i pak je to pravděpodobnost, ne důkaz.
Se statistickou kontrolou zacházet statisticky
Protože jde o odvození, ne o pozorování, správný návrh je záměrně slabý:
- Vzorek musí být velký, než se poměru dovolí něco znamenat.
- Závažnost je nízká, takže flag přispěje do průběžné úrovně porušení jen málo.
- Prahy jsou nastavené tak, aby kontrola sama o sobě nedosáhla na automatický kick. I silný X-ray signál by měl vyžadovat, aby bylo špatně ještě něco dalšího, než někoho odstraníme.
Správným výsledkem X-ray flagu je operátor, který se podívá na podklady: tenhle hráč, tenhle poměr, přes tolik bloků. To je něco, co člověk umí zvážit proti tomu, jak se hráč chová, kde kopal a co o něm server ještě ví. Není to nic, co by se mělo předat automatickému banu, protože automatický ban se neumí splést potichu.
Kdo vám prodává Minecraft anticheat se slibem spolehlivého odhalování X-raye, popisuje buď ban wave s mírou falešných poplachů, o které vám neřekl, nebo komponentu běžící na stroji člověka, kterého se snaží chytit.
Nuker: chycený přímo
Nuker je opačný případ. Láme bloky mnohem rychleji, než dovolí ruka, a často bloky, u kterých hráč nestojí — a obojí je přímo pozorovatelné.
Hráč má jednu ruku. Několik různých bloků dokončených v jednom ticku není rychlý klient, ale klient porušující pravidlo, které se v této hře neohýbá. A blok mimo dosah ruky nejde trefit vůbec, ať držíte cokoli — je to tentýž limit dosahu, který platí pro souboj.
Jeden implementační detail je důležitější, než vypadá. Počítat se má jen dokončení lámání. Klient hlásí i to, že lámat začal, a v kreativním režimu to posílá spolu s dokončením téhož bloku. Počítat obojí zdvojnásobí každé lámání a udělá z běžného kreativního stavění nuker flag.
Scaffold a tower: pokládání bloků, na které se nedíváte
Scaffold pokládá most pod hráče kráčejícího vpřed, na horní stěny bloků za ním. Tower dělá totéž svisle, u vlastních nohou hráče, jednou za skok. V cheat klientu to jsou různé funkce a na drátě sdílejí jeden tvar: klient pokládá bloky, na které se nedívá.
To je ten signál a je skutečný, protože žádný člověk nestaví most naslepo. Ani jeden se ale neposuzuje podle jednoho položení — položit blok za sebe je běžné stavění a dělá to každý. Modul od stavitele odliší až série: blok za blokem, všechny za zády, všechny za pohybu vpřed, v tempu, které člověk neudrží.
Všechny tři potřebují svět
Každá kontrola tady potřebuje vědět, co daný blok je, a jediné, co to ví, je proud chunků, který server poslal klientovi.
Držet si svět tak, jak přichází, by stálo megabajty na session, což pro proxy s tisíci sessionami nejde. Použitelný přístup je malé okno: chunky v krátkém okruhu kolem hráče, uvolňované, jak se hráč pohybuje. Je to okruh uchování, ne pracovní množina — malé okno pokryje každý blok, na kterém hráč může stát, který může rozbít nebo do kterého může vejít.
Jedna jemnost stojí za zmínku, pokud tohle stavíte: okno musí být širší, než zní nutné. Server pošle chunk ve chvíli, kdy je hráč ještě mnoho chunků daleko, a už ho nikdy neposílá znovu — takže okruh užší než render distance serveru odmítá chunky při příchodu a nechává cache trvale prázdnou. Kontrola pak nikdy nezabere a všechno vypadá v pořádku přesně do chvíle, kdy si všimnete, že nikdy nikoho neoznačila.
Druhé pravidlo je, že dekódování chunků musí selhávat zavřeně. Chunk, jehož sekce nespotřebují přesně tolik bajtů, kolik paket deklaroval, se zahodí celý místo aby se mu částečně věřilo — protože tabulka bloků čtená na špatném offsetu nevyrobí šum, ale sebejisté špatné odpovědi na to, co kde je, a každá kontrola nad tím pak obviňuje nevinné hráče.
Kam to patří
X-ray, nuker a scaffold jsou ta třetina anticheatu, která se týká práce se světem. Pohybovým kontrolám se věnují Fly, speed a timer hacky, soubojovým Killaura a reach hacky a návrhová pravidla platná pro všechny — úrovně porušení, klesání, setbacky, monitorovací režim a proč jsou falešné poplachy tím drahým selháním — rozebírá Co je Minecraft anticheat?.