Guardando partidas de juegos de forma segura

Consulte acerca de programas, técnicas, algoritmos etc.

Guardando partidas de juegos de forma segura

Notapor lacabra25 » Sab Abr 26, 2008 2:29 pm

Hola, en un pequeño videojuego que estoi haciendo, he pensado en hacer que cada jugador pueda guardar los avances que consiga con su personaje en el juego, pero no me gustaria guardarlos en un archivo de texto simplemente y que cualquiera que quiera hacer algunas trampas en el juego los pueda modificar, ¿como puedo hacer que no se pueda modificar el archivo en el que guarde los datos sobre la partida del juego, o si no se puede impedir que lo modifiquen (pues cualquiera puede abrir con el blog de notas o algun editor y modificarlo) al menos que pueda despues saber con el programa al cargar la partida, si ha sido modificada o, alguna forma de codificar los datos para que no se pueda ver lo que guardan, y asi tampoco modificar?

¿hay alguna forma de hacer algo de lo anterior sin tener que recurir a alguna libreria?
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor Juan Carlos » Dom Abr 27, 2008 4:02 am

Hola, supongo que la manera mas simple seria codificar el archivo. Por supuesto, habria que utilizar una codificacion simple y nada complicada.
Por ejemplo: digamos que quieres guardar un contraseña en un archivo:

hola_mundo

Pero cualquiera puede ver esa contraseña, asi que antes de escribirla en el archivo, primero la codificas y luego la escribes resultando:

ipmb_nvoep

Y para leer, simplemente decodificas y Listo.

Tbmvept

Nota: El algoritmo usado simplemente toma una letra y devuelve la siguiente: a->b; h->i; etc
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor lacabra25 » Dom Abr 27, 2008 8:03 am

Juan Carlos escribió:Hola, supongo que la manera mas simple seria codificar el archivo.


Esa fue una de las primeras soluciones que se me ocurrio, y hay algoritmos que, sean mas o menos seguros, son sencillos, pero si codifica y descodifica el programa, no solo el algoritmo tendria que estar en el programa, sino tambien la clave y aunque este la clave mezclada con el resto del programa en el .exe me parece por articulos que he leido en internet que un programa se puede abrir con una especie de editores o algo de eso y ver sus constantes, (como la clave), por lo que lo unico que consigo asi es que en vez de editar el archivo directamente, abran el programa para leer el codigo y despues modifiquen el archivo.

Tampoco es que sea un requerimiento que la partida se guarde de una forma brutalmente segura, pero almenos de una forma medianamente segura me gustaria guardarla, es que no me gustaria que editando dos o tres numeros en un archivo hagan trampas en el juego (aunque cada vez es mas comun ver gente que en vez de jugar por jugar, simplemente juega por decir "me lo he pasado" usando trampas).
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor hugoruscitti » Lun Abr 28, 2008 1:09 am

Es posible dificultar a un usuario del juego hacer trampas, por ejemplo
adjuntando a la versión compilada del juego un número de validación como
el que genera el algoritmo MD5. Algo que se utiliza con frecuencia para
determinar la integridad de un archivo grande en Internet. Hay mucha
información de ello en la web... ah, y sí tendrías que usar una biblioteca,
¿para qué reinventar la rueda?.

Ahora, si quieres ocultar esa información a alguien que lee el código de tu
programa... lo veo muy difícil, piensa que puede ver TODO tu código, incluso
donde haces el control (por más que sea irreversible); si quiere ganar en
tu juego o puede fácilmente alterar la velocidad del personaje o añadir
muchas vidas... lo que quiera, no me parece bueno llamar a eso "trampa", no
es algo malo, al contrario, mucha gente podrá aprender de tu programa
precisamente cambiando cosas, no veo porqué prohibirlo. Bah, en
realidad si lo veo, pero me parece poco útil.

Te doy un ejemplo personal, cuando aprendí los trucos de DOOM cuando era
pequeño me interesé mucho mas por el juego; y luego cuando vi que uno podía
modificar partes del juego armé niveles y algunas personas hasta los probaron.

Si podes hacer algo como esto con tu juego sería bueno permitirlo.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor lacabra25 » Lun Abr 28, 2008 9:41 pm

hugoruscitti escribió:...puede fácilmente alterar la velocidad del personaje o añadir
muchas vidas... lo que quiera, no me parece bueno llamar a eso "trampa", no
es algo malo, al contrario, mucha gente podrá aprender de tu programa
precisamente cambiando cosas, no veo porqué prohibirlo. Bah, en
realidad si lo veo, pero me parece poco útil.

Te doy un ejemplo personal, cuando aprendí los trucos de DOOM cuando era
pequeño me interesé mucho mas por el juego; y luego cuando vi que uno podía
modificar partes del juego armé niveles y algunas personas hasta los probaron.

Si podes hacer algo como esto con tu juego sería bueno permitirlo.


Lo de aprender del codigo me parece no bueno, sino muy bueno y es algo que pueden hacer no solo con el codigo del .exe, sino del propio codigo en c, lo que no me parece tan bueno, o almenos no tan justo, es que modificando cutro cosas sin ninguna complicacion en el juego en vez de ser un jugador mas que juega, sea como dios, por decirlo de algun modo, sera que a mi no me va tanto eso de buscar la forma de con trucos pasar el juego sin jugar, sera que a mi me va más pasar el juego con las normas del juego. Para crear niveles para un juego, no creo que sea necesario antes saber como hacer trampas en el mismo.

Y una ultima duda sobre la seguridad en el propio codigo del programa ya compilado. Si el codigo del programa ya compilado se puede ver y leer libremente, ¿los CDs o programas en los que hay que escribir una clave para desbloquearlo la primera vez, como hacen que esa clave no se vea?.
Una vez hace algun tiempo lei en una revista algo de programas que se codifican y decodifican a si mismos, ¿sabe algo de como es eso y si eso es seguro aunque alguien se ponga a leer el codigo del programa?, esto ultimo no es que me vaya a preocupar de aplicarlo (mas que nada por que me parece que la complejidad se saldria de lo que yo puedo programar) pero es curiosidad, y como dicen que el saber no ocupa lugar pues almenos me gustaria saber algo de como es posible que hagan eso.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor hugoruscitti » Mar Abr 29, 2008 12:34 am

lacabra25 escribió:[...] Para crear niveles para un juego, no creo que sea necesario antes saber como hacer trampas en el mismo.


Es cierto, no tiene relación.

lacabra25 escribió:Y una ultima duda sobre la seguridad en el propio codigo del programa ya compilado. Si el codigo del programa ya compilado se puede ver y leer libremente....


No, generalmente el código ya compilado es casi imposible de
entender, dado que un compilador traslada todas las sentencias
originales (digamos, escritas en C) a un lenguaje ensamblador y
de ahí pasa a un código que solo puede interpretar una
computadora.

Lo que si puedes ver de un ejecutable suelen ser las cadenas o
strings del programa original, por ejemplo, busca el juego Ceferino
de esta misma web y abre el archivo .exe con un editor
hexadecimal. Buscando observarás los textos del juego en Inglés
y algunas cosas mas, pero no la lógica del juego, encontrar
algo que te permita aumentar tus vidas o similar sería casi
imposible. Y digo "casi" porque los bits están ahí, solo que uno
no sabe bien donde.

Tambien puede usar el comando "strings" de GNU/Linux, que
dado un ejecutable te imprime en pantalla todas las cadenas
de texto en él.

lacabra25 escribió:¿los CDs o programas en los que hay que escribir una clave para desbloquearlo la primera vez, como hacen que esa clave no se vea?.


Imagino que suelen ofuscarla de manera similar a como te
ha comentado Juan Carlos. Es decir, no se almacena en el
programa la clave sino una versión alterada de la clave junto
a una rutina que la decodifica.

Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor Juan Carlos » Mar Abr 29, 2008 2:14 pm

Hola, el tema de la codificacion/decodificacion y la seguridad de los datos de un juego tiene una importancia relativa que depende del tipo de juego. Por ejemplo, citemos al juego Diablo 2.
Este juego tiene dos modalidades: un jugador o multijugador. En la version de un solo jugador, el programa guarda la informacion relativa al progreso del juego en unos archivos. Dichos archivos son modificables por programas especializados.
Este hecho desemboca en la posibilidad de mejorar al personaje infinitamente (trucos). Se podria decir que la seguridad es media-baja.
En cambio, en la version multijugador, los archivos que contienen la informacion relativa al progreso se guardan en el servidor, evitando asi una manipulacion directa. Ademas, el servidor suele estar controlando TODOS los objetos (armas, escudos, etc) chequeando que todos sean legales; evitando asi una duplicacion "tramposa" de objetos.

Como puedes ver, el nivel de seguridad para el modo multijugador es mucho mas alto que el de modo un-jugador. Esto se debe a que el usuario es el responsable de su personaje (modo un-jugador) y puede hacer con el lo que sea (incluyendo trucos). Pero en el modo multijugador, las acciones ilegales afectan a otros usuarios y es por eso que el nivel de seguridad es mucho mas alto.

Como una mini-lectura adicional busca informacion en internet sobre la seguridad del modo multijugador del juego Diablo 1 y comparala con la seguridad del Diablo 2. Notaras un cambio interesante.

Saludos
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor lacabra25 » Sab May 03, 2008 11:52 am

hugoruscitti escribió:generalmente el código ya compilado es casi imposible de entender, dado que un compilador traslada todas las sentencias
originales (digamos, escritas en C) a un lenguaje ensamblador y
de ahí pasa a un código que solo puede interpretar una
computadora


¿Y con uno de esos desensambladores o descompiladores (o algo asi creo que es) no podrian hacen la inversa del ensamblador?, porque ahi si que podrian ver la logica del juego

El uso de un servidor para dar seguridad a las partidas multijugador es una gran idea en cuanto a seguridad, pero que a no ser que uno de los jugadores pudiese hacer de servidor (al ser uno de los jugadores la seguridad bajaria igual que en el de un jugador por lo que tiene poco sentido) esta fuera del alcanza de cualquier juego que no este echo por una empresa que se encarge de poner los servidores, aunque no se si con SDL se podria comunicar un juego con un servidor de MySQL (hay hosting gratuitos que incluyen MySQL) y entonces seria posible, aunque la clave de acceso a MySQL tendria que estar en el ejecutable por lo que vuelve a ser inseguro.

Por el momento guardare las partidas sin codificarlas ni nada, hasta a ver si se me ocurre algo, porque como dice Juan Carlos, la seguridad de la partida de un jugador no necesita de mucha seguridad, pero cuando hay mas de un jugador ya no es lo mismo.

Si se me ocurre algo lo posteo, mirare por google lo de la seguridad del Diablo 2 y Diablo 1.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor Alex_13_estu » Sab May 03, 2008 6:50 pm

¡Hola! Voy a ver si puedo ayudar un poco en este tema:

¿Y con uno de esos desensambladores o descompiladores (o algo asi creo que es) no podrian hacen la inversa del ensamblador?, porque ahi si que podrian ver la logica del juego


Sí, esos programas existen y con ellos puedes obtener el código. Mejor digamos que obtienes un "pseudocódigo". Hay programas por la red que dicen transformar un ejecutable en código C/C++ para que lo puedas analizar, pero no es cierto. Desde un ejecutable nunca recuperarás el código original en C++ porque en el proceso de compilación se pierden datos (creo recordar que se perdían nobres de variables, algunas cosas de las funciones...). Sobre lo que se perdía no recuerdo mucho, pero puedes estar seguro de que el código que se obtiene con estos programas tiene poco de parecido con el original.

Sin embargo, los programas que transforman ejecutables en ensamblador sí funcionan bastante bien, si mal no recuerdo. Y contra esos no puedes luchar, pero, seamos realistas, ¿cuantos usuarios de juegos conocen lenguaje ensablador? Yo voto por menos de 1 de cada 1000. Y de todas formas, pásate por la red y mira cuantos juegos de los que existen ahora mismo poseen trucos, cracks y maneras de "piratearlos" o de darle ventaja al jugador.
Tan sólo algunos juegos, como los que comentabais del servidor y algunos que usan protecciones "raras" y "poco correctas" como Starforce obtienen algunos resultados.

La seguridad en los juegos (y en los programas informáticos en general) es algo que está perdido. Ahí está lo bonito del Software Libre (y en que aprendes un montón). Ya sabes que te van a fastidiar el código: pues no les dejes. Compártelo tú ya de salida. No seas Microsoft. Siempre habrá hackers capaces de romper la seguridad informática. Es imposible evitar que te consigan trucos para un juego o que te lo pirateen. Simplemente costará más o menos. Y es que a veces es más inteligente el que pregunta que el que tiene respuestas para todo. Aplicado a la informática esto viene a ser: por mucho que consigas nuevos métodos de seguridad, habrá gente capaz de romperlos y ponerte en apuros.

Bueno, finalizo ya porque esto parece un discurso político...

Un saludo.
Alex_13_estu
 
Mensajes: 75
Registrado: Jue Mar 27, 2008 5:22 pm

Notapor lacabra25 » Mar May 13, 2008 2:27 pm

Alex_13_estu escribió:La seguridad en los juegos (y en los programas informáticos en general) es algo que está perdido.


¿Entonces los programas esos como pgp, son una especie de timo, no son seguros entonces? Si todo lo que dicen que esta echo para la seguridad, para el correo, que si para las conexiones... no es para nada seguro, pues menuda gracia enviar datos por internet pensando uno que cuando dicen que es seguro no lo es.
Esta cuenta ahora a pasado a la cuenta jhg
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron