Как упоминалось в главах И и 13, главная файловая таблица М/Т (Master File Table) является основной структурой данных NTFS; в ней создается запись для каждого файла и каталога в системе. Записи MFT имеют фиксированный размер и содержат минимальный набор полей. В настоящее время размер записей составляет 1024 байт, но формально он определяется в загрузочном секторе. В каждой записи MFT используются проверочные маркеры, поэтому в дисковой версии структуры данных два последних байта каждого сектора заменяются сигнатурой (см. предыдущий раздел). Поля записи МРТ перечислены в табл. 13.1.

Таблица 13.1. Структура данных базовой записи MFT

Диапазон

Описание

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

0-3

Сигнатура («FILE»)

Нет

4-5

Смещение массива маркеров

Да

6-7

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

Да

8-15

Номер LSN для $LogFile

Нет

16-17

Порядковый номер

Нет

18-19

Счетчик ссылок

Нет

20-21

Смещение первого атрибута

Да

22-23

Флаги (использования и каталога)

Да

24-27

Используемый размер записи MFT

Да

28-31

Выделенный размер записи MFT

Да

32-39

Адрес базовой записи

Нет

40-41

Идентификатор следующего атрибута

Нет

42-1023

Атрибуты и маркеры

Да

В качестве стандартной сигнатуры используется строка «FILE», но в записях, в которых программа chkdsk обнаружила ошибки, также может содержаться строка «В AAD». В следующих двух полях содержатся маркеры, а массив замененных байтов обычно хранится после байта 42. Смещения задаются по отношению к началу записи.

Номер LSN используется в журнале файловой системы (см. раздел «Категория прикладных данных» главы 12). В журнале фиксируются обновления метаданных в файловой системе; эта информация ускоряет восстановление поврежденных файловых систем.

Порядковый номер увеличивается при каждом выделении и освобождении записи. Счетчик ссылок определяет число каталогов, содержащих записи для данной структуры MFT. Число увеличивается на 1 для каждой жесткой ссылки, создаваемой для файла.

Первый атрибут файла находится по смещению, заданному относительно начала файла. За первым атрибутом следуют остальные; чтобы найти их, следует сместиться вперед на величину, указанную в поле размера в заголовке атрибута. За последним атрибутом находится признак конца файла Oxffffffff. Если файлу требуется более одной записи MFT, то в дополнительные записи включается базовый адрес основной записи.

Поле флагов содержит только два значения. Бит 0x01 устанавливается в том случае, если запись используется, а бит 0x02 - если запись представляет каталог.

Давайте рассмотрим низкоуровневое содержимое записи MFT. Мы воспользуемся программой icat из пакета TSK (The Sleuth Kit) и просмотрим атрибут $DATA файла $MFT, соответствующего записи 0. Чтобы задать любой атрибут в TSK, достаточно добавить идентификатор типа атрибута после адреса записи MFT. В данном случае атрибут $DATA обладает типом 128.

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

0000000: 4649 4c45 3000 0300 4ba7 6401 0000 0000 FILE0...K.d.....

0000016: 0100 0100 3800 0100 Ь801 0000 0004 0000 ....8...........

0000032: 0000 0000 0000 0000 0600 0000 0000 0000 ................

0000048: 5800 0000 0000 0000 1000 0000 6000 0000 X...........

[...]

0000496: 3101 Ь43а 0500 0000 ffff ffff 0000 5800 1..:..........X.

0000512: 0000 0000 0000 0000 0000 0000 0000 5800 ................

0001008: 0000 0000 0000 0000 0000 0000 0000 5800 ..............X.

В выходных данных используется прямой порядок байтов, поэтому байты чисел необходимо поменять местами. Листинг начинается с сигнатуры «FILE», а байты 4 и 5 показывают, что массив данных, замененных маркерами, хранится в записи MFT со смещением 48 байт (0x0030). Из байтов 6-7 видно, что массив состоит из 3 элементов. Байты 16-17 показывают, что порядковый номер записи MFT равен 1; иначе говоря, это первое использование записи. Счетчик ссылок (байты 18-19) равен 1; это означает, что запись обладает единственным именем. Байты 20-21 показывают, что первый атрибут начинается со смещения 56 (0x0038).

Флаги в байтах 22-23 показывают, что запись используется в настоящий момент. Поле базовой записи (байты 32-39) равно 0, то есть сама запись является базовой. Байты 40-41 показывают, что следующий идентификатор атрибута равен 6. Следовательно, мы можем предположить, что запись содержит атрибуты с идентификаторами от 1 до 5.

С байта 48 начинается массив данных, замененных маркерами. Первые два байта определяют сигнатуру (0x0058). За ними следуют 2-байтовые группы исходных данных, которые должны быть записаны на место сигнатур. Мы обращаемся к двум последним байтам каждого сектора (байты 510-511 и 1022-1023) и видим, что в обоих случаях в них содержится сигнатура 0x0058. Маркеры заменяются значением 0x0000, взятым из массива. После массива с байта 56 начинается первый атрибут. Атрибуты файла завершаются на байте 504 признаком конца файла Oxffff ffff. Остальные байты записи равны 0.

Для просмотра произвольной записи MFT в TSK можно воспользоваться программой dd в сочетании с icat для перехода к нужному смещению. При этом размер блока устанавливается равным 1024, то есть размеру каждой записи MFT. Например, команда для просмотра записи 1234 выглядит так:

# icat -f ntfs ntfsl.dd 0 dd bs-1024 skip=1234 count-1 xxd

Маркеры | Криминалистический анализ файловых систем | Заголовок атрибута


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



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

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