Запись MFT содержит несколько атрибутов. Все атрибуты содержат одинаковые заголовочные структуры данных, которые будут описаны в этом разделе. На рис. 13.2 представлена структура типичной записи MFT с заголовками. У резидентных и нерезидентных атрибутов структуры данных слегка различаются, потому что в нерезидентных атрибутах требуется дополнительно хранить информацию о сериях.

Первые 16 байт атрибутов обоих типов совпадают. Содержащиеся в них поля перечислены в табл. 13.2.

Рис. 13.2. Типичный файл с различными заголовками

Таблица 13.2. Структура начальных 16 байт атрибута

Диапазон

Описание

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

0-3

Идентификатор типа атрибута

Да

4-7

Длина атрибута

Да

8-8

Флаг нерезидентного атрибута

Да

9-9

Длина имени

Да

10-11

Смещение имени

Да

12-13

Флаги

Да

14-15

Идентификатор атрибута

Да

Заголовок содержит базовую информацию об атрибуте, включая тип, размер и местонахождение имени. Размер используется для поиска следующего атрибута в записи МРТ; за последним атрибутом следует специальная последовательность Oxffff ££££. Флаг нерезидентного атрибута устанавливается равным 1, если атрибут является нерезидентным. Поле флагов указывает, является ли атрибут сжатым (0x00001), зашифрованным (0x4000) или разреженным (0x8000). Идентификатор атрибута представляет собой число, уникальное для данного атрибута в данной записи МРТ. Смещение имени задается относительно начала атрибута. Поля резидентного атрибута перечислены в табл. 13.3.

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

Диапазон

Описание

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

0-15

Общий заголовок (см. табл. 13.2)

Да

16-19

Размер содержимого

Да

20-21

Смещение содержимого

Да

Эти значения просто сообщают размер и местонахождение (относительно начала атрибута) содержимого атрибута, также называемого потоком (stream). Рассмотрим пример. Ранее при анализе записи MFT мы видели, что атрибуты начинаются с байта 56. Я взял атрибут в этой позиции и обнулил смещения, чтобы было проще идентифицировать поля в заголовке атрибута.

0000000: 1000 0000 6000 0000 0000 1800 0000 0000 ...........

0000016: 4800 0000 1800 0000 305а 7alf f63b с301 Н.......OZz..;..

В первых четырех байтах содержится тип атрибута 16 (0x10), соответствующий $БТАМ 0АКй_1М РОКМАТЮМ. Байты 4-7 показывают, что размер атрибута равен 96 байтам (0x60). Из байта 8 видно, что атрибут является резидентным (0x00), а из байта 9 - что ему не присвоено имя (0x00). Флаги и идентификаторы в байтах 12-13 и 14-15 заполнены нулями. Байты 16-19 показывают, что длина содержимого атрибута составляет 72 байта (0x48), а байты 20-21 - что атрибут начинается со смещением 24 байта (0x18). Выполним несложную проверку: 24 байта смещения в сумме с 72 байтами длины содержимого составляют 96 байт, то есть длину атрибута, указанную в заголовке.

У нерезидентных атрибутов структура данных устроена несколько иначе, потому что для них необходима возможность описания произвольного количества серий кластеров. Поля структуры данных нерезидентных атрибутов приведены в табл. 13.4.

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

Диапазон

Описание

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

0-15

Общий заголовок (см. табл. 13.2)

Да

16-23

Начальный виртуальный номер кластера (УСЫ) списка серий

Да

24-31

Конечный номер УСЫ списка серий

Да

32-33

Смещение списка серий

Да

34-35

Размер блока сжатия

Да

36-39

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

Нет

40-47

Выделенный размер содержимого атрибута

Нет

48-55

Фактический размер содержимого атрибута

Да

56-63

Инициализированный размер содержимого атрибута Нет

Вспомните, что У СИ представляет собой другое название для логических адресов файлов, о которых говорилось в главе 8. Начальный и конечный номера У СИ используются в тех случаях, когда для описания одного атрибута требуется несколько записей МП". Например, если атрибут $йАТА сильно фрагментирован и его серии не помещаются в одной записи МРТ, для него может быть выделена вторая запись МРТ. Вторая запись содержит атрибут $0АТА с начальным номером УС1М, который следует за конечным номером У СИ первой записи. Пример приводится в разделе «$АТТ111ВиТЕ_Ы8Т». Поле размера блока сжатия описано в главе 11; оно необходимо только для сжатых атрибутов.

Смещение списка серий задается относительно начала атрибута. Формат списка серий чрезвычайно эффективен, но простотой он не отличается. Список имеет переменную длину не менее 1 байта. Первый байт структуры данных разделен на старшие и младшие 4 бита. Младший полубайт содержит размер (в байтах) поля длины серии, следующего за байтом заголовка. Старший полубайт содержит размер (в байтах) поля смещения серии, следующего за полем длины. Пример показан на рис. 13.3.

Значения задаются в кластерах, а поле смещения является знаковым значением, заданным по отношению к предыдущему смещению. Например, смещение первой серии атрибута задается по отношению к началу файловой системы, а смещение второй серии - по отношению к предыдущему. У отрицательного числа старший бит равен 1; если вы собираетесь ввести значение на калькуляторе, чтобы преобразовать его, прибавьте столько единиц, сколько потребуется для формирования полного 32- или 64-разрядного числа. Например, если значение равно ОхИ, на калькуляторе вводится значение Oxfffffffl.

Рис. 13.3. Первый байт серии показывает, что поле длины занимает 1 байт, а поле смещения - 2 байта

Чтобы просмотреть содержимое нерезидентного атрибута, давайте вернемся к ранее проанализированной записи и перейдем к атрибуту $DATA. Содержимое атрибута показано далее (смещения скорректированы по отношению к началу атрибута):

0000000: 8000 0000 6000 0000 0100 4000 0000 0100 .....®.....

0000016: 0000 0000 0000 0000 ef20 0000 0000 0000 ...............

0000032: 4000 0000 0000 0000 00с0 8300 0000 0000 @...............

0000048: ООсО 8300 0000 0000 ООсО 8300 0000 0100 ................

0000064: 32с0 1еЬ5 За05 2170 lblf 2290 015f 7е31 2...:.!р..и.._~1

0000080: 2076 ed00 2110 8700 00Ь0 6е82 4844 7е82 v..!.....n.HD~.

Первые 4 байта показывают, что атрибут относится к типу 128 (0x80), а вторая группа из 4 байт - что его общий размер равен 96 байтам (0x60). Байт 8 равен 1; это означает, что атрибут является нерезидентным. Нулевой байт 9 означает, что длина имени атрибута равна 0; следовательно, перед нами атрибут $DATA по умолчанию, а не ADS. По нулевым флагам (байты 12-13) мы определяем, что атрибут не зашифрован и не сжат.

Нерезидентная информация начинается с байта 16. Байты 16-23 показывают, что начальный номер VCN для этого набора серий равен 0. Конечный номер VCN задается байтами 24-31; в данном примере он равен 8431 (0x20ef). Байты 32-33 показывают, что смещение списка серий составляет 64 байта (0x0040) от начала. Байты 40-47,48-55 и 56-63 предназначены для выделенного, фактического и инициализированного размеров содержимого; в них хранится одно и то же значение 8 634 368 байт (0х0083с000).

В байте 64 начинается сам список серий. Я снова приведу соответствующий фрагмент:

0000064: 32с0 1еЬ5 За05 2170 lblf

Вспомните, что первый байт делится на старшие и младшие 4 бита, в которых хранится размер остальных полей. Младший полубайт байта 64 показывает, что поле длины серии состоит из 2 байт, а старший полубайт - что поле смещения состоит из 3 байт. Чтобы определить длину серии, мы анализируем байты 65-66 и получаем 7872 кластера (OxlecO). Следующие три байта (67-69) дают смещение 342 709 (0х053аЬ5). Следовательно, первая серия начинается с кластера 342 709 и продолжается 7 872 кластера.

Структура данных следующей серии начинается после завершения текущей, то есть с байта 70. Мы видим, что поле длины состоит из 1 байта, а поле смещения - из 2 байт. Значение длины хранится в байте 71 и равно 112 (0x70). Величина смещения хранится в байтах 72-73 и равна 7963 (Oxlflb). Смещение является знаковой величиной и задается по отношению к предыдущему смещению; прибавляя 7963 к 342 709, мы получаем 350 672. Следовательно, вторая серия начинается с кластера 350 672 и продолжается 112 кластеров. Остаток списка серий вы можете расшифровать самостоятельно.

Записи mft (файловые записи) | Криминалистический анализ файловых систем | Стандартные атрибуты файлов


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



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

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