Per evitare gli hack di Cheat Engine di base che manipolano i valori delle variabili, è necessario nascondere tali valori. Tipicamente, Cheat Engine viene utilizzato per identificare la posizione della memoria di variabili interessanti (ad esempio la quantità di oro o di vita o il livello di potenziamento di un'abilità) facendo una ricerca del valore noto di detta variabile, giocare più del gioco e far sì che il valore cambia, quindi Cheat Engine eseguirà una nuova ricerca dal risultato della ricerca precedente per il nuovo valore. Ciò consente al cheat di ingrandire la posizione di memoria del valore, ora possono cambiare il valore di quella posizione di memoria usando Cheat Engine.
Ad esempio, ho 245 GOLD ... con Cheat Engine faccio una ricerca di 245 e trovo molte posizioni di memoria. Poi gioco ancora un po 'e porto il mio oro fino a 314, quindi cerco l'output di ricerca precedente per il valore 314 e trovo facilmente la posizione di memoria in cui è memorizzato GOLD.
Il modo per evitarlo è di non avere mai il valore reale archiviato in una posizione di memoria. Ad esempio, memorizzo il valore in un oggetto che deve calcolare il valore reale su richiesta quando richiesto. Quindi diciamo che il giocatore ha 245 ORO. Se eseguono una ricerca di una posizione di memoria con il valore 245, potrebbero trovarne molte, ma nessuna di esse sarà la posizione di memoria in cui è effettivamente memorizzato il valore dell'oro, perché non memorizzi il valore 245 per l'oro. Quando il gioco deve sapere quanto oro, chiederà all'oggetto che ne detiene il valore, che lo calcolerà su richiesta.
Quindi la domanda ora è: come si memorizza esattamente un valore in un modo che non lo rivela? Questo diventa un po 'complicato e brutto e sono sicuro che ci sono molti modi per farlo. Quello che mi piace fare è memorizzare un array booleano (o array di byte). La lunghezza dell'array può essere qualsiasi, ma diciamo che è 13. Quindi hai un contatore che rappresenta quante volte 13 vanno in quel valore reale. Quindi, se vogliamo rappresentare 245, il contatore avrebbe un valore di 18. Ora l'array avrebbe tutti i valori booleani impostati su true per il resto di 245/13 ... sostanzialmente il modulo. In questo caso è 11, quindi i primi 11 booleani nell'array sarebbero impostati su true, il resto su false. Per recuperare il valore, basta moltiplicare il contatore per la lunghezza dell'array, quindi aggiungere 1 per ogni set booleano su true (fermandosi al primo falso). Ora il numero 245 non sarebbe mai stato memorizzato da nessuna parte e sarebbe difficile trovare la posizione della memoria che avrebbe bisogno di essere manipolata per modificare la quantità di oro. Potresti voler impostare la lunghezza dell'array su dimensioni diverse (magari scegliere un numero a caso tra un intervallo ragionevole) quando viene creato questo oggetto.
EDIT: è utile per multiplayer e single player. Ci sono trucchi che possono essere fatti anche in multiplayer, in cui i valori nei pacchetti possono essere modificati. Ciò richiederebbe diverse tecniche per prevenire, come la firma di ogni pacchetto.