You are on page 1of 7

Structure du MBR et des tables des partitions sur le disque dur

Introduction
Nous allons voir dans cet article comment sont organiss le MBR et les tables des partitions sur le disque dur, comment y accder
directement, et comment les sauvegarder et les restaurer volont. Nous verrons ensuite comment camoufler des donnes
sur votre disque dur en lieu sr, des endroits innaccessibles par les systmes dexploitations et les virus.

MBR et tables des partitions


Le MBR est le premier secteur physique dun disque dur. Comme tous les secteurs, le MBR a une taille de 512 octets. La position
absolue du MBR dpend de la mthode daccs que lon utilise :


en CHS (Cylindres/Ttes/Secteur, anciens mode daccs aux disques durs), le MBR est le secteur n1 de la tte n0 et sur le
cylindre n0
en LBA (accs linaire tous les secteurs du disque dur, en partant de zro), le MBR est le secteur n0 (premier secteur
physique)

Dans tout ce qui suit, je nutiliserai que le mode LBA pour accder et pour dsigner les secteurs du disque dur : je ne parlerai pas
de cylindres ni de ttes (ou de de pistes). En LBA, chaque secteur possde un numro absolu, le premier secteur du disque (le
MBR) tant le secteur numro zro. Par exemple, mon disque dur MAXTOR de 80 Go possde 160 071 660 secteurs : en mode LBA
ces secteurs sont numrots de 0 160 071 659.
Le MBR contient principalement 2 lments, vitaux pour le dmarrage du PC :



le programme de boot que le BIOS lancera aprs le test du matriel


la table des partitions principales

Cette table des partitions principales contient 4 descripteurs, dcrivant chacun la position physique dune partition principale sur le
disque dur. La position physique dune partition est indique (entre autre) dans la table des partitions principales par :




le numro absolu du premier secteur de la partition (en LBA)


le nombre de secteur que contient la partition partir de son premier secteur
le type de partition (type de systme de fichiers, la partition est-elle cache, etc.)

Comme la table des partitions principales (dans le MBR) ne contient que 4 descripteurs, cela explique pourquoi un disque dur ne
peut contenir que 4 partitions principales. Si on a besoin de plus de 4 partitions, il faudra alors crer une partition tendue parmi
les 4 partitions principales, en sachant que :




on ne peut crer quune seule partition tendue sur un disque dur


une partition tendue peut tre diviser en autant de partitions logiques que lon veut
le premier secteur dune partition tendue contient la table des partitions logiques. Ce secteur se trouve en plein milieu du
disque dur

Les deux configurations possibles dun disque dur utilisant les 4 descripteurs de la table des partitions principales sont donc :



soit 4 partitions principales (et aucune partition tendue)


soit 3 partitions principales et 1 partition tendue (elle mme divise en plusieurs partitions logiques)

Structure du MBR :




au dbut on retrouve la programme de BOOT


au milieu on trouve la table des partitions principales
et la fin, les deux derniers octets du secteur, indiquent (ou confirment, plus exactement) quil sagit dun secteur BOOT. Ces
deux octets ont pour valeurs hexadcimales 0x55 et 0xAA.
Taille

Contenu

446 octets

Programme de BOOT

16 octets

Descripteur de la premire partition principale

16 octets

Descripteur de la seconde partition principale

16 octets

Descripteur de la troisime partition principale

16 octets

Descripteur de la quatrime partition principale

2 octets

Signature indiquant quil sagit dun secteur BOOT : 0x55 0xAA

Comme le MBR contient la table des partitions principales du disque, il est forcment diffrent dun disque lautre (car les
partitions nont jamais la mme dimention au secteur prs). Pour dupliquer le programme de boot (Grub, par exemple) dun disque
1 vers un disque 2, on ne peut donc pas recopier directement le MBR du disque 1 vers le MBR du disque 2 : on craserait et on
perdrait la table des partitions du disque 2 !
A retenir :





Le MBR contient la table des 4 partitions principales du disque dur


Le MBR ne contient pas la table des partitions logiques
Parmi les 4 partitions principales, une seule peut tre une partition tendue (divise en partitions logiques)
Si une partition tendue est cre sur le disque dur, la table de ses partitions logiques est enregistre dans le
premier secteur de la partition tendue

Pour conclure ce paragraphe :


Il existe 2 tables de partitions sur votre disque dur :



la table des partitions PRINCIPALES enregistr dans le MBR (premier secteur du disque)
la table des partitions LOGIQUES enregistre dans le premier secteur de la partition tendue (en plein milieu du disque)

Cela signifie quil suffit de sauvegarder 2 secteurs (soit 1ko seulement) pour sauvegarder toute le structure de vos partitions, mais
cela signifie surtout quil suffit dcraser seulement 2 secteurs pour dtruire lintgralit de vos partitions !
Donc partir de maintenant, si on parle de "table de partition" (cest quoi a ??? ... ) il faudra prciser si on parle de la table des

partitions principales ou de la table des partitions logiques (l je comprends mieux ! :-)

Comment sauvegarder et modifier la table des partitions principales ?


La structure des partitions ne repose donc que sur 2 petits malheureux secteurs. Vue la fragilit de la structure des partitions
(fragilit bien comprise par les programmeurs de virus), il est donc important de sauvegarder ses tables de partitions, dans le but
de pouvoir les restaurer en cas de problme.
Je ne parlerai ici que de la table des partitions PRINCIPALES, en considrant que le disque dur contient 4 partitions principales et
aucune partition tendue.
Gnralement, la perte ou la dertruction de la table des partitions principales se produit dans un des deux cas suivants :



passage laction dun virus dont le but est justement de dtruire la table des partitions principales dans le MBR
mauvaise manipulation de lutilisateur, qui voulait faire mumuse avec son MBR (nest-ce pas ? ... )

Pour sauvegarder votre table des partitions principales, vous avez deux solutions :



sauvegarder lintgralit du MBR (512 octets) sur une disquette


recopier sur papier les informations vitales de la table des partitions principales, et les stocker en lieu sr

La sauvegarde du MBR dans un fichier pourra se faire en utilisant lutilitaire dd sous Linux, de la manire suivante :
dd if=/dev/hda of=secteur_mbr_disque_hda bs=512 count=1
Le fichier secteur_mbr_disque_hda contient alors les 512 octets de votre MBR. Pour le visionner en hexadcimal, vous pouvez
utiliser mc sous Linux :
mc -v secteur_mbr_disque_hda
Puis appuyez sur F4 pour voir le fichier en hexadcimal.
Appuyez sur F10 pour sortir de mc.
Mais le jour o votre
secteur_mbr_disque_hda ?

MBR

est

rellement

endomag,

tes-vous

sr

de

retrouver

ce

fichier

de

sauvegarde

Retrouverez-vous la disquette sur laquelle vous avez enregistr votre MBR ? Cette disquette sera-t-elle elle mme lisible ou
endomage ? (Erreur de CRC, Erreur d I/O, etc ...). La loi de lemmerdement maximum donne la rponse : comme votre MBR est
dtruit, vous navez vraiment pas de chance ce jour l, donc attendez-vous avoir galement des problmes pour retrouver ou
pour lire la disquette sur laquelle vous aviez enregistr votre MBR. Pour toutes ces raisons, et pour viter davoir des problmes
supplmentaires de lecture de la sauvegarde, je prfre sauvegarder ma table des partitions principales sur papier, au marqueur
indlbile, et le coll sur le ct droit de mon unit centrale : je suis dj quasiment sr (sauf en cas dinondation ... :-) de
supprimer tout problme de lecture lors de la rutilisation de cette table.
Voyons maintenant concrtement comment enregistrer sur papier la table des partitions principales.
Comme nous lavons dj dit, parmi toutes les informations contenues dans les descripteurs de partitions principales (sur 16 octets
chacun dans le MBR), seules les 3 informations suivantes nous intressent et nous permettrons de sauvegarder ou de restaurer les
partitions principales :




le numro absolue en LBA du premier secteur de la partition


la taille de la partition en secteurs
le type de la partition (un nombre en hexadcimal conpris entre 0x00 et 0xFF)

Pour obtenir trs clairement ces informations, on pourra utiliser le programme fdisk sous Linux :
Par exemple, pour analyser le disque /dev/hdb, lancez :
fdisk /dev/hdb
Entrez dans le menu Expert : commande x
Affichez la table de partitions : commande p
Fdisk affiche alors le contenu des 4 descripteurs de la table des partitions principales du MBR, en affichant le dbut et la fin de la
partition en mode CHS, et en affichant aussi le dbut et la taille en secteurs absolus (mode LBA). La dernire colonne (ID) est le
type de partition.
Pour sauvegarder sur papier la table des partitions principales, il faut relever dans un tableau le type, le dbut, et la taille de
chacune des 4 partitions. Par exemple, pour mon disque dur MAXTOR de 80 Go, jai relev sur papier le tableau suivant :
partition

type de partition

numro absolu LBA du premier secteur

hdb1
hdb2
hdb3
hdb4

0x83
0x82
0xc
0x83

63
7 181 055
8 257 473
81 931 563

taille de la partition en
secteurs
7 180 992
1 076 355
73 674 027
78 140 097

Remarque : on remarque que la partition hdb1 commence au secteur n63 (et non au secteur n1 qui suit le MBR) : cela signifie
que les secteurs n 1 n 62 ne sont, apparemment, pas utiliss sur le disque dur. En effet, la commande v de fdisk nous confirme
que 62 secteurs ne sont pas utiliss, vu lemplacement des partitions principales. En ralit, certains lanceurs de dmarrage et
certains OS utilisent quelques un de ces secteurs. Ce qui est sr cest quaucune norme nimpose lutilisation de ces 62 secteurs,
cest donc lanarchie totale, chacun peut en faire ce quil veut. Parmi les utilisations les plus frquentes de ces 62 premiers secteurs
du disque (aprs le MBR), on peut citer lenregistrement dun lanceur de dmarrage ne tenant pas dans les 446 octets disponible
dans le MBR, le stockage de virus (non dtruit en cas de formatage des partitions), lcriture dun octets permettant de limiter le
fonctionnement de certains logiciels de dmonstration limits 30 jours (l encore, si vous formatez vos partitions principales,
vous ne mettrez pas zro le compteur dutilisation du logiciel enregistr EN DEHORS des partitions : le logiciel refusera de se
lancer nouveau (aprs rinstallation de Windows et du logiciel lui-mme), en vous indiquant que vous avez dpass la priode de
test), et enfin, vous pouvez utiliser ces 62 secteurs pour faire des copies de sauvegarde de vos tables des partitions (MBR, secteur
boot de la partition tendue, et mme sauvegarder tous les secteurs de partition).
La table des partitions principales donne sous Linux par fdisk dans le mode expert, et releve dans le tableau ci-dessus a pour
unit le secteur absolu (en accs LBA). Mais certains programmes (comme la table des partitions donne par fdisk en mode
normal, cest--dire non expert) proposent comme unit le cylindre (1 cylindre = 16 065 secteurs = 8 Mo environ). Il faut donc
faire un choix : soit relever la table des partitions en secteurs, et utiliser le secteur comme unit, soit relever la table des partitions
en cylindres et utiliser le cylindre comme unit (le but tant biensr dviter avoir faire des conversions soit-mme, par
exemple pour passer du mode CHS au mode LBA, qui pourraient se rvler catastrophiques en cas derreur de calcul).
Bien que le cylindre paraisse tre plus adapt pour dcrire les partitions des grands disques durs, jai personnellement choisi de

tout relever en secteurs, et de nutiliser que le secteur pour sauvegarder et restaurer mes partitions, et ce pour 2 raisons :


le secteur est lunit la plus fine quil soit, et permet de dfinir des partitions mme si elles ne finissent pas la limite dun
cylindre (cest--dire si une partition ne contient pas un nombre ENTIER de cylindres)
de plus le programme GRUB (le lanceur de dmarrage) permet de restaurer manuellement la table des partitions principales,
condition de saisir les informations en secteurs absolus LBA (et non en cylindres)

Enfin, matriser le contenu de son disque dur, sans se laisser influencer par les choix de son systme dexploitation, consiste
dfinir et connatre la cartographie complte de son disque au secteur prs, pour pouvoir par exemple y camoufler des fichiers
inaccessibles par le systme dexploitation comme nous le verrons plus bas.
Revenons la table des partitions principales : nous lavons sauvegarde sur le papier, voyons prsent comment la restaurer, en
crivant manuellement les informations sauvs (type, dbut, et taille des partitions) dans les 4 descripteurs de partitions
principales situs dans le MBR.
ATTENTION : cette opration est videmment dlicate puisquelle va craser le contenu de la table actuelle des
partitions principales, sans vous demander aucune confirmation. Agissez donc en connaissance de cause.
Pour restaurer la table des partitions principales, on peut utiliser GRUB, soit en ligne de commande au dmarrage du PC, soit en
bootant sur une disquette contenant Grub, soit encore en lanant Grub dans un shell Linux. Utilisons la ligne de commande au
dmarrage du PC : lorsque Grub prsente le menu des systmes bootables (Linux, Windows, etc.), appuyez sur la touche c pour
atteindre la ligne de commande. La touche TAB vous affiche lcran toutes les commandes utilisables dans Grub. Parmi les
commandes de Grub, il y a la commande partnew qui permet de crer une nouvelle partition principale. En ralit, cette commande
ne fait rien dautre que dcrire (en lcrasant) sur un des 4 descripteurs de partition principale dans le MBR. La syntaxe de partnew
est :
partnew partition type dbut taille
o :






partition est la partition principale restaurer, de la forme (hd0,0) ou (hd0,1) ou (hd1,0) etc. Remarque : Grub commence
numroter les disques et les partitions partir de zro. Par exemple, (hd0,0) pour Grub reprsente la partition hda1 pour
Linux. De mme, la partition hdb3 de Linux sera reprsente par (hd1,2) dans Grub.
type est le type de la partition, sous forme dun nombre hexadcimal (avec le prfixe 0x) sur 1 octet
dbut reprsente le numro absolu en LBA du premier secteur de la partition
taille reprsente la taille en secteurs de la partition

Par exemple, pour restaurer mes 4 partitions principales sur mon disque MAXTOR de 80 Go (dont la table des partitions principales
a t donne dans un tableau plus haut), jai tap les 4 commandes suivantes dans Grub :
grub> partnew (hd1,0) 0x83 63 7180992
grub> partnew (hd1,1) 0x82 7181055 1076355
grub> partnew (hd1,2) 0xc 8257473 73674027
grub> partnew (hd1,3) 0x83 81931563 78140097
Pour relire la table des partitions principales enregistre dans le MBR, on pourra utiliser la commande geometry de Grub :
grub> geometry (hd1)
Grub renvoie alors le type de chaque partition principale, ainsi que le nombre total de secteurs sur le disque (en LBA), mais ne
donne pas les caractristiques (dbut et taille) de chaque partition. Grub permet donc de saisir la table des partitions principales,
mais ne permet pas de la relever.
Grub permet de saisir volont les informations des partitions principales dans les descripteurs. Il permet donc aussi de "vider" un
ou plusieurs des 4 descripteurs, ce qui fera croire aux systmes dexploitation (Linux, DOS, Windows, etc.) que lespace occup par
la partition principale est de lespace vide. Pour vider un descripteur, il suffit de saisir 0 aussi bien pour le type, pour le dbut, et
pour la taille de la partition. Par exemple, pour rendre la partition /dev/hdb3 innaccessible depuis les systmes dexploitation, on
pourra taper la commande suivante dans grub :
grub> partnew (hd1,2) 0 0 0
ATTENTION : cette commande crasera le descripteur de la partition hdb1 dans la tables des partitions principales, et il vous sera
alors trs dlicat (voire impossible) de retrouver les caractristiques de cette partition si vous ne les avez pas notes sur un papier
et ranges en lieu sr.
Mise en garde pour les administrateurs de parc informatique :
Comme nous venons de le voir, la ligne de commande de Grub donne la possibilit de modifier directement la table
des partitions principales, et de faire disparaitre les partitions. Si vous installez Grub sur des postes informatiques
multi-utilisateurs et non surveills (en lyce par exemple) il est vivement conseill de mettre un mot de passe dans
Grub pour interdire laccs la ligne de commande, sans quoi les utilisateurs aurait le pouvoir de dtruire facilement
et dfinitivement la table des partitions principales !
A retenir :
Le lanceur de dmarrage Grub permet de saisir manuellement les caractristiques des 4 partitions principales, en crivant
directement dans les 4 descripteurs du MBR. Lors de cette saisie, la commande partnew de Grub utilise le secteur absolu (LBA) et
non le cylindre comme unit. En saisissant zro comme type, dbut, et taille dune partition dans la commande partnew, la ligne de
commande de Grub permet de faire disparaitre une partition en vidant son descripteur ! Il est alors suicidaire de laisser Grub sans
mot de passe sur des postes informatiques en lyce (bien quen cas de destruction dune partition, on accuserait naturellement le
dernier virus, et non les lves biensr, puisque ladministrateur qui a laiss Grub sans mot de passe sur les postes lves ne doit
pas tre au courant de la bombe retardement que cela reprsente ;-)
Enfin, si vous avez lintention de sauvegarder et de restaurer manuellement vos tables de partitions, il est conseill de ne crer que
des partitions principales (faciles reconstituer dans le MBR grce la commande partnew de Grub) et de ne pas crer de partition
tendue (donc pas de partitions logiques, dont la table de partition ressemble une liste chane bien plus complexe que la table
des 4 partitions principales). Vous navez alors quune seule table de partition sauvegarder : la table des partitions principales.

Comment camoufler des donnes sur votre disque dur ?


Entendons-nous bien sur le terme "camoufler" : jentends par camoufler rendre les donnes innaccessibles au systme
dexploitation. Donc mme ladministrateur du systme (le root sous Linux) ne pourra pas plus accder ces donnes camoufles
quun utilisateur quelconque. Le camouflage ne consiste donc pas cacher simplement un fichier en activant son attribu "Cach",
ni limiter les droits daccs au fichier en utilisant les restrictions du systme de fichiers (comme cela existe pour Ext2 sous Linux
ou pour NTFS sous Windows). Non non non, camoufler ne consiste pas utiliser des fonctions lgales que tout le monde connat,
mais va consister utiliser les possibilits de votre systme (le BIOS, le MBR, et la structure des partitions), pour vous rserver
manuellement un espace sur le disque o seul vous serez aller, alors que cet espace sera totalement ignor par votre systme
dexploitation. Vous laurez compris, dans ce paragraphe on inverse les rles : cest vous le matre du systme, ce nest plus le

systme dexploitation. Mais comment finter, ou arnaquer, ou mentir au systme dexploitation afin quil ne se doute de rien ? L
est la question, et il y a plusieurs solutions comme nous allons le voir tout de suite :
Solution 1 : la partition cache
La premire solution, qui est la moins originale de toutes, consiste cacher une partition complte, comme permet de la faire
Partition Magic. Il faut savoir que cela na rien de magique, puisque cacher une partition la manire de Partition Magic consiste
simplement modifier le type de la partition dans le descripteur de partition, en utilisant un type particulier. De cette manire, il
nest possible de ne cacher que des partitions formates avec les systmes de fichier FAT (FAT16 ou FAT32) ou NTFS. Voici les
types utiliser pour ces partitions :
systme de fichiers
FAT12
FAT16 < 32 Mo
FAT16 > 32 Mo
FAT16 Win95 (LBA)
FAT32
FAT32 (LBA)
NTFS

Type si NON cache


0x1
0x4
0x6
0xe
0xb
0xc
0x7

Type si CACHEE
0x11
0x14
0x16
0x1e
0x1b
0x1c
0x17

Pour modifier le type dune partition dans un des descripteurs du MBR, sans modifier les autres caractristiques de la partition
(dbut et taille de la partition), on pourra utiliser la commande parttype de Grub. Par exemple, pour cacher la partition hdb3 de
type 0xc (partition en FAT32), on tapera la ligne suivante dans la ligne de commande de Grub (rappel : il faut appuyer sur la
touche c pour accder la ligne de commande, lorsque Grub affiche le menu au dmarrage) :
grub> parttype (hd1,2) 0x1c
Ainsi, la place occup par la partition sera toujours alloue cette partition (ce ne sera pas de lespace vide), mais cette partition
ne sera plus visible partir des systmes dexploitation de Microsoft (MS-DOS, Win 9x, et Windows XP). En effet, lattribu "cache"
dans le code des partitions ne concernant que les partitions de type "Microsoft", seuls les systmes Microsoft jouent le jeu de faire
croire quils ne voient pas ces partitions. Pour Linux, quune partition soit de type 0xc ou de type 0x1c, le mountage (ou plutot le
greffage en franais) en tant que FAT32 ne posera aucun problme dans les deux cas.
Biensr, pour faire r-apparatre la partition hdb3, aux yeux de Windows, il faudra lui redonner le type 0xc la place de 0x1c :
grub> parttype (hd1,2) 0xc
Conclusion : cette premire solution ne fait quutiliser un type de partition conventionnel, et ne permet de cacher des donns
quaux yeux des systmes DOS et Windows (Linux est totalement incensible ce genre de partition cache). Bien connue des
utilisateurs de Partition Magic, on voit ici que la technique permettant de cacher ou faire apparatre des partitions peut tre active
simplement avec Grub, au dmarrage du PC.
Solution 2 : la partition non-dclare
Une seconde solution consisterait crer une partition principale (dun format quelconque : FAT32, NTFS, Ext3, ou autre), dy
stocker les fichiers camoufler, de relever sur papier les caractristiques de la partition (type, dbut, et taille en secteurs), puis de
"vider" le descripteur dans la table des partitions principales, en utilisant la commande partnew de Grub. Par exemple, pour vider le
descripteur de hdb3 on tapera la commande :
grub> partnew (hd1,2) 0 0 0
Comme nous lavons vu au paragraphe prcdent, cette commande crase les caractristiques actuelle dans le descripteur,
dclarant ainsi lespace occup par la partition comme tant de lespace libre. Biensr les fichiers enregistrs sur cette partition ne
sont pas touchs. La partition est alors un peu comme gele, cest dire morte et inexistante pour les systmes dexploitation, et
rien ne pourra alors modifier les fichiers quelle contient. Pour r-activer cette partition, il suffit de saisir ses caractristiques avec
la commande partnew de Grub, afin de re-dclarer la partition dans la table des partitions principales du MBR :
grub> partnew (hd1,2) 0xc 8257473 73674027
Conclusion : contrairement la solution 1, cette solution 2 inhibe laccs aux donnes pour tous les systmes, y compris pour
Linux qui croira (comme Windows) que lespace occup par la partition est de lespace vide dpourvu de systme de fichiers.
Biensr, si on cre une nouvelle partition sur cette espace vide (avec fdisk ou Partition Magic), puis quon la formate, ou perdrait
les donnes qui y taient camoubles.
Solution 3 : criture brute en dehors des partitions principales
Cette troisime solution consiste ne pas dclarer en partitions principales la totalit du disque dur, et se garder un peu despace
disque. Par exemple, vous avez un disque de 90 Go, et vous crez 4 partitions principales de 20 Go chacune : la totalit des
partitions principales (cest--dire lespace disque accessible conventionnellement par vos OS) est de 80 Go. Vous avez donc 10 Go
despace libre non dclar dans votre table des partitions principales. Comme cet espace disque nest pas dclar, il est
inaccessible directement par les systmes dexploitation. De plus, comme vous avez dj 4 partitions principales, il est impossible
dcraser lespace libre en crant une 5 me partition ( moins dagrandir une partition existante). Enfin, votre espace disque
"cach" ne possdant aucun systme de fichiers (contrairement une partition officielle), on ne pourra y accder quen lisant ou en
crivant directement sur les secteurs quil contient. Comment faire ? En utilisant lutilitaire dd de Linux (toujours le mme ! :-).
Mais il faut avant tout connatre le premier secteur de cet espace libre.
Prenons un exemple concret :
Imaginons que le premier secteur de lespace libre soit le secteur n1000000 (en LBA), et que vous vouliez y copier un fichier toto
dune taille de 651642 octets. Il vous faut alors taper la commande suivante sous Linux :
dd if=toto of=/dev/hdb bs=512 seek=1000000
Description des 4 paramtres passs la commande dd :





if indique le fichier dentre copier


of indique le priphrique de sortir
bs indique la taille, en octets, de chaque bloc copi
seek indique le nombre de blocs sauter avant de commencer crire sur le phriphrique de sortie

Remarque : comme nous avons rgl la taille dun bloc 512 octets, et que le priphrique de sortie (/dev/hdb) est directement
le disque dur, les blocs manipuls par dd corresponde ici aux secteurs physique du disque dur.
A la fin de la copie, dd nous indique quil a lu et crit 1272+1 secteurs : cela signifie que notre fichier camoufl toto occupe 1273
secteurs sur le disque, partir du secteur numro 1000000 (en LBA). Le dernier secteur occup nest pas complet (le fichier y
occupe moins de 512 octets).
Une fois copi dans lespace disque extrieur aux partitions principales, rien ne pourra effacer ce fichier toto : aucun formatage des
partitions existantes, aucune destruction de table des partitions, aucune destruction de FAT, ni aucun virus nira crire directement

sur les secteurs contenant le fichier toto. Seul un formatage bas niveau total du disque dur ou un redimentionnement des partitions
principales craseraient tous les secteurs du disque, et effacerait alors notre fichier camoufl. En revanche, il faut bien not le
numro absolu (LBA) du premier secteur occup par le fichier, et le nombre de secteurs utiliss, afin de pouvoir aller rechercher un
jour le fichier camoufl.
Comment aller rcuprer notre fichier toto, qui est enregistr de manire "brute" sur le disque dur lextrieur des partitions
principales ? Pour cela, nous allons procder en 2 temps :



on va tout dabord rcuprer les 1273 secteurs occups par le fichier toto
puis on va rcuprer dans ce flux de donne les 651642 octets du fichier toto

Rcuprons les 1273 secteurs du disque, partir du secteur n1000000, et enregistrons le tout dans un fichier titi :
dd if=/dev/hdb of=titi bs=512 count=1273 skip=1000000



count indique le nombre de blocs (ici de secteurs) copier


skip indique le nombre de bloc sauter dans le fichier dentre avant de le lire

dd nous indique alors quil a lus 1273 blocs, soit 1273 secteurs sur le disque dur.
Mais le fichier titi que nous obtenons est lgrement plus grand que le fichier toto original. En effet, le dernier secteur (le 1273 me
secteur copi) nest pas totalement utilis par le fichier toto. Pour reconstituer le fichier toto, nous allons rcuprer 651642 octets
partir du fichier titi. Cette fois, la taille dun bloc est de 1 octet, et nous allons copier 651642 blocs :
dd if=titi of=toto bs=1 count=651642
Aprs lcriture des 651642 octets, nous retrouvons bien notre fichier toto dorigine, alors quil tait enregistr de manire brute
lextrieur de toute partition principale, sans laide dun systme de fichiers conventionnel.
CQFD !
Remarque : avec dd, copier 651642 blocs de 1 octet chacun ou copier 1 seul bloc dune taille de 651642 octets donnera la mme
chose. La commande suivante donnera donc exactement le mme rsultat que la commande ci-dessus, tout en tant beaucoup
plus rapide :
dd if=titi of=toto bs=651642 count=1
Comme dd utilise lentre et la sortie standard pour lire et crire le flux de donne quil traite, il est possible de rcuprer notre
fichier cammoufl toto en une seule commande, sans passer par un fichier intermdiaire titi. Pour cela, nous allons utiliser un tube
sur la ligne de commande, qui consiste rediriger la sortie standard du premier dd vers lentre standard du second. La ligne de
commande unique permettant de rcuprer directement le fichier camoufl toto est alors la suivante :
dd if=/dev/hdb bs=512 count=1273 skip=1000000 | dd of=toto bs=651642 count=1
Dans la ligne ci-dessus, le premier dd va lire 1273 secteurs sur le disque /dev/hdb partir du secteur n1000000 (en LBA) et
envoit ce flux de donne au second dd qui ne va garder que les 651642 premiers octets reus, et les enregistre dans le fichier toto.
Grce ces deux commande dd, enchanes par un tube (le tube est symbolis par la barre verticale | sur la ligne de commande),
on a pu rcuprer en une seule fois lintgralit du fichier toto, enregistr directement sur les secteurs du disque dur ( lextrieur
des partitions principales et sans laide dun systme de fichiers), et sans utiliser de fichier intermdiaire. Il est ainsi possible de
camoufler et daller chercher plusieurs fichiers dans lespace libre du disque dur, condition de bien retenir la position (en secteurs
absolus LBA) et la taille (en secteurs et en octets) de chaque fichier.
A retenir :
La commande dd de Linux permet de lire ou dcrire sur nimporte quel secteur du disque dur, y compris les secteurs situs
lextrieurs des partitions principales (comme le MBR ou lespace vide du disque), ou encore sur les secteurs de boot de chacune
des partitions. La commande dd de Linux permet donc de camoufler des fichiers des endroits du disque dur non dclars en
partitions, et totalement inexistant pour les systmes dexploitation (car dpourvu dun systme de fichiers).
Solution 4 : camouflage dun fichier dans les secteurs dfectueux
Comment camoufler un fichier en dclarant dfectueux tous les blocs sur lequel il repose, dans un systme de fichiers EXT2 ? Cest
ce que nous allons voir dans cette solution n4 travers un exemple concret que vous pouvez reproduire tape par tape sans
crainte, car nous allons travailler sur une partition virtuelle qui sera cre dans un fichier.
Crons un petit priphrique blocs de type "loop" ("boucle" en franais : il sagit dun priphrique blocs renferm dans un fichier),
constitu de 60 blocs de 1ko chaun (60 blocs de 1ko reprsente la taille minimale pour un priphrique blocs) :
On cre un fichier fs.img de 60ko, qui sera limage du systme de fichiers :
dd if=/dev/zero of=fs.img bs=1k count=60
Dclarons un nouveau priphrique bloc /dev/loop0, rattach au fichier fs.img :
losetup /dev/loop0 fs.img
Formatons le phriphrique blocs /dev/loop0 avec le systme de fichiers EXT2. Rappel : ce formatage na aucune consquence sur
vos donnes enregistres sur votre disque dur puisque nous travaillons lintrieur du fichier fs.img que nous venons de crer :
mke2fs /dev/loop0
Vrifions les informations prsentes dans le superbloc du systme de fichiers EXT2 :
dumpe2fs /dev/loop0
Affichons la liste des blocs classs dfectueux (en principe il ny en a aucun pour linstant) :
dumpe2fs -b /dev/loop0
Greffons (ou "mountons" si vous prfrez ...) le systme de fichiers :
mount /dev/loop0 /mnt/test
Crons un fichier toto, dune taille de 5000 octets, dans le systme de fichiers :
dd if=/dev/zero of=/mnt/test/toto bs=5000 count=1
Ce fichier toto occupe donc 5 blocs dans le systme de fichiers (le 5 me bloc ntant pas entirement occup puisque 5000 octets
< 5 ko).
Dgreffons (ou dmountons si vous voulez ... ) le systme de fichiers :

umount /dev/loop0
Nous allons maintenant aller voir sur quels blocs est enregistr le fichier toto. Pour cela on va diter le systme de fichiers avec
debugfs :
debugfs /dev/loop0
La commande stat de debugfs nous donne lensemble des blocs sur lesquel repose le fichier toto :
debugfs: stat toto
Inode: 12 Type: regular Mode: 0644 Flags: 0x0 Generation: 1427946249
User: 0 Group: 0 Size: 5000
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 10
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x41274e05 -- Sat Aug 21 15:28:37 2004
atime: 0x41274e05 -- Sat Aug 21 15:28:37 2004
mtime: 0x41274e05 -- Sat Aug 21 15:28:37 2004
BLOCKS:
(0-4):20-24
TOTAL: 5
Le fichier toto occupe 5 blocs : les blocs n20 n24 Linode relative au fichier toto (et contenant les numros de lensemble des
blocs du fichier toto) est le bloc n12
Pour "geler" le fichier toto au niveau du systme (cest--dire pour faire en sorte que le systme ignore les blocs du fichier toto, et
ne les touche plus) il faut donc dclarer comme dfectueux les blocs 12, 20, 21, 22, 23, et 24.
On va pour cela utiliser le paramtre -L de e2fsck :
e2fsck -L secteurs.txt /dev/loop0
o secteurs.txt est un fichier texte contenant la liste des blocs dclarer comme dfectueux.
Dans notre cas, ce fichier secteurs.txt doit ressembler ceci :
12
20
21
22
23
24
Les numros de blocs sont crit en colonne, avec un seul numro par ligne, sans sparateur particulier, et sans possibilit de
regrouper un ensemble de blocs contigus sur la mme ligne (une symtaxe du style 20..24 ou encore [20-24] nexiste pas ...) : il
faut inscrire un par un tous les blocs dclarer dfectueux.
Dans le cas de 5 blocs, on peut crer le fichier secteurs.txt manuellement. Mais dans le cas de 1000 ou 2000 blocs, il vaut mieux le
crer automatiquement. La ligne de commande suivante (que je viens dimproviser mais qui nest pas la seule solution) cre un tel
fichier, en y inscrivant tous les numros compris entre 20 et 24 (20 et 24 compris). En remplaant 20 par 1000 et 24 par 6000, par
exemple, on obtient instantanment un fichier avec une liste de 5000 blocs :
a=20; while (test $a -le 24); do echo $a >> secteurs.txt; a=$((a+1)); done
Une autre solution, bien plus simple quune boucle while consiste utiliser la commande seq de Linux :
seq 20 1 24 > secteur.txt
Une fois que le fichier secteurs.txt est cr, on lance la commande suivante pour dclarer la liste de blocs comme tant dfectueux,
et pour tester le systme de fichiers :
e2fsck -L secteurs.txt /dev/loop0
On rpond Yes (touche y) toutes les questions sauf la question
File /toto (inode #12, mod time Sat Aug 21 16:46:01 2004)
has 5 duplicate block(s), shared with 1 file(s):
<The bad blocks inode> (inode #1, mod time Sat Aug 21 16:47:02 2004)
Clone duplicate/bad blocks<y>?
o on rpondra Non (touche n) afin de ne pas modifier linode 12 et de ne pas faire de copie du fichier toto.
Affichons la liste des blocs classs dfectueux :
dumpe2fs -b /dev/loop0
Cette fois on obtient bien la liste des blocs que nous avons artificiellement dclars comme dfectueux :
12
20
21
22
23
24
Et si on teste intgralement lintgrit, cest--dire lintgralit :-( du systme de fichiers, il ny a plus de problme :
e2fsck -f /dev/loop0
Si on greffe (comprenez si on "mounte", mais je parle 100% franais, dsol ;-) le systme de fichiers avec la commande mount,
notre fichier toto nest alors plus accessible.
Notre fichier toto est maintenant camoufl dans les blocs dfectueux, son contenu sera donc totalement ignor par le systme
dexploitation et par les virus (quel virus penserait que les blocs dfectueux contiennent une information importantes ? Mais au fait,
depuis quand des virus sattaquent aux systmes de fichiers EXT2 sous Linux ?? :-)))
Comment aller repcher notre fichier toto, camoufl dans les blocs dfectueux ? Cette opration, qui commence ressembler de
la chirurgie dlicate, se droule en 3 tapes :
Etape 1 : On supprime les blocs dfectueux en dclarant tous les blocs comme non-dfectueux. Pour cela on va passer en
paramtre la commande e2fsck -L un fichier secteurs.txt totalement vide (pour vider le fichiers secteurs.txt on pourra par
exemple lancer la ligne de commande cat /dev/null > secteurs.txt) :

e2fsck -L secteurs.txt /dev/loop0


Affichons la liste des blocs classs dfectueux :
dumpe2fs -b /dev/loop0
Cette fois il ny a nouveau plus aucun bloc dfectueux.
ATTENTION : les 6 blocs que nous venons de remettre en service, et contenant notre fichier toto, sont dclars comme libres.
Cela signifie que si on cre un fichier maintenant, il serait enregistr sur ces blocs, et craserait le fichier toto. Mais cela nest pas
possible pour linstant puisque notre systme de fichiers est dmount (zup, jaurais du dire dgreff ... :-)).
Etape 2 : Pour faire ressortir le fichier toto des blocs 20 24, il faut dclarer comme non-effac(e) linode 12. Pour cela on utilise
la commande mi (Modifier Inode) de debugfs, aprs avoir ouvert le systme de fichiers en criture (paramtre -w) :
debugfs -w /dev/loop0
debugfs : mi <12>
Mode [0100644]
User ID [0]
Group ID [0]
Size [5000]
Creation time [1093096697]
Modification time [1093096389]
Access time [1093096389]
Deletion time [1093096697] 0
Link count [0] 1
Block count [10]
File flags [0x0]
Generation [0xcd05c101]
File acl [0]
High 32bits of size [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [20]
Direct Block #1 [21]
Direct Block #2 [22]
Direct Block #3 [23]
Direct Block #4 [24]
Direct Block #5 [0]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]
Pour dclarer non-effac(e) un(e) inode (ce qui revient faire un undelete du fichier), il faut appuyer sur entre pour tous les
paramtres, sauf pour Deletion time quil faut mettre 0, et Link count quil faut mettre 1. Les autres paramtres restent
inchangs.
On quitte ensuite debugfs :
debugfs : quit
Etape 3 : Et on rpare une dernire fois le systme de fichiers en rpondant automatiquement yes toutes les questions :
e2fsck -f -y /dev/loop0
Si on greffe (mounte en non-franais) le systme de fichiers, on retrouve alors dans le rpertoire lost+found un fichier nom #12
dune taille de 5000 octets, et qui repose sur les blocs 20 24 : il sagit de notre fichier toto qui tait camoufl dans les blocs
dfectueux !
CQFD !
Remarque : le nom du fichier ("toto") a t perdu, il est remplac par #12 (car toto tait gr par linode 12) : il faut donc renomer
#12 en toto. Mais le contenu du fichier (les 5000 octets) na biensr pas t modifi.
Enfin, refermons le priphrique /dev/loop0, en le dtachant du fichier fs.img :
losetup -d /dev/loop0

Conclusion
Avec toutes ces techniques de camouflage originales de fichiers, vous navez plus descuses pour ne pas avoir sauvegards
efficacement vos fichiers les plus prcieux, et ainsi pouvoir vivre sans crainte la prochaine perte de votre table des partitions. Je ne
lai pas dit mais cest lmentaire, si vous avez plusieurs fichiers camoufler vous les compactez dans un fichier ZIP et vous
camouflez le ZIP (ne vous amusez pas camouflez 100 fichiers un aprs lautre ...) et en plus vous y gagnerez en place. Un
dernier point, toutes ces techniques avances de camouflage ne sont pas garanties dans le cas o votre disque dur passerait dans
un champ magntique de plusieurs Teslas ! :-)))) Bon vent tous, et bientt pour dautres aventures sur Gecif.net ;-)

You might also like