Effacer les traces des fichiers effacés

Sur un ordinateur, la rapidité d’exécution est un facteur primordial. Sur un ordinateur, lire et écrire sur un disque dur, c’est lent. Comment mettre ces deux faits contradictoires ensemble? En coupant là où c’est possible!

Commençons par considérer la lecture de données. S’il fallait qu’à chaque fois qu’une personne veuille accéder à un fichier, l’ordinateur traverse le disque dur en entier jusqu’à temps qu’il trouve le dit fichier, le système d’exploitation prendrait des journées à démarrer. La solution à ce problème est d’écrire les informations sur les fichiers au début du disque et les données des fichiers plus loin sur le disque. Dans les informations d’un fichier, il y a par exemple le nom, la taille, la date de création et la position des données. Ainsi, il est plus rapide de fouiller dans une liste qui peut d’ailleurs être triée que de lire tout.

Ceci étant dit, comment un fichier peut être effacé? Chose certaine, il faut l’effacer de la liste. Une fois qu’il n’est plus dans la liste, il n’y a plus rien qui pointe vers l’espace des données, mais que faire avec ces données? La meilleure solution est de tout simplement les laisser là et quand un nouveau fichier sera créé, il prendra éventuellement sa place. C’est pour cela qu’il est possible avec certains logiciels d’aller reprendre les données effacées par erreur.

Côté sécurité, qu’une personne puisse fouiller dans votre ordinateur et prendre des données sensibles effacées n’est pas très réjouissant. Pour faire disparaître les traces, vous pouvez, avant d’effacer un fichier, mettre des données inutiles à la place des anciennes. Si le fichier est déjà effacé, alors créer des gros fichiers pour qu’ils prennent la place de l’autre peut être une autre possibilité.

Voici un petit programme C++ qui permet de remplir le disque dur. Vous n’avez qu’à le rouler dans une console en donnant comme argument le nom du répertoire temporaire dans lequel mettre les gros fichiers. Un nouveau répertoire est préférable pour pouvoir effacer simplement les fichiers ainsi générés.

#include <cstdlib>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iostream>
using namespace std;

int main(int argc, char **argv) {
char NomFichier[10];
char NomComplet[255];
ofstream fout;
char buffer;
unsigned int Max;

// Verifier si un repertoire est donne
if (argc != 2) {
cerr << « USAGE:  » << argv[0] <<  » Repertoire\n »;
return 0;
}

// Initialiser les noms
for (int i=0; i<9; i++) {
NomFichier[i] = ‘a’;
}
NomFichier[9] = ‘\0’;

while (true) {
// Initialiser le random
srand(time(0));

// Initialiser les valeurs
strcpy(NomComplet, argv[1]);
strcat(NomComplet, NomFichier);
Max = 1000000000;
cout << NomComplet << endl;

// Ouvrir le fichier
fout.open(NomComplet, ios::out|ios::binary);

// Ecrire un octet si possible
buffer = rand()*255;
fout.write( (char*) &buffer, 1);
if (fout.fail()) {
break;
}

// Ecrire tant que possible
while ((!fout.fail()) && (Max>0)) {
buffer = rand()*255;
fout.write( (char*) &buffer, 1);
Max –;
}

// Prochain nom de fichier
NomFichier[8]++;
for (int i=8; i>=0; i–) {
if (NomFichier[i] > ‘z’) {
NomFichier[i-1]++;
NomFichier[i] = ‘a’;
}
}

// Fermer le fichier
fout.close();
fout.clear();
}

cout << « Fini\n »;

return 0;
}