Tout d'abord, toute la Team Hackademy vous souhaite une année 2008 pleine de bonnes choses !

Pour débuter cette année, nous sommes heureux de vous annoncer que le Ezine commence à prendre forme (surtout l'équipe qui dirigera celui-ci) et devrait apparaitre sur le Web début Avril. Cela peut paraitre loin mais nous voulons vraiment faire un Ezine de qualité, cela demande donc beaucoup de préparation.

Pour ceux qui aimeraient publier dans le premier numéro il est encore temps d'envoyer vos articles (au pire il seront pour le prochain numéro) directement à redaction@thehackademy.net.

Autre annonce importante, le premier meeting HZV aura lieu le 16 Février 2008 sur Paris (dans les locaux de Sysdream). Celui-ci sera mensuel et aura pour concept de dispenser une formation d'environ 4h sur divers thèmes choisi par la communauté. Le premier thème abordé sera la sécurité VoIP et sera dispensé par CrashFr. Il vous est possible de réserver vos places en formulant votre demande sur meeting@thehackademy.net. Les meeting sont aussi l'occassion pour ceux qui n'auront pas la chance d'assister à la formation de faire des rencontres avec les autres membres de la communauté. Biensur ce meeting est ouvert à tous et gratuit (seul la limite de place disponible peut vous empecher l'accès; alors faites vite !).

Bonne année et n'oubliez pas: HZV will never die !

 FAQ - Rechercher  

C - Effacer un fichier définitivement

 
The Hackademy Forum Index du Forum -> Programmation Poster un nouveau sujet   Répondre au sujet
Page 1 sur 1
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Sam Déc 15, 2007 5:29 pm  |   Sujet du message: C - Effacer un fichier définitivement Répondre en citant
Bonjour à tous, dans l'étude de différent algorithme de cryptographie, je me suis posé la question : lors du cryptage d'un fichier avec un logiciel, si le fichier d'origine est supprimé avec un simple remove(), il peut être retrouver grace à des logiciels spécifiques.

Esque ce morceau de code permettrait d'avoir une supprésion irréversible ?
Code:
if ((in=fopen(szFile,"wb")) == NULL) {MessageBox(hwnd,"Fichier introuvable","",NULL);;}
            int x;
            for(x=0;x<10240;x++)
            {fputc(0,in);}
            remove(szFile);


Et sinon, comment supprimer un fichier définitivement ?


Dernière édition par HacKSpideR le Lun Déc 17, 2007 1:50 pm; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Dim Déc 16, 2007 11:21 am  |   Sujet du message: Répondre en citant
Pourquoi écris un nombre fixes d'octets ?

Pour retrouver les données après ça, c'est peut-être possible.
Si c'est un bon vieux disque dur magnétique, il y a des chances pour que ça soit possible car la magnétisation du disque n'est jamais parfaite quand tu écris dessus. Et comme tu écris uniquement des 0 il devient possible de retrouver l'ancienne valeur.
Si tu écris des données aléatoires, ça devient plus marrant déjà. Smile
Sinon, il me semble qu'un document décrit comment effacer d'une manière correcte les données. De mémoire il faut un minimum de 7 passes.

Tiens voilà un document qui en parle :
http://www.usenix.org/publications/library/proceedings/sec96/full_papers/gutmann/
Il propose 35 passes. Smile

Mais bon, généralement, écrire 0x55 (alternance stricte de 1 et 0 en binaire) puis 0xAA (son complément) suivi d'une écriture de données aléatoire devrait suffire pour la plus part des cas.

Note que tes quelques lignes de code ressemblent plus à du C mal indenté qu'à du C++. Smile
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Dim Déc 16, 2007 2:35 pm  |   Sujet du message: Répondre en citant
Merci pour le lien Very Happy, je vais essayer en écrivant un binaire aléatoire.

Pour le code je l'ai écrit vite fait, je ne connais pas encore par coeur la fonction createfile, je remplacerai fopen, fputc et remove Wink
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Dim Déc 16, 2007 3:42 pm  |   Sujet du message: Répondre en citant
C'est pas parce que tu vas utiliser une fonction de l'API windows à la place de l'API standard que ton programme va plus ressembler à du C++.
Tu ferais mieux de le faire en pure C.
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Lun Déc 17, 2007 11:38 am  |   Sujet du message: Répondre en citant
Ok c'est bon, je l'ai fait en C Very Happy

j'ai fait sa, mais je n'utilise pas 0x55 et 0xAA. J'ai testé ce code il est un peu long voir très long ^^ et plante parfois lorsque le fichier et sur une clée usb.

Code:
if(mes == IDYES)
            {
            int y;
            int x;
            int n =1;
            for(y=0;y<10;y++)
            { 
            if ((in=fopen(szFile,"wb")) == NULL) {MessageBox(hwnd,"Fichier introuvable","",MB_ICONWARNING);return 1;}
            for(x=0;x<1024000;x++)
            {
                               
                                int partSize   = (n == RAND_MAX) ?        1 : 1 + (RAND_MAX - n)/(n+1);
                                int maxUsefull = partSize * n + (partSize-1);
                                int draw;

                                do
                               {
                                 draw = rand();
                                } while (draw > maxUsefull);
                                fputc(draw,in);
                               
                                }
            fclose(in);
            }
            DeleteFile(szFile);
            }


Je pense que ce code devrait faire l'affaire mais je ne suis pas sur, j'ai lu le site que tu m'as indiqué avec ma traduction approximative Rolling Eyes et je pense avoir compris le principe.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Mer Déc 19, 2007 11:27 pm  |   Sujet du message: Répondre en citant
Je trouve ça un peu abusif d'ouvrir et fermer le fichier à chaque fois. Pour forcer l'écriture du buffer sur le disque, utilise plutôt la fonction fflush puis sync.
Ensuite tu as toujours la taille fixe de 1024000 octets, tu vas donc agrandir le fichier jusqu'à quasiment 1Go.

Je suis pas sûr de comprendre comment fonctionne ton programme (il en manque un morceau ? genre n++ ?), mais il me semble possible que certains bits ne soient probablement pas modifiés, ce qui fait qu'il est possible de retrouver des morceaux d'information.

Je pense qu'on ne peut pas faire moins de trois passes dont deux constante. De façon à avoir écrit des 0 et des 1 dans chaque bit, puis une dernière passe aléatoire afin d'éviter tout calcul des anciennes valeurs.
Sans oublier le fflush puis sync pour forcer l'écriture sur disque.

Cela dit, sync c'est un appel système pour linux, je pense qu'il existe un truc équivalent pour windows.
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Jeu Déc 20, 2007 11:04 am  |   Sujet du message: Répondre en citant
Addendum :
Note que étant donné la technologie utilisée pour les clés USB, Une seul et unique passe avec que des 0 devrait suffire. Puisque je ne pense pas qu'il y ait de rémanence des données, mais ça demande confirmation.
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Jeu Déc 20, 2007 5:03 pm  |   Sujet du message: Répondre en citant
En faite le fichier est vidée à chaque passage ( w+b ) donc sa n'atteint pas 1Go, c'est pour sa qu'il est ouvert et fermé à chaque passage. Pour n, il sert à avoir un nombre entre 0 et n, ici entre 0 et 1.

Par contre mon code crer un nombre binaire "pseudo-aléatoire", je ne sais pas si cela convient ?

Pour la fonction fflush et sync je vais me renseigner Wink

Donc je vais retraivailler sa, en plus c'est les vacances demain, sa tombe bien Very Happy

Par contre il faudrai que j'écrit un nombre d'octet égal au nombre d'octet du fichier original ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Ven Déc 21, 2007 2:53 am  |   Sujet du message: Répondre en citant
L'ouverture avec les modes "wb" permet de tronquer le fichier et placer le pointeur au début du fichier. Mais il n'empêche que tu écris 1024000 octets, donc tu étends le fichier jusqu'à cette taille.

Et puis tu devrais peut-être éviter d'utiliser fopen. J'avais pas relu le man fopen, mais étant donné qu'il tronque le fichier, les blocs de données seront peut-être libéré puis réalloués quand tu vas réécrire. Le problème c'est que les blocs de données réalloués ne seront peut-être pas ceux qui étaient utilisés pour l'ancien fichier, et par conséquent tu risque d'écrire dans des blocs de données qui ne contiennent aucune information sensible. Les informations sensibles restent quant-à elles dans leurs blocs de données qui ont été libérés et pas réalloués.
Je suis pas sûr que ça soit bien clair ce que je raconte.

Bref, ça va vraiment dépendre du fs et de la façon dont le système gère le fs.
Sous linux je te dirais de passer par l'appel système open afin de positionner le pointeur d'écriture au début du fichier sans pour autant tronquer le fichier.

Note que mettre une taille fixe est toujours mauvais parce que je pourrais toujours créer un fichier plus grand. Smile
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Ven Déc 21, 2007 4:49 pm  |   Sujet du message: Répondre en citant
Oui effectivement, ce n'est pas sur que j'écrivent sur le "bon" fichier. Je vais trouver autre chose.

Merci d'avoir répondue à mes questions, je reposterai lorsque j'aurai trouver comment remedier au problème

Sur ce, Bonne Vancance !
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Sam Déc 22, 2007 1:11 pm  |   Sujet du message: Répondre en citant
Je vien de fouinner un peu sur cpp.france et j'ai trouvé ce morceau de code que j'ai tester, il remplie le fichier de 0 mais d'une autre facon que moi.
Code:
#define BLOC 0x100000
// ...

HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
   if(hFile == INVALID_HANDLE_VALUE)
      {return FALSE;}
   LPVOID p = HeapAlloc(GetProcessHeap(), 0, BLOC);
   DWORD d;
   memset(p, 0, BLOC);

   DWORD dwSize = GetFileSize(hFile, NULL);
   while(dwSize > 0)
   {
      if(dwSize >= BLOC)
      {
         dwSize -= BLOC;
         if(!WriteFile(hFile, p, BLOC, &d, NULL) || d != BLOC)
         {
            CloseHandle(hFile);
            HeapFree(GetProcessHeap(), 0, p);
            return FALSE;
         }
      }
      else
      {
         if(!WriteFile(hFile, p, dwSize, &d, NULL) || d != dwSize)
         {
            CloseHandle(hFile);
            HeapFree(GetProcessHeap(), 0, p);
            return FALSE;
         }
         dwSize = 0;
      }
   }

   CloseHandle(hFile);

   HeapFree(GetProcessHeap(), 0, p);
                               }
                               DeleteFile(szFile);


Je vais essayer de faire en sorte qu'il écrive des données pseudo-aléatoire mais sinon esque cette manière et plus efficace que la mienne ?
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Celelibi



Inscrit le: 29 Mar 2006
Messages: 770

Message Posté le: Sam Déc 22, 2007 6:43 pm  |   Sujet du message: Répondre en citant
J'aurais du mal à dire quoi que ce soit à propos de ce code, je ne connais pas du tout l'API win32, c'est pas des fonctions standard.

Maintenant que j'ai râlé, je vais dire que dnas le cas général, oui ce code est plus efficace que le tien. Mais après il faut voir si windows utilise un buffer disque. Si c'est le cas, la différence de performance sera vraiment minime.
_________________
Il y a un boulet qui sommeille en chacun de nous. (enfin, surtout vous...)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
HacKSpideR



Inscrit le: 19 Juin 2007
Messages: 37

Message Posté le: Jeu Déc 27, 2007 5:27 pm  |   Sujet du message: Répondre en citant
Je vais finallement laisser comme sa, je vais quand meme voir si je pourrai pas choper une partie du code source de shred sur linux, il utilise la methode de guttman.

Merci pour ton aide Celelibi Smile

et bonnes fetes
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
Montrer les messages depuis:   
The Hackademy Forum Index du Forum -> Programmation Poster un nouveau sujet   Répondre au sujet

 
Sauter vers:  

Powered by phpBB
Theme modified by mOg & CrashFr
Traduction par : phpBB-fr.com