Asegurarse de que los datos guardados no se hayan editado en un juego con componentes tanto sin conexión como en línea

8

Estoy en la fase de planificación previa de crear un diseño de juego y me preguntaba si había una manera sensata de evitar que la gente editara las partidas guardadas en un juego con componentes fuera de línea y en línea.

El componente fuera de línea permitiría al jugador jugar a través del juego y el componente en línea les permitiría jugar contra otros jugadores, por lo que debería asegurarme de que las personas no hayan editado el código fuente / guarden archivos mientras están fuera de línea para obtener una ventaja mientras está en línea

Es probable que el juego se desarrolle en .Net o Java, que desafortunadamente son fáciles de descompilar.

Omar Kooheji
fuente

Respuestas:

10

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.


fuente
3

Si todos los datos se generan del lado del cliente, no hay nada que pueda hacer al respecto. No puede distinguir la diferencia entre una edición realizada por su software y una edición realizada por alguien u otra cosa que pretende ser su software.

Un elemento disuasorio que puede probar es encriptar el archivo guardado, utilizando una clave en el software. Desafortunadamente, si el usuario es lo suficientemente bueno para editar un archivo guardado, también es lo suficientemente bueno como para encontrar la clave en su software.

Puede evitar que las personas editen los archivos guardados al no almacenarlos en la máquina del cliente, por ejemplo. cargándolos al servidor, ¡pero eso no impide que carguen un guardado pirateado en primer lugar! Los juegos en línea resuelven este problema manteniendo el estado autorizado del juego en su servidor todo el tiempo, pero eso no funcionará para su modo fuera de línea.

Entonces, en realidad, la respuesta es no: cualquier cosa que tu juego pueda hacer para editar, ocultar o encriptar los datos también puede hacerlo un hacker.

Kylotan
fuente
Me doy cuenta de que esto es más o menos lo que Josh ya dijo, pero tuve un corte de Internet y no pude publicar esto hace 30m cuando lo escribí por primera vez.
Kylotan
1

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.

No importa
fuente
1

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.

cenizas999
fuente