Глава 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.
Общая схема 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.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Jump |
Инструкция безусловного перехода к коду загрузки |
|
|
OEM Name |
Название основного производителя, обычно EXFAT. |
|
|
Reserved |
Заполнено нулями. |
|
|
Sector Offset |
Смещение первого сектора раздела, в случае удаляемого носителя ноль. |
|
|
Volume Size |
Общий размер тома в секторах. |
|
|
FAT Offset |
Смещение в секторах до первой FAT. |
|
|
FAT Size |
Размер FAT в секторах. |
|
|
Data Region Offset |
Смещение в секторах области данных. |
|
|
Data Region Size |
Размер области данных в кластерах. |
|
|
Root Directory |
Адрес кластера корневого каталога. |
|
|
Serial Number |
Серийный номер данного тома. |
|
|
Revision |
Номер версии данной файловой системы. |
|
|
Flags |
Значения бит полей флагов. Бит 0 -активная в данный момент FAT (0 - FAT 1; 1 - FAT 2); Бит 1 - флаг изменения (0 - clean; 1- dirty); Бит 2 - бит отказа носителя (0 - none; 1 - failure); Остальные биты зарезервированы. |
|
|
Bytes/Sector |
Размер сектора в байтах находится возведением 2 в степень данного значения. Когда значение равно 0x09, тогда размер сектора равен 29 = 512d байт. |
|
|
Sectors/Cluster |
Число секторов в кластере находится возведением 2 в степень данного значения. Когда значение равно 0x06, тогда кластер содержит 26 = 64d сектора. |
|
|
# FATS |
Число имеющихся FAT. |
|
|
Used Percentage |
Процентное соотношение используемой области данных. |
|
|
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 перечисляет записи каталога и предоставляет их разбиение на категории и коды.
Название | Pri. | Crit. | Code | Type | Описание |
---|---|---|---|---|---|
Побитовое отображение |
|
|
|
|
Указывает на структуру побитового отображения, которая поддерживает значение состояния выделения каждого кластера на данном диске. |
Таблица верхнего регистра |
|
|
|
|
Указывает на таблицу верхнего регистра, позволяющую не чувствительный к регистру имени файла поиск, приводя соответствие символов верхнего и нижнего регистров. |
Метка тома |
|
|
|
|
При обнаружении в корневом каталоге содержит сведения относительно метки тома (как она приводится в fsstat). |
Файл |
|
|
|
|
Основная структура метаданных файла. |
GUID тома |
|
|
|
|
Значение GUID данного тома. |
TexFAT |
|
|
|
|
Относится к безопасной транзакции exFAT. |
Win CE ACT |
|
|
|
|
Относится к безопасной транзакции exFAT. |
Расширение потока |
|
|
|
|
Предоставляет значение местоположения содержимого данного файла. |
Расширение имени файла |
|
|
|
|
Собственно название файла. |
Набор записей каталога обладает лишь единственной записью первичного каталога, однако способна иметь до 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.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип записи |
Значение идентификатора типа для данного каталога |
|
|
Вторичный счётчик |
Значение числа связанных с этой первичной записью вторичных записей каталога. |
|
|
Набор контрольной суммы |
Значение контрольной суммы для этой первичной записи и множества связанных с ней вторичных записей. |
|
|
Первичные флаги |
Бит 0 - возможность размещения; бит 1 - нет цепочки FAT. Оставшиеся биты могут определяться конкретными типами записи каталога. |
|
|
Определяются пользователем |
Данные этого раздела различны для каждого типа записи каталога. |
|
|
Первый кластер |
Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные. |
|
|
Длина данных |
Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога. |
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип записи |
Значение идентификатора типа для данного каталога |
|
|
Вторичные флаги |
Это поле идентично полю флагов первичной записи каталога. |
|
|
Определяются пользователем |
Данные этого раздела различны для каждого типа записи каталога. |
|
|
Первый кластер |
Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные. |
|
|
Длина данных |
Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога. |
Общая структура первичной записи каталога содержит сведения о самом наборе каталога, к которому относится данная первичная запись, таких как значение числа вторичных записей в этом наборе и контрольную сумму множества записей каталога в целом. Обратите внимание на то, что подобное применение контрольных сумм в 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 ................
Смещение | Размер | Название | Описание | Значение |
---|---|---|---|---|
|
|
Тип записи |
Идентификатор типа для конкретной записи. Для побитового отображения 0x81. |
|
|
|
Флаги побитовой карты |
Бит 0 описывает значение побитового отображения выделения на которое ссылается эта запись. 0 представляет FAT 1, 1 представляет FAT 2. Как правило, это ноль, ибо имеется лишь одна FAT. Остальные биты зарезервированы. |
|
|
|
Зарезервировано |
Зарезервировано. |
|
|
|
Первый кластер |
Первый кластер в данном побитовом отображении выделения. |
|
|
|
Длина данных |
Длина данного побитового отображения размещения (в байтах). |
|
Каждый бит в побитовом отображении размещения представляет отдельный кластер. Самый первый бит представляет кластер 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 ................
Смещение | Размер | Название | Описание | Значение |
---|---|---|---|---|
|
|
Тип записи |
Идентификатор типа (0x82). |
|
|
|
Зарезервировано |
Зарезервировано. |
|
|
|
Контрольная сумма |
Значение контрольной суммы для таблицы верхнего регистра. |
|
|
|
Зарезервировано |
Зарезервировано. |
|
|
|
Первый кластер |
Местоположение первого кластера в байтах для таблицы верхнего регистра. |
|
|
|
Длина данных |
Размер таблицы верхнего регистра в байтах. |
|
Метка тома (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 ................
Смещение | Размер | Название | Описание | Значение |
---|---|---|---|---|
|
|
Тип записи |
Идентификатор типа (0x83). |
|
|
|
Длина имени |
Длина имени в символах unicode. Каждый символ представлен с размером в два байта. |
|
|
|
Метка тома |
Метка в unicode, в данном случае применимо лишь 0x0E (14d = 7 × 2) байт. |
|
|
|
Зарезервировано |
Зарезервировано. |
|
Файл (Type: 0x85)
Запись каталога файл это ключевая структура метаданных. Это основная, критически важная запись с кодом типа 0x85. Всякая запись каталога файл обычно обладает, по крайней мере, двумя связанными с нею вторичными записями, причём одна расширение потока, применяемая для определения местоположения содержимого файла, а другая расширение имени файла, которая содержит значение названия файла. Структура такой записи каталога файл определяется в Таблице 6.8.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип |
Тип записи каталога (0x85 для Файла). |
|
|
Число вторичных записей |
Счётчик числа вторичных записей для этого файла. |
|
|
Контрольная сумма |
Вычисляемая для множества записей каталога данного файла контрольная сумма. |
|
|
Атрибуты |
Атрибуты файла (Бит 0: Read-Only; Бит 1: Hidden; Бит 2: System; Бит 3: Reserved; Бит 4: Directory; Бит 5: Archive). |
|
|
Зарезервировано |
Зарезервировано. |
|
|
Создание |
Метка времени создания. |
|
|
Последнее изменение |
Метка времени последнего изменения. |
|
|
Последней доступ |
Метка времени последнего доступа. |
|
|
10 мс создания |
Компонента 10 мс значения времени создания. |
|
|
10 мс изменения |
Компонента 10 мс значения времени изменения. |
|
|
Зона времени создания |
Смещение зоны времени для времени создания. |
|
|
Зона времени изменения |
Смещение зоны времени для времени изменения. |
|
|
Зона времени доступа |
Смещение зоны времени для времени доступа. |
|
|
Зарезервировано |
Зарезервировано. |
Запись каталога для файла содержит метаданные этого файла. Зачастую наиболее интересные сведения для исследователя это время. Вспомним файловую систему 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 тома.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип записи |
Идентификатор типа (0xA0). |
|
|
Число вторичных записей |
Счётчик числа вторичных записей каталога. |
|
|
Контрольная сумма |
Вычисляемая для множества записей каталога. |
|
|
Флаги |
Для этой записи все флаги равны нулю. |
|
|
GUID тома |
Значение GUID тома для данной файловой системы. |
|
|
Зарезервировано |
Зарезервировано. |
Расширение потока (Type: 0xC0)
Расширение потока это критически важная вторичная запись каталога. Расширение потока применяется для определения местоположения содержимого файла/ каталога. Структура расширения потока показана в Таблице 6.10.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип |
Идентификатор типа (0xC0). |
|
|
Флаги |
Вторичные флаги. Самый младший бит установлен когда эта запись активна. Бит 1 установлен установлен если содержимое непрерывно, что означает, что не требуется никакая цепочка FAT. |
|
|
Зарезервировано |
Зарезервировано. |
|
|
Размер имени |
Размер имени (в кодированных UCS-2 символах). Для получения числа байт удвойте это значение. Само название хранится в одной или более записей расширения имени (каждая запись содержит 0x0F символов). |
|
|
Контрольная сумма |
Контрольная сумма всего названия. |
|
|
Зарезервировано |
Зарезервировано. |
|
|
Размер файла |
Размер файла. |
|
|
Зарезервировано |
Зарезервировано. |
|
|
Начальный кластер |
Номер кластера, с которого начинается содержимое этого файла. Когда установлен бит непрерывности, тогда кластеры хранятся единым блоком и нет потребности в обращениях к таблице FAT; в противном случае файл фрагментарен и необходимо консультироваться с таблицей FAT.. |
|
|
Размер файла |
Дублирующая запись для размера файла. |
Расширение потока даёт аналитику сведения о том непрерывен ли данный файл или фрагментирован. Именно они содержатся в поле вторичных флагов. Когда бит в положении 1 обладает значением 1, содержимое непрерывно.
В таком случае нет нужды обращаться к таблице FAT для определения местоположения содержимого. Само расширение потока содержит все необходимые сведения. Если его значение равно 0, данный файл фрагментарен. В этой ситуации расширение потока предоставит значение первого кластера и далее необходимо обращаться к таблице FAT для определения всей остающейся цепочки FAT.
Расширение имени файла
Запись каталога расширения имени файла это другая вторичная, критически важная запись каталога, которая содержит собственно название файла или, в случае длинных имён файлов, некой порции всего названия файла. Каждое имя файла содержит 15d символов названия файла. Структура расширения имени файла определена в Таблице 6.11.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Тип |
Идентификатор типа (0xC0). |
|
|
Флаги |
Вторичные флаги. |
|
|
Имя файла |
Завершающееся нулём название файла, состоящее из не более 15d кодированных UCS-2 символов. Может применяться множество атрибутов расширения имени файла. |
В ситуации, когда применяется множество записей расширения имени файла, название файла составляется из этих записей в порядке их появления. Все не используемые байты в названии файла обязаны быть нулями. Единичная запись каталога файла может обладать до 17d связанных с ним расширений имени файла, что подразумевает, что максимальная длина имени файла равна 255d (то есть 17d × 15d).
Прочие записи каталога
Существует ряд прочих типов записей в каталогах, но они вряд ли будут интересны для криминалистического анализа файловой системы. К ним относится запись в каталоге TexFAT, которая применяется как часть системы exFAT для обеспечения безопасности транзакций (Transaction Safe), и которая не нашла широкого применения настоящее время. Также есть две записи каталога, относящиеся к конкретному поставщику. Это запись vendor GUID, которая используется для идентификации фактического поставщика, и добавочное расширение поставщика, которое может содержать любые желаемые поставщиком данные. Они относятся к конкретному поставщику, а потому их определение зависит исключительно от конкретного поставщика.
Данный раздел представляет обсуждение анализа файловой системы exFAT. Он начинается с инструкций о том как создавать файловые системы exFAT при помощи ОС Linux и продолжается описанием тех файловых систем, которые предоставляются совместно с этой книгой. Они используются в оставшейся части этой главы. Наконец, этот раздел описывает процесс анализа вручную некой файловой системы exFAT.
Файловые системы exFAT, аналогично файловым системам FAT, могут создаваться во всех основных операционных системах. Листинг 6.5 определяет команду создания файловой системы exFAT в самом первом разделе второго жёсткого диска из терминала Linux. При помощи -n "MyExFAT" эта команда также определяет название этой файловой системы.
На протяжении данной главы анализируется ряд образов диска. Они доступны с вебсайта книги и суммируются в Таблице 6.12.
Образ | Описание |
---|---|
|
Базовая файловая система exFAT с четырьмя файлами в одном каталоге. |
|
Это файловая систем |
|
Файловая систем exFAT, применяемая в упражнениях этой главы. |
В данном разделе выполняется анализ вручную файловой системы exFAT. Это позволяет читателю полностью разобраться со структурой exFAT и
увидеть как файловую систему анализируют инструменты цифровой криминалистики. На протяжении данного раздела для целей демонстрации применяется
ExFAT_V1.E01
.
На абстрактном уровне методы анализа для exFAT почти идентичны методам FAT. Вот необходимые этапы:
-
Обработка VBR: VBR содержит относящиеся к самой файловой системе в целом сведения. Это те сведения, которые мы наблюдаем при использовании команды Sleuth Kit fsstat. Эти сведения жизненно важны для всего последующего анализа, ибо они делают возможным определять местоположение прочих структур файловой системы.
-
Обработка корневого каталога: Второй этап анализа начинается со списка файлов. Это происходит при первой обработке самого корневого каталога. Дополнительно к стандартным создаваемым пользователем файлам/ каталогам, корневой каталог содержит некоторые сведения структуры файловой системы, такие как местоположение побитового отображения выделения и таблиц верхнего регистра совместно с названием этого тома.
-
Обработка подкаталогов: После того как обработан каталог корня, далее происходит изучение всех подкаталогов. Это делает возможным перечисление всех файлов. Данный процесс продолжается вплоть до того, пока для обработки более не останется файлов. Это (в сочетании с шагом 2) эквивалентно команде fls Sleuth Kit.
-
Восстановление метаданных: Обработка производится для каждого файла/ каталога, которые восстановлены как запись каталога для файла, для получения метаданных файла (размер, времена и т.д.).
-
Восстановление содержимого: Окончательный этап состоит в восстановлении содержимого файла/ каталога при помощи расширения потока.
Оставшаяся часть этого раздела более подробно изучает эти этапы.
Шаг 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 сведения (за исключением метки тома, которая будет произведена из соответствующего корневого каталога). Из загрузочного сектора могут быть установлены соответствия структур самой файловой системы, что делает возможной дальнейшую обработку.
Смещение | Размер | Название | Описание |
---|---|---|---|
|
|
Название производителя |
EXFAT |
|
|
Зарезервировано |
0x00 |
|
|
Размер тома |
0x100000 (1 048 576d) |
|
|
Смещение FAT |
0x80 (128d) |
|
|
Размер FAT |
0x80 (128d) |
|
|
Смещение области Данных |
0x100 (256d) |
|
|
Размер области Данных |
0x3FFC (16 380d) |
|
|
Корневой каталог |
0x04 (4d) |
|
|
Серийный номер |
0x212AD518 |
|
|
Версия |
0x100 (то есть 1.0) |
|
|
Флаги |
0x00 (применяется FAT 1) |
|
|
Байт/ Сектор |
0x09 (то есть 29 = 512d байт) |
|
|
Секторов/ Кластер |
0x06 (то есть 26 = 64d секторов) |
|
|
Число FAT |
0x01 (1d) |
|
|
# устройства |
0x80 (128d) |
|
|
Процент занятости |
0x00 |
|
|
Зарезервировано |
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).
Смещение | Размер | Название | Значение |
---|---|---|---|
|
|
Тип |
0x85< |
|
|
Число вторичных записей |
0x02< |
|
|
Контрольная сумма |
0xA0C6 |
|
|
Атрибуты |
0x20 (Архив) |
|
|
Зарезервировано |
0x00 |
|
|
Создание |
0x575C8044 |
|
|
Последнее изменение |
0x575C8044 |
|
|
Последний доступ |
0x575C8044 |
|
|
10 мс создания |
0x00 |
|
|
10 мс изменения |
0x00 |
|
|
Зона времени создания |
0x00 |
|
|
Зона времени изменения |
0x00 |
|
|
Зона времени доступа |
0x00 |
|
|
Зарезервировано |
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 ................
Смещение | Размер | Название | Значение |
---|---|---|---|
|
|
Тип |
0xC0< |
|
|
Флаги |
0x03< |
|
|
Зарезервировано |
0x00 |
|
|
Размер имени |
0x08 (8d) |
|
|
Контрольная сумма |
0x2F7A |
|
|
Зарезервировано |
0x00 |
|
|
Размер файла |
0xC0 (192d) |
|
|
Зарезервировано |
0x00 |
|
|
Начальный кластер |
0x19 (25d) |
|
|
Размер файла |
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_V1.E01 имеется файл, требующий множества расширений имени файла. Листинг 6.16 показывает этот файл из fls.
В Листинге 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.