AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  

 

 [Tutoriel] [Non Finis] Créer ses propres sauvegardes

Aller en bas 
+13
robinlife
Qual
SPLN
Boudou
Chulien
CoDeAVE
Mass
nicoulas
[TheDarkTiger]
Randal
Wargamer
glcraft
onilink_
17 participants
Aller à la page : Précédent  1, 2, 3
AuteurMessage
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyVen 30 Mar 2012 - 10:42

Bon j'ai une petite question.

Je suis entrain coder un mapEditor qui sera à disposition des joueurs pour créer leurs propres stages mais dans la logique je m'en sers aussi pour créer mes stages dispo dans l'histoire du jeu en lui même.

Donc dans le dossier du jeu j'ai un dossier 'levels' avec deux sous-dossiers 'game' et 'edited'. Pour le 'edited' pas de problème chacun mettra ce qu'il veux dedans tant que le fichier '.lv' sera valide il sera lu.
Mais pour mes stages officiels comme que je fait pour les protéger?
Genre j'ai le '1.lv' comment empêcher qu'un malin qui est bloqué sur ce stage édite un stage, le nome '1.lv' et remplace mon niveau?

Es ce que je doit le bloquer avec une 'clef' ou dois-je plutôt mettre mes stages dans des scripts (ce que j'ai pas trop envie pour raison de poids du fichier et donc du chargement) ?

Je pense que l'histoire de la clef est la meilleur solution mais je ne sais pas comment faire.
Je doit passer par du MD5 ou faire ça en binaire?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyVen 30 Mar 2012 - 16:55

Ce que je te conseille, c'est de commencer par faire ce qu'il y a en
4 – Protection de la sauvegarde

Et par dessus tu crypte avec un algo tout bête.
Le top sous GM (rapide et efficace) c'est le cryptage xor avec une clé générée par une fonction chaotique comme random (mais tu peut faire bien mieux en bidouillant).

Et même si niveau sécurité c'est pas non plus un truc de fou, ça m'étonnerais qu'un gars lambda réussisse a contourner cette protection. Il irais plus vite en essayant de décompiler ton jeu.

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyVen 30 Mar 2012 - 21:39

Alors si je comprend bien je fous une clef unique référencé dans une ds_list pour chaque niveau officiel.
Et je crypte cette clef unique avec une Master_key en binaire?

genre:

Code:
list = ds_liste_create();
    ds_list_add(list, 'Roger');
    ds_list_add(list, 'Bernard');
    ds_list_add(list, 'Annic');
    //etc...

master_key='14856315648751374683521';

if(lv==1)
    final_key = ds_list_find_value(list,0)^master_key;

Ça fonctionne ou faut convertir le ds_list_add et master_key en binaire?
Et si oui comment?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptySam 31 Mar 2012 - 0:42

Non en fait le cryptage se fait octet par octet, lors de la sauvegarde binaire.
Je te ferais un exemple si tu veux, mais en attendant :

key : 5 12 6 78 230
word : zelda

-> cryptage
z ^ 5
e ^ 12
l ^ 3
d ^ 78
a ^ 230

Et donc pour chaque caractère tu crypte et tu écris dans un fichier binaire.
Pour les nombres le mieux serais de créer une fonction spéciale, qui s'occupe de crypter chaque octet automatiquement avant de le save.

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptySam 31 Mar 2012 - 0:54

C'est peut etre l'heure qui fait ça mais je ne pige pas comment faire.

Genre pour le moment j'ai ça qui fonctionne trés bien :
Code:
var f,n;

f= file_bin_open('argument0',1);
n= instance_count;

b_write_usint(f, n);

for({var i; i=0;} i<n; i+=1){
    with( instance_find(all,i) ){
       
        b_write_sint(f, x);
        b_write_sint(f, y);
        b_write_usint(f, object_index);
       
    }
}

file_bin_close(f);

(la protection de la sauvegarde je sais la faire mais pas encore fait)
Comment je fait pour balance la clef crypter?

Avant le file_bin_close je fait :
Code:
b_write_int(f,word^key);
??
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptySam 31 Mar 2012 - 15:34

En fait il faut voir ta clé comme un tableau d'octet, car quand tu crypte un octet, tu le crypte avec la case correspondante de ta clé (c'est pour ça qu'en général on utilise une chaine de caractères).
De plus tu ne peut pas utiliser b_write_int comme ça. Tu as deux solutions :
-Soit tu fait un b_write_int(f,word^key); avec key étant 4 octets de la clé complète car un int tient sur 4 octets (solution la plus simple je pense)
-Soit tu écrit une fonction b_write_int_crypt, qui va elle même crypter les octets un a un avant de les écrire.

Si c'est pas clair je te ferais un exemple, mais demain car la cay pas possible :b

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 1 Avr 2012 - 0:25

Bon une fois n'est pas coutume mais là je pige rien.
Sinon en essayant de comprendre j'ai fait des recherches sur le binaire et je suis tombé sur ça :

Spoiler:

C'est bien ou pas?
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyLun 2 Avr 2012 - 23:17

crossa
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyLun 2 Avr 2012 - 23:41

Ben disons que c'est un peu compliqué pour un simple cryptage xor x)

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 1:36

Oni tu peut m'expliquer ce que fait exactement ce code stp? Car je ne le comprend pas. (j'en ai pas besoin je veux juste le comprendre.)

Code:
/*
**  Usage:
**      bytes_to_b64(str)
**
**  Arguments:
**      str    a string of bytes, eight bits per character
**
**  Returns:
**      a string of base64 digits (RFC 3548), six bits per character
**
**  GMLscripts.com
*/
{
    var str,len,pad,tab,b64,i,bin;
    str = argument0;
    len = string_length(str);
    pad = "=";
    tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    b64 = "";
    for (i=0;i<len;i+=3) {
        bin[0] = ord(string_char_at(str,i+1));
        bin[1] = ord(string_char_at(str,i+2));
        bin[2] = ord(string_char_at(str,i+3));
        b64 += string_char_at(tab,1+(bin[0]>>2));
        b64 += string_char_at(tab,1+(((bin[0]&3)<<4)|(bin[1]>>4)));
        if (i+1>=len) b64 += pad;
        else b64 += string_char_at(tab,1+(((bin[1]&15)<<2)|(bin[2]>>6)));
        if (i+2>=len) b64 += pad;
        else b64 += string_char_at(tab,1+(bin[2]&63));
    }
    return b64;
}
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 15:11

Ben il fait passer des données codées en base 256 (octet par octet quoi) en données de base 64, qui peuvent donc être écrites avec des caractères courants ASCII.
L'intérêt c'est que ça te permettrait par exemple de poster une musique midi (ou tout autre fichier pas trop lourd) sur le forum en format texte, et donc de pas avoir besoin de l'uploader (par conséquent pas de risque de lien mort :b)

Donc en argument0, str contient les données (je rappelle que chaque caractère peut contenir 256 valeurs, on peu donc utiliser un string comme un buffer)
tab c'est les caractères qui forment la base 64

Ensuite le gars prend 3 octets par 3 octets, et les codes en base 64.
Pourquoi 3 ? Parce qu'en base 64, il faut 6 bits pour coder chaque valeur, et en base 256 il en faut 8.
Et 3*8 = 24 et est donc divisible par 6 -> On code donc 3 octets en 4 caractères dans la base 64.

Donc ici il récupère les 3 octets a convertir :
bin[0] = ord(string_char_at(str,i+1));
bin[1] = ord(string_char_at(str,i+2));
bin[2] = ord(string_char_at(str,i+3));

Ici on obtient le premier caractère en base 64 sur les 4
b64 += string_char_at(tab,1+(bin[0]>>2));

bin[0]>>2 permet de récupérer les 6 premiers bits du premier octet a coder, et donc on peut ensuite avoir le caractère correspondant en allant le récupérer a cette position dans notre chaine qui contient les caractères de la base 64 (tab).

Ici on fait de même avec le second
b64 += string_char_at(tab,1+(((bin[0]&3)<<4)|(bin[1]>>4)));

(((bin[0]&3)<<4) | (bin[1]>>4)) récupère les 2 bits de poids faible du premier octet, et les assemble avec les 4 bits de poids fort du second octet (d'ou les décalages binaires)

Ici on regarde si la conversion est fini (le = correspond au caractère inséré par défaut si la taille du fichier a convertir n'est pas multiple de 3)
if (i+1>=len) b64 += pad;
else b64 += string_char_at(tab,1+(((bin[1]&15)<<2)|(bin[2]>>6)));

Toujours le même procédé, on découpe nos octets de façon a avoir nos 6 bits suivants..

if (i+2>=len) b64 += pad;
else b64 += string_char_at(tab,1+(bin[2]&63));

Again :b


Voila voila, si y a un truc qui t'échappe dit le moi :b

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 15:25

Nop c'est clair, j'ai pigé merci.
Par contre l'intérêt dans un jeu m'échappe un peut, mais ce n'est qu'un détails.

Merci.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 15:49

Ben dans un jeu ça sert a ... rien x)

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


Messages : 1285
Localisation : Haute Normandie
Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 18:11

Je suis toujours sur du binaire (et j'ai trop du mal).
Pourquoi
Code:
show_message(454561215648645416857423416587486454654 mod 256)
ça fait planter GM?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 EmptyDim 15 Avr 2012 - 18:24

Disons que GM est très limité au niveau des calculs (en même temps il utilise des double, pour faire des opérations sur les entiers cpas top).
Petite expérience, entre 99999999 en debug mode et regarde le résultat :b

Et de toute façon même en C/C++ tu n'aurais pas pu faire cette opération en utilisant les types de données standards.
Alors avec GM c'est même pas la peine d'y penser x)

_________________
[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Runningpotato1[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 TvF6GED [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 MdetltS
Revenir en haut Aller en bas
Contenu sponsorisé





[Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty
MessageSujet: Re: [Tutoriel] [Non Finis] Créer ses propres sauvegardes   [Tutoriel] [Non Finis] Créer ses propres sauvegardes - Page 3 Empty

Revenir en haut Aller en bas
 
[Tutoriel] [Non Finis] Créer ses propres sauvegardes
Revenir en haut 
Page 3 sur 3Aller à la page : Précédent  1, 2, 3
 Sujets similaires
-
» creer ses propres fonts
» [Tutoriel] Créer une variable
» [Tutoriel] Créer une Dll en C/C++ pour GameMaker
» Tutoriel : Créer un texte animer
» Tutoriel debutants : créer un jeu de tir vu de haut

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Game Maker-
Sauter vers: