Pregunta

Estoy buscando formas seguras de pasar datos entre un cliente que ejecuta Flash y un servidor.Los datos en cuestión serán generados POR la ​​aplicación Flash, que en este caso es tu puntuación después de terminar un juego.Quiero verificar que los datos no estén alterados en el servidor.¿Cuáles son algunos buenos métodos para hacer esto?

Una forma sencilla es realizar algunas operaciones con los datos, como un hash, y pasar el hash al servidor junto con los datos.Sin embargo, alguien con acceso al código fuente del cliente puede romper esto fácilmente.

Editar:Me doy cuenta de que nada será imposible de piratear, pero quiero hacerlo lo más difícil posible.Creo que la solución de @jcnnghm de cifrar datos con una clave pública y, opcionalmente, realizar comprobaciones de cordura y/o recálculos con los registros del juego es la mejor opción.El cifrado SSL también es una buena idea, ya que hace que sea más difícil descifrar lo que realmente se envía al servidor.

¿Fue útil?

Solución

Cifre los datos con una clave pública almacenada en el binario.Esto elevará la barrera de entrada para un ataque.Además de eso, la cordura verifica los datos a medida que llegan al servidor.Esto podría ser tan simple como calcular la cantidad máxima de puntos que de manera realista se podrían ganar por unidad de tiempo de juego, o transmitir los registros del juego al servidor para asegurarse de que la puntuación sea correcta.

Nada será totalmente a prueba de piratería, no importa lo que hagas, pero esto detendrá a todos, excepto a los más decididos.

Actualizar: @marca:Flash admite SSL de forma nativa.

Otros consejos

¿Puede el código que se ejecuta sobre una plataforma no confiable conservar su integridad?No, décadas de esquemas de protección anticopia fallidos me llevan a postular que esto es imposible.Lo contrario, el código malicioso que se ejecuta en una zona de pruebas confiable es factible, pero lo mejor que puede hacer con su problema es hacer que sea inconveniente para las personas hacer trampa.

Consulte el paquete AS3Crypto en http://code.google.com/p/as3crypto/.No lo he probado, pero este paquete afirma ser compatible (parcialmente) con el protocolo TLS 1.0.

TLS proporcionará un túnel seguro entre su aplicación Flash y el servidor.http://en.wikipedia.org/wiki/Secure_Sockets_Layer

@jcnnghm Normalmente no desea usar el cifrado de clave pública (RSA, DSA) para el cifrado de datos a granel debido a su 'gran tiempo computacional.El cifrado de clave pública debe usarse en las fases de protocolo de enlace y acuerdo de clave en un protocolo de seguridad, pero el cifrado de datos masivos debe manejarse mediante un cifrado simétrico como AES y TDES.Los protocolos TLS y SSL funcionan de esta manera.

Mientras la gente pueda acceder al ejecutable (lo cual, a menos que quieras ejecutar el juego en un quiosco cerrado, siempre es el caso), no existe una forma perfectamente segura de hacerlo.

Las industrias de la música y el cine gastaron decenas de millones en DRM, que los aficionados domésticos descifraron en días o semanas.Si no pueden proteger su cosa...

Estoy de acuerdo en que las respuestas dadas sobre nada son a prueba de piratas informáticos.Porque una vez que puedas leerlo, podrás manipularlo/copiarlo y, por lo tanto, descompilarlo.

Otro enfoque que he estado planeando es generar claves únicas pr.sesión del jugador (incluido algún tipo de hora/fecha como valores de sal).

Luego, a lo largo de la aplicación, quizás enviando/transmitiendo periódicamente la puntuación de estado y obteniendo una nueva clave válida.Si esta sincronización falla, interrumpa toda la sesión.

La desventaja de esto podría ser que demasiados jugadores simultáneos reducen la velocidad de respuesta del servidor y, por lo tanto, generan "tiempos de espera falsos" y dejan el servidor de juegos abierto a ataques DoS.

Pero algo relacionado con la renovación de la "clave de sesión" mientras el usuario tiene la sesión, requerirá un poco de administración adicional de la sesión, pero si eso hace que los tramposos trabajen un poco más, seguro que lo intentaré :o)

Por otro lado, NADA es a prueba de piratas informáticos, así que no confíes en ello al 100%, no importa cuán inteligente sea la solución que se te ocurra.

Una última nota también sería dividir su aplicación en módulos/niveles, etc.para que no tengas acceso a cada parte del código, simplemente iniciándolo.

Actualmente mi plan es construir un gran mundo multinivel y el cliente/jugador SÓLO obtendrá los archivos adjuntos a la parte en la que reside el jugador.

Espero que esto sea de alguna utilidad para tus pensamientos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top