No creo que debas hacer nada para evitar las trampas en juegos para un solo jugador. Sus usuarios compraron el juego, deberían poder hacer trampa si lo desean, siempre y cuando no jueguen contra otros.
Aquí hay algunas cosas que he hecho. Estos se realizaron principalmente para sistemas anti-trampas en juegos de torneos, donde el dinero está en juego, y ciertos niveles de intrusión en el sistema del usuario se consideran aceptables. Sería cuidadoso al hacer algunas de estas cosas en juegos casuales, ya que si tu juego no es estable existe la posibilidad de causar problemas con su sistema.
1) Siempre que sea posible, "Nunca confíes en el cliente" es el principio más seguro que debes cumplir. Realice todas las acciones en el servidor y solo dele al cliente todo el conocimiento necesario para mostrar lo que debería poder ver en la pantalla en cualquier momento. es decir, si un cliente no conoce la posición de un jugador que está escondido detrás de una pared, un truco de pared no le hará ningún bien al usuario. Para los juegos de acción de alta velocidad esto puede ser extremadamente difícil, especialmente ahora que las sombras en tiempo real son la norma, donde el usuario puede necesitar ver una sombra incluso si el cuerpo del jugador es visible, pero siempre debe ser en la parte superior de tus opciones También es extremadamente difícil de hacer en juegos peer-to-peer, pero hay formas de limitar el conocimiento entre pares. Solo cuando se convierte en un rendimiento prohibitivo, o fuera de su presupuesto de tiempo/dinero, deben considerarse los siguientes elementos.
2) Abra todos los demás procesos y enganche sus funciones WriteProcessMemory para que no puedan escribir en la memoria en el proceso de su juego. Hecho en este paso, bloqueará el 90% de todos los trucos y trampas.
3) Haga lo mismo, conectando las diversas funciones de emulación de mouse y teclado. Esto evitará muchos aimbots y otros tipos de bots de automatización.
4) Enganche en las funciones VirtualProtectEx/VirtualAllocEx/etc en el proceso de su juego y controle qué módulos están cambiando los niveles de protección o asignando nuevos trozos de memoria. Tienes que ser astuto con esto para evitar que sea demasiado intensivo en la CPU cuando tu juego hace muchas asignaciones, pero se puede hacer.
5) Enganche en las funciones de LoadLibrary y supervise las DLL que se cargan dinámicamente para evitar la inyección de DLL.
6) Usa alguna codificación polimórfica ligera en las conexiones de tu juego.
7) Use algunas técnicas anti-depuración para evitar que los depuradores se adhieran a sus procesos. Google anti-depuración y deberías poder encontrar muchas cosas.
8) Utilice un empacador de PE personalizado para evitar el desmontaje útil de su juego.
9) Enganche sus funciones y métodos OpenGL o Direct3D que se ocupan de la transparencia y la mezcla alfa.
10) Si utiliza sombreadores, suma de comprobación sus sombreadores y los valores constantes del sombreador.
11) Utilice técnicas adicionales de eliminación de oclusiones en los personajes del jugador para evitar que se rendericen cuando la línea de visión esté bloqueada por otra geometría. Puede o no ayudar con su rendimiento también, pero evitará muchos wallhacks.
Si su juego usa partidas guardadas, debe verificar la edición del juego de salvar y corromper – Jim