Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Второе рождение удаленных файлов

Крис Касперски ака мыщъх

Хакер, номер #082, стр. 082-098-3


По сравнению с FAT, такая схема хранения информации о размещении является намного более устойчивой к разрушениям. Она как бы "размазывается" по всему диску, и уничтожить все блоки адресации можно разве что динамитом. К тому же, номера блоков хранятся в прямом виде "как есть", а это значит, что для каждого блока файла можно быстро найти соответствующий ему косвенный блок, даже если inode полностью разрушена.

Имена файлов хранятся в директориях, и в inode их нет. Директории представляют собой специальные служебные файлы, содержащие массив записей типа:

Формат представления массива директорий (смещение, размер, описание)

0 4 inode ; ссылка на inod'у

4 2 rec_len ; длина данной записи

6 1 name_len ; длина имени файла

7 1 file_type ; тип файла

8 ... name ; имя файла

Поле inode содержит порядковый номер inode, которому соответствует данное имя файла; поле rec_len задает длину текущей записи, а name_len – длину имени файла. Само имя хранится в ASCII виде.

[что происходит при удалении файла]

При удалении файла в системе происходит множество изменений. Опишем лишь самые важные из них. Прежде всего, система определяет номер принадлежащей ему inode. Затем счетчик ссылок уменьшается на единицу, и если при этом он не обращается в нуль, то никакого удаления не происходит, поскольку у файла еще остались ссылки. Нас этот случай не интересует. Если же ссылок больше нет, то все блоки, ранее принадлежащие файлу, в карте свободного пространства помечаются как неиспользуемые, обновляется поле времени удаления, а сама inode освобождается, что осуществляется путем модификации inode bitmap. В ext3fs в дополнении к этому обнуляются указатели на 12 блоков непосредственной адресации и 3 блока косвенной адресации, в результате чего схема размещения файла оказывается частично утраченной. Файл директорий так же затрагивают перемены. Ext2fs обнуляет поле inode и увеличивает размер предшествующей записи на величину удаляемой. Предшествующая запись как бы "поглощает" последующую, а связь между именем файла и соответствующей ему inode необратимо теряется. То есть мы можем восстановить файл, но бессильны вернуть ему прежнее имя. Правда, можно получить список всех удаленных имен, и тем или иным способом попробовать угадать какое из них "наше". При восстановлении небольшого количества файлов это срабатывает, но если удален весь корневой каталог, то ситуация - ласты. А вот ext3fs оставляет поле inode неизменным, благодаря чему задача восстановления имени становится тривиальной. Проблема в том, что на ext3fs утрачивается схема размещения файла, что чрезвычайно затрудняет восстановление его содержимого.

Назад на стр. 082-098-2  Содержание  Вперед на стр. 082-098-4