Файл $Boot представлен записью MFT 7; в его атрибуте $DATA хранится содержимое загрузочного сектора и загрузочный код. Атрибут всегда начинается с сектора 0, в котором хранится структура данных загрузочного сектора. Остальные секторы используются для хранения загрузочного кода. В табл. 13.18 перечислены поля загрузочного сектора.

Таблица 13.18. Структура данных загрузочного сектора

Диапазон

Описание

Необходимость

0-2

Машинная команда перехода к загрузочному коду

Нет (если файловая система не является загрузочной)

3-10

Имя OEM

Нет

11-12

Количество байт в секторе

Да

13-13

Количество секторов в кластере

Да

14-15

Количество зарезервированных секторов (Microsoft требует, чтобы поле было равно 0)

Нет

16-20

Не используется (Microsoft требует, чтобы поле было равно 0)

Нет

21-21

Дескриптор носителя

Нет

22-23

Не используется (Microsoft требует, чтобы поле было равно 0)

Нет

24-31

Не используется (по данным Microsoft поле не проверяется)

Нет

Таблица 13.18 (продолжение)

Диапазон

Описание

Необходимость

32-35

Не используется (Microsoft требует, чтобы поле было равно 0)

Нет

36-39

Не используется (по данным Microsoft поле не проверяется)

Нет

40-47

Общее количество секторов в файловой системе

Да

48-55

Адрес начального кластера MFT

Да

56-63

Адрес начального кластера атрибута $DATA зеркальной копии MFT

Нет

64-64

Размер записи MFT (файловой записи)

Да

65-67

Не используется

Нет

68-68

Размер индексной записи

Да

69-71

Не используется

Нет

72-79

Серийный номер

Нет

80-83

Не используется

Нет

84-509

Загрузочный код

Нет

510-511

Сигнатура (0хаа55)

Нет

Неиспользуемые поля соответствуют полям блокаВРВ (BIOS Parameter Block) загрузочного сектора FAT. В документации Microsoft указано, что для монтирования файловой системы некоторые из этих полей должны быть обязательно равны 0, но формально эти значения не обязательны для функционирования файловой системы, и Microsoft могла не проверять эти значения. Я убедился в том, что Windows ХР отказывается монтировать диск, если содержимое этих полей отлично от 0.

Среди параметров, хранящихся в загрузочном секторе, важнейшими являются размер каждого сектора и кластера. Без них поиск и идентификация данных в файловой системе в принципе невозможны. Следующие важные параметры - начальный адрес MFT и размер каждой записи MFT. До настоящего времени во всех версиях Windows размер записей MFT всегда составлял 1024 байта, но это поле существует для того, чтобы размер записи можно было легко сменить в будущем. Также обратите внимание на заданный адрес атрибута $DATA файла $MFTMirr. С его помощью программа восстановления информации может определить, где находится резервная копия $MFT.

Поля, в которых хранятся размеры записи MFT и индексных записей, имеют специальный формат. Если значение больше 0, оно представляет количество кластеров, используемых для хранения каждой структуры данных. Если значение меньше 0, оно представляет двоичный логарифм количества байт в каждой структуре данных. Чтобы вычислить количество байт, следует взять модуль отрицательного числа (то есть изменить знак) и возвести число 2 в указанную степень. Например, если значение равно -10, то размер структуры данных составит 210= 1024 байта. Этот способ применяется в тех случаях, когда размер кластера больше одной записи MFT или индексной записи.

Рассмотрим пример содержимого загрузочного сектора. Вывод istat для файла $Boot уже приводился в главе 12; воспользуемся программой icat для вывода атрибута $DATA (тип 128):

# icat -f ntfs ntfsl.dd 7-128 xxd

0000000: eb52 904e 5446 5320 2020 2000 0202 0000 .R.NTFS .....

0000016: 0000 0000 00f8 0000 3f00 ffOO 3f00 0000 ........

0000032: 0000 0000 8000 8000 4060 lfOO 0000 0000 ........Г......

0000048: b53a 0500 0000 0000 10d8 0700 0000 0000 .:..............

0000064: 0100 0000 0400 0000 947c 2250 8422 5004 ......... MP. ,eP.

0000080: 0000 0000 fa33 c08e dObc 007c fbb8 c007 .....3.........

0000096: 8ed8 e816 00b8 OOOd 8ec0 33db c606 OeOO ..........3.....

[...]

0000448: 6d70 7265 7373 6564 OOOd 0a50 7265 7373 mpressed...Press

0000464: 2043 7472 62cb 416c 742b 4465 6c20 746f Ctrl+Alt+Del to

0000480: 2072 6573 7461 7274 OdOa 0000 0000 0000 restart........

0000496: 0000 0000 0000 0000 83a0 b3c9 0000 55aa ..............U.

[...]

В первой строке отображается имя OEM (строка «NTFS»), за которым следует несколько пробелов в кодировке ASCII (0x20). Это стандартное имя, которое присваивается системой Windows. Байты 11-12 сообщают количество байт в каждом секторе - оно равно 512 (0x0200). Байт 13 показывает, что один кластер состоит из двух секторов, то есть размер кластера составляет 1024 байта. Байты 40-47 показывают, что общее количество секторов в файловой системе равно 2 056 256 (0x001 f6040); таким образом, объем файловой системы составляет 1 Гбайт. Байты 48-55 показывают, что MFT начинается с кластера 342 709 (0х00053аЬ5), а байты 56--63 - что атрибут $DATA зеркальной копии MFT начинается с кластера 514 064 (0x0007d810).

Байт 64 определяет размер каждой записи MFT. Напомню, что способ кодирования этой величины определяется ее знаком. В данном случае значение равно 1, поэтому оно определяет количество кластеров в записи MFT; следовательно, каждая запись занимает 1024 байта. В байте 68 хранится размер каждой индексной записи в каталоге. Значение равно 4, то есть каждая индексная запись состоит из 4 кластеров.

Байты 72-79 содержат серийный номер файловой системы; в нашем примере он равен 0х0450228450227С94. В остальных байтах хранится загрузочный код, а байты 510-511 содержат сигнатуру 0хАА55, которая совпадает с сигнатурой FAT.

Файл $mft | Криминалистический анализ файловых систем | Файл $attrdef


Криминалистический анализ файловых систем



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс