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.

image

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

clip_image001

 

Offset

Taille du champ

Valeur

Nom du champ

01BE

1 byte

00

Indicateur de boot:

  • 00 indique que la partition n'est pas bootable
  • 80 indique que la partition est pas bootable

01BF

1 byte

20

Starting Head : 0x20 = 32 en décimal

01C0

6 bits

21

Starting Sector : 0x21 = 00100001 -> 00 100001 = 33

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 -> 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:

clip_image002

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