Je ne comprends pas votre première question (ce que vous voulez modifier le système de fichiers Pourquoi est-ce pas l'espace mort exactement où vous voulez regarder??)
Quoi qu'il en soit, here's an example of such a tool:
#include <stdio.h>
#include <alloca.h>
#include <string.h>
#include <ctype.h>
/* Number of bytes we read at once, >2*maxlen */
#define BUFSIZE (1024*1024)
/* Replace this with a function that tests the passwort consisting of the first len bytes of pw */
int testPassword(const char* pw, int len) {
/*char* buf = alloca(len+1);
memcpy(buf, pw,len);
buf[len] = '\0';
printf("Testing %s\n", buf);*/
int rightLen = strlen("secret");
return len == rightLen && memcmp(pw, "secret", len) == 0;
}
int main(int argc, char* argv[]) {
int minlen = 5; /* We know the password is at least 5 characters long */
int maxlen = 7; /* ... and at most 7. Modify to find longer ones */
int avlen = 0; /* available length - The number of bytes we already tested and think could belong to a password */
int i;
char* curstart;
char* curp;
FILE* f;
size_t bytes_read;
char* buf = alloca(BUFSIZE+maxlen);
if (argc != 2) {
printf ("Usage: %s disk-file\n", argv[0]);
return 1;
}
f = fopen(argv[1], "rb");
if (f == NULL) {
printf("Couldn't open %s\n", argv[1]);
return 2;
}
for(;;) {
/* Copy the rest of the buffer to the front */
memcpy(buf, buf+BUFSIZE, maxlen);
bytes_read = fread(buf+maxlen, 1, BUFSIZE, f);
if (bytes_read == 0) {
/* Read the whole file */
break;
}
for (curstart = buf;curstart < buf+bytes_read;) {
for (curp = curstart+avlen;curp < curstart + maxlen;curp++) {
/* Let's assume the password just contains letters and digits. Use isprint() otherwise. */
if (!isalnum(*curp)) {
curstart = curp + 1;
break;
}
}
avlen = curp - curstart;
if (avlen < minlen) {
/* Nothing to test here, move along */
curstart = curp+1;
avlen = 0;
continue;
}
for (i = minlen;i <= avlen;i++) {
if (testPassword(curstart, i)) {
char* found = alloca(i+1);
memcpy(found, curstart, i);
found[i] = '\0';
printf("Found password: %s\n", found);
}
}
avlen--;
curstart++;
}
}
fclose(f);
return 0;
}
Installation:
- Démarrer un live CD Linux
- Copiez le programme dans le fichier
hddpass.c
dans votre h ome répertoire
- Ouvrez un terminal et tapez la commande suivante
su || sudo -s
# vous rend racine afin que vous puissiez accéder au disque dur
apt-get install -y gcc
# Installer gcc Cela ne fonctionne que sur Debian/Ubuntu et al, vérifiez votre système documentation pour les autres
gcc -o hddpass hddpass.c
# Compile.
./hddpass /dev/
YOURDISK # Le disque est généralement sda
, hda
sur les anciens systèmes
- Regardez la sortie
Test (copie à la console, en tant que root):
gcc -o hddpass hddpass.c
</dev/zero head -c 10000000 >testdisk # Create an empty 10MB file
mkfs.ext2 -F testdisk # Create a file system
rm -rf mountpoint; mkdir -p mountpoint
mount -o loop testdisk mountpoint # needs root rights
</dev/urandom head -c 5000000 >mountpoint/f # Write stuff to the disk
echo asddsasecretads >> mountpoint/f # Write password in our pagefile
# On some file systems, you could even remove the file.
umount testdisk
./hdpass testdisk # prints secret
Testez vous-même sur un CD Ubuntu Live:
# Start a console and type:
wget http://phihag.de/2009/so/hddpass-testscript.sh
sh hddpass-testscript.sh
Par conséquent, c'est relativement facile. Comme je l'ai découvert, ext2 (le système de fichiers que j'ai utilisé) écrase les fichiers supprimés. Cependant, je suis sûr que certains systèmes de fichiers ne le font pas. Idem pour le fichier d'échange.
Cela me dirait que j'ai un problème (et c'est utile). Cependant, il doit être exécuté avec la connaissance des mots de passe à rechercher. Je suis à la recherche de quelque chose d'un peu plus lourd et cela réglera le problème. – BCS