Осторожно компьютерные вирусы

Формат корневого каталога


Непосредственно после второй копии таблицы размещения файлов следует корневой каталог. Размер корневого каталога в секторах вы можете определить из блока параметров BIOS BPB. Поле со смещением 6 содержит максимальное количество дескрипторов файлов в корневом каталоге диска (этому полю соответствует строка Root directory entries при форматном просмотре содержимого загрузочного сектора программой DISKEDIT.EXE).

Размер одного дескриптора составляет 32 байта, поэтому умножив максимальное количество дескрипторов на это число мы получим размер корневого каталога в байтах. Зная размер сектора (512 байт), нетрудно определить количество секторов, занимаемых корневым каталогом.

Abs_4

Заражает загрузочный сектор. Старый сектор прячет на гибком диске в последнем секторе корневого каталога, а на жестком диске - в шестом секторе

Теперь поговорим о дескрипторах файлов.

Любой каталог (и корневой в том числе) содержит 32-байтовые элементы - дескрипторы, описывающие файлы и другие каталоги. Приведем формат дескриптора:

Смещение, байт

Размер, байт

Описание



0

8

Имя файла или каталога, выравненное на левую границу и дополненное пробелами

8

3

Расширение имени файла, выравненное на левую границу и дополненное пробелами

0Bh

1

Байт атрибутов файла

0Ch

10

Зарезервировано

16h

2

Время создания файла или время его последней модификации

18h

2

Дата создания файла или дата его последней модификации

1Ah

2

Номер первого кластера, распределенного файлу

1Ch

4

Размер файла в байтах

Обратите внимание на поле со смещением 1Ah. Это номер первого кластера, распределенного файлу или каталогу (если дескриптор описывает каталог более низкого уровня). Пользуясь этим значением, вы сможете проследить по таблице размещения файлов FAT всю цепочку кластеров, распределенных данному файлу или каталогу. Таким образом, у нас имеется способ отыскать начало цепочки кластеров для любого файла - нужно лишь найти соответствующий дескриптор.


В любом каталоге, кроме корневого, два первых дескриптора имеют специальное назначение. Первый дескриптор содержит в поле имени строку:

".       "

Этот дескриптор указывает на содержащий его каталог. То есть каталог имеет ссылку сам на себя. Второй специальный дескриптор содержит в поле имени строку:

"..      "

Этот дескриптор указывает на каталог более высокого уровня.

Если в поле номера первого занимаемого кластера для дескриптора с именем "..      " находится нулевое значение, это означает, что данный каталог содержится в корневом каталоге.

В древовидной структуре каталогов имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки сохранности структуры каталогов файловой системы.

Байт атрибутов является принадлежностью каждого файла. Биты байта атрибутов имеют следующие значения:

Бит

Описание

0

Файл предназначен только для чтения.

В этот файл нельзя писать и его нельзя стирать

1

Скрытый файл.

Этот файл не будет появляться в списке файлов, который отображается командой DIR

2

Системный файл.

Этот бит обычно установлен для  файлов, которые являются составной частью операционной системы

3

Данный дескриптор описывает метку диска.

Для этого дескриптора поле имени файла и поле расширения имени файла должны рассматриваться как одно поле длиной 11 байт. Это поле содержит метку диска

4

Дескриптор описывает файл, являющийся подкаталогом данного каталога

5

Флаг архивации.

Если этот бит установлен в 1, то данный файл не был выгружен утилитой архивации

6-7

Зарезервированы

Обычно файлы имеют следующие атрибуты:

Атрибут

Описание

0

Обычные файлы (тексты программ, загрузочные модули, пакетные файлы)

7

Только читаемые, скрытые, системные файлы. Такая комбинация битов байта атрибутов используется для файлов операционной системы IO.SYS, MSDOS.SYS

8

Метка тома. Дескриптор метки тома может находиться только в корневом каталоге логического диска

10h

Дескриптор, описывающий каталог

20h

Обычный файл, который не был выгружен программами BACKUP.EXE или XCOPY.EXE

<


При удалении файла первый байт его имени заменяется на байт E5h (символ “х”). Все кластеры, распределенные удаленному файлу, отмечаются в таблице  FAT как свободные.

Если вы только что удалили файл, его еще можно восстановить, так как в дескрипторе сохранились все поля, кроме первого байта имени файла. Но если на диск записать новые файлы, то содержимое кластеров удаленного файла будет изменено и восстановление станет невозможным.

Теперь о полях времени и даты.

Формат поля времени показан на рис. 6.27.



Рис. 6.27. Формат поля времени

Старшие пять бит содержат значение часа модификации файла, шесть бит с номерами 5 - 10 хранят значение минут модификации файла, и, наконец, в младших 5 битах находится значение секунд, деленное на 2. Для того, чтобы время обновления файла уместилось в шестнадцати битах, пришлось пойти на снижение точности времени до двух секунд. В подавляющем большинстве случаев такое снижение точности не играет никакой роли.

Формат даты обновления файла напоминает формат времени  и показан на рис. 6.28.



Рис. 6.28. Формат поля даты

Для того чтобы получить значение года обновления файла, необходимо прибавить к величине, хранимой в старших  семи битах, значение 1980.

Некоторые вирусы используют поля времени и даты для отметки зараженных файлов. Такая отметка нужна для того чтобы избежать повторного заражения. Однако такой примитивный способ используется только простейшими вирусами.

Поле длины в дескрипторе содержит точную длину файла в байтах. Для каталогов в поле длины записано нулевое значение.

Когда вирус заражает файл, его длина, как правило, увеличивается. Тем не менее стелс-вирусы эффективно маскируют такое увеличение, поэтому его можно заметить только при загрузке операционной системы с чистой дискеты.


Содержание раздела