Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: arcangelcaos en Marzo 17, 2015, 11:13:44 AM

Título: encriptar y desencriptar
Publicado por: arcangelcaos en Marzo 17, 2015, 11:13:44 AM
Hola. Viendo por hay temas y tal, veo que la seguridad es importante. Mi juego tiene muchos ini y txt. Que son facilmente modificables. Me gustaria saber una forma facil de encriptar y luego desencriptar.  Pero es más,  a lo largo del juego tengo que leer varias veces ese ini o txt. Se podria crear in scrip general para desencriptar y guardar el valor en un gobal??? Para asi usarlo mientras este el juego abierto?? Y no tener que estar desencriptando cada vez que lo use.
Título: Re:encriptar y desencriptar
Publicado por: penumbra en Marzo 17, 2015, 11:47:11 AM
Lo más fácil sería usar las funciones de encode/decode que ya trae GMS (aunque técnicamente no es un cifrado)
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/index.html)
http://es.wikipedia.org/wiki/Base64 (http://es.wikipedia.org/wiki/Base64)

Otra manera sería usar alguna dll, como
http://gmc.yoyogames.com/?showtopic=245305 (http://gmc.yoyogames.com/?showtopic=245305)

Otra manera sería implementar un algoritmo de cifrado en el mismo GMS, por ejemplo
http://gmc.yoyogames.com/index.php?showtopic=342939
http://es.wikipedia.org/wiki/Cifrado_XOR (http://es.wikipedia.org/wiki/Cifrado_XOR)

Y desde luego que cualquier valor leído desde un archivo externo (encriptado o no) se puede almacenar una variable y usar esa variable mientras el juego no se cierre.
Título: Re:encriptar y desencriptar
Publicado por: arcangelcaos en Marzo 17, 2015, 12:12:02 PM
Cita de: penumbra en Marzo 17, 2015, 11:47:11 AM
Lo más fácil sería usar las funciones de encode/decode que ya trae GMS (aunque técnicamente no es un cifrado)
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/index.html (http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/index.html)
http://es.wikipedia.org/wiki/Base64 (http://es.wikipedia.org/wiki/Base64)

Otra manera sería usar alguna dll, como
http://gmc.yoyogames.com/?showtopic=245305 (http://gmc.yoyogames.com/?showtopic=245305)

Otra manera sería implementar un algoritmo de cifrado en el mismo GMS, por ejemplo
http://gmc.yoyogames.com/index.php?showtopic=342939
http://es.wikipedia.org/wiki/Cifrado_XOR (http://es.wikipedia.org/wiki/Cifrado_XOR)

Y desde luego que cualquier valor leído desde un archivo externo (encriptado o no) se puede almacenar una variable y usar esa variable mientras el juego no se cierre.

Gracias, lo que mas me convence es usar la dll, porque por los ejemplos que leo, lo que se cifra es el texto que se introduce en el ini o txt, no el ini o el txt en si.
A mi me interesa encriptar el ini entero o el txt, dado que son muchas líneas las que incluyen, y muchas son por defecto, osease, que no se escriben, son listas que están guardadas para usarlas, con enemigos etcc.
A lo que yo me refería con globales es lo siguiente:
Yo tengo un   bichos.ini     encriptado. Lo desencripto. Y guardo el archivo desencriptado en una variable. global.bichosdesc.
Para que asi cuando use  ini_open(global.bichosdesc), no tenga que estar desencriptando, y todo esas cosas, porque el juego guarda automáticamente, y no cuando le das a un botón.
Ahh, y supongo que cuando cierre el juego, tengo que volver a encriptar el archivo no?? o ya no hace falta, porque si uso ini_write(global.bichosdes,1,1) se guarda ya encriptado o no??.
Gracias
Título: Re:encriptar y desencriptar
Publicado por: jaimitoes en Marzo 18, 2015, 05:58:57 AM

Codificar cuando le digas:
http://www.gmlscripts.com/script/encode_real_double

Descodificar cuando le digas:
http://www.gmlscripts.com/script/decode_real_double
Título: Re:encriptar y desencriptar
Publicado por: arcangelcaos en Marzo 25, 2015, 09:11:13 PM
Cita de: jaimitoes en Marzo 18, 2015, 05:58:57 AM

Codificar cuando le digas:
http://www.gmlscripts.com/script/encode_real_double

Descodificar cuando le digas:
http://www.gmlscripts.com/script/decode_real_double

Gracias, pero sin poder poder hacer nada. Porque casi todos los script son para codificar el dato que mete al ini, pero lo que yo necesito es codificar el ini en si. Descodificarlo cuando se valla a usar, y luego volver a codificar.

Las dll que he visto no trabajan en android, son solo para Windows, asi que a joderse :'( :'( :'( :'(. Haber si me invento una manera de hacer alguna trampa que parezcan bien, pero en realidad no.
O si alguien me hace el favor de decirme como puedo encriptar y desemcriptar los archivos ini y txt, tanto Windows como android.
Título: Re:encriptar y desencriptar
Publicado por: kakashigna en Marzo 26, 2015, 07:23:25 AM
Hola compañero, he estado al tanto sobre esto de los inis y tal, y te cuento un poco con lo que me he topado programando.
Si trabajas con inis y quieres ofuscar su contenido, te recomiendo crear un algoritmo capaz de ello, de tu propia casa, ahora tambien recuerdo que por los foros rondaba un script que encriptaba con el operador xor, puedes buscar al respecto, si no quieres encriptar y solamente guardar datos de forma que no sean leibles por los mortales, creo que hay una funcion para guardar buffers en archivos, como los buffers son espacios de memoria lo que se guarda en los archivos realmente no es legible(Creo que una vez hace tiempo probe esto, no recuerdo bien xD)
Bueno eso es lo que se, realmente desconosco si hay una extension de estas de studio para estas cosas.

Saludos!
Título: Re:encriptar y desencriptar
Publicado por: arcangelcaos en Marzo 26, 2015, 08:25:02 AM
Gracias, pero mis conocimientos no llegan a a tanto,  de momento ;). Pero en el market de yoyo he visto una extensión que si. Vale 7$. Pero mi pregunta es?? Funciona solo en el gamemaker que lo compro? (Licencia), o si luego la exporto puedo usarlo en cualquier gamemaker??
Gracias
Título: Re:encriptar y desencriptar
Publicado por: arcangelcaos en Marzo 26, 2015, 12:31:03 PM
PRE
/*
*   Simple encryption by PlasticineGuy
*   crypt(string)
*/
var str, str2, i, t;
str = argument0;
t = floor(string_length(key) / 2);
str2 = '';
for(i = 1; i <= string_length(str); i += 1) {
    str2 += chr(~ord(string_char_at(str, i)));
}
return str2;

Encryption script with a key:

PRE
var str, str2, i, key, incr;
str = argument0;
key = argument1;
str2 = '';
increment = 0;
for(i = 1; i <= string_length(str); {i += 1; increment += 1}) {
    if(increment == string_length(key)) increment = 0;
    str2 += chr(~ord(string_char_at(str, i)) + ord(string_char_at(key, increment)));
}
return str2;

File encrypt/decrypt script.

PRE
/*
*   Simple file encryption by PlasticineGuy
*   file_crypt(filename)
*/
var buffer, buffer2, fp, i;
buffer = "";
buffer2 = "";
fp = file_bin_open(argument0, 2);
while(file_bin_position(fp) != file_bin_size(fp)){
    buffer += chr(file_bin_read_byte(fp));
}
file_bin_close(fp);
for(i = 1; i <= string_length(buffer); i += 1) {
    buffer2 += chr(~ord(string_char_at(buffer, i)));
}
fp = file_text_open_write(argument0);
file_text_write_string(fp, buffer2);
file_text_close(fp);
return 1;


Hola, he encontrado esto buscando, pero no entiendo porque hay 3 script, que hace cada uno??
Gracias.
Título: Re:encriptar y desencriptar
Publicado por: Silver_light en Marzo 26, 2015, 09:17:47 PM
Son 3 modulos independientes para encriptar, es decir , cada uno cumple con ecriptar la cadena y son independientes.
Los 2 primeros se encargan de encriptar cadenas de texto, mientras que el tercero y último es para encriptar archivos .  :)

El primero sirve para hacer una encriptacion sencilla del tipo: Dar una cadena y devolverla encriptada
Es decir:

[GML]
var str, str2, i, t;
str = argument0;
t = floor(string_length(key) / 2);
str2 = '';
for(i = 1; i <= string_length(str); i += 1) {
    str2 += chr(~ord(string_char_at(str, i)));
}
return str2;
[/GML]
un ejemplo de llamada sería:
[GML]
cadena = "Soy una cadena";
cadena_enc = script0(cadena);
[/GML]
Aunque viendo al script detenidamente tiene algunos datos incorrectos, como el uso de t y de key que no tienen uso.


Luego, el segundo script es parecido solo que encripta una cadena a base de otra.

[GML]
var str, str2, i, key, incr;
str = argument0;
key = argument1;
str2 = '';
increment = 0;
for(i = 1; i <= string_length(str); {i += 1; increment += 1}) {
    if(increment == string_length(key)) increment = 0;
    str2 += chr(~ord(string_char_at(str, i)) + ord(string_char_at(key, increment)));
}
return str2;
[/GML]

un ejemplo de llamada sería:
[GML]
cadena = "Soy una cadena";
cadena2 = "cadena para encriptar";

cadena_enc = script1(cadena,cadena2);

// o bien

cadena_enc = script(cadena, "llave");
[/GML]
Aqui también hay un error, ya que se declara incr pero se usa increment, nada grave.
Lo que hace es encriptar la primera cadena a base de la segunda, leyendo caracter por caracter de ésta ultima y encriptando la primera.

[GML]
/*
*   Simple file encryption by PlasticineGuy
*   file_crypt(filename)
*/
var buffer, buffer2, fp, i;
buffer = "";
buffer2 = "";
fp = file_bin_open(argument0, 2);
while(file_bin_position(fp) != file_bin_size(fp)){
    buffer += chr(file_bin_read_byte(fp));
}
file_bin_close(fp);
for(i = 1; i <= string_length(buffer); i += 1) {
    buffer2 += chr(~ord(string_char_at(buffer, i)));
}
fp = file_text_open_write(argument0);
file_text_write_string(fp, buffer2);
file_text_close(fp);
return 1;
[/GML]

EL algoritmo presentado hace lo siguiente:
1-abre un archivo especificado
2-carga todo el archivo en una cadena y lo cierra
3-encripta la cadena
4-vuelve a abrir el archivo especificado
5-vuelca el contenido encriptado anteriormente

Si mal no tengo entendido, usando el script una vez sobre el archivo lo encripta, mientras que si se lo vuelve a utilizar, lo desencripta.

Saludos :D