Как упоминалось ранее, существует только один стандартный способ адресации записей каталогов: использование полного имени файла или каталога, с которым она ассоциируется. При этом возникают минимум две проблемы, которые будут рассмотрены в этом разделе.

Допустим, потребовалось найти все выделенные структуры каталогов. Для этого мы начинаем поиск с корневого каталога и рекурсивно просматриваем все выделенные каталоги. В каждом каталоге мы анализируем 32-байтовую структуру и пропускаем свободные. Адрес каждой структуры образуется из имени каталога, просматриваемого в настоящий момент, и имени файла.

Такое решение отлично работает для обычных операций с файловой системой, но аналитику нередко требуется решить обратную задачу - найти все свободные записи каталогов. Здесь возникает первая проблема. При освобождении записи каталога первая буква имени пропадает. Если каталог содержит два файла, A-1.DAT и B-1.DAT, которые были удалены, обе записи будут содержать одинаковое имя _-l.DAT. Таким образом, возникает конфликт уникальности имен.

Вторая проблема возникает при удалении каталога и освобождении его записи. В этом случае не остается указателя на файлы и каталоги, находившиеся в удаленном каталоге, поэтому у них не будет адреса. На рис. 9.11 (А) запись каталога ссылается на кластер 210. Каталог удаляется, а запись каталога позднее выделяется заново; в новом варианте она указывает на кластер 400 (рис. 9.11 (В)). Свободные записи каталогов в кластере 210 остаются, однако их не удастся найти простым перемещением по дереву каталогов. Но даже если эти записи будут найдены, адресов у них не будет. Такие файлы называются зависшими.

Рис. 9.11. (А) - существующий каталог и его содержимое; (В) - состояние системы после удаления каталога и повторного выделения его записи в родительском каталоге

Чтобы найти зависшие файлы, необходимо проанализировать все секторы области данных. Стандартного способа не существует; один из вариантов заключается в анализе первых 32 байтов каждого сектора (не кластера!) и их сравнении с полями записи каталога. Если данные лежат в правильном диапазоне, обрабатывается остаток сектора. При просмотре секторов могут обнаружиться записи в резервном пространстве кластеров, которые были выделены другим файлам. Другой аналогичный способ - просмотр первых 32 байтов каждого кластера для отыскания записей «.» и «..», которые являются первыми двумя записями каждого каталога (пример будет приведен далее). Этот способ позволяет найти только первый кластер каталога, но не его фрагменты.

Один из способов решения подобных проблем основан на использовании другого метода адресации. Например, в ТБК используется метод, который также применяется в некоторых версиях 1Ж1Х; предполагается, что каждый кластер и сектор может быть выделен каталогу. Таким образом, можно представить, что каждый сектор разделен на 32-байтовые записи, в которых могут храниться записи каталогов, а каждой записи сопоставлен уникальный адрес. Первой 32-байтовой записи первого сектора ставится в соответствие адрес 0, второй - адрес 1, и т. д.

Это решение работает, но возникает небольшая проблема. Числовыми адресами обладают все каталоги и файлы, кроме корневого каталога. Вспомните, что местонахождение и размер корневого каталога задаются в загрузочном секторе, а не в записи каталога. В ТБК для решения этой проблемы корневому каталогу присваивается адрес 2 (потому что именно такой способ используется в большинстве файловых систем и№Х), а первой записи первого сектора присваивается адрес 3. На рис. 9.12 секторы 520 и 1376 представлены в расширенном виде, с показом адресов содержащихся в них записей. Каждый 512-байтовый сектор вмещает 16 структур записей каталогов, поэтому в секторе 520 хранятся записи 3-18.

Рис. 9.12. Адреса, назначаемые записям каталогов, определяются сектором и местонахождением записи внутри сектора

Пример образа

Следующий вывод istat, полученный для файла тестового образа, демонстрирует данные, существующие для типичного файла FAT. Запись каталога для этого файла анализируется в главе 10, а здесь приводится отформатированный результат:

# istat -f fat fat-4.dd 4 Directory Entry: 4 Allocated

File Attributes: File. Archive

Size: 8689

Name: RESUME-1.RTF

Directory Entry Times:

Written: Wed Mar 24 06:26:20 2004

Accessed: Thu Apr 8 00:00:00 2004

Created: Tue Feb 10 15:49:40 2004

Sectors:

1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663

Файлу выделено 18 секторов, что в данной файловой системе эквивалентно 9 кластерам. В выходных данных istat приводится время и дата создания, последнего обращения и модификации файла, а также атрибуты файла. Поскольку имя файла хранится в записи каталога, для его определения достаточно одного адреса, без полного пути.

Алгоритмы выделения

В категории метаданных существует два типа данных, задействованных в процедурах выделения. Для новых файлов выделяются записи каталогов, а для существующих файлов и каталогов обновляются временные штампы. Как и в боль шинстве стратегий выделения, конкретное поведение зависит от ОС и не может контролироваться структурами данных файловых систем. Прежде чем делать какие-либо предположения об алгоритмах выделения, необходимо протестировать конкретную ОС. Я приведу свои наблюдения для \Утс1о\¥8 98 и ХР.

Каталоги | Криминалистический анализ файловых систем | Выделение записей каталогов


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



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

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31