Ser capaz de descompilar / aplicar ingeniería inversa al código del cliente fácilmente es realmente solo un pequeño obstáculo. Los hackers emprendedores han estado doblando ejecutables a su voluntad (maliciosamente y no) durante años antes de que aparecieran lenguajes de alto nivel, triviales para descompilar como C #. La seguridad solo a través de la oscuridad no es seguridad en absoluto.
Cualquier dato en la máquina del usuario (código o datos de activos regulares) ya está esencialmente comprometido. Realmente no puede protegerse contra eso: si no desea que las personas editen datos, no los ponga en su máquina, guárdelos en sus servidores. Del mismo modo, si no desea que modifiquen el código en el cliente, asegúrese de que el cliente no tenga control sobre nada útil.
Si esa no es una opción (por ejemplo, su multijugador es completamente de igual a igual), puede hacer cosas como calcular hash de los activos relevantes y solo permitir que las personas jueguen entre sí si los hashes coinciden. Sí, alguien podría elaborar cuidadosamente una edición del ejecutable de modo que devuelva un hash diferente, pero todo lo que debería significar es que el jugador infractor desincronizará y se desconectará del juego relativamente rápido porque sus activos no coinciden con el resto de los jugadores'.
También puede emplear un tipo de prueba de "reglas de mayoría" que le permite desconectar jugadores cuya simulación se ha desviado de la sincronización con otros jugadores, dando al jugador "anfitrión" (quien haya comenzado el juego) el voto decisivo.
Cuando recién comenzábamos a desarrollar nuestro juego actual, nosotros también queríamos tener un modo de juego fuera de línea. La idea era dejar que los jugadores jugaran a través de los niveles del juego sin conexión y, de alguna manera, sincronizar su progreso cuando se conectan. Entonces, pensamos mucho sobre cómo podemos evitar las trampas. La conclusión fue: no podemos. Realmente NO hay forma de dejar que los jugadores jueguen sin conexión y estar 100% seguros de que no hicieron trampa.
fuente
Una solución simple utilizada con la descarga de archivos es el hash. Hash el archivo de guardar y almacenar esta "huella digital" en algún lugar. Cuando lo cargue, haga un hash del archivo y compárelo con la huella digital. Si no coinciden, el archivo ha sido modificado.
Por supuesto, si alguien descompila su código, no hay nada que pueda hacer. Para esta respuesta, esto significa que también pueden almacenar el hash del archivo guardado modificado.
Otra opción sería enviar la huella digital a un servidor en algún lugar, donde el usuario final no pueda modificarla manualmente si ha modificado el archivo guardado. Esto es similar a lo que iTunes hace cuando restaura imágenes de iPhone.
fuente