Восстановление данных - страница 66

Шрифт
Интервал

стр.

? Это — пара байт >03 00. Данная последовательность представляет собой номер последовательности обновления. Сверяем его с содержимым двух последних байт этого и следующего секторов (смещения >1FEh и >3FEh соответственно). Они равны! Следовательно, данная файловая запись цела (по крайней мере, на первый взгляд), и можно переходить к операции ее восстановления. По смещению >2Ch расположен массив, содержащий оригинальные значения последовательности обновления. Количество элементов в нем равно содержимому 16-разрядного поля, расположенному по смещению >06h от начала сектора и уменьшенного на единицу (в данном случае имеем >03h - 01h == 02h). Извлекаем два слова, начиная со смещения >2Ch (в данном случае они равны >00 00 и >00 00) и записываем их в конец первого и последнего секторов.

Теперь нам необходимо выяснить, используется ли данная файловая запись, или же ассоциированный с ней файл или каталог был удален. 16-разрядное поле, расположенное по смещению >16h, содержит значение >01h. Следовательно, перед нами файл, а не каталог, и этот файл еще не удален. Но является ли эта файловая запись базовой для данного файла или мы имеем дело с ее продолжением? 64-разрядное поле, расположенное по смещению >20h, равно нулю, следовательно, данная файловая запись — базовая.

Очень хорошо, теперь переходим к исследованию атрибутов. 16-разрядное поле, находящееся по смещению >14h, равно >30h, следовательно, заголовок первого атрибута начинается со смещения >30h от начала сектора.

Первое двойное слово атрибута равно >10h, значит, перед нами атрибут типа >$STANDARD_INFORMATION. 32-разрядное поле длины атрибута, находящееся по смещению >04h и равное в нашем случае >60h байт, позволяет нам вычислить смещение следующего атрибута в списке: >30h (смещение нашего атрибута) >+ 60h (его длина) >== 90h (смещение следующего атрибута). Первое двойное слово следующего атрибута равно >30h, значит, это атрибут типа >$NAME, и следующее 32-разрядное поле хранит его длину, равную в данном случае >70h. Сложив длину атрибута с его смещением, мы получим смещение следующего атрибута — >90h + 70h == 100h. Первое двойное слово третьего атрибута равно >80h, следовательно, это атрибут типа >$DATA, хранящий основные данные файла. Складываем его смещение с длиной — >100h + 32h == 132h. И вот здесь мы наткнулись на частокол >FFFFFFh, сигнализирующий о том, что атрибут >$DATA последний в списке.

Теперь, разбив файловую запись на атрибуты, можно приступить к исследованию каждого из атрибутов в отдельности. Начнем с разбора имени. 8-разрядное поле, находящееся по смещению >08h от начала атрибутного заголовка (и по смещению >98h от начала сектора), содержит флаг нерезидентности. В данном случае этот флаг равен нулю. Это значит, атрибут резидентный, и его тело хранится непосредственно в самой файловой записи, что уже хорошо. 16-разрядное поле, расположенное по смещению >0Сh от начала атрибутного заголовка (и по смещению >9Ch от начала сектора) равно нулю, следовательно, тело атрибута не сжато и не зашифровано. Таким образом, можно приступать к разбору тела атрибута. 32-разрядное поле, расположенное по смещению >10h от начала атрибутного заголовка (и по смещению >A0h от начала сектора), содержит длину атрибутного тела, равную в данном случае >54h байт. 16-разрядное поле, расположенное по смещению >14h от начала атрибутного заголовка и по смещению >A4h от начала сектора, хранит смещение атрибутного тела, равное в данном случае >18h. Следовательно, тело атрибута >$FILE_NAME располагается по смещению >A8h от начала сектора.

Формат атрибута типа >$FILE_NAME описан в табл. 6.9. Первые восемь байт содержат ссылку на родительский каталог этого файла, равную в данном случае >11ADBh:01 (индекс — >11ADBh, номер последовательности — >01h). Следующие 32 байта содержат данные о времени создания, изменения и времени последнего доступа к файлу. По смещению >28h от начала тела атрибута и >D0h от начала сектора лежит 64-разрядное поле выделенного размера, а за ним — 64-разрядное поле реального размера. Оба равны нулю, что означает, что за размером файла следует обращаться к атрибутам типа


стр.

Похожие книги