Recupération de partitions II : Structures des disques basiques MBR - Configurations simples et courantes
Dans l'article précédent, nous avons vu comment sont structurés les partitions et volumes sur les disques. Nous allons voir cela da façon concrète sur un disque MBR Basique.
Pour cela, j'utilise un éditeur hexadécimal et ouvre le disque aux secteurs qui m'interressent. L'éditeur que j'utilise s'apelle dskprobe.exe (un outil Microsoft assez basique qui affiche les secteurs par pages de 512 Bytes) mais vous pouvez utiliser celui qui vous convient le mieux. Une liste est disponible sur https://fr.wikipedia.org/wiki/%C3%89diteur_hexad%C3%A9cimal
Ouvrons le secteur 0 d'un disque MBR Basique.
En rouge:
- La signature du disque de l'offset 0x01B8 à l'offset 0x01BB : 26 A8 75 C2.
- Il faut lire cette information en little endian : C275A826
- Une sorte de signature du secteur : 55 AA
- Vous la trouverez sur pas mal de secteurs importants du disque. Elle est indispensable.
En surligné : La table de partition, contenant 4 entrée.
- La 1ère entrée commence à l'offset 0x1BE et termine à l'offset 0x1CD : Elle contient les coordonnées d'une partition
- La 2ième entrée commence à l'offset 0x1CE et termine à l'offset 0x1DD : Celle-ci est vide
- La 3ème entrée commence à l'offset 0x1DE et termine à l'offset 0x1ED : Celle-ci est vide
- La 4ème entrée commence à l'offset 0x1EE et termine à l'offset 0x1FD : Celle-ci est vide
La partie au dessus est du code.
Focalisons-nous sur la première entrée de la table de partition, et essayons de lui faire correspondre la description disponible sur https://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx
Offset |
Taille du champ |
Valeur |
Nom du champ |
01BE |
1 byte |
00 |
Indicateur de boot:
|
01BF |
1 byte |
20 |
Starting Head : 0x20 = 32 en décimal |
01C0 |
6 bits |
21 |
Starting Sector : 0x21 = 00100001 -> |
01C1 |
10 bits |
00 |
Starting Cylinder : 0x00 = 00000000 ->00 00000000 = 0 |
01C2 |
1 byte |
07 |
Type de partition. 07 signifie NTFS https://technet.microsoft.com/en-us/library/cc739412(v=ws.10).aspx |
01C3 |
1 byte |
FE |
Ending Head : 0xFE = 254 |
01C4 |
6 bits |
FF |
Ending Sector : 0xFF = 11111111 -> = 111111 = 63 |
01C5 |
10 bits |
FF |
Ending Cylinder : 0xFF = 11111111 -> 11 11111111 = 1111111111 = 1023 |
01C6 |
4 bytes |
00 08 00 00 |
Relative Sector : 1er secteur de la partition (en GPT on appelera ça Starting LBA) En little endian, lire : 00 00 08 00 = 0x800 = 2048 |
01CA |
4 bytes |
00 E8 DF 0F |
Total Sectors : Le nombre de secteurs de la partition 0x0FDFE800 = 266332160 |
Ca veut dire que ce disque contient une partition NTFS qui démarre au secteur 2048 et occupe 266332160 secteurs.
Nous ne savons pas encore exactement quelle taille cela fait en Bytes, mais la plupart du temps, 1 secteur occupe 512 bytes. Ce qui nous fait (si on a des secteurs de 512 bytes)
- 266332160 * 512 = 136362065920 bytes
- 136362065920 / 1024 / 1024 / 1024 = 126.9971 GBytes
Considérons maintenant quelque chose d'un peu plus fréquent: Un disque contenant plusieurs partitions.
Notre table de partition au secteur 0 pourrait bien ressembler à cela:
Ce qui nous donne ce petit tableau récapitulatif:
Partition |
Partition 1 |
Partition 2 |
Partition 3 |
Partition 4 |
Indicateur de boot |
0 |
0 |
0 |
0 |
Starting Head |
20 = 32 |
254 |
254 |
0 |
Starting Sector |
21 * = 33 |
63 |
63 |
0 |
Starting Cylinder |
0 * |
1023 |
1023 |
0 |
System ID |
07 (NTFS) |
07 (NTFS) |
07 (NTFS) |
0 |
Ending Head |
FE = 254 |
254 |
254 |
0 |
Ending Sector |
63 * |
63 |
63 |
0 |
Ending Cylinder |
1023 * |
1023 |
1023 |
0 |
Relative Sector |
00000800 * = 2048 |
07547000 = 122974208 |
0A61B000 = 174174208 |
0 |
Total Sectors |
07546800 * = 122972160 |
030D4000 = 51200000 |
03A98000 = 61440000 |
0 |
* *Toujours en suivant la petite moulinette de ne garder que 6 bits sur le 1er champ, et d'ajouter les 2 restants aux 8 d champs suivant
*A lire en little endian
Dans l’article suivant, nous détaillerons un disque contenant des partitions étendues.
Serge Gourraud
55 AA
Comments
- Anonymous
January 06, 2015
Il arrive que les structures qui décrivent les partitions sur les disques soient perdues ou corrompues