Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > Cacher / coder le contenu d'un fichier ? > Lecture du sujet

Cacher / coder le contenu d'un fichier ?

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne BioH # Posté le 16/05/2008 à 02:45:21
Je te vois...
Avatar
Groupe : Membres
Bonjour à vous amis zéros !

Malgré quelques recherches je n'ai pas trouvé de réponses qui me satisfasses totalement.

Après avoir terminé le chapitre sur lecture / écriture dans un fichier je me pose donc cette question :

Comment empêcher un utilisateur d'accèder et aussi de lire simplement le contenu d'un fichier que l'on créé. J'ai bien essayé en mettant une extension kikoo-lol (un fichier secret.chuuuut) mais on peux toujours accèder et modifier le contenu en "sélectionnant un éditeur de texte dans la liste".

Donc j'aimerais savoir si vous auriez un moyen simple pour empêcher la lecture et l'écriture des fichiers créés ou à la limite les coder pour empêcher la modification sauvage !

Merci d'avance :)
Édité le 16/05/2008 à 02:47:02 par BioH

Citation : Homer Simpson
La ménopause, c'est quand la cigogne qui apporte les bébés se fait tirer par des chasseurs bourrés.

Image utilisateur
 
Hors ligne nepser # Posté le 16/05/2008 à 03:08:04
░░░
Avatar
Groupe : Membres
Tu ne peux rien cacher totalement.
Tu peux chiffrer avec n'importe quel algo de chiffrement. Mais tu devras bien sur à la lecture décrypter ton fichier.
Sous Windows tu peux utiliser les ADS (alternative data stream) mais c'est pas super conseillé.
Toujours sous windows tu peux créer un fichier caché.
Si tu veux juste bloquer le kikoo editing, renomme ton fichier en .exe.

Herdelia, MMORPG amateur en codé en python. En recherche d'infographistes 3D.
Image utilisateur
 
Hors ligne -ed- # Posté le 16/05/2008 à 03:18:32
C is a sharp tool
Avatar
Groupe : Membres
Citation : BioH
Comment empêcher un utilisateur d'accèder et aussi de lire simplement le contenu d'un fichier que l'on créé.

Qu'as-tu donc de si confidentiel à cacher ?

Tout ce qu'on peut faire, c'est encrypter le fichier selon une méthode connue de toi seul. En principe, ça retarde le décryptage.

Par exemple, cryptage simple à XOR avec clé privée :

Soit le fichier data.txt :
Code : Autre
1
Hello world

et la clé "sesame".

Ca donne (normal, crypté, normal)
Code : Console
12 bytes read
003D3ED0 48 65 6C 6C 6F 20 77 6F 72 6C 64 0A              'Hello world.'
12 bytes read
003D2430 3B 00 1F 0D 02 45 04 0A 01 0D 09 6F              ';....E.....o'
12 bytes read
003D2448 48 65 6C 6C 6F 20 77 6F 72 6C 64 0A              'Hello world.'

Press ENTER to continue.

Secret (cliquez pour afficher)
Code : C
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include<stdio.h>

void encode (char const *f_in, char const *f_out, char const *cle)
{
   FILE *fp_in = fopen (f_in, "rb");
   if (fp_in != NULL)
   {
      FILE *fp_out = fopen (f_out, "wb");
      if (fp_out != NULL)
      {
         int c;
         int i_cle = 0;
         int const len_cle = strlen (cle);
         while ((c = fgetc (fp_in)) != EOF)
         {
            fputc ((c ^ cle[i_cle]) & 0xFF, fp_out);
            i_cle++;
            if (i_cle == len_cle)
            {
               i_cle = 0;
            }
         }
         fclose (fp_out);
      }
      fclose (fp_in);
   }
   else
   {
      perror (f_in);
   }
}

/* ---------------------------------------------------------------------
   dump()
   ---------------------------------------------------------------------
   Role : Dumper une zone memoire vers stdout
   ---------------------------------------------------------------------
   E : adresse de debut de la zone
   E : longueur a dumper (en octets)
   S :
   --------------------------------------------------------------------- */
void dump (void const *const p, size_t const len)
{
   int ok = 1;
   const char *szErrBuf = NULL;
   const char *szErrLen = NULL;

   if (p == NULL)
   {
      szErrBuf = "p=NULL";
      ok = 0;
   }

   if (len == 0)
   {
      szErrLen = "len=0";
      ok = 0;
   }

   if (ok)
   {
#define LEN 16
#define FMT "%p"
#define CAST (void const *)
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

      uchar const *const ao = p;
      size_t i;

      for (i = 0; i < len; i += LEN)
      {
         size_t j;

         /* Adresse de la ligne */
         printf (FMT " ", CAST (ao + i));

         for (j = i; j < i + LEN; j++)
         {
            if (j < len)
            {
               /* octets en hexa */
               printf ("%02X ", (uint) ao[j] & 0xFF);
            }
            else
            {
               printf ("   ");  /* 3 espaces */
            }
         }

         printf (" '");

         for (j = i; j < (i + LEN) && j < len; j++)
         {
            if (isprint (ao[j]))
            {
               /* octets en caracteres */
               printf ("%c", (int) ao[j]);
            }
            else
            {
               printf (".");
            }
         }
         printf ("'\n");
      }
#undef FMT
#undef CAST
#undef LEN
   }
   else
   {
      fprintf (stderr, "dump (%p, %lu) ERR : ", (void const *) p,
               (ulong) len);

      if (szErrBuf)
      {
         fprintf (stderr, "%s ", szErrBuf);
      }
      if (szErrLen)
      {
         fprintf (stderr, "%s ", szErrLen);
      }
      fprintf (stderr, "\n");
#undef uchar
#undef uint
#undef ulong
   }
}

void fdump (char const *fname)
{
   FILE *fp = fopen (fname, "rb");
   if (fp != NULL)
   {
      fseek (fp, 0, SEEK_END);
      {
         long len = ftell (fp);
         rewind (fp);
         if (len > 0)
         {
            unsigned char *a = malloc (len);
            int n = fread (a, 1, len, fp);
            printf ("%d byte%s read\n", n, n > 1 ? "s" : "");
            dump (a, len);
         }
         else
         {
            printf ("'%s' is empty\n", fname);
         }
      }
      fclose (fp);
   }
   else
   {
      perror (fname);
   }
}

int main (void)
{
   char const *fname = "data.txt";
   fdump (fname);
   encode (fname, "TEMPFILE", "sesame");
   fdump ("TEMPFILE");
   encode ("TEMPFILE", fname, "sesame");
   fdump (fname);
   return 0;
}

je te laisse jouer avec remove() et rename() ...
Édité le 16/05/2008 à 11:27:06 par -ed-

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne Vhann # Posté le 16/05/2008 à 04:51:41
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
Le cryptage XOR est vraiment simple à implémenter et est plutôt efficace (contre la plupart des utilisateurs disons). Pour réaliser un cryptage XOR, il faut utiliser des valeurs binaires (donc les valeurs binaires des nombres).

Supposons que l'octet à encrypter est 10100111 et que la clé est 00001111. Le cryptage par XOR compare chaque bit à celui de la clé lui correspondant (l'opérateur binaire XOR (ou exclusif) donne 1 si les deux bits comparés sont différents ou 0 autrement) .

Donc, pour les nombres cités plus haut, on a donc:

Octet original: 10100111
Mot de passe: 00001111
Ce qui donne: 10101000
Mot de passe: 00001111
Octet original: 10100111

P.S.: L'opérateur XOR en C est '^' (accent circonflexe)

Cordialement,
Vhann.

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 
Hors ligne 1337833K # Posté le 16/05/2008 à 07:43:16
fgsfds
Groupe : Membres
Et il est censé y avoir quoi dans ce fichier ? Si tu as des trucs à cacher, c'est surement un problème de conception ...

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne Jaloyan1 # Posté le 16/05/2008 à 07:45:33
Choisir = se priver du reste.
Avatar
Groupe : Membres
euh juste comme ca, ca sert a rien comme sécurité, mais tu peux très bien mettre l'attribut fichier caché.

Si quelqu'un vous dit : "Je me tue à vous le répéter", laissez-le mourir.
Image utilisateur
Image utilisateur
Image utilisateur

Chef du fan club de jaloyan1
 
Hors ligne Vhann # Posté le 16/05/2008 à 08:00:01
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
@1337833K: Ça pourrait être utile pour stocker les mots de passe des utilisateurs/joueurs et/ou ralentir la triche des joueurs.

@Celui-dont-la-tête-ne-semble-pas-avoir-finit-d'enfler:
Citation : Jaloyan1
euh juste comme ca, ca sert a rien comme sécurité, mais tu peux très bien mettre l'attribut fichier caché.


Voilà monsieur-qui-sait-tout qui s'y met. Du temps où j'utilisais encore Windows, j'affichais toujours extensions, fichiers cachés et fichiers système (options des dossiers->affichage puis tu coches les cases correspondantes me semble-t-il). Sans compter que c'est P-O-R-T-A-B-L-E (tu devrais consulter un dictionnaire informatique sur ce mot).

Ce type de cryptage est employé pour coder les signaux de ton récepteur de télévision (c'est pourquoi tu as besoin d'un décodeur). C'est assurément plus sécuritaire que de créer un fichier à l'installation que tu supprimes lors du premier lancement du programme par exemple (c.f. le sujet où tu crois révolutionner le monde par "la méthode George-Axel Jaloyan").

Tu nous sors de ces conneries parfois plus souvent qu'autrement...

Enfin, après c'est certain qu'il existe des algorithmes plus performants et tout et tout...

Vhann.

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 
Hors ligne 1337833K # Posté le 16/05/2008 à 08:19:57
fgsfds
Groupe : Membres
Citation : Vhann
Ce type de cryptage est employé pour coder les signaux de ton récepteur de télévision (c'est pourquoi tu as besoin d'un décodeur).

Euh, t'es sur ? Le XOR régulier (pas un masque jetable) peut être facilement outrepassé si on connait une partie du message original (facile avec certains types de fichiers comme le JPEG, le PNG, ou l'ELF qui mettent une signature au début).
Ça m'étonnerait que ce soit employé pour le transfert crypté à la téloche.

Citation : Vhann
C'est assurément plus sécuritaire que de créer un fichier à l'installation que tu supprimes lors du premier lancement du programme par exemple (c.f. le sujet où tu crois révolutionner le monde par "la méthode George-Axel Jaloyan").

C'est sur, le XOR reste beaucoup mieux.
Édité le 16/05/2008 à 08:20:37 par 1337833K

Image utilisateur
Big Brother is watching you.
The chocolate is a lie !
Vous pouvez faire un geste gratuit pour changer le monde. :)
Libérez quelqu'un et quelqu'un-d'autre !
 
Hors ligne BioH # Posté le 16/05/2008 à 11:34:49
Je te vois...
Avatar
Groupe : Membres
Citation : -ed-
Qu'as-tu donc de si confidentiel à cacher ?


Rien de bien méchant :lol: :lol:

A vrai dire j'avais fait une recherche sur le forum et j'avais trouver plusieurs sujets ou la méthode XOR était conseillée, mais disons que pour le niveau de sécurité que je voudrais donner à mes fichiers c'est peut-être un peu exagéré.

J'avais plutôt pensé a un césar ou une option / fonction à utiliser lors de la compilation qui transforme mon fichier en plein de petits caractères sournois comme je le vois souvent dans les fichiers aux extensions fantaisistes et dont je force l'ouverture avec un bloc note (souvent ça vire presque a l'art moderne :lol: ), mais le problème est pour lire dans le fichier après quoi...

Si XOR semble la meilleure solution qui décourage les petits malins qui souhaiteraient modifier les fichiers comme des sauvages j'irais bosser le tuto. Mais par exemple pour un petit jeu en SDL pas bien méchant, juste pour empêcher le joueur de modifier son high-score, ça me parait un peu mettre les petits plats dans les grands non ? C'est pour ca que je demandais une méthode simple, sans forcement avoir quelque chose de décodable uniquement par la nasa ! (quoi que peut-être que les ingénieurs de la nasa joueront a mon ptit pong en 2D qui sais :lol: )

Citation : Homer Simpson
La ménopause, c'est quand la cigogne qui apporte les bébés se fait tirer par des chasseurs bourrés.

Image utilisateur
 
Hors ligne -ed- # Posté le 16/05/2008 à 11:52:01
C is a sharp tool
Avatar
Groupe : Membres
Citation : BioH
C'est pour ca que je demandais une méthode simple, <...>

J'ai montré un exemple de codage, c'est extrêmement simple, léger et efficace. (la partie dump(), fdump() ne sert qu'à l'affichage du fichier, pas au cryptage).

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne moi281184 # Posté le 16/05/2008 à 11:54:46
Groupe : Membres
Si c'est pour un high score, le XOR me parrait peu adapté.

Les joueurs connaissant leur high score, ils pourront très facilement identifier le mot de passe et casser ta sécurité.

Le XOR me parrait plus approprié pour le chiffrage d'un fichier de sauvegarde par exemple, contenant beaucoup de valeurs sans que le joueur ne sache à quoi correspond chacune de ces valeurs.


Sinon j'ai une petite astuce que j'ai déjà utilisé dans des cas presque similaires : pour un high score, tu n'as pas besoin d'empêcher le joueur de voir son score, tu dois juste l'empêcher de le modifier. Pour ça tu peux rajoutter des nombres dans ton fichier, de manière à ce que la somme du score avec le premier nombre donne un nombre multiple de 73, la somme avec le second un multiple de 93, etc. (en utilisant des nombres premiers).

Lors de la lecture du fichier par ton programme, tu vérifies que rien n'a été modifié en vérifiant que les sommes sont toujours multiples de ce qu'il faut. Si ça ne correspond pas, le fichier à été modifié par le joueur, donc tu n'as plus qu'à l'effacer et remettre sans pitié son high score à zéro, lol.

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne -ed- # Posté le 16/05/2008 à 11:58:37
C is a sharp tool
Avatar
Groupe : Membres
Citation : moi281184
Sinon j'ai une petite astuce que j'ai déjà utilisé dans des cas presque similaires : pour un high score, tu n'as pas besoin d'empêcher le joueur de voir son score, tu dois juste l'empêcher de le modifier. Pour ça tu peux rajoutter des nombres dans ton fichier, de manière à ce que la somme du score avec le premier nombre donne un nombre multiple de 73, la somme avec le second un multiple de 93, etc. (en utilisant des nombres premiers).

Lors de la lecture du fichier par ton programme, tu vérifies que rien n'a été modifié en vérifiant que les sommes sont toujours multiples de ce qu'il faut. Si ça ne correspond pas, le fichier à été modifié par le joueur, donc tu n'as plus qu'à l'effacer et remettre sans pitié son high score à zéro, lol.

La méthode du checksum. Oui, c'est une bonne idée.

Emmanuel Delahaye.
Non à la pub sur l'alcool sur Internet.

Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/


Image utilisateur
 
Hors ligne BioH # Posté le 16/05/2008 à 13:06:42
Je te vois...
Avatar
Groupe : Membres
Hum je suis désolé moi281184 mais je ne comprends pas bien la technique... :s

Tu saurais me donner un exemple ?

En ce qui concerne le XOR je vais laisser de coté pour le moment je reprendrais ça après la SDL.


Citation : Homer Simpson
La ménopause, c'est quand la cigogne qui apporte les bébés se fait tirer par des chasseurs bourrés.

Image utilisateur
 
Hors ligne moi281184 # Posté le 16/05/2008 à 13:32:51
Groupe : Membres
Un exemple ? ok, tu vas voir c'est très simple :

Tu veux enregistrer par exemple les valeurs 10 20 et 30 dans un fichier.

Donc ton fichier de sauvegarde ressemblera à ça :

Code : Autre
1
2
3
10
20
30


Pour le moment n'importe qui peut l'éditer et le modifier.
Maintenant si tu prends pour clé 73 par exemple, tu vas rajouter un nombre x à la fin du fichier de sorte que la somme des 4 nombres soit multiple de 73 :

10 + 20 + 30 = 60, donc il suffit de rajouter x = 13

Ton fichier va donc ressembler à ça :

Code : Autre
1
2
3
4
10
20
30
13


Imaginons qu'un tricheur souhaite le modifier en mettant 40 à la place de 30 par exemple.

Lors du chargement des données, tu fais la vérification suivante :
10 + 20 + 40 + 13 = 83
83 n'est pas multiple de 73, donc le fichier a été modifié par quelqu'un ne connaissant pas la clé.

Ainsi tu peux détecter une modification dans ton fichier non faite par ton programme.

Une des failles de cette technique est que l'on ne peut pas déceler si la modification est "compensée", c'est à dire si on met 40 à la place de 30, puis 10 à la place de 20.

Autre problème, si le tricheur remarque l'utilisation de cette méthode, il pourra facilement trouver la clé, ou en tout cas effectué une "compensation" sur la clé pour conserver la même somme totale.

Si la protection des données est peu importante, cette méthode peut être suffisante. Si tu as besoin d'une meilleure sécurité, tu peux t'amuser à trouver des variantes, par exemple :

mettre deux nombres à la fin, le premier devant être sommé avec tous les nombres des lignes paires, et l'autre avec les lignes impairs : ainsi, une "compensation" entre une ligne paire et une impaire sera tout de même détectée (doublement d'ailleur).

Tu peux étendre le principe avec au maximum N nombres rajoutés pour N nombre à protéger.

Image utilisateur
Image utilisateur
Image utilisateur
 
Hors ligne BioH # Posté le 16/05/2008 à 13:42:43
Je te vois...
Avatar
Groupe : Membres
Ah oui d'accord. Cette fois c'est compris merci beaucoup :)
Je pense que je vais m'amuser a faire ça ;)

@-ed- Merci pour ton code, je l'enregistre et je le garde sous le coude ! Ça va m'occuper un bout de temps cette affaire :lol:

Citation : Homer Simpson
La ménopause, c'est quand la cigogne qui apporte les bébés se fait tirer par des chasseurs bourrés.

Image utilisateur
 
Hors ligne Vhann # Posté le 16/05/2008 à 16:56:19
VIM Has Anything u Need, Nerd
Avatar
Groupe : Membres
@bioH: Selon moi, tu es mieux avec un cryptage binaire comme XOR plutôt que de grossir tes fichiers cryptés sans les rendre illisibles. L'intérêt avec un cryptage binaire comme XOR, c'est que les caractères du fichier (lorsque affiché en mode texte) ne correspondront pas nécessairement à des caractères visibles (des caractères de contrôle de la table ASCII seraient probablement affichés). Je crois que c'est de ce genre de choses dont tu voulais parler lorsque tu parlais de fichiers illisibles.

@1337833K:
Citation : 1337833K
Citation : Vhann
Ce type de cryptage est employé pour coder les signaux de ton récepteur de télévision (c'est pourquoi tu as besoin d'un décodeur).

Euh, t'es sur ? Le XOR régulier (pas un masque jetable) peut être facilement outrepassé si on connait une partie du message original (facile avec certains types de fichiers comme le JPEG, le PNG, ou l'ELF qui mettent une signature au début).
Ça m'étonnerait que ce soit employé pour le transfert crypté à la téloche.


Oui, le codage par XOR est suffisant parce que, si on prend en compte qu'on utilise un octet pour chaque couleur RGB (donc 3 octets par pixel) et que ta télévision fait 1500x1500 (et encore, c'est vraiment minuscule comme télévision ça qui plus est, on ne parle même pas de la Haute Définition ici).

Si on dit que la clé utilisée fait donc 3 octets pour s'ajuster à chaque pixel, ça nous fait donc 2^(8*3) soit 1,6777216e7 possibilités pour un seul pixel. Même si un ordinateur pouvait tester toutes ces valeurs une à une en moins de 1 secondes, il lui resterait toujours 1500x1500 - 1 autres pixels à décoder :lol: .

Ensuite, je sais que la clé est enregistrée dans le récepteur/décodeur et que les câblo-distributeurs s'amusent parfois à la changer (disons juste avant le Super Bowl aux États-Unis par exemple). Ce qui fait que les gens qui ont piraté doivent retrouver la nouvelle clé. Bref, c'est certain que ce n'est pas infaillible, mais le système n'est pas mauvais non plus.

Nota: je parle ici du cryptage de câblo-distributeurs canadiens, je ne sais pas si c'est identique partout dans le monde, mais je crois que oui.

Cordialement,
Vhann.

"root@darkstar:~# fortune
There once was an old man from Esser,
Who's knowledge grew lesser and lesser.
It at last grew so small, [He knew nothing at all,
And now he's a College Professor" :lol:
Saisir du texte avec SDL facilement? C'est ici (SDL_Input)
Vous voulez rire?
-Nous jurons sur l'honneur qu'Internet Explorer n'est PAS basé sur Mozilla Firefox
Quelques URLs amusantes pour Firefox users:
-<lien url="chrome://browser/content/browser.xul">chrome://browser/content/browser.xul</lien>
-<lien url="about:robots">about:robots</lien>
Amusez-vous :D
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 190 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0903s (0.0742s)