Восстановление данных - страница 67
Длина имени файла содержится в 8-разрядном поле, находящемся по смещению >40h
байт от начала тела атрибута и по смещению >E8h
от начала сектора. В данном случае оно равно >09h
. Само же имя начинается со смещения >42h
от начала тела атрибута и со смещения >EAh
от начала сектора. И здесь находится имя файла llfak.dbx.
Переходим к атрибуту основных данных файла, пропустив атрибут стандартной информации, который не содержит решительно ничего интересного. 8-разрядный флаг нерезидентности, расположенный по смещению >08h
от начала атрибутного заголовка и по смещению >108h
от начала сектора, равен >01h
, следовательно, атрибут нерезидентный. 16-разрядный флаг, расположенный по смещению >0Ch
от начала атрибутного заголовка и по смещению >10Ch
от начала сектора, равен нулю, значит, атрибут не сжат и не зашифрован. 8-разрядное поле, расположенное по смещению >09h
от начала атрибутного заголовка и по смещению >109h
от начала сектора, равно нулю — атрибут безымянный. Реальная длина тела атрибута (в байтах) содержится в 64-разрядном поле, расположенном по смещению >30h
от начала атрибутного заголовка и по смещению >130h
от начала сектора. В данном случае она равна >4ED1F0h
(5.165.552). Два 64-разрядных поля, расположенных по смещениям >10h/110h
и >18h/118h
байт от начала атрибутного заголовка/сектора соответственно, содержат начальный и конечный номер виртуального кластера нерезидентного тела. В данном случае они равны: >0000h
и >4EDh
соответственно.
Остается лишь декодировать список отрезков, адрес которого хранится в 16-разрядном поле, находящемся по смещению >20h
от начала атрибутного заголовка и 120h от начала сектора. В данном случае поле равно >40h
, что соответствует смещению от начала сектора в >140h
. Сам же список отрезков выглядит так: >32 EE 04 D9 91 00 00
. Ага! Два байта занимает поле длины (равное в данном случае >04EEh
кластерам) и три — поле начального кластера (>0091h
). Завершающий ноль на конце говорит о том, что этот отрезок последний в списке отрезков.
Подытожим полученную информацию. Файл называется llfak.dbx, он начинается с кластера >0091h
и продолжается вплоть до кластера >57Fh
, при реальной длине файла в 5.165.552 байт. Это все, что надо! Теперь остается только скопировать файл на резервный носитель (например, ZIP или стример).
Возможные опасности NTFS
Сейчас мы немного отвлечемся и поговорим о... компьютерных вирусах, обитающих внутри NTFS и активно использующих ее расширения в своих личных целях. В любом случае конструирование вирусов — отличный стимул к изучению ассемблера! И хотя вирус в принципе можно написать и на Си, это будет как-то не по-хакерски и вообще неправильно! Настоящие хакеры пишут только на FASM. Итак, запускаем Multi-Edit или TASMED и погружаемся в мрачный лабиринт кибернетического мира, ряды обитателей которого скоро пополнятся еще одним зловредным созданием...
Простейший вирус под Windows NT
Внедрение вируса в исполняемый файл, в общем случае, достаточно сложный и мучительней процесс. Как минимум для этого требуется изучить формат РЕ-файла и освоить десятки API-функций. Но ведь такими темпами мы не напишем вируса и за сезон, а хочется создать его прямо здесь и сейчас. Но хакеры мы или нет? Файловая система NTFS (основная файловая система Windows NT/2000/XP) содержит потоки данных (streams), называемые также атрибутами. Внутри одного файла может существовать несколько независимых потоков данных (рис. 6.4).
Рис. 6.4. Файловая система NTFS поддерживает несколько потоков в рамках одного файла
Имя потока отделяется от имени файла знаком двоеточия (>:
), например: >my_file:stream
. Основное тело файла хранится в безымянном потоке, но мы также можем создавать и свои потоки. Заходим в FAR Manager, нажимаем клавиатурную комбинацию >xxx:yyy
, и затем вводим какой-нибудь текст. Выходим из редактора и видим файл нулевой длины с именем >xxx
. Почему же файл имеет нулевую длину? А где же введенный нами только что текст? Нажмем клавишу