AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Les Exemples de Caly

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 1 Oct 2012 - 21:15

Heu, perso je préfère les quelques conditions o_o
Surtout qu'a coup de mod et div je suis sur que tu peut autant condenser ton code.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 1 Oct 2012 - 21:29

Mod / div ça fait des calcules supplémentaires et faut que ça se charge assez rapidement sinon c'est pas très intéressant (même si on gagne des heures de mappage quand même).

Là les maps même très grandes se chargent vites sans aucuns soucis.
Et on a que 30 tuiles à faire après tu les étales en deux calques.

Apres je vais au plus cour et au moins ****** mais sinon oui on peut gagner quelques octets de disign mais pas sûr que ça valent le coup par rapport au temps de chargement des maps.
Et ça reste un exemple pour monter comment on peut procéder (même si je l'utilise dans cet état là).
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 1 Oct 2012 - 21:32

Ben soit tu fait un algo plus opti, et cpas bien dur, soit tu génère une nouvelle planche de tiles qui corresponde a ce que tu veux si c'est ça le problème.
Mais faut pas que ce soit a l'utilisateur de le faire.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 1 Oct 2012 - 21:45

Citation :
tu génère une nouvelle planche de tiles
Yep mais ça ça se fait une seule fois à l’installation du jeu, ça reste un autre exemple que je mettrais surement en complément du coup.

Citation :
tu fait un algo plus opti
Bha il est bien mon algo, tu es dans tout les cas obligé de regarder dans les 8 directions donc je trouve inutile de rajouter des conditions/calcules.
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Mar 2 Oct 2012 - 11:35

Bah le truc, c'est que la je trouve pas ça du tout intuitif, alors imagine un débutant qui veux utiliser ton gmk, il va bugger en voyant la planche de tiles x)

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Mar 2 Oct 2012 - 12:34

Yep, tu as raison, je vais faire une note explicative sur la conception de la planche de tuiles. Je ferais ça dès que je peut. Merci pour les retours sensei.
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Dim 4 Nov 2012 - 22:57

Ajout de "Save System"
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 13:38

Sympa, mais un cryptage xor n'est pas vraiment une sécurité, pour ceux qui se posent la question mrgreen2

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 14:07

Faut quand même avoir une grosse expérience pour le décrypter quand même, moi perso je pense pas réussir (jamais essayé), avec un cryptage xor je me sans quand même sécurisé.
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 17:15

Ben le truc, c'est qu'un xor t'empeche pas de modifier une sauvegarde.

Imagine ta sauvegarde fait 10bytes:
4b: argent
2b: vie max
2b: munitions
4b: durée de jeu

Le cryptage xor va juste changer l'écriture des données, mais quelque soit la clef, si je modifie le premier byte par exemple, le jeu chargeras tout de même la sauvegarde, et la valeur de l'argent seras modifiée.
Imaginons que le premier byte soit celui de poids fort, il y a de forte chance qu'en mettant un truc au pif je me retrouve in game avec une énorme somme d'argent.

De plus en comparant des sauvegardes tu peut très vite trouver l'utilité de chaque octet, puis par la même occasion la clef.


Exemple de hack avec les données ci dessus:
Je commence le jeu avec 1000 d'argent. Je sauvegarde, je regarde mon fichier.
Les 4 premiers bytes sont: 7A 65 6F 8C , et on s'en fou des autres, le principe reste le même.
Je relance le jeu, j'achète un objet qui vaux 250, mon argent est donc a 750.
Je regarde a nouveau le fichier, les 4 premiers bytes sont: 7A 65 6E 8A
Déjà n'importe quelle personne un minimum maline va capter qu'au moins les deux octets différents servent a coder l'argent.
Changeons les donc par un truc au pif: 7A 65 12 34
Dans le jeu on auras alors 32 336 d'argent. Rien que la on vois que xor sert a rien, mis a part ne pas écrire en clair les variables dans le fichier, et encore ce n'est utile que pour les chaines de caractère.

Si maintenant nous souhaitons retrouver la clé, il suffit de regarder l'influence des modifications dans le jeu.
Le plus simple, tout mettre a 0:
00 00 00 00 -> in game on auras 2053467236 d'argent.
En hexadécimal cela vaux 7A 65 6C 64, soit respectivement
7A: z
65: e
6C: l
64: d

Les 4 premiers caractères de la clef sont donc zeld, ont peut même imaginer que la clef est zelda.

Bref, un xor n'est pas plus sécurisé qu'écrire les données en clair dans ta sauvegarde.
Il ne seras utile que pour éventuellement cacher les chaines de caractères écrites dans la sauvegarde, et encore...

_________________
                 
Revenir en haut Aller en bas
marty
Utilisateur confirmé: Rang ***


Messages : 697
Projet Actuel : laby-ereinte !

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 17:53

ça me rappelle la sauvergarde de diablo 2 ce que tu dis,j'avais fait exactement ce que tu raconte et je suis vraiment nul en prog mais avec l’éditeur hexa et de la chance je me suis fait plaisir !

onilink fait nous des jeux pleeeez! gnii (même un tout p'tit les graphs ,on s'en fout !)


Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 18:01

Si j'avais le temps j'en ferais bien un mais bon ... j'ai a peine le temps de faire mes quelques petits trucs x)

Sinon ouai en général y aller au jugé dans une save pas bien protégés ça le fait :b
C'est pour ça qu'en général, pour empêcher ça, on utilise une espèce de hash.
Si le gars modifie une donnée on pourras indiquer que la sauvegarde est corrompue par exemple.

_________________
                 
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****


Messages : 1607
Localisation : Clermont-Ferrand

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 18:46

Et un cryptage XOR avec clef générée semi-aléatoirement, et des octets de vérification modulo, ça donnerait quoi ?

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 18:51

Plus efficace, mais toujours aussi inutile sur quelqu'un qui cherche un peu.
Y a des années, alors que je connaissais ni xor ni les bytes de vérifications j'avais cassé une sauvegarde de jeu qui utilisait cette méthode.
Par contre je doit avouer que ça m'a pris près de 30min, donc ça protège des 100% noobs.
Mais bon en général un noob si c'est pas écrit en clair dans un ini ou un txt ça suffit a le démotiver donc bon x)

Le top pour les encryptions, c'est quand le byte x+1 dépend du byte x.
Ça fait que si tu modifie un seul byte, il faut modifier tous les autres.
De plus lorsque tu sauvegarde, même si une seule valeur est modifiée, une grande partie de la sauvegarde pourras être changée par la même occasion.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 19:45

Suis daccord avec toi suis le procedé de pas à pas mais à mon avis tu as pas regardé tout les scripts.
Voici le fichier généré:
Citation :
RZ[Z[[[[[S[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[\[[[[[[^-^X_^_X^^^Y_^[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[]Z]\]^[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[]Z\Y]\]^].\_[Z[[[[[[[[[[[[[[[[[[[[[[[*[[[[[[]^\S\[]^\Y]R]^].]X]^[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[].]R\]]^]Z\^[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[].]-]/[Z[[[[[[[[[[[[[[[[[[[[[[[_[[[[[[\X]^\S]^[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[*.\])Z)S_Z[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[\.XYXS[Z[[[[[[[[[[[[[[[[[[[[[[[][[[[[[^[]Z\^\]\Y]^[Z[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[[[[[[[[[[[[[[X[[[[[[Y)X/XZ[Z[[[[[[[[[[[[[[[[[[[[[[[_[[[[[[_X]Z](\R[Z[[[[[[[[[[[[[[[[[[[[[[[/[[[[[[]_]Z].\XY[](]ZY[].]-\Y]/]^
Si tu arrive à choper une valeur là dedans avec la technique dite plus haut je t'envois un paquet de céréale par colis postal.
De plus que si tu regarde dans le script saveFile et saveLoad je fous une clef de sécurité qui indique si la chaîne a était corrompu. Voir d’ailleurs si tu change trop de bits le jeux plantera automatiquement au chargement Smile
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 20:21

Je veux mon paquet de céréales alors, car le procédé reste exactement le même.

La différence c'est que ds_map_write ne renvoie pas un array de bytes, mais une chaîne de caractère du style 7A656C6461 pour zelda. D'ou la chaîne chelou qu'on a dans le fichier sav, mais si tu essaye le technique énoncée ci dessus elle fonctionne toujours de la même manière.

Et ta protection est inutile, elle ne teste en aucun cas une espèce de hash de la save.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 20:30

Citation :
si tu essaye le technique énoncée ci dessus elle fonctionne toujours de la même manière.
Perso j'y arrive pas dés que je touche à quelque chose le jeu ne charge plus et plante "an unexpected error occurred" et si tu touche à la clef qu'il faut pas (j'en ai mis qu'une mais tu peut mettre d'autres) ça renverra directe que les donné sont corrompus.
Par-contre en te lisant je me dit que de mètre "game_id" en secure n'est pas top j'aurais du mettre un string_length ou les bits fort de la chaîne en valeur mais j'y avais pas pensé.
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 20:45

Car tu modifie des variables utilisées par la ds_map_read, pas des variables du jeu.
Comme je l'ai dit avant de bidouiller les valeurs au pif il faut regarder les valeurs qui se modifient lorsqu'une variable du jeu change, comme l'argent par exemple.

De plus étant donné que tu utilise un ds_map_read, y a carrément moyen d'insérer de nouvelles variables et tout ahah, ça c'est l'ouverture a des hacks de plus grande envergure mrgreen2

Bref ce que je veux dire c'est qu'il faut comprendre que le xor c'est bien beau, et facile a implémenter, mais niveau protection c'est vraiment le niveau 0, c'est juste une substitution de bytes par d'autres. Tu enregistrerais ta map sans xor ce serais pas bien moins protégé (certes un peu plus clair au premier abord, et encore).


Et en plus de ça ton cryptage xor est faux, il ne prend que le premier caractère de la clé pour crypter.
Tu as oublié d'incrémenter le curseur p dans la boucle de ta fonction de cryptage.
Vilain Caly, je veux mes céréales Yum!

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 21:17

Voilà, nouvelle version de posté.


Script modifiés:
saveCrypt
saveFile
saveLoad


saveCrypt:
ajout de l'incrementation :s

saveFile:
Code:
var str, bit, count,i;
        str=ds_map_write(_SAVE);
        count[0]=0;
        count[1]=0;
        count[2]=0;
        //bit : int;
       
    for( i=0; i<string_length(str) ; i+=1 ){
        bit= ord( string_char_at(str, i+1))&1;
        if( bit==0 ) count[0]= (count[0]+1) mod 256;
        if( bit==1 ) count[1]= (count[1]+1) mod 256;           
    }

    count[2]= count[1]+count[0];
    saveSet('_SECURE', count[2]);

saveLoad:
Code:
if( !ds_map_exists(_SAVE, '_SECURE') ) return -8;
   
    var secure;
        secure=ds_map_find_value(_SAVE, "_SECURE");
        ds_map_delete(_SAVE, '_SECURE');

    var str, bit, count,i;
        str=ds_map_write(_SAVE);
        count[0]=0;
        count[1]=0;
        //bit : int;
       
    for( i=0; i<string_length(str) ; i+=1 ){
        bit= ord( string_char_at(str, i+1))&1;
        if( bit==0 ) count[0]= (count[0]+1) mod 256;
        if( bit==1 ) count[1]= (count[1]+1) mod 256;           
    }

    if(secure!= count[1]+count[0]) return -8;

Citation :
De plus étant donné que tu utilise un ds_map_read, y a carrément moyen d'insérer de nouvelles variables et tout ahah, ça c'est l'ouverture a des hacks de plus grande envergure
Réglé.
Citation :
Et en plus de ça ton cryptage xor est faux, il ne prend que le premier caractère de la clé pour crypter.
Réglé.

Citation :
Vilain Caly, je veux mes céréales
Envois moi ton adresse postal par MP et je m'engage à te les envoyer!


Aller envois la suite tant que je suis chaud à modifier les sources Smile
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Lun 5 Nov 2012 - 21:31

Ahah x)

Bon ben malheureusement la je suis crevé donc dodooo x)
Mais bon a mon avis ces quelques modifications devraient rendre les sauvegardes un peu moins facile d'accès au premier venu :b

Pour ce qui est de la sécurisation complète des sauvegarde, je pense que je ferrais un petit challenge d'ici quelques jours, histoire de montrer qu'il y a facilement et rapidement pas mal de trucs bien plus efficaces qu'avec xor (et surtout qu' xor, quand on réfléchis un peu, ça sert presque a rien).

Sur ce bonne soirée :)

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Sam 14 Fév 2015 - 11:13

Ajout d'un système de temps par FPS.
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Sam 14 Fév 2015 - 11:40

Tu t'es un peu pris la tête je trouve, avec un timestamp tu peux faire la même chose avec quelques lignes de code :p
Pis surtout ça se représente dans une seule variable, donc sous GM c'est plutôt cool.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Sam 14 Fév 2015 - 12:18

Plop, bah soit c'est moi qui est pas trouvé dans la doc ou alors GM est assez mal foutus sur ça.

Moi niveau fonctions qui gèrent les timestamp jai :
date_create_time(hour, minute, second) Crée une valeur date-heure correspondant à l'heure indiquée.
Et les GET :
date_get_second(date) Retourne la seconde correspondant à la date.

Mais je ne trouve pas de SET donc faut quant même tout calculer à la main (sauf si j'ai loupé une fonction).

Si j'ai rien louper à partir de mon exemple on peut assembler les deux pour plus de puissance :

Code:

timeManager(TIME_MANAGER);

date = date_create_time(
     timeManager(TIME_GET_HOUR),
     timeManager(TIME_GET_MINUTE),
     timeManager(TIME_GET_SECOND)
);

Et les timestamp sous GM ne sont pas calculés celons les FPS je crois bien (je me plante peut être)
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Dim 15 Fév 2015 - 16:16

En fait je parlais juste d'utiliser une unique et simple variable pour le 'stockage' du temps, comme les timestamp.
Comme ça déjà c'est plus simple a manipuler pour toi, et éventuellement par l'user s'il veux pas être obligé de passer par des fonctions de modifications...
Normalement y a juste a utiliser quelques operateurs a la con genre mod ou div pour faire les getters de secondes/heures...

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Dim 15 Fév 2015 - 17:07

Ah oui ok j'avais pas compris comme ça.
GM a pas de soucis sur des grosses variables?
Revenir en haut Aller en bas
onilink_
Modérateur


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

MessageSujet: Re: Les Exemples de Caly   Dim 15 Fév 2015 - 17:10

Il gère des flottants 64 bits donc j'imagine que y a de la marge.

_________________
                 
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****


Messages : 1262
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.

MessageSujet: Re: Les Exemples de Caly   Dim 15 Fév 2015 - 17:29

Ok, ça marche merci.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Les Exemples de Caly   Aujourd'hui à 20:21

Revenir en haut Aller en bas
 
Les Exemples de Caly
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Infos section: tutoriels et exemples
» Banque d'exemples C++
» [Ressources] Banque d'exemples Game Maker
» Le positionnement géographique
» Première construction diapo

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Informations :: Projets-
Sauter vers: