2012-02-14 818 views
5

Hace poco hice un juego simple en el que el usuario puede enviar sus puntajes más altos en línea. Es muy fácil hackear el juego aumentando el puntaje alto mediante el uso de software como Cheat Engine. La puntuación más alta se almacena en un número entero. ¿Debería almacenar puntaje alto cifrado en lugar de un número entero y descifrarlo para mostrar en el juego?Anti-piratería de un juego - mejores prácticas, sugerencias

Me preguntaba cuáles son las mejores prácticas desde que soy nuevo en estas cosas (piratería).

+1

Tendrá que ejecutar el juego en su propio servidor y solo comunicar las E/S al cliente para evitar que se subviertan las reglas. –

+1

Ejecutar un programa en un servidor bloqueado es el único 100%. Para las cosas en la máquina del usuario, valide todos los resultados o no se moleste con ningún anti-piratería. –

Respuesta

5

Esta pregunta sobre al GameDev SE tiene lo que estás buscando:

https://gamedev.stackexchange.com/questions/4181/how-can-i-prevent-cheating-on-global-highscore-tables

Otra discusión sobre SO sobre el tema: Suggestions for (semi) securing high-scores in Flash/PHP game

El resumen es que, si bien hay muchos métodos para dificultar las trampas, eventualmente alguien con suficiente tiempo en sus manos eludirá sus medidas de seguridad. La única forma de hacer que las tablas de líderes sean a prueba de hackers es ejecutar la lógica del juego en el servidor.

+0

Sí, como dice el primer enlace. Cree un conjunto de reglas simple que sea reproducible en ambas máquinas. Incluso entonces tienes que preocuparte por los motores de IA (por ejemplo, el ajedrez y el back gammon), por lo que probablemente sea más agradable tomar un conjunto de reglas simple y doblarlo ligeramente para romper los bots establecidos. – John

+0

Probablemente no me haya aclarado lo suficiente. Estoy más interesado en el lado claro. La única restricción que puedo hacer en el servidor es que los puntajes altos son lo suficientemente altos como para aparecer en la lista, pero debajo de cierto valor.Mediante el uso de software como Cheat Engine puedo modificar el valor de puntaje alto en la memoria y será válido para el juego, y se enviará al servidor. Debo hacer controles adicionales en el juego, por ejemplo: maté a 45 enemigos, cada enemigo otorga 10 puntos, lo que suma 450 puntos. Si el valor de los puntos! = 450 reinicie los puntajes a 450. Dígame si necesita más información. – TomazVovk

+0

No importa, el segundo enlace fue el que estaba buscando. No lo leí porque estaba un poco cansado. ¡Gracias! – TomazVovk

-1

La mejor práctica sería enviar los puntajes a través de una conexión encriptada a su servidor usando algún tipo de autenticación. Esto no es trivial y es probable que necesite consultar su plataforma para cualquier funcionalidad de cifrado/seguridad que esté disponible.

La esencia de la investigación de seguridad es poder compartir un secreto sobre el éter (neto). Esencialmente, ambas partes necesitan saber cómo codificar/decodificar los mensajes, pero el método para hacerlo debe mantenerse en secreto desde "El hombre en el medio".

Me gustaría consultar el libro de Tanenbaum en Internetworks o echar un vistazo a "Trusted Computing Module".

+3

¿Qué sucede si adjunto un depurador y cambio el valor que se envía en la memoria antes de cifrarlo? –

+0

@MattiVirkkunen: Entonces probablemente te llame el hombre en el medio. – John

+0

En realidad, el hombre en el medio suele escuchar el tráfico encriptado. Esto es más como "el hombre que le disparó al corredor antes de llegar a la línea de partida". –