Para evitar hacks básicos de Cheat Engine que manipulan los valores de tus variables, entonces debes ocultar esos valores. Por lo general, Cheat Engine se usa para identificar la ubicación de la memoria de variables interesantes (por ejemplo, la cantidad de oro o vida o el nivel de actualización de una habilidad) haciendo una búsqueda del valor conocido de dicha variable, jugar más del juego y hacer que el valor cambiar, entonces Cheat Engine haría una nueva búsqueda a partir del resultado de la búsqueda anterior del nuevo valor. Esto permite que el tramposo amplíe la ubicación de la memoria del valor, ahora puede cambiar el valor de esa ubicación de memoria usando Cheat Engine.
Por ejemplo, tengo 245 GOLD ... con Cheat Engine busco 245 y encuentro muchas ubicaciones de memoria. Luego juego un poco más y llevo mi oro hasta 314, luego busco en la salida de búsqueda anterior el valor 314 y encuentro fácilmente la ubicación de la memoria donde se almacena GOLD.
La forma de evitar esto es nunca tener el valor real almacenado en una ubicación de memoria. Por ejemplo, almaceno el valor en un objeto que tiene que calcular el valor real a pedido cuando es necesario. Entonces, digamos que el jugador tiene 245 ORO. Si realizan una búsqueda de una ubicación de memoria con el valor 245, pueden encontrar muchas, pero ninguna de ellas será la ubicación de la memoria donde realmente se almacena el valor de oro, eso es porque no almacena el valor 245 para el oro. Cuando el juego necesita saber cuánto oro, le preguntará al objeto que tiene el valor, que lo calculará a pedido.
Entonces, la pregunta ahora es: ¿cómo exactamente almacena un valor de una manera que no lo revele? Esto se vuelve un poco complicado y feo, y estoy seguro de que hay muchas maneras de hacerlo. Lo que me gusta hacer es almacenar una matriz booleana (o matriz de bytes). La longitud de la matriz puede ser cualquier cosa, pero digamos que es 13. Luego tienes un contador que representa cuántas veces va 13 a ese valor real. Entonces, si queremos representar 245, entonces el contador tendría un valor de 18. Ahora la matriz tendría todos los valores booleanos establecidos en verdadero para el resto de 245/13 ... básicamente el módulo. En este caso, son 11, por lo que los primeros 11 booleanos en la matriz se establecerían en verdadero, el resto en falso. Para recuperar el valor, todo lo que necesita hacer es multiplicar el contador por la longitud de la matriz, luego agregar 1 para cada conjunto booleano a verdadero (deteniéndose en el primer falso). Ahora, el número 245 nunca se almacenaría en ningún lugar y sería difícil encontrar la ubicación de la memoria que necesitaría manipular para alterar la cantidad de oro. Es posible que desee establecer la longitud de la matriz en diferentes tamaños (tal vez elegir aleatoriamente un número entre un rango razonable) cuando se crea este objeto.
EDITAR: Esto es útil para jugadores múltiples y un jugador. Hay trampas que también se pueden hacer en el modo multijugador, donde los valores en los paquetes pueden alterarse. Esto requeriría diferentes técnicas para prevenir, como firmar cada paquete.