Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Сегодня создано предостаточно программных решений для восстановления удаленных файлов с различных файловых систем. Однако, если перефразировать известное изречение, практика без теории мертва: чтобы максимально эффективно использовать инструменты, нужно понимать, как они работают. Если перед специалистом стоит задача не просто вернуть утраченные файлы, а разобраться в причинах инцидента, знания об устройстве файловых систем просто необходимы.
Подробно рассматривать структуру NTFS я не вижу смысла, описание можно найти в книге Криса «Восстановление данных. Практическое руководство» и статье «Файловая система NTFS извне и изнутри» (в двух частях). Однако, чтобы наши действия при восстановлении файлов были осмысленными, нам все же придется освежить в памяти некоторые ключевые особенности файловой системы NTFS 3.1, а заодно вспомнить, как хранятся и удаляются файлы.
Не храни важные файлы на одном томе с операционной системой (обычно это диск С): на этом томе в NTFS чаще всего происходят изменения даже без прямого участия пользователя, что может повлиять на восстановление утраченной информации. Данные после удаления на этом дисковом разделе могут быть перезаписаны системными файлами.
В файловой системе NTFS работает принцип «все есть файл». Файл же имеет определенный набор атрибутов. Мы не будем разбирать все атрибуты файлов, затронем только самые важные: $STANDARD_INFO
, $FILE_NAME
, $DATA
.
В атрибутах $STANDARD_INFO
и $FILE_NAME
записаны метки времени, подробнее о них мы поговорим позже, а в атрибуте $DATA
хранится содержимое резидентного файла. В случае с нерезидентными файлами там располагаются «ссылки» на разбросанное по секторам содержимое файла, называемое data runs или отрезками. Отрезки представляют собой последовательность кластеров, которые хранят содержимое нерезидентного файла, а в качестве упомянутых «ссылок» в атрибуте $DATA
используется номер начального кластера и количество идущих следом кластеров. Как видишь, математика простая: если файл нерезидентный (больше 720 байт), нам нужно найти кластер, с которого он начинается, и собрать все кластеры воедино в верном порядке, а после записать содержимое кластеров в новый файл.
Все файловые атрибуты хранятся в файловой записи (File Record) таблицы Master File Table ($mft
). Это наиважнейший служебный файл (оттого он имеет резервную копию $mftmirr
), так как содержит в себе информацию обо всех файлах и директориях на томе. Имея на руках только файл $mft
, можно выстроить хронологию связанных с файлами событий, а в некоторых случаях — восстановить файлы.
Еще один важный служебный файл — карта свободного пространства $BitMap
. С ее помощью отслеживаются все используемые и неиспользуемые кластеры, что, конечно же, напрямую связано с созданием и удалением файлов или директорий. Кластер же в NTFS — минимальная единица дискового пространства, доступного для размещения файлов и директорий в файловой системе NTFS. По умолчанию размер кластера равен 4096 Kбайт, но при создании тома можно задать иной размер.
Процесс удаления файла подробно описан в книге Криса, также информацию можно найти в статье «Разгребаем руины. Как восстановить удаленные файлы на разделах NTFS».
Некоторые материалы, посвященные файловой системе NTFS v3.1, упоминают о резидентных и нерезидентных файлах. Резидентными файлами считаются те, размер которых меньше или равен 720 байт (это количество байтов было получено исключительно опытным путем в NTFS v3.1 в Windows 10, хотя в других источниках читатель может найти иную информацию о максимальном размере резидентного файла: он варьируется от 700 байт до 1 Кбайт). Такие файлы хранят все содержимое в $mft
(Master File Table), и в этом случае флаг нерезидентности (Non-resident flag) у них равен 00h
. Для нерезидентных файлов (строго больше 720 байт) флаг Non-resident flag равен 01h
.
На самом деле флаг резидентности присущ каждому атрибуту файла в отдельности (в том числе $FN
, $SI
и другим атрибутам), а не самому файлу как таковому. Несмотря на наличие такого флага у каждого атрибута, существуют исключительно резидентные атрибуты, которые хранят свои данные только в файле $mft
(например, $FILE_NAME
, $STANDARD_INFO
, $VOLUME_NAME
). Есть атрибуты, которые могут быть как резидентными, так и нерезидентными (это справедливо по отношению к атрибутам $DATA
, $EA
и другим). Наконец, существуют файловые атрибуты, которые хранят свои данные исключительно за пределами $mft
, то есть являются строго нерезидентными ($BITMAP
, $REPARSE_POINT
, $SECURITY_DESCRIPTOR
и прочие).
При создании файла на томе, перемещении между томами и практически любых манипуляциях с файлами (переименование, локальное перемещение, доступ внутри одного тома, изменение) у файла изменяются атрибуты $STANDARD_INFO
(далее — $SI
) и $FILE_NAME
(далее — $FN
). В них указано время, когда произошло действие с файлом.
В следующих таблицах показано, какие атрибуты файлов $SI
и $FN
меняются и при каких действиях с файлом.
Здесь:
$Data
и $INDEX
);Важно, что при удалении через del или erase атрибуты $FILE_NAME
и $STANDARD_INFO
не изменяются.
Зная метки времени определенных файлов и правила изменения атрибутов, специалист по расследованию инцидентов способен выстроить верную хронологию событий. Время, в которое произошли те или иные действия с файлами, при проведении криминалистического расследования может стать одним из важнейших артефактов.
Настало время приступить к практической части, чтобы закрепить теорию и поупражняться в восстановлении удаленных файлов. Но для начала следует выделить два способа удаления файлов в Windows:
Такое разделение связано с разницей в механизме удаления и некотором отличии при восстановлении файлов.
Никогда не восстанавливай удаленные файлы на тот же том, с которого они были удалены. Лучше всего использовать отдельный носитель.
В первую очередь разберемся с восстановлением нерезидентных файлов, а дальше посмотрим, как восстанавливать резидентные. Итак, практиковаться мы будем с использованием PowerShell-модуля PowerForensics авторства Джареда Эткинсона. Этот модуль прост в установке и содержит полезные командлеты для работы с файловыми системами NTFS и FAT. Он позволяет работать с системными файлами Windows и парсить атрибуты файлов NTFS, конвертировать метки времени из байтового представления в человеко‑читаемое (что необходимо в форензике). Подробнее узнать о возможностях модуля можно из его описания.
Для начала установим этот модуль (нужно запускать PowerShell от имени администратора, поскольку при чтении служебных файлов требуются привилегии локального администратора):
Import-Module PowerForensics
Проверим, что все прошло успешно, для этого выполним командлет
Get-Command - Module PowerForensics
Установка модуля завершена, теперь давай найдем все удаленные файлы на томе. В главной файловой таблице они имеют флаг удаления 00h
по смещению 16 байт от начала файловой записи.
Как уже было сказано в теоретической части, в Windows постоянно происходят изменения, какие‑то файлы удаляются, а какие‑то, наоборот, создаются (например, начиная с Windows 8 количество файлов Prefetch ограничено 1024, поэтому старые удаляются системой, а новые создаются при запуске исполняемых файлов).
Для чистоты эксперимента создадим том F (запускаем diskmgmt.
, затем сжимаем имеющийся том и отдаем для нового 5 Гбайт с дефолтным размером кластера 4096 Кбайт). Поместим туда файл (в роли подопытного будет выступать калькулятор, но читатель может использовать любой другой файл) calc.
и удалим его через erase (то же самое будет при удалении через del или Shift-Del).
Теперь для поиска удаленного файла на томе F
воспользуемся командлетом Get-ForensicsFileRecord
и отфильтруем вывод по флагу True
для атрибута Deleted
:
|
|