mardi 14 juillet 2009

Il était une fois ... le mbr



Il était une fois le ... MBR

So, let's go..
Alors les enfants, aujourd'hui nous allons
explorer les méandres de vos disques durs et
plus particulièrement le Master Boot Record.

Le MBR est le tout premier secteur du disque
dur, il contient un programme en assembleur
(d'une taille de 446 octets) et une structure
de données appelée table de partition. (4x16 octets)
C'est à partir de la que les partitions vont
être lus. La table de partition va contenir
l'"adresse" physique de chacune des partitions.
(début et fin sur le HD), la taille de la partition
exprimée en nombre de secteurs, le type de partition
et une indication pour dire qu'une partition est
active ou pas active.

On va maintenant allez voir à quoi le MBR ressemble
et les infos qu'on peut en tirer :

Afin de pouvoir bosser dessus on va d'abort en faire
une copie.

Dans une console on va se servir de ddrescue pour faire
une sauvegarde de notre HD.

dd if=/dev/hda of=mbr_copie.bkp bs=512 count=1

if : Input File
of : Output File
bs : Block Size
count : Nombre de block

Une fois ça fait, on ouvre le fichier obtenue dans un
éditeur hexadécimale :


Les 446 octets du programme (bootloader) sont en bleu,
vient ensuite la table des partitions qui est comme
mentionné plus haut de 4x16 octets, et vient ensuite
la signature du MBR (les deux derniers octets).


La table des partitions :

Chaque table d'entrée des partitions est de 16 octets.

leurs signification est la suivante :



Petit exemple appliqué à la capture d'écran plus haut :
On peut observer que sur les 4 entrées possibles dans la
table des partitions la deuxième est active, on va
donc se concentrer sur celle la :

Octet 0 : 0x80 -> Partition active

Octet 1 : 0x00 -> Valeur 0 en base 10 -> La partition
commence sur la tête 0.

Octets 2 et 3 : 0x01, 0x00 -> Numéros du cylindre et du
secteur du début de la partition. Sur ces 16 bits, 10 bits
codent le numéro de cylindre (avec les bits 6 et 7 comme
bits de poids forts) et les 6 autres le numéro de secteur.
Sur certains type de proc les octets peuvent être lus
d'une autre manière.

Octet 4 : 0X83 -> Type de partition, ici Linux, systême de
fichiers. (la liste de tout les types est trouvable un peu
partour sur internet).

Octet 5 : 0xFE -> Valeur 254 en base 10, la partition se
termine sur la tête 254.

Octets 6 et 7 : 0x3F, 0x0C -> Même mode de calcul que pour
l'octet 2 et 3. Ils codent les numéros de fin de partition
du cylindre et du secteur.

Octets 8, 9, 10 et 11 : 0x3F, 0x00,0x00 0x00 -> Distance
en nombre de secteur entre la mbr et le secteur de boot
de la première partition, rien de bien interessant ici.
On obtien 63 secteurs.

Octets 12, 13, 14, 15 : 0x8E, 0x2F, 0x03, 0x00 -> Nombre
total de secteurs dans la partition.


Voila, c'est l'essentiel de ce qu'il faut savoir sur
la table des partitions.

Maintenant, avec les informations fournis par l'octet 4
ainsi que par le code du bootloader ont peut assez
rapidement définir le type d'OS utilisé.

Aucun commentaire:

Enregistrer un commentaire