Глава 6. Файловая система ExFAT

exFAT это самая последняя версия в семействе файловых систем FAT (File Allocation Table, Таблицы размещения файлов). Эта файловая система была представлена Microsoft в 2006м году с конкретной целью создания файловой системы, которая подходила бы для устройств хранения большего размера, причём без высоких накладных расходов, которые испытывают современные файловые системы. Для выполнения этого exFAT преодолела ряд ограничений файловой системы FAT32, но всё ещё очень похожа на FAT32. Способность анализа FAT32 превратит анализ exFAT в более простой.

Одним из основных нововведений в exFAT выступает применение значений 8d байт размеров файла в противоположность четырём байт для FAT32 (и всего лишь двух байт для более ранних вариантов FAT). Это приводит к поддержке файлов гораздо большего размера, теоретически вплоть до 16d EiB. Тем не менее, максимальный размер тома всего лишь в 128d PiB означает, что самый большой размер файла обязан быть меньше этого размера. Величина максимального размера тома опять- таки теоретическая. Самый большой рекомендуемый размер тома exFAT это 512d TiB. Это гигантским образом увеличивает доступный для файловой системы FAT32 максимум в 2d TiB. Прочие ограничения FAT32, такие как значение числа файлов для каталога и общее максимальное число файлов в exFAT также возросли (см. Таблицу 4.9).

Все основные операционные системы естественным образом предоставляют поддержку для exFAT, а раз так, она заменяет FAT в качестве стандарта файловой системы в сменных носителях. Это означает, что знакомство с exFAT жизненно необходимо для цифровых расследователей.

С точки зрения расследования, exFAT предоставляет намного более точные сведения относительно времён. Прежде всего, детализация временных меток создания и изменения равна 10мс в противоположность имеющихся в FAT двум секундам (FAT32 в действительности применял детализацию в 10мс для временной метки создания). К тому же детализация времени доступа теперь составляет 2d секунды. Это обусловлено введением значения времени FAT для времени доступа. Предыдущие варианты FAT поддерживали лишь дату доступа, определяющую степень детализации в 1d день. Наконец, файловая система exFAT хранит сведения о зоне времени. Как и в FAT, значение времени записывается в файловой системе со значением локального времени, но в отличии от FAT также предоставляется составляющая зоны времени. Это означает, что для файловой системы exFAT можно получать более точные сведения относительно времени, чем это можно было обнаружить в файловой системе FAT.

Остальная часть данной главы изучит структуры на диске в файловой системе exFAT (Раздел 6.1). Затем эта глава продолжится анализом вручную файловой системы exFAT (Раздел 6.2) прежде чем обсудить некоторые более современные вопросы в (Разделе 6.3).

Структуры на диске

По стандартам нашего времени, exFAT это простая файловая система. В качестве расширения файловой системы FAT, exFAT содержит очень похожие структуры. Предоставленные в Главе 5 понятия приемлемы и для файловой системы exFAT.

 

Рисунок 6.1


Схема файловой системы exFAT

Общая схема exFAT отражена на Рисунке 6.1. Из него ясно, что она похожа на файловую систему FAT, поскольку имеется структура VBR (volume boot record, загрузочной записи тома), некая FAT и область данных. Чем эта файловая система отличается от FAT, так это присутствием структуры резервной копии VBR, а также тем, что имеется лишь единственная FAT. Присутствие резервной VBR обусловлена важностью данной структуры. Потеря VBR может утратить доступ ко всей файловой системе, а потому сразу после исходной копии можно обнаружить резервирование данной структуры. Обратите внимание на то, что каждая VBR обладает размером в 12 секторов. Раздел 6.1.1 описывает структуру VBR exFAT. Таблица FAT очень похожа на ту, что мы находим в FAT, хотя по умолчанию имеется лишь одна копия. Такое удаление второй структуры FAT спроектировано для улучшения эффективности. При записи файлов на диск в файловые системы FATдолжны обновляться обе таблицы FAT, что влечёт более медленной время записи. В exFAT необходимо обновлять только одну таблицу FAT. К тому же, не все файлы пользуются таблицей FAT в exFAT, ибо лишь применять эту таблицу должны лишь фрагментированные файлы. Таблица FAT описывается в Раздел 6.1.2. Остающаяся область файловой системы exFAT это область данных, в которой пребывают файлы/ данные. exFAT пользуется тем же самым понятием записей каталога, что и применяется в FAT, однако существует намного больше типов записей каталога. Раздел 6.1.3 представляет различные типы записей каталога, которые присутствуют в файловой системе exFAT и поясняет их предназначение и то, как они обрабатываются.

Загрузочная запись тома

VBR exFAT находится в самых первых 12d секторах своей файловой системы. Непосредственно после первичной копии находится резервная копия VBR. В VBR можно обнаружить ряд имеющихся структур. Самый первый сектор содержит главный загрузочный сектор, за которым немедленно следует расширенный загрузочный сектор. Именно они являются самыми важными секторами в VBR с точки зрения расследования. Сектор 9 содержит параметры OEM, те параметры, которые специфичны для конкретных производителей. Эти параметры определяются собственно индивидуальными производителями, а не самой файловой системой exFAT. Завершающий сектор содержит повторяющиеся контрольные суммы структуры VBR, исключая процентное соотношение используемой файловой системы и флагов тома).

Листинг 6.1 демонстрирует вывод команды fsstat для файловой системы exFAT. Из него очевидна аналогичность между exFAT и FAT. Её схема содержит аналогичные области, такие как FAT, корневой каталог и область данных. Диапазон кластеров начинается с 2d, как это происходит и в FAT. Два самых больших отличия состоят в том, что мы уже упоминали: exFAT содержит резервную копию VBR и, как правило, лишь одну копию FAT.

 

Листинг 6.1. Вывод команды fsstat Sleuthkit при её исполнении над ExFAT_V1.E01.


FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: exFAT
Volume Serial Number: 212a-d518
Volume Label (from root directory): MyExFAT
File System Name (from MBR): EXFAT
File System Revision: 1.0
Partition Offset: 0
Number of FATs: 1
File System Layout (in sectors):
Range: 0 - 1048575
* Reserved: 0 - 127
** Volume Boot Record (VBR): 0 - 11
*** Boot Sector (MBR): 0
** Backup Volume Boot Record (VBR): 12 - 23
*** Backup Boot Sector (MBR): 12
** FAT alignment space: 24 - 127
* FAT 1: 128 - 255
* Data Area: 256 - 1048575
** Cluster Heap: 256 - 1048575
*** Root Directory: 384 - 447

METADATA INFORMATION
--------------------------------------------
Metadata Layout (in virtual inodes):
Range: 2 - 16773125
* Root Directory: 2

CONTENT INFORMATION
--------------------------------------------
Sector Size: 512
Cluster Size: 32768
Cluster Range: 2 - 16381
 	   

В Листинге 6.1 инструментарий fsstat считывает VBR для выработки показанных в нём сведений. Структура главного загрузочного сектора (Сектора 0) определяется в Таблице 6.1.

Таблица 6.1. Структура главного загрузочного сектора exFAT
Смещение Размер Название Описание

0x00

0x03

Jump

Инструкция безусловного перехода к коду загрузки

0x03

0x08

OEM Name

Название основного производителя, обычно EXFAT.

0x0B

0x35

Reserved

Заполнено нулями.

0x40

0x08

Sector Offset

Смещение первого сектора раздела, в случае удаляемого носителя ноль.

0x48

0x08

Volume Size

Общий размер тома в секторах.

0x50

0x04

FAT Offset

Смещение в секторах до первой FAT.

0x54

0x04

FAT Size

Размер FAT в секторах.

0x58

0x04

Data Region Offset

Смещение в секторах области данных.

0x5C

0x04

Data Region Size

Размер области данных в кластерах.

0x60

0x04

Root Directory

Адрес кластера корневого каталога.

0x64

0x04

Serial Number

Серийный номер данного тома.

0x68

0x02

Revision

Номер версии данной файловой системы.

0x6A

0x02

Flags

Значения бит полей флагов. Бит 0 -активная в данный момент FAT (0 - FAT 1; 1 - FAT 2); Бит 1 - флаг изменения (0 - clean; 1- dirty); Бит 2 - бит отказа носителя (0 - none; 1 - failure); Остальные биты зарезервированы.

0x6C

0x01

Bytes/Sector

Размер сектора в байтах находится возведением 2 в степень данного значения. Когда значение равно 0x09, тогда размер сектора равен 29 = 512d байт.

0x6D

0x01

Sectors/Cluster

Число секторов в кластере находится возведением 2 в степень данного значения. Когда значение равно 0x06, тогда кластер содержит 26 = 64d сектора.

0x6E

0x01

# FATS

Число имеющихся FAT.

0x70

0x01

Used Percentage

Процентное соотношение используемой области данных.

0x71

0x07

Reserved

Заполнено нулями.

Из Таблицы 6.1 очевидно, что основные отражённые в Листинге 6.1 сведения могут быть воссозданы из загрузочной записи тома. Заданы размеры и сектора и кластера, а также подлежащие вычислению адреса различных структур. Указывается смещение сектора для таблицы FAT, а также размер такой таблицы. Также предоставляется число FAT, хотя по умолчанию в exFAT это 0x01. Предоставляется номер кластера корневого каталога, который задаёт положение корневого каталога в области данных. Для получения реального смещения для корневого каталога его следует сочетать с размерами кластера и сектора. OEM Name, EXFAT, можно применять для определения типа данной файловой системы.

Таблица размещения файлов

В exFAT таблица FAT служит тем же самым целям, что и в файловой системе FAT. Она делает возможным построение цепочек FAT. Когда файлы занимают множество кластеров, в таблице FAT обнаруживается самое первое местоположение, которое затем указывает на следующий кластер в цепочке, а тот указывает на следующий.Этот процесс продолжается пока не обнаруживается маркер конца цепочки.

Каждый кластер в таблице FAT представлен значением из четырёх байт. Самым первым адресуемым кластером является кластер 2d, как и в файловой системе FAT. Самая первая запись в этой таблице (которую можно рассматривать как не существующий кластер 0) содержит тип носителя в самом последнем значащем байте, причём все остающиеся байты содержат 0xFFFFFF. Вторая запись в этой таблице FAT (аналог не существующего кластера 1) не обладает значением и обычно устанавливается в 0xFFFFFFFF. Последующие четыре байта ссылаются на кластер 2, ещё следующие четыре байта на кластер 3 и так далее.

Как правило, записи таблицы FAT предоставляют номера кластеров, позволяя определять местоположение следующего кластера в соответствующей цепочке. Для таких записей имеются два специальных значения. Первое, 0xFFFFFFF7, помечает кластер как плохой, а раз так, этот кластер не должен использоваться. Вторым выступает 0xFFFFFFFF, что отмечает значение конца своей цепочки FAT.

В отличии от файловой системы FAT, не все файлы из exFAT будут обладать некой записью в таблице FAT. В таблице FAT будут появляться только фрагментированные файлы. Хранящиеся последовательно файлы можно полностью обнаружить воспользовавшись соответствующей записью каталога для этого файла. Поскольку не все файлы будут содержать цепочки кластеров в таблице FAT, для записи используемых кластеров применяется структура распределения побитового отображения. Более подробно это поясняется в Разделе 6.1.3.

Записи каталога

Аналогичным для FAT образом, каталоги в exFAT составляются записями каталога. Всякая запись каталога состоит из 32d байт. Каждые файл/ каталог представлены неким числом записей каталога, которые совместно носят название набора записей каталога. В файловых системах exFAT (по сравнению всего с тремя для FAT) в сумме имеются девять типов записей каталога. Типы записей каталога можно классифицировать на первичные и вторичные и далее на критически важные и не критичные. Таблица 6.2 перечисляет записи каталога и предоставляет их разбиение на категории и коды.

Таблица 1-1. Права доступа
Название Pri. Crit. Code Type Описание

Побитовое отображение

Да

Да

1

0x81

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

Таблица верхнего регистра

Да

Да

2

0x82

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

Метка тома

Да

Да

3

0x83

При обнаружении в корневом каталоге содержит сведения относительно метки тома (как она приводится в fsstat).

Файл

Да

Нет

5

0x85

Основная структура метаданных файла.

GUID тома

Да

Да

0

0xA0

Значение GUID данного тома.

TexFAT

Да

Нет

1

0xA1

Относится к безопасной транзакции exFAT.

Win CE ACT

Да

Нет

2

0xA2

Относится к безопасной транзакции exFAT.

Расширение потока

Нет

Да

0

0xC0

Предоставляет значение местоположения содержимого данного файла.

Расширение имени файла

Нет

Да

1

0xC1

Собственно название файла.

Набор записей каталога обладает лишь единственной записью первичного каталога, однако способна иметь до 17d вторичных записей каталога. Значение типа каталога определяется самым первым байтом в её записи каталога. Обычные файлы обладают по крайней мере тремя записями каталога: первичной записью каталога файла, которая содержит метаданные файла, расширением потока, которое делает возможным определение местоположения содержимого файла и расширение имени файла, предоставляющего собственно название этого файла.

На самом деле тип записи каталога это поле бит. Биты 0-4 предоставляют значение кода из Таблицы 6.2. Бит 5 применяется для сигнализации критической важности записи. Установлен когда запись не является критически важной, если данный бит равен нулю, данная запись критически важная. Бит 6 используется для определения того что это первичная запись каталога. В случае первого значения этот бит ноль, во втором случае значением данного бита является 1. Наконец, бит 7 применяется для определения того, что данная запись каталога используется. Рассмотрим следующее значение типа записи каталога: 0x41. Оно не представляет собой тип записи, который представлен в Таблице 6.2; тем не менее, можно понять что оно собой представляет. Наш первый шаг состоит в его преобразовании в двоичный вид, что даёт 0b01000001. Последние пять из значимых бит представляют код, который равен 0b00001 или 1d. Это подразумевает, что они представляют либо побитовое отображение, либо texFAT, либо расширение имени файла. Бит 5 равен нулю, что означает что это критически важная запись каталога. При изучении этих трёх записей каталога, обладающих указанным в таблице 6.2 типом, критически важны только побитовое отображение и расширение имени файла. Тип 0x41 должен соответствовать одному из них. Рассмотрение значения бита 6 даёт 1. Это подразумевает, что это не основная запись каталога. Объединяя воедино эти сведения, получаем код 1, вторичной, критически важной записи каталога, означающий, что это запись каталога с расширением имени файла. Старший значащий бит равен нулю, что подразумевает, что она не выделена. Скорее всего, здесь содержится информация об имени удалённого файла! Следовательно, даже если в таблице 6.2 не указан код типа записи, можно определить её тип.

Прежде чем продолжать более подробное обсуждение всех типов кодов записей каталога, необходимо описать общие структуры записи каталога. Все первичные записи каталога следуют одной и той же структуре, которая отображена в Таблице 6.3, в то время как вторичные записи каталога следуют общей структуре, показанной в Таблице 6.4.

Таблица 6.3. Общая структура первичной записи каталога
Смещение Размер Название Описание

0x00

0x01

Тип записи

Значение идентификатора типа для данного каталога

0x01

0x01

Вторичный счётчик

Значение числа связанных с этой первичной записью вторичных записей каталога.

0x02

0x02

Набор контрольной суммы

Значение контрольной суммы для этой первичной записи и множества связанных с ней вторичных записей.

0x04

0x02

Первичные флаги

Бит 0 - возможность размещения; бит 1 - нет цепочки FAT. Оставшиеся биты могут определяться конкретными типами записи каталога.

0x06

0x0E

Определяются пользователем

Данные этого раздела различны для каждого типа записи каталога.

0x14

0x04

Первый кластер

Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные.

0x18

0x08

Длина данных

Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога.


Таблица 6.4. Общая структура вторичной записи каталога
Смещение Размер Название Описание

0x00

0x01

Тип записи

Значение идентификатора типа для данного каталога

0x01

0x01

Вторичные флаги

Это поле идентично полю флагов первичной записи каталога.

0x02

0x12

Определяются пользователем

Данные этого раздела различны для каждого типа записи каталога.

0x14

0x04

Первый кластер

Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные.

0x18

0x08

Длина данных

Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога.

Общая структура первичной записи каталога содержит сведения о самом наборе каталога, к которому относится данная первичная запись, таких как значение числа вторичных записей в этом наборе и контрольную сумму множества записей каталога в целом. Обратите внимание на то, что подобное применение контрольных сумм в exFAT означает её большую надёжность чем у более ранних вариантов FAT , ибо допускает выявление несогласованности данных. Большинство данных в записи каталога может быть переопределено конкретным типом записи. Общая структура вторичной записи похожа, за исключением того что она обладает большей определяемой пользователем областью. Это обусловлено отсутствием необходимости записи сведений о вторичных записях. В случае как для первичных, так и для вторичных общих структур, они обе содержат первый кластер и длину данных. При хранении внешних данных они используются именно так, как указано, но в некоторых типах записей каталога они могут быть изменены. Это позволило бы применять до 26d байт пользовательских данных в основной записи каталога и до 30d байт во вторичной записи.

Остальная часть данного раздела более подробно описывает каждую из имеющихся записей каталога.

Карта бит размещения (Type: 0x81)

Побитовое отображение выделения (карта бит размещения) выступает первейшей критически важной записью каталога (Type: 0x81) и она пребывает в своём корневом каталоге. Для каждой копии FAT имеется по одному представителю. Побитовое отображение выделения ответственно за отслеживание используемых/ свободных кластеров. Именно это является основным отличием от прочих вариантов файловой системы FAT, которые для отслеживания состояния кластеров применяют таблицу FAT. В exFAT таблица FAT применяется только когда файлы фрагментарны. Листинг 6.2 предоставляет запись каталога карты размещения бит из предоставленного образа файловой системы (ExFAT_V1.E01). Собственно структура записи каталога побитового отображения находится в Таблице 6.5. Она содержит и реализацию записи из Листинга 6.2.

 

Листинг 6.2. Запись каталога побитового отображения выделения ExFAT_V1.dd.


0030020: 8100 0000 0000 0000 0000 0000 0000 0000 ................
0030030: 0000 0000 0200 0000 0008 0000 0000 0000 ................
 	   

Таблица 6.5. Структура записи каталога побитового отображения выделения. Значения приводятся для Листинга 6.2.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа для конкретной записи. Для побитового отображения 0x81.

0x81

0x01

0x01

Флаги побитовой карты

Бит 0 описывает значение побитового отображения выделения на которое ссылается эта запись. 0 представляет FAT 1, 1 представляет FAT 2. Как правило, это ноль, ибо имеется лишь одна FAT. Остальные биты зарезервированы.

0x00

0x02

0x12

Зарезервировано

Зарезервировано.

0x00

0x14

0x04

Первый кластер

Первый кластер в данном побитовом отображении выделения.

0x02

0x18

0x08

Длина данных

Длина данного побитового отображения размещения (в байтах).

0x800

Каждый бит в побитовом отображении размещения представляет отдельный кластер. Самый первый бит представляет кластер 2, и так далее. Самый первый бит это самый младший бит в самом первом байте. Местоположение реального побитового отображения выделения определяется из соответствующей записи каталога.

Рассмотрим побитовое отображение выделения 0xEF36. Рисунок 6.2 показывает двоичное значение этого побитового отображения размещения и те кластеры, на которые ссылаются все конкретные биты.

 

Рисунок 6.2


Образец побитового отображения выделения (0xEF36), показывающий конкретные значения бит данного отображения бит и значения номеров кластеров каждого соответствующего бита.

Из Рисунка 6.2 просто понять, что кластер 15d в данный момент выделен. Тем не менее, в ситуации с побитовым размещением большего размера такой показ для всех кластеров невозможен. Вместо этого необходимо вычислять в точности тот бит, для которого требуется состояние кластера.

И снова, рассмотрим состояние кластера 15d для побитового отображения размещения 0xEF36. Необходимо определить тот номер байта, в котором будет пребывать этот кластер, а также значение номера бита внутри данного байта. Вот эти вычисления:


		byte = int((c − 2)/8)
		bit = (c − 2)%8
		

Следовательно, кластер 15d можно найти в байте 1d с положением бита 5d (исчисляемого от самого младшего бита; помните, что отсчёт начинается с 0!) Байт с положением 1 содержит значение 0x36, что в двоичном виде представляется как 0b00110110, выделенный подчёркиванием бит это бит с положением 5. Это отображает выделение кластера 15d.

Таблица в верхнем регистре (Type: 0x82)

Запись каталога таблицы верхнего регистра является основной, критически важной записью со значением типа кода 0x82. Эта запись таблицы верхнего регистра определяет местоположение таблицы верхнего регистра, которая применяется чтобы допускать не чувствительный к регистру поиск по именам файлов. Листинг 6.3 показывает такую запись из корневого каталога для поставляемого образа файловой системы. Таблица 6.6 представляет структуру записи каталога таблицы верхнего регистра и обработку значений из Листинга 6.3.

 

Листинг 6.3. Запись каталога таблицы верхнего регистра для ExFAT_V1.dd.


0030040: 8200 0000 0dd3 19e6 0000 0000 0000 0000 ................
0030050: 0000 0000 0300 0000 cc16 0000 0000 0000 ................
 	   

Таблица 6.6. Структура записи каталога таблицы верхнего регистра. Значения приводятся для Листинга 6.3.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа (0x82).

0x82

0x01

0x03

Зарезервировано

Зарезервировано.

0x00

0x04

0x04

Контрольная сумма

Значение контрольной суммы для таблицы верхнего регистра.

0xE619D30D

0x08

0x0C

Зарезервировано

Зарезервировано.

0x00

0x14

0x04

Первый кластер

Местоположение первого кластера в байтах для таблицы верхнего регистра.

0x03

0x18

0x08

Длина данных

Размер таблицы верхнего регистра в байтах.

0x16CC

Метка тома (Type: 0x83)

Запись каталога метки тома является основной, критически важной записью с кодом типа 0x83. Её назначение аналогично записи каталога метки тома для FAT. Она хранит метку (то есть название) реальной файловой системы, которая назначается при создании файловой системы. Эта запись каталога находится только в корневом каталоге. Образец метки тома показан в Листинге 6.4. Её структура представлена в Таблице 6.7.

 

Листинг 6.4. Запись каталога метки тома для ExFAT_V1.dd.


0030000: 8307 4d00 7900 4500 7800 4600 4100 5400 ..M.y.E.x.F.A.T.
0030010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
 	   

Таблица 6.7. Структура записи каталога метки тома. Значения приводятся для Листинга 6.4.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа (0x83).

0x83

0x01

0x01

Длина имени

Длина имени в символах unicode. Каждый символ представлен с размером в два байта.

0x07

0x02

0x16

Метка тома

Метка в unicode, в данном случае применимо лишь 0x0E (14d = 7 × 2) байт.

MyExFAT

0x18

0x08

Зарезервировано

Зарезервировано.

0x00

Файл (Type: 0x85)

Запись каталога файл это ключевая структура метаданных. Это основная, критически важная запись с кодом типа 0x85. Всякая запись каталога файл обычно обладает, по крайней мере, двумя связанными с нею вторичными записями, причём одна расширение потока, применяемая для определения местоположения содержимого файла, а другая расширение имени файла, которая содержит значение названия файла. Структура такой записи каталога файл определяется в Таблице 6.8.

Таблица 6.8. Структура записи каталога для файла.
Смещение Размер Название Описание

0x00

0x01

Тип

Тип записи каталога (0x85 для Файла).

0x01

0x01

Число вторичных записей

Счётчик числа вторичных записей для этого файла.

0x02

0x02

Контрольная сумма

Вычисляемая для множества записей каталога данного файла контрольная сумма.

0x04

0x02

Атрибуты

Атрибуты файла (Бит 0: Read-Only; Бит 1: Hidden; Бит 2: System; Бит 3: Reserved; Бит 4: Directory; Бит 5: Archive).

0x06

0x02

Зарезервировано

Зарезервировано.

0x08

0x04

Создание

Метка времени создания.

0x0C

0x04

Последнее изменение

Метка времени последнего изменения.

0x10

0x04

Последней доступ

Метка времени последнего доступа.

0x14

0x01

10 мс создания

Компонента 10 мс значения времени создания.

0x15

0x01

10 мс изменения

Компонента 10 мс значения времени изменения.

0x16

0x01

Зона времени создания

Смещение зоны времени для времени создания.

0x17

0x01

Зона времени изменения

Смещение зоны времени для времени изменения.

0x18

0x01

Зона времени доступа

Смещение зоны времени для времени доступа.

0x19

0x07

Зарезервировано

Зарезервировано.

Запись каталога для файла содержит метаданные этого файла. Зачастую наиболее интересные сведения для исследователя это время. Вспомним файловую систему FAT, она содержит структуру даты и времени FAT для временных меток создания и изменения, а также дату FAT для временной метки доступа. Детализация времени доступа, таким образом, один день, в то время как детализация для временных меток создания и изменения составляет две секунды (FAT 32 содержит компоненту 10мс для значения времени создания). Временные метки exFAT составлены из даты и времени FAT (см. Раздел 3.1 и Раздел 3.2). Самые первые два байта из четырёх представляют время FAT, а вторые два представляют дату FAT. Рассмотрим необработанное значение даты 0x2C783B48 (LE, прямой порядок байт). Компонентой даты FAT выступает 0x483B, а время это 0x782C. Эти значения могут преобразовываться, соответственно, как даты и времена FAT. И временные метки создания, и изменения к тому же обладают компонентой 10мс. Это значение может располагаться в пределах между 0x00 и 0xC7 (199d). Данное значение затем делится на 100d, чтобы получить добавляемые к значению времени секунды. Рассмотрим образец, в котором компонента 10мс равна 0x14. Это 20d, которое делится на 100d, предоставляя 0.2с.

В exFAT по сравнению с FAT также имеются доступными дополнительные сведения. FAT хранит локальное время безотносительно к реальной зоне времени. Большинство современных файловых систем хранят значения времени в UTC. ExFAT всё ещё пользуется локальным временем, но также запоминает значение зоны времени в которой было установлено значение локального времени. Это делает возможным сравнивать времена для разных устройств. Значение зоны времени хранится в отдельном байте. Самый старший бит сообщает об активности (1) или не активности (0) этой зоны времени. Остающиеся семь бит это номер из двух компонент (см. Раздел 3.2.7). А именно, это число 15d минутных интервалов от UTC. Рассмотрим значение 0x84 (0b1000 0100). Самый старший бит равен 1, что означает что эта зона времени активна. Число из двух компонентов равно 0b0000100 which is +4d. Это значит, что смещение UTC составляет 4 × 15 = +60d минут. Что подразумевает, что зона времени для значения времени это UTC+1.

GUID тома (Type: 0xA0)

Запись GUID тома (Type: 0xA0) это основная, но не являющаяся критически важной запись, которая содержит GUID (Globally Unique Identifier). Такой GUID делает возможным для приложений различать тома на основе данного значения. Сама структура записи каталога GUID тома отражена в Таблице 6.9. В том случае, когда запись каталога GUID тома присутствует в рассматриваемой файловой системе, должна иметься лишь единственная запись, находящаяся в корневом каталога. Многие файловые системы не обладают записью каталога GUID тома.

Таблица 6.9. Структура записи каталога для GUID тома.
Смещение Размер Название Описание

0x00

0x01

Тип записи

Идентификатор типа (0xA0).

0x01

0x01

Число вторичных записей

Счётчик числа вторичных записей каталога.

0x02

0x02

Контрольная сумма

Вычисляемая для множества записей каталога.

0x04

0x02

Флаги

Для этой записи все флаги равны нулю.

0x06

0x10

GUID тома

Значение GUID тома для данной файловой системы.

0x16

0x0A

Зарезервировано

Зарезервировано.

Расширение потока (Type: 0xC0)

Расширение потока это критически важная вторичная запись каталога. Расширение потока применяется для определения местоположения содержимого файла/ каталога. Структура расширения потока показана в Таблице 6.10.

Таблица 6.10. Структура записи каталога расширения потока.
Смещение Размер Название Описание

0x00

0x01

Тип

Идентификатор типа (0xC0).

0x01

0x01

Флаги

Вторичные флаги. Самый младший бит установлен когда эта запись активна. Бит 1 установлен установлен если содержимое непрерывно, что означает, что не требуется никакая цепочка FAT.

0x02

0x01

Зарезервировано

Зарезервировано.

0x03

0x01

Размер имени

Размер имени (в кодированных UCS-2 символах). Для получения числа байт удвойте это значение. Само название хранится в одной или более записей расширения имени (каждая запись содержит 0x0F символов).

0x04

0x02

Контрольная сумма

Контрольная сумма всего названия.

0x06

0x02

Зарезервировано

Зарезервировано.

0x08

0x08

Размер файла

Размер файла.

0x10

0x04

Зарезервировано

Зарезервировано.

0x14

0x04

Начальный кластер

Номер кластера, с которого начинается содержимое этого файла. Когда установлен бит непрерывности, тогда кластеры хранятся единым блоком и нет потребности в обращениях к таблице FAT; в противном случае файл фрагментарен и необходимо консультироваться с таблицей FAT..

0x18

0x08

Размер файла

Дублирующая запись для размера файла.

Расширение потока даёт аналитику сведения о том непрерывен ли данный файл или фрагментирован. Именно они содержатся в поле вторичных флагов. Когда бит в положении 1 обладает значением 1, содержимое непрерывно.

В таком случае нет нужды обращаться к таблице FAT для определения местоположения содержимого. Само расширение потока содержит все необходимые сведения. Если его значение равно 0, данный файл фрагментарен. В этой ситуации расширение потока предоставит значение первого кластера и далее необходимо обращаться к таблице FAT для определения всей остающейся цепочки FAT.

Расширение имени файла

Запись каталога расширения имени файла это другая вторичная, критически важная запись каталога, которая содержит собственно название файла или, в случае длинных имён файлов, некой порции всего названия файла. Каждое имя файла содержит 15d символов названия файла. Структура расширения имени файла определена в Таблице 6.11.

Таблица 6.11. Структура записи каталога расширения имени файла.
Смещение Размер Название Описание

0x00

0x01

Тип

Идентификатор типа (0xC0).

0x01

0x01

Флаги

Вторичные флаги.

0x02

0x1E

Имя файла

Завершающееся нулём название файла, состоящее из не более 15d кодированных UCS-2 символов. Может применяться множество атрибутов расширения имени файла.

В ситуации, когда применяется множество записей расширения имени файла, название файла составляется из этих записей в порядке их появления. Все не используемые байты в названии файла обязаны быть нулями. Единичная запись каталога файла может обладать до 17d связанных с ним расширений имени файла, что подразумевает, что максимальная длина имени файла равна 255d (то есть 17d × 15d).

Прочие записи каталога

Существует ряд прочих типов записей в каталогах, но они вряд ли будут интересны для криминалистического анализа файловой системы. К ним относится запись в каталоге TexFAT, которая применяется как часть системы exFAT для обеспечения безопасности транзакций (Transaction Safe), и которая не нашла широкого применения настоящее время. Также есть две записи каталога, относящиеся к конкретному поставщику. Это запись vendor GUID, которая используется для идентификации фактического поставщика, и добавочное расширение поставщика, которое может содержать любые желаемые поставщиком данные. Они относятся к конкретному поставщику, а потому их определение зависит исключительно от конкретного поставщика.

Анализ ExFAT

Данный раздел представляет обсуждение анализа файловой системы exFAT. Он начинается с инструкций о том как создавать файловые системы exFAT при помощи ОС Linux и продолжается описанием тех файловых систем, которые предоставляются совместно с этой книгой. Они используются в оставшейся части этой главы. Наконец, этот раздел описывает процесс анализа вручную некой файловой системы exFAT.

Создание файловых систем ExFAT

Файловые системы exFAT, аналогично файловым системам FAT, могут создаваться во всех основных операционных системах. Листинг 6.5 определяет команду создания файловой системы exFAT в самом первом разделе второго жёсткого диска из терминала Linux. При помощи -n "MyExFAT" эта команда также определяет название этой файловой системы.

 

Листинг 6.5. Создание файловой системы exFAT в терминале Linux.


mkfs.exfat -n "MyExFAT" /dev/sdb1
 	   

Предлагаемые файлы образов ExFAT

На протяжении данной главы анализируется ряд образов диска. Они доступны с вебсайта книги и суммируются в Таблице 6.12.

Таблица 6.12. Предлагаемые файлы образов ExFAT с вебсайта книги.
Образ Описание

ExFAT_V1.E01

Базовая файловая система exFAT с четырьмя файлами в одном каталоге.

ExFAT_V1.E02

Это файловая систем ExFAT_V1.E01 с одним удалённым файлом и добавленным каталогом с 350d файлами. Этот каталог занимает два не являющихся последовательными кластера.

ExFAT_V1.E03

Файловая систем exFAT, применяемая в упражнениях этой главы.

Анализ ExFAT вручную

В данном разделе выполняется анализ вручную файловой системы exFAT. Это позволяет читателю полностью разобраться со структурой exFAT и увидеть как файловую систему анализируют инструменты цифровой криминалистики. На протяжении данного раздела для целей демонстрации применяется ExFAT_V1.E01.

На абстрактном уровне методы анализа для exFAT почти идентичны методам FAT. Вот необходимые этапы:

  1. Обработка VBR: VBR содержит относящиеся к самой файловой системе в целом сведения. Это те сведения, которые мы наблюдаем при использовании команды Sleuth Kit fsstat. Эти сведения жизненно важны для всего последующего анализа, ибо они делают возможным определять местоположение прочих структур файловой системы.

  2. Обработка корневого каталога: Второй этап анализа начинается со списка файлов. Это происходит при первой обработке самого корневого каталога. Дополнительно к стандартным создаваемым пользователем файлам/ каталогам, корневой каталог содержит некоторые сведения структуры файловой системы, такие как местоположение побитового отображения выделения и таблиц верхнего регистра совместно с названием этого тома.

  3. Обработка подкаталогов: После того как обработан каталог корня, далее происходит изучение всех подкаталогов. Это делает возможным перечисление всех файлов. Данный процесс продолжается вплоть до того, пока для обработки более не останется файлов. Это (в сочетании с шагом 2) эквивалентно команде fls Sleuth Kit.

  4. Восстановление метаданных: Обработка производится для каждого файла/ каталога, которые восстановлены как запись каталога для файла, для получения метаданных файла (размер, времена и т.д.).

  5. Восстановление содержимого: Окончательный этап состоит в восстановлении содержимого файла/ каталога при помощи расширения потока.

Оставшаяся часть этого раздела более подробно изучает эти этапы.

Шаг 1: Обработка VBR

Листинг 6.1 показывает вывод команды fsstat при её запуске над файлом образа ExFAT_V1.E01. Куча этих сведений находится при обработке его структуры VBR. Вспомните, что в exFAT эта структура VBR в размере равен 12d секторам, а также в этом устройстве находится резервная копия.

Листинг 6.6 отображает первые 0x80 байт из нулевого сектора ExFAT_V1.E01. Эта структура обрабатывается в Таблице 6.13.

 

Листинг 6.6. Часть загрузочного сектора из ExFAT_V1.E01.


000: eb76 9045 5846 4154 2020 2000 0000 0000 .v.EXFAT .....
010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
040: 0000 0000 0000 0000 0000 1000 0000 0000 ................
050: 8000 0000 8000 0000 0001 0000 fc3f 0000 .............?..
060: 0400 0000 18d5 2a21 0001 0000 0906 0180 ......*!........
070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
 	   

Таблица 6.13 показывает все доступные в Листинге 6.1 сведения (за исключением метки тома, которая будет произведена из соответствующего корневого каталога). Из загрузочного сектора могут быть установлены соответствия структур самой файловой системы, что делает возможной дальнейшую обработку.

Таблица 6.13. Обработка главного загрузочного сектора ExFAT_V1.E01.
Смещение Размер Название Описание

0x03

0x08

Название производителя

EXFAT

0x0B

0x35

Зарезервировано

0x00

0x48

0x08

Размер тома

0x100000 (1 048 576d)

0x50

0x04

Смещение FAT

0x80 (128d)

0x54

0x04

Размер FAT

0x80 (128d)

0x58

0x04

Смещение области Данных

0x100 (256d)

0x5C

0x04

Размер области Данных

0x3FFC (16 380d)

0x60

0x04

Корневой каталог

0x04 (4d)

0x64

0x04

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

0x212AD518

0x68

0x02

Версия

0x100 (то есть 1.0)

0x6A

0x02

Флаги

0x00 (применяется FAT 1)

0x6C

0x01

Байт/ Сектор

0x09 (то есть 29 = 512d байт)

0x6D

0x01

Секторов/ Кластер

0x06 (то есть 26 = 64d секторов)

0x6E

0x01

Число FAT

0x01 (1d)

0x6F

0x01

# устройства

0x80 (128d)

0x70

0x01

Процент занятости

0x00

0x71

0x07

Зарезервировано

0x00

Шаг 2: Обработка каталога корня

По результатам обработки VBR определяется местоположение корневого каталога. Таблица 6.13 показывает, что положение корневого каталога можно найти в кластере 4d. Для определения местоположения номера сектора для конкретного кластера, n, применяется следующая формула:


		[(n − 2) × sectorsPerCluster] + dataRegionOffset                      (6.1)
 	   

Подставляя в эту формулу наши найденные в VBR значения, получаем, что кластер 4 располагается в секторе ((4 − 2) ∗ 64) + 256 = 384d. Выделяя отсюда 64d сектора (число секторов в кластере) мы получим содержимое корневого каталога (в предположении, что наш корневой каталог занимает только один сектор). Листинг 6.7 показывает содержимое этого сектора.

 

Листинг 6.7. Содержимое корневого каталога из ExFAT_V1.E01. Самые первые байты (тип записи) каждой конкретной записи каталога выделены подчёркиванием.


0030000: 8307 4d00 7900 4500 7800 4600 4100 5400 ..M.y.E.x.F.A.T.
0030010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0030020: 8100 0000 0000 0000 0000 0000 0000 0000 ................
0030030: 0000 0000 0200 0000 0008 0000 0000 0000 ................
0030040: 8200 0000 0dd3 19e6 0000 0000 0000 0000 ................
0030050: 0000 0000 0300 0000 cc16 0000 0000 0000 ................
0030060: 8502 351b 1000 0000 1780 5c57 4680 5c57 ..5.......\WF.\W
0030070: 1780 5c57 6400 0000 0000 0000 0000 0000 ..\Wd...........
0030080: c003 0005 3535 0000 0080 0000 0000 0000 ....55..........
0030090: 0000 0000 0500 0000 0080 0000 0000 0000 ................
00300a0: c100 4600 6900 6c00 6500 7300 0000 0000 ..F.i.l.e.s.....
00300b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00300c0: 8502 ba77 2000 0000 2580 5c57 6b7f 5c57 ...w ...%.\Wk.\W
00300d0: 6b7f 5c57 6464 0000 0000 0000 0000 0000 k.\Wdd..........
00300e0: c001 0009 4661 0000 299a 0800 0000 0000 ....Fa..).......
00300f0: 0000 0000 0600 0000 299a 0800 0000 0000 ........).......
0030100: c100 7400 7200 6500 6500 7300 2e00 6a00 ..t.r.e.e.s...j.
0030110: 7000 6700 0000 0000 0000 0000 0000 0000 p.g.............
0030120: 8504 fd33 2000 0000 3b80 5c57 3b80 5c57 ...3 ...;.\W;.\W
0030130: 3b80 5c57 0000 0000 0000 0000 0000 0000 ;.\W............
0030140: c003 0029 3691 0000 2500 0000 0000 0000 ...)6...%.......
0030150: 0000 0000 1800 0000 2500 0000 0000 0000 ........%.......
0030160: c100 4400 6500 6d00 6f00 6e00 7300 7400 ..D.e.m.o.n.s.t.
0030170: 7200 6100 7400 6900 6e00 6700 5600 6500 r.a.t.i.n.g.V.e.
0030180: c100 7200 7900 4c00 6f00 6e00 6700 4600 ..r.y.L.o.n.g.F.
0030190: 6900 6c00 6500 4e00 6100 6d00 6500 7300 i.l.e.N.a.m.e.s.
00301a0: c100 4900 6e00 4500 7800 4600 4100 5400 ..I.n.E.x.F.A.T.
00301b0: 2e00 7400 7800 7400 0000 0000 0000 0000 ..t.x.t.........
00301c0: 8502 c6a0 2000 0000 4480 5c57 4480 5c57 .... ...D.\WD.\W
00301d0: 4480 5c57 0000 0000 0000 0000 0000 0000 D.\W............
00301e0: c003 0008 7a2f 0000 c000 0000 0000 0000 ....z/..........
00301f0: 0000 0000 1900 0000 c000 0000 0000 0000 ................
0030200: c100 6900 6e00 6600 6f00 2e00 7400 7800 ..i.n.f.o...t.x.
0030210: 7400 0000 0000 0000 0000 0000 0000 0000 t...............
 	   

Первые три записи каталога это метка тома (тип 0x83), побитовая карта размещения (тип 0x81) и таблица верхнего регистра (тип 0x82). За ними следуют четыре записи файла (тип 0x85), причём каждая из них обладает расширением потока (тип 0xC0) и одним или более относящихся к нему расширениями имени файла (тип 0xC1).

Команда Sleuth Kit fsstat к тому же обрабатывает запись каталога метки тома. Из структуры Таблицы 6.7 можно определить эту метку тома. Такая структура очень проста, байт идентификатора типа (0x83), с последующим единственным байтом, предоставляющим длину имени (0x07 символов в данном случае) и следующим далее собственно значением метки тома, кодированными символами unicode UTF-16 (LE, прямой порядок байт). В примере Листинга 6.7 значением метки тома является MyExFAT. Это также можно видеть и из Листинга 6.1.

И в случае для карты размещения бит, и таблицы верхнего регистра, эти записи можно найти воспользовавшись содержимым их структур. Согласно Таблицам 6.5 и 6.6, первый кластер обеих находится по смещению 0x14, а длина данных по смещению 0x18. Для структуры битовой карты распределения памяти эти значения равны 0x02 и 0x800, соответственно, что означает, что битовая карта распределения памяти будет обладать размером 2 048d байт, начинающейся в кластере 2d. Соответствующими значениями для таблицы верхнего регистра будут 0x03 и 0x16CC.

Продолжим обрабатывать корневой каталог для остающихся записей файлов. Изначальный анализ включает перечисление файлов, что осуществляется при помощи fls. Для выполнения этого требуется выделить два элемента, имя файла и где он представлен в файле/ каталоге. Название файла можно получить из атрибутов расширения имени файла (тип: 0xC1). Изучение Листинга 6.7 показывает, что имеются представленными четыре "файла" с названиями Files, DemonstratingVeryLongFileNamesInExFAT.txt, trees.jpg и info.txt, соответственно. Чтобы определить представляет ли каждый из них файл или каталог, требуется обработать атрибуты из записи каталога файл (тип 0x85). Значение атрибутов находится в структуре двухбайтового поля бит по смещению 0x04. Бит 4 представляет каталог. Вот значения для четырёх выявленных "файлов": соответственно, 0x10, 0x20, 0x20 и 0x20. Значение 0x10 это 0b00010000. В ситуации установленного 4 бита это каталог. В остальных случаях 0x20 это 0b00100000, что означает, что бит 4 не установлен; следовательно, это файлы. Это подразумевает, что Files это каталог, в то время как DemonstratingVeryLongFileNamesInExFAT.txt, trees.jpg и info.txt являются файлами. Листинг 6.8 демонстрирует вывод fls, подтверждающий эти сведения.

 

Листинг 6.8. Перечисление файлов корневого каталога из ExFAT_V1.E01 при помощи fls.


$ fls mnt/ewf1
r/r 2051: MyExFAT (Volume Label Entry)
r/r 2052: $ALLOC_BITMAP
r/r 2053: $UPCASE_TABLE
d/d 2054: Files
r/r 2057: trees.jpg
r/r 2060: DemonstratingVeryLongFileNamesInExFAT.txt
r/r 2065: info.txt
v/v 16773123: $MBR
v/v 16773124: $FAT1
V/V 16773125: $OrphanFiles
 	   

Обращаем внимание на то, что fls обрабатывает все не относящиеся к файлам записи каталога, такие как записи метки тома, битовой карты размещения и таблицы верхнего регистра. Заметьте, что отметка виртуальных файлов/ каталогов (v/v и V/V) это простой способ, коим Sleuth Kit предоставляет восстановление прочих структур файловой системы.

Шаг 3: Обработка подкаталогов

Для перечисления всех файлов требуется обработать все выявленные каталоги. Для этого необходимо определить местоположение данных каталогов. На нашем предыдущем шаге мы определили только один каталог, Files. Для получения содержимого этого каталога обрабатывается расширение потока этого каталога. Расширение потока (тип 0XC0) предоставлено в Листинге 6.9.

 

Листинг 6.9. Запись каталога расширения потока для каталога Files, показывающая начальный кластер и размер файла.


0030080: c003 0005 3535 0000 0080 0000 0000 0000 ....55..........
0030090: 0000 0000 0500 0000 0080 0000 0000 0000 ................
 	   

Из Листинга 6.9 мы определяем, что начальный кластер это 0x05, а размер файла равен 0x8000 (32 768d) байт. Это подразумевает, что все записи каталога занимают один единственный кластер. Листинг 6.10 отражает содержимое этого кластера.

 

Листинг 6.10. Содержимое вложенного каталога Files.


0038000: 8502 3c31 2000 0000 4680 5c57 4680 5c57 ..<1 ...F.\WF.\W
0038010: 4680 5c57 0000 0000 0000 0000 0000 0000 F.\W............
0038020: c003 000a 232c 0000 4200 0000 0000 0000 ....#,..B.......
0038030: 0000 0000 1a00 0000 4200 0000 0000 0000 ........B.......
0038040: c100 6400 6500 6c00 6500 7400 6500 2e00 ..d.e.l.e.t.e...
0038050: 7400 7800 7400 0000 0000 0000 0000 0000 t.x.t...........
 	   

Согласно Листинга 6.10, подкаталог Files содержит единственный файл. Обработка значения имени файла показывает, что это delete.txt. Изучение его атрибутов указывает на то, что это обычный файл. На данном этапе, для этой файловой системы, были обработаны все каталоги (а следовательно, были перечислены все файлы). В более сложных файловых системах данный процесс продолжался бы пока не было бы выполнено перечисление содержимого всех каталогов.

Наш результат, полученный посредством анализа вручную можно сравнить с получаемым рекурсивно при помощи команды fls. Это отражается в Листинге 6.11.

 

Листинг 6.11. Вывод рекурсивного исполнения fls для ExFAT_V1.E01.


$ fls -r mnt/ewf1
r/r 2051: MyExFAT (Volume Label Entry)
r/r 2052: $ALLOC_BITMAP
r/r 2053: $UPCASE_TABLE
d/d 2054: Files
+ r/r 3075: delete.txt
r/r 2057: trees.jpg
r/r 2060: DemonstratingVeryLongFileNamesInExFAT.txt
r/r 2065: info.txt
v/v 16773123: $MBR
v/v 16773124: $FAT1
V/V 16773125: $OrphanFiles
 	   

Шаг 4: Восстановление метаданных

После того как необходимый перечень файлов определён, наш следующий шаг состоит в восстановлении метаданных в отношении каждого файла. Это достигается при помощи соответствующей записи каталога файла (тип 0x85). Листинг 6.12 отображает содержимое записи каталога файла для файла info.txt в корневом каталоге.

 

Листинг 6.12. Содержимое записи каталога файла для info.txt в ExFAT_V1.E01.


00301c0: 8502 c6a0 2000 0000 4480 5c57 4480 5c57 .... ...D.\WD.\W
00301d0: 4480 5c57 0000 0000 0000 0000 0000 0000 D.\W............
 	   

Таблица 6.14 предоставляет сведения относительно данного файла. К примеру, этот файл обладает двумя вторичными записями (а именно: расширение потока и имени файла, которые следуют непосредственно за записью каталога этого файла из Листинга 6.7). Значения времён создания, изменения и доступа являются структурами даты/ времени FAT. Все они указывают времена 28 октября 2023 после полудня. Значением зоны времени для всех этих структур является 0x00 (что означает отсутствие смещения, то есть, UTC).

Таблица 6.14. Запись каталога файла для info.txt из ExFAT_V1.E01.
Смещение Размер Название Значение

0x00

0x01

Тип

0x85<

0x01

0x01

Число вторичных записей

0x02<

0x02

0x02

Контрольная сумма

0xA0C6

0x04

0x02

Атрибуты

0x20 (Архив)

0x06

0x02

Зарезервировано

0x00

0x08

0x04

Создание

0x575C8044
2023-10-28 16:02:08

0x0C

0x04

Последнее изменение

0x575C8044
2023-10-28 16:02:08

0x10

0x04

Последний доступ

0x575C8044
2023-10-28 16:02:08

0x14

0x01

10 мс создания

0x00

0x15

0x02

10 мс изменения

0x00

0x16

0x01

Зона времени создания

0x00

0x17

0x01

Зона времени изменения

0x00

0x18

0x01

Зона времени доступа

0x00

0x19

0x07

Зарезервировано

0x00

Шаг 5: Восстановление содержимого

Наш окончательный шаг заключается в восстановлении всего содержимого файла. Это достигается посредством записи каталога расширения потока (тип 0xC0). Листинг 6.13 показывает расширение потока для info.txt. Обработанные значения отображены в Таблице 6.15.

 

Листинг 6.13. Содержимое записи каталога расширения потока для info.txt в ExFAT_V1.E01.


00301e0: c003 0008 7a2f 0000 c000 0000 0000 0000 ....z/..........
00301f0: 0000 0000 1900 0000 c000 0000 0000 0000 ................
 	   
Таблица 6.15. Запись каталога расширения потока для info.txt из ExFAT_V1.E01. Значения взяты из Листинга 6.13.
Смещение Размер Название Значение

0x00

0x01

Тип

0xC0<

0x01

0x01

Флаги

0x03<

0x02

0x01

Зарезервировано

0x00

0x03

0x01

Размер имени

0x08 (8d)

0x04

0x02

Контрольная сумма

0x2F7A

0x06

0x02

Зарезервировано

0x00
2023-10-28 16:02:08

0x08

0x08

Размер файла

0xC0 (192d)

0x10

0x04

Зарезервировано

0x00

0x14

0x04

Начальный кластер

0x19 (25d)

0x18

0x08

Размер файла

0xC0 (192d)

Согласно Таблице 6.15, начальный кластер определён как 0x1анной 9 (25d). Это транслируется в сектор при помощи задаваемой Выражением 6.1 формулой.


       [(25 − 2) × 64] + 256 = 1728
 	   

Установленный флаги сообщают нам что данный файл активный и непрерывный. Их значение 0x03 подразумевают что биты 0 и 1 установлены, следовательно, определяя что этот файл активен и непрерывен, соответственно. Тот факт, что файл непрерывен означает, что для восстановления содержимого такого файла нет необходимости в таблице FAT. Заключительная часть сведений требуется для размера файла, а именно 0xC0, в данном случае. Листинг 6.14 отражает 0xC0 байт из кластера 25d. Листинг 6.15 сопоставляет восстановление info.txt вручную с тем что выдаёт icat, показывая их идентичность.

 

Листинг 6.14. Содержимое файла info.txt в ExFAT_V1.E01.


00d8000: 5468 6973 2069 7320 616e 2045 7846 4154 This is an ExFAT
00d8010: 2066 696c 6520 7379 7374 656d 2074 6861 file system tha
00d8020: 7420 636f 6e74 6169 6e73 2034 2066 696c t contains 4 fil
00d8030: 6573 2061 6e64 2031 2064 6972 6563 746f es and 1 directo
00d8040: 7279 2e20 0a54 6865 2073 7472 7563 7475 ry..The structu
00d8050: 7265 206f 6620 7468 6973 2069 733a 0a0a re of this is:..
00d8060: 2f2d 2046 696c 6573 0a20 2020 2f2d 2064 /- Files. /- d
00d8070: 656c 6574 652e 7478 740a 2f2d 2069 6e66 elete.txt./- inf
00d8080: 6f2e 7478 740a 2f2d 2074 7265 6573 2e6a o.txt./- trees.j
00d8090: 7067 0a2f 2d20 4465 6d6f 6e73 7472 6174 pg./- Demonstrat
00d80a0: 696e 6756 6572 794c 6f6e 6746 696c 654e ingVeryLongFileN
00d80b0: 616d 6573 496e 4578 4641 542e 7478 740a amesInExFAT.txt.
 	   
 

Листинг 6.15. Сопоставление восстановления вручную при помощи dd и автоматического восстановления файла с применением icat. Получаемые в результате суммы MD5 равны.


$ dd if=mnt/ewf1 bs=1 skip=$((1728*512)) count=$((0xC0)) | md5sum
192+0 records in
192+0 records out
192 bytes copied, 0.000341334 s, 562 kB/s
4bbcb05d4c32617850d2db82244b84a3 -
$ icat mnt/ewf1 2065 | md5sum
4bbcb05d4c32617850d2db82244b84a3 -
 	   

Данная техника работает для непрерывных файлов. Позднее мы обсудим восстановление фрагментированных файлов (Раздел 6.3.3).

Расширенный анализ exFAT

Базовый анализ exFAT делает возможным восстановление множества метаданных и многих файлов. Тем не менее, имеются особые ситуации, требующие дополнительного изучения. В данном разделе разрешаются эти обстоятельства. А именно: длинные имена файлов, удалённые файлы, фрагментированные файлы и большие каталоги.

Длинные имена файлов

До этого момента все изучаемые файлы обладали короткими именами файлов. Иными словами, для хранения названия файла им требовалось лишь единственная запись каталога расширения имени файла. В поставляемом образе диска ExFAT_V1.E01 имеется файл, требующий множества расширений имени файла. Листинг 6.16 показывает этот файл из fls.

 

Листинг 6.16. Обнаруживаемое в ExFAT_V1.E01 множество записей каталога длинного имени файла.



 	   

В Листинге 6.17 показан набор записей каталога для такого файла. Это множество записей каталога содержит 4d вторичных записей. Согласно своему расширению потока, значение длины задаётся 0x29 (41d) символами. Раз каждое расширение имени файла способно хранить до 15d символов, для хранения такого названия файла требуется иметь 3d расширения имени файла. Подчёркиванием выделены байты типа записи каталога для каждого из них.

 

Листинг 6.17. Обнаруживаемое в ExFAT_V1.E01 длинное имя файла.


0030120: 8504 fd33 2000 0000 3b80 5c57 3b80 5c57 ...3 ...;.\W;.\W
0030130: 3b80 5c57 0000 0000 0000 0000 0000 0000 ;.\W............
0030140: c003 0029 3691 0000 2500 0000 0000 0000 ...)6...%.......
0030150: 0000 0000 1800 0000 2500 0000 0000 0000 ........%.......
0030160: c100 4400 6500 6d00 6f00 6e00 7300 7400 ..D.e.m.o.n.s.t.
0030170: 7200 6100 7400 6900 6e00 6700 5600 6500 r.a.t.i.n.g.V.e.
0030180: c100 7200 7900 4c00 6f00 6e00 6700 4600 ..r.y.L.o.n.g.F.
0030190: 6900 6c00 6500 4e00 6100 6d00 6500 7300 i.l.e.N.a.m.e.s.
00301a0: c100 4900 6e00 4500 7800 4600 4100 5400 ..I.n.E.x.F.A.T.
00301b0: 2e00 7400 7800 7400 0000 0000 0000 0000 ..t.x.t.........
 	   

Для восстановления этого названия файла требуется обработать все расширения имён файлов в порядке их появления в наборе записей каталога. Таким образом, первая запись содержит DemonstratingVe, вторая ryLongFileNames и заключительная запись содержит InExFAT.txt. Помещая их в одно целое, получаем искомое имя файла DemonstratingVeryLongFileNamesInExFAT.txt.

Удалённые файлы

Фрагментированные файлы и большие каталоги

Выводы

Упражнения

Библиография