Agrupar imagenes o archivos de un juego para impedir acceso

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Agrupar imagenes o archivos de un juego para impedir acceso

Notapor leonel06033 » Vie Oct 23, 2009 2:54 pm

Hola:

una vez mas por aquí, ahora mi interrogante es la siguiente, en la creación de juegos trabajamos con muchos tipos de archivos, por ejemplo imagenes, sonido, videos, punteros, iconos, etc. Una vez terminado el juego, en el proceso de creación, como es posible ocultar todos estos archivos imprescindible para el juego de la manipulación de los usuarios, por ejemplo blizzart (no se como se escribe), tiene un formato llamado "mpq" donde dentro de estos archivos están encapsulados todos los demas, y con un programa para leer estos archivos se puede tener acceso, pero mientras permanecen a salvo, alguien sabe como hacerlo.

Una idea era cambiarles las extensiones y cada vez que algún archivo me hiciera falta lo renombraba y lo usaba y después lo llevaba al esto anterior, pero esto es un poco trabajoso no.

bueno si alguien conoce la forma de hacerlo, por favor no dude en hacerlo.

saludos. programadores.
Avatar de Usuario
leonel06033
 
Mensajes: 10
Registrado: Lun May 25, 2009 5:15 pm

Notapor Metalero » Sab Oct 24, 2009 6:39 pm

Mira... cambiarle la extension no va a servir de mucho, por que es cuestipon de volversela a cambiar para acceder al recurso.

Lo que decis vos es encriptar. Los juegos comerciales suelen ahcer esto con todos sus recursos para que nadie se los robe (facilmente).

La encriptacion consiste en codificar todos los datos de manera logica con un "key" que sera conocido para el programa que pueda leer los datos.

En codigo la verdad que no sabria decirte ahora mismo como hacerlo, pero un ejemplo facil, seria, si queres encriptar, por ejemplo, una cadena de caracteres, hacer esto:

"HOLA"

usamos un key de corrimiento de bytes (+2), entonces, la cadena de texto ahora seria:

"H" => +2 => "J"
"O" => +2 => "Q"
"L" => +2 => "N"
"A" => +2 => "C"

Quedante un archivo con :


"JQNC"

Luego con el programa, sabiendo la "key", es cuestion de regresar los valores al original.

Para encriptar una imagen seria lo mismo, habria que hacer por ejemplo un corrimiento de todos los bytes del archivo, y luego leerlos, decodificarlos y cargarlos.

De esta manera, no se pude acceder a ningun recurso encriptado.
Metalero
 
Mensajes: 14
Registrado: Sab Oct 24, 2009 3:47 pm

Gracías

Notapor leonel06033 » Lun Oct 26, 2009 7:14 pm

Hola:

pues me has dado una buena idea al respecto, ahora mismo me pongo a trabajar sobre este tema.

gracias y saludos a todos. :twisted:
Avatar de Usuario
leonel06033
 
Mensajes: 10
Registrado: Lun May 25, 2009 5:15 pm

Notapor A3 » Dom Dic 20, 2009 7:12 pm

ps yo la verdad no se mucho de este tema :!: , pero
lei algo referido a una biblioteca que te servia para eso
justamente, puedes juntar todos tus archivos y encriptarlos
para que nadie tenga acceso. corrijame alguien si estoy mal.

la biblioteca o libreria se llama ZLIB, no se como funciona
pero si estas interesado en encapsular tus recursos creo
que esto te puede ser util. :!:

http://www.zlib.net/

saludos. 8)
Un hombre que no arriesga nada por sus ideas, o no valen nada sus ideas o no vale nada el hombre...
Avatar de Usuario
A3
 
Mensajes: 16
Registrado: Mar Sep 15, 2009 5:48 pm
Ubicación: Guatemala

Notapor Geo » Lun Dic 21, 2009 5:30 am

Algunas opciones que se me ocurren
  • Crear formatos propios para los recursos, quizá un poco engorroso desarrollar la primera vez las herramientas.
  • Encriptar los archivos con un método propio o desarrollado por un tercero. Nuevamente, hay que invertir tiempo o dinero.
  • Encriptar con algún método ya existente. Por ejemplo, comprimir en un formato tipo ZIP, RAR, etc. con protección con contraseña y descomprimir desde el juego. Algunos problemas serían decidir entre descomprimir a memoria los recursos según se van necesitando, todos desde el inicio...
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor lacabra25 » Jue Dic 24, 2009 2:17 pm

En primer lugar, no entiendo cual es el fin de que el usuario no pueda modificar algo como las imagenes o sonidos usados en el juego (si el juego es libre, por ejemplo bajo GPL, ese material multimedia deberia ser tambien libre, por ejemplo bajo creative commons). Si la finalidad es que no lo modifiquen usuarios inexpertos que puedan cometer por su inexperiencia errores que provoquen que despues el juego quede mal al usarlo, o las borren, una solucion esun simple archivador con todo, un usuario experto puede descomprimirlo, modificarlo y volverlo a comprimir y un usuario inexperto seguramente no le preste mucha antencion a un simple archivador, el programa solo deberia descomprimirlo en un directorio temporal, y usarlos, una vez usados eliminarlos del archivo temporal y arreglado.
La opcion de encriptacion y el tema ese, me suena mas a un juego privativo que a uno libre, si es tu caso, te recomiendo que te plantes el liberarlo bajo la licencia GPL, no voy ni a colaborar ni a dar ideas para un juego privativo. Ciertamente puede ser interesante el tema de la encriptacion de un programa evitando la ingenieria inversa, pero solo como entretenimiento y pasatiempo, no para desarrollar juegos privativos.
El tema de encriptar los recursos con una clave que el programa sepa no impide que el usuario la sepa, si la cadena es una cadena de caracteres es suficiente con desensamblar el programa y buscarla, este tipo de puntos flacos ante la ingenieria inversa son interesantes de estudiar y trabajar, pero no veo bien el crear un programa privativo.
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 Metalero » Jue Dic 24, 2009 4:20 pm

Mmmm.... este es un tema bastante ambiguo... yo por ejemplo estoy de acuerdo con la encriptacion de algunas cosas.

Algunas personas prefieren dejar el jeugo bajo un licencia libre (pero solo el juego!), es decir, que no se tenga acceso a los recursos.

Pero bueno... prefiero dejarlo ahi...

Con el tema de la encriptacion... te voy a contar mi (minima) experiencia.

En mi juego, en las escenas, todo (TODO) es leido desde un fichero de texto, es decir que si alguinel o abre, puede leer la historia, por eso decidi encriptarlo (muy sencillamente), para esto use un sistema de corrimieto de bytes bastante sencillo (como para que el que abra el fichero se encuentre con un mamarracho de caracteres y lo deje ahi).

Lo mas facil para implementar esto es ahcerte un programita que encripte haciendo por ejemplo (pseudo codigo):
Código: Seleccionar todo
char mybyte
for(i=0;i<largo del archivo;i++)
{
   leer archivo[i] en mybyte
   mybite += 10;
   guardar en nuevo archivo[i] mybyte


Asi lo mas basico... de ahi podes ir acomplejandolo, por ejemplo con:

Código: Seleccionar todo
mybyte += 10 + i;

o

mybyte += 10 - (200 % i * 4);

etc


Ovbiamente... si alguien se pone las pilas para desencriptarlo, lo va a lograr... pero bueno... eso es al menos lo que esta dentro de mis capacidades XD

Para el tema de los recursos... la verdad que no sabria decirte como implemetarlo... por que bien podria encriptarse como yo te digo... pero una vez encriptado no se como habria quer hacer para poder:

-desencriptarlo en memoria
-cargarlo desde memoria

Si usas SDL.... para las imagenes... podrias por ejemplo usar:

IMG Load RW

Que por lo que tengo entendido se maneja con un puntero (a diferecia de IMG_Load que caga directo desde un archivo)

Pero es cuestion de irt probando[/code]
Metalero
 
Mensajes: 14
Registrado: Sab Oct 24, 2009 3:47 pm


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

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