HDD - anatomia dysków twardych

Odzyskiwanie danych, budowa i zasada działania HDD, partycje, systemy plików, głowice, servo marks, Service Area, sektor...
· start · pobierz · kontakt ·
· ver 1.02 ·

FAT32 – analiza systemu plików

Schemat budowy partycji typu FAT:
BootSector || FAT1 || FAT2 || Root directory || Data region

LBA0 MBR zapis heksadecymalny
Przykładowy MBR (LBA0)

Najpierw znajdujemy początek partycji w MBR/LBA0, zakładając, że jest to partycja podstawowa szukamy jej początku w zależności od tego, którą z kolei jest nasza szukana partycja, jeżeli:

Następnie przesuwamy się jeszcze o 0x08 i pobieramy 4 bajty. One opisują położenie początku naszej szukanej partycji, bajty zapisane są od końca. Czyli załóżmy, że nasza szukana partycja to partycja numer 1, idziemy do offsetu 0x1BE + 0x08 = 0x1C6. W naszym przykładzie znajdujemy wpis:
3F 00 00 00 (4 bajty)
Przestawiamy wg LIFO i mamy:
00 00 00 3F
Teraz wg wzoru:
Przeliczamy z systemu heksadecymalnego na decymalny i otrzymujemy 63. To adres LBA pierwszego sektora naszej partycji. Bootsektora/bootrecord badanego systemu plików FAT. Idziemy do niego i analizujemy dalej. Tu można odczytać nazwę programu formatującego/tworzącego partycję, typ partycji.

Za bootsektorem znajduje się Fat Alloccation Table 1 (FAT1) i jego kopia FAT2, a następnie RootDirectory – który ma zapisane, gdzie znajdują się poszczególne pliki i katalogi.

Boot Sektor
Przykładowy BootRecord

Z bootsektora możemy wyciągnąć następujące informacje:

  1. Ile bajtów mieści jeden sektor, dowiadujemy się tego na offsecie 0x000B (2 bajty), w naszym przykładzie to 00 02, LIFO: 02 00, przeliczamy na system decymalny i wychodzi 512 bajtów na sektor.
  2. Ile sektorów mieści się w jednym klastrze, mówi o tym offset 0x000D (1 bajt), w tym przykładzie 04, z czego możemy wywnioskować: 4sek_in_clu * 512byt_in_sec = 2048B = 2kB. Czyli w jednym klastrze zapisane mogą być 2kB.
  3. Zarezerwowane sektory, offset 0x000E (1 bajt), w przykładzie odczytujemy 20, przeliczamy i otrzymujemy 32.
  4. Ilość kopii FAT, offset 0x0010 (1 bajt), w naszym przykładzie 02 czyli są dwie kopie FAT (główna = FAT1 i jedna dodatkowa FAT2).
  5. Ilość wpisów w Root Directory, offset 0x0011 (2 bajty), w naszym przykładzie 00 00. Nie używane w FAT32.
  6. Sektorów zarezerwowanych na FAT, offset 0x0016 (2 bajty), w naszym przykładzie 00 00. Nie używane w FAT32.

Aby obliczyć położenie FAT1 musimy skorzystać z tego wzoru:
Adres_FAT1 = Pierwszy_Sektor_Partycji + Zarezerwowane_Sektory. Pierwszy_Sektor_Partycji odczytaliśmy z MBR. A Zarezerwowane_sektory odczytujemy z Bootsektora z offsetu kolejno 0x000E. W naszym przykładzie wygląda to następująco:
63 + 32 = 95LBA.

Dalsza analiza wkrótce...

Autor: Marcin Banasik