Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: AgeR en 20 de Mayo de 2005, 09:48:57 AM

Título: Envio Seguro De Puntuaciones
Publicado por: AgeR en 20 de Mayo de 2005, 09:48:57 AM
 Hola, hace poco puse un post con un jueguecito, el BallClicks.

Bueno, resulta que algún imbécil se ha empeñado en perder su tiempo averiguando cada fórmulita que he puesto para calcular el código de seguridad para subir las puntuaciones, y cada dos por tres aparece un record suyo con tropemil puntos.

La pregunta... hay algún modo de poder enviar los records de forma algo más segura mediante paso de parámetros por url tal como hago ahora, o me tendría que poner con conexiones http desde el programa? En caso de esto último, alguien tiene alguna experiencia?

Gracias!
Título: Envio Seguro De Puntuaciones
Publicado por: Lord Trancos 2 en 20 de Mayo de 2005, 10:26:33 AM
 Yo para este tipo de cosas usaria algo asi:

1 - Convierto los datos que quiero enviar en una cadena hexadecimal.
  Ej:  AB8034

2 - Añado (con alguna formula) a esa cadena otros datos fijos (siempre los mismos).
 Por ejemplo, intercalo cada 2 caracteres la letra A.
 Ej: AB8034 ---> ABA80A34A

3 - Calculo el MD5 del resultado del punto 2.

4 - Envio: la cadena hexadecimal del punto 1 + el MD5 del punto 3.
 Ej: AB8034XXXXXXXXXXXXX... ( donde XXXX.... es el MD5)

Cuando llegan los datos al servidor, lo unico que tienes que hacer es coger los datos del punto 1 y volver a calcular el MD5. Si coincide, ya sabes que es válido.

Obviamente el sistema lo puede romper cualquier hacker que se esfuerze un poco, todo dependra de hasta que punto es competente el tipo que te esta jodiendo.

EDIT: Cuanto mas complejo sea el punto 2, mas complicado será de romper.
Título: Envio Seguro De Puntuaciones
Publicado por: Topper en 20 de Mayo de 2005, 12:58:33 PM
 Hola, yo creo que con encriptar la información con un algoritmo de clave pública-privada sería suficiente.

Prueba un rijndael o alguno del estilo.

Saludos.
Título: Envio Seguro De Puntuaciones
Publicado por: Mars Attacks en 20 de Mayo de 2005, 01:19:19 PM
 Hola, yo creo que dejes disfrutar a ese capullo. Si quieres, haz dos zonas de récords, la de "récords serios" y la de "récords de gente aburrida" XD
Título: Envio Seguro De Puntuaciones
Publicado por: Pogacha en 20 de Mayo de 2005, 01:44:57 PM
 Encuentra al culpable y que lo encierren ...  :lol:

Citar2 - Añado (con alguna formula) a esa cadena otros datos fijos (siempre los mismos).
Por ejemplo, intercalo cada 2 caracteres la letra A.
Ej: AB8034 ---> ABA80A34A

mmm, si mi intencion fuera esa, me meto en el programa y cambio los puntos antes de ser encriptados.

Adapta el cheating-dead al BallClicks.

Saludos
Título: Envio Seguro De Puntuaciones
Publicado por: Lord Trancos 2 en 20 de Mayo de 2005, 02:24:48 PM
Cita de: "Pogacha"mmm, si mi intencion fuera esa, me meto en el programa y cambio los puntos antes de ser encriptados.
Evidentemente... pero ante que te modifiquen la memoria del programa, poco puedes hacer.

Por eso he dicho que dependia de la pericia del individuo en cuestion.
Título: Envio Seguro De Puntuaciones
Publicado por: ethernet en 20 de Mayo de 2005, 02:43:12 PM
 Está claro que el único algoritmo que te servirá será el que han comentado de clave pública y privada porque el atacante siempre podrá mirar qué algoritmo has usado y reproducirlo. un saludo
Título: Envio Seguro De Puntuaciones
Publicado por: ZeruGiran en 20 de Mayo de 2005, 05:30:27 PM
 Lo que proponen es encriptacion por oscuridad y eso siempre puede ser hackeado. Los mas serio seria usar llaves publicas y privadas.

Saludos.
Título: Envio Seguro De Puntuaciones
Publicado por: Lord Trancos 2 en 20 de Mayo de 2005, 05:53:09 PM
 Yo lo de usar un cifrado por claves publicas/privadas no lo acabo de ver como solucion.

Creo q puede complicar demasiado el asunto, y a efectos practicos es tan hackeable como el caso que yo comento.

Si alguien se pone a depurar el programa y modifica la memoria donde se almacena la puntuacion, ya puedes usar PGP o lo que quieras que los datos por muy cifrados que se envien y por muy indescifables que sean, ya continen una puntuacion invalida.

Otra cosa es cuando quieres que quien intercepte un mensaje no lo pueda descifrar,... pero en este caso el emisor del mensaje es el ordenador del "chico malo", por mucho que no pueda descifrar el mensaje, es su ordenador el que lo cifra y por lo tanto puede forzar la situacion para que cifre una puntuacion no válida.

Vamos,... que no lo veo muy claro.
Título: Envio Seguro De Puntuaciones
Publicado por: Topper en 20 de Mayo de 2005, 06:10:50 PM
 
Citar
Si alguien se pone a depurar el programa y modifica la memoria donde se almacena la puntuacion, ya puedes usar PGP o lo que quieras que los datos por muy cifrados que se envien y por muy indescifables que sean, ya continen una puntuacion invalida.

Pero, por mucho que encripte la información a su gusto, si ese usuario "malvado"  :ph34r:  no sabe la clave pública de encriptación, va de culo...
Título: Envio Seguro De Puntuaciones
Publicado por: Topper en 20 de Mayo de 2005, 06:14:16 PM
 también es cierto que si accede a la posición de memoria donde se encuentra la puntuación, tendría vía libre para poner lo que quisiera, ya que la encriptación viene después...  <_<

La verdad es que yo tampoco lo veo nada claro  :(  
Título: Envio Seguro De Puntuaciones
Publicado por: AgeR en 20 de Mayo de 2005, 06:21:35 PM
 Creo que trancos se refiere a que si en el código tengo por ejemolo "mipuntuacion = 4567" y el bastardo de turno cambia ese valor por otro antes de la rutina de cifrado, siempre va a poder mandar la puntuación que le venga en gana. Ante eso yo tampoco veo solución.

Hombre yo lo que busco es algo que no me cueste mucho de implementar, porque tampoco quiero tardar más tiempo en hacer un sistema de puntuaciones que en hacer el propio juego  :( .

Una posible solución sería apuntarme las ip de quien hace el record, y tener una base de datos de ip baneadas por ejemplo. Aunque claro, las ip pueden ir cambiando...  :angry:  
Título: Envio Seguro De Puntuaciones
Publicado por: Lord Trancos 2 en 20 de Mayo de 2005, 06:43:20 PM
 Efectivamente, a eso me referia.

Por eso te recomiendo que hagas justo lo que dices.

Un sistema no demasiado complejo y al que se pase de listo lo baneas.

EDIT: Otra cosa que puedes hacer es cuando cifres la información envias tambien datos sobre el hardware del PC desde donde se envia, como por ejemplo el serial del disco duro. Asi aunque su IP cambie lo puedes "detectar". De nuevo, es algo que se puede hackear, pero es facil de implementar y dificulta un poco las cosas.
Título: Envio Seguro De Puntuaciones
Publicado por: AgeR en 20 de Mayo de 2005, 07:52:42 PM
 Tampoco quiero quedarme con información sobre los usuarios, como mucho la ip para poder hacer baneos con facilidad, aunque si puede ser, ni eso.

Creo que el tema estaba en que las fórmulas que había usado eran relativamente sencillas (unas pocas operaciones). Ahora uso una fórmula bastante más compleja, a ver si resiste  :rolleyes:

De hecho todo esto me ha venido bien para aprender algunas cosillas, ya que he aprovechado para revisar el código en php y tal de paso.
Título: Envio Seguro De Puntuaciones
Publicado por: fiero en 20 de Mayo de 2005, 11:36:46 PM
 Junto con la puntuación puedes hacer otro parámetro en algún otro sitio de la memoria del juego, que se vaya actualizando en relación a ella de alguna manera especial. Después junto con la puntuación manda tambien otros datos al azar, entre los que se incluya ese código. Si el tio cambia la puntuación en RAM, deberia cambiar tambien el otro código por el que corresponde a la puntuación que acaba de cambiar. Es más dificil buscar un valor en RAM cuando no sabes que valor tiene.

Otra cosa que puedes hacer es que desde una IP solo se acepte un envio cada X minutos. Tampoco responder nada desde el servidor. Si hay que esperar hasta poder hacer otro intento y encima el servidor no responde si está bien o mal, es un coñazo de debugear.

un saludo
Título: Envio Seguro De Puntuaciones
Publicado por: _Grey en 21 de Mayo de 2005, 01:29:22 AM
 Tambien puedes hacer que la variable de puntucion tenga un valor oculto, y trabajar sobre este; por ejemplo que valga 100 o un valor al azar al empezar el programa, y cuendo la leas hagas mipuntucion-100, asi le seria mas dificil encontrar el valor en RAM.

De todas formas no creo que llegue a tanto, y simplemente se estara dedicando a petar el envio de datos.

Saludos.
Título: Envio Seguro De Puntuaciones
Publicado por: Pogacha en 21 de Mayo de 2005, 03:11:41 PM
 
CitarDe todas formas no creo que llegue a tanto, y simplemente se estara dedicando a petar el envio de datos.
Estuve pensando ... graba la semilla de generación y los eventos del juego y envia esto ... que el servidor calcule el puntaje. Si ya te hackean esto es que tienen mucho tiempo libre ...
Pero por otro lado, te hago un screen shoot, congelo el programa, hago un backtracking que resuelva el  problema, activo el programa y regenero los clicks por mensajes y chau ... como podes parar esto ?

A fin de cuentas con unint GetPoints()  { return xor^puntos; }
void SetPoints(int p)  {  xor^=(int)GetTime() | rand(); puntos = p^xor; }
ya bastaria para encriptar en memoria.
Lo voy a patentar!!!

Saludos.