Minecraft #
Il gioco e Java #
Minecraft è stato scritto in java. Questo implica che non esisterà mai un processo del tipo “minecraft.exe”. Minecraft è una semplice task all’interno di un processo della Java Virtual Machine (java.exe o javaw.exe). Il gioco, non essendo stato scritto in un linguaggio compilato direttamente per il sistema operativo (c, c++, c#, rust, etc…), viene avviato tramite dei launcher.
I launcher si occupano semplicemente di tenere un log delle attività, di offrire alcune peculiarità rispetto a quello default e infine, la cosa più ovvia, scopo stesso dei launcher, è il fatto che hanno un comando personalizzato per avviare il gioco (esempio banale: java -jar con tanti argomenti).
Minecraft, come tutti i giochi, non contiene tutte le informazioni, come texture e assets vari, all’interno dell’eseguibile; infatti si appoggia ad una cartella radice, con all’interno un sistema di cartelle che ordina i vari file e risorse di cui gioco fa uso. La cartella di Minecraft, con l’installazione vanilla, si trova in C:\Users\{username}\AppData\roaming\.minecraft
.
Non significa che essa sia l’unica posizione che può avere tale cartella. Un esempio noto può essere MultiMC, un launcher usato da modders e giocatori tecnici di Minecraft, che ha come peculiarità quella di creare una cartella di gioco separata per ogni versione, cosa molto comoda per i modders, poichè permette di tenere ordinate tutte le mod e configurazioni necessarie per diverse esperienze di gioco. Per accedere alla cartella di Minecraft dell’istanza attuale:
Gioco > (ESC) > Opzioni > Pacchetti Risorse (Resource Packs) > Apri cartella pacchetti risorse
I tipi cheats #
I giocatori hanno a disposizione una tra le più vaste gamme di cheat rispetto a qualsiasi altro gioco, questo tutto per alcune peculiarità del gioco (esempio: Java). Una base teorica su cosa ci dobbiamo aspettare è necessaria per svolgere un controllo in autonomia. I cheats si dividono in cinque categorie principali:
- Ghost clients;
- Injection clients;
- External clients;
- Autoclickers;
- Macro e Debounce timer.
Ghost clients #
Forse i client più semplici da trovare, per la quantità di prove che lasciano alla loro esecuzione, ma anche i più sottovalutati. Per definizione i Ghost clients possono essere:
- Versioni: un file
.jar
del gioco modificato che si trova nella cartella.minecraft/version
; - Mod: file
.jar
che permettono di modificare il gioco senza intaccare la versione originale del gioco, estendendola in ambito di funzionalità; - Librerie: sono i vari file
.jar
che Minecraft usa per fare operazioni basiche, come il rendering, etc….
Il loro obbiettivo è eseguire codice direttamente all’interno di Minecraft, indipendentemente dal metodo di accesso al gioco. Una proprietà fondamentale di questi client è il fatto che non si possono trovare fuori dalla cartella radice di Minecraft. Inoltre, essendo parte del gioco, tracce di essi possono essere trovate nella memoria del processo di Minecraft.
Injection clients #
I ghost clients furono la prima tipologia di cheats creata ma, presto gli anticheat divennero migliori, come le persone che controllavano i giocatori. Ci voleva qualcosa di nuovo e quel qualcosa si è rivelato essere l’injection client. Questi programmi riescono ad accedere al gioco, non facendone parte come una mod, versione o libreria. Questo li rende molto più difficili da trovare.
Per capirci qualcosa, forse è meglio capire a il loro funzionamento. Minecraft è stato scritto in Java, ed esso stesso, fornisce strumenti con cui noi sviluppatori possiamo interfacciarci con la Java Virtual Machine. In particolare, questa interfaccia viene usata per implementare del “codice nativo” (c, c++, rust) all’interno di un programma Java. Le librerie che permetto questo sono JNI e JvmTI, rispettivamente Java Native Interface e Java Virtual Machine Tool Interface.
Gli injection clients prendono il formato di librerie allocabili dinamicamente o librerie condivise (.dll, .dylib, .so). Ciò permette ad essi di “attaccarsi” al processo di Minecraft e, di conseguenza, avere accesso alla memoria e il codice del gioco caricato in essa.
Gli sviluppatori dei cheats rendono l’utilizzo di essi più “user-friendly”, creando dei semplici eseguibili che si occupano di iniettare la libreria all’interno del processo di Minecraft. Il nome di questi programmi è injectors. Non bisogna mai confonderli. Un injector può assumere varie forme, mentre un injection client può essere esclusivamente una libreria dinamica.
External clients #
Mentre gli injection clients cercano di approcciare il gioco dall’interno, entrando dentro la Java Virtual Machine, gli external clients provano ad modificare direttamente i valori presenti nello spazio di memoria occupato da Minecraft. Possono assumere varie forme, ma una costante che li accomuna, su Windows, è l’uso delle seguenti chiamate alla Win32API:
- ReadProcessMemory: è una condizione necessaria ma non sufficiente per determinare un cheat.
- WriteProcessMemory: è una condizione necessaria e sufficiente per determinare un cheat.
Per la loro natura, gli external cheats sono molto limitati a livello di funzionalità, ma questa stessa debolezza li rende i più complicati da trovare, non essendo legati direttamente in alcun modo al processo di Minecraft.
Autoclickers #
Gli autoclickers non sono perforza legati a Minecraft in se per se. Essi esistono da molto più tempo e sono molto facili da nascondere. Interagiscono poco con il processo di Minecraft, sfruttando invece le interfacce del sistema operativo per simulare i click. Essendo assenti dalla memoria del processo di Minecraft, assumono un pattern di ricerca nel computer simile a quello degli external clients.
Macro e Debounce timer #
Le macro sono molto semplici come concetto. Istruzioni che si assegnano ad un tasto tramite un software esterno, dedicato alla periferica scelta. Su Minecraft, si utilizzano per aumentare la velocità dei click del player.
Il debounce timer è una feature dei mouse che è stata implementata tanto tempo fa, per prevenire un problema con i tasti dei mouse. I tasti sono essenzialmente una “molla”. Quando cliccati, rimbalzano, inviando al computer un secondo, terzo, quarto click e così via. Il debounce timer parte quando il firmware del mouse rileva il primo click. Esso dura in media dai 10 ai 16 millisecondi, evitando qualsiasi tipo click accidentale da parte del mouse. Questa funzionalità, su alcuni mouse, è modificabile o totalmente rimovibile, permettendo al giocatore di cliccare più velocemente di quanto realmente accaduto. Tutto ciò è possibile facendo uso di particolari metodi di click, detti “mouse abuse”. Su alcuni server, il debounce timer sotto 10 millisecondi è bannabile, proprio perché viene considerato un vantaggio sleale nei confronti del giocatore medio, fornito di un mouse non adatto a metodi di “mouse abuse”. Su altri server viene considerato l’uso di metodi “mouse abuse” se in possesso di mouse Roccat o Bloody, come cheating, poichè il meccanismo che previene il “double click” risulta difettoso. Per evitare confusione, basta seguire in modo preciso il regolamento del server.