є Sector 1 in 1st copy of FAT Cluster 2, hex 2 є
є є
є 3 4 5 6 7 8 9 10 11 12 13 14 є
є 15 16 17 18 19 20 21 22 23 25 26 є
є 27 28 29 30 31 32 33 34 35 36 37 38 є
є 39 40 41 42 43 44 45 46 47 48 49 50 є
є 51 52 53 55 56 57 58 59 60 61 62 є
є 63 64 65 66 67 68 69 70 71 72 73 74 є
є 75 76 77 78 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є 0 0 0 0 0 0 0 0 0 0 0 0 є
є є
є Press Enter to continue є
1Help 2Hex 3Text 4Dir 5FAT 6Partn 7 8Choose 9Undo 10QuitNU
Рис.5. Полуинтерпретированный дамп FAT минимальной DOS,
полученный с помощью Norton Utilities
На рис. 5 отчетливо видны три цепочки кластеров для трех
имеющихся в минимальной DOS файлов. Если диск был предварительно сжат,
т.е. файлы расположены друг за другом и занимают последовательные
сектора (что имеет место для дискеты с минимальной DOS), цепочки
кластеров в FAT вырождаются в возрастающую последовательность номеров и
при минимальном навыке разрушенную FAT можно восстанавить вручную.
Поэтому регулярное сжатие диска с помощью утилиты NC или COMPRESS
является приемом, значительно повышающим надежность хранения информации.
Корневой каталог
MS DOS хранит информацию о файлах в каталогах, которые образуют
древовидную структуру. Корневой каталог хранит сведения о всех содержа-
щихся в нем файлах и подкаталогах. Он занимает семь секторов, начиная с
сектора 5. Каждый элемент корневого каталога занимает 32 байта. Очевид-
но, в одном секторе может разместиться 16 элементов. Это означает, что в
семи секторах корневого каталога могут быть описаны до 112 файлов и под-
каталогов. Структура каталога показана на рис.6.
0 1 2 3 4 5 6 7 8 9 A B C D E F
ЦДДДДДДДВДДДДДДДВДДДДДДДВДДДДДДДТДДДДДДДВДДДТДДДТДДДДДДДВДДДДДДД¬
00 є name є ext єatrє резерв ¦
ИДДДБДДД†ДДДБДДД†ДДДБДДДТДДДБДДДЧДДДБДДДТДДДРДДДЧДДДБДДД†ДДДБДДДґ
10 резерв є time є date єClstrNoє размер файла ¦
ГДДДБДДД†ДДДБДДД†ДДДБДДДРДДДБДДДРДДДБДДДРДДДБДДДРДДДБДДД†ДДДБДДД†
Рис.4. Структура элемента каталога
Границы полей отмечены двойной линией. Используются следующие обозначения
(в квадратных скобках указаны смещение в 16-ричной системе счисления и
длина):
name - имя файла [+0; 8];
ext - расширение имени [+8;3];
atr - атрибут файла [+0Bh;1];
резерв [+0Ch;0Ah];
time - время создания [+16h;2];
date - дата создания [+18h;2];
ClstrNo - номер начального кластера данных (связь с FAT) [+1Ah; 2];
размер файла - размер файла в байтах [+1Ch;4];
Как видно из рис.6, имя файла состоит не более чем из восьми
символов, дополненных справа пробелами. За именем следует
факультативное трехсимвольное расширение. При длине менее трех
символов оно также дополняется пробелами.
Байт атрибутов позволяет MS DOS идентифицировать статус файла, по
которому подразумевается некоторая (с точки зрения защиты от вирусов -
иллюзорная) степень защиты от несанкционированных действий пользователя.
Не все биты байта атрибутов используются. Первый (наименее значащий) бит
показывает, что это скрытый файл (не выдается командой DIR). Второй бит
означает, что это системный файл, в отличие от пользовательских файлов.
Номер первого кластера позволяет определить место в FAT, занимаемое
файлом. Если файл является каталогом (подкаталогом), то он имеет
установленный бит 4 байта атрибутов.
Дамп главного кaталога для минимальной конфигурации приведен на
рис.7.
PC Tools Deluxe R4.30
-ДДДДДДДДДДДДДДДДДДДДДДДДДДДDisk View/Edit ServiceДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Path=A:
Absolute sector 0000005, System ROOT, Disk Abs Sec 0000005
Displacement ДДДДДДДДДДДДДДДДД Hex codesДДДДДДДДДДДДДДДДДДДД ASCII value
0000(0000) 49 42 4D 42 49 4F 20 20 43 4F 4D 27 00 00 00 00 IBMBIO COM'
0016(0010) 00 00 00 00 00 00 00 60 AC 11 02 00 54 56 00 00
0032(0020) 49 42 4D 44 4F 53 20 20 43 4F 4D 27 00 00 00 00 IBMDOS COM'
0048(0030) 00 00 00 00 00 00 00 60 AC 11 18 00 CF 75 00 00
0064(0040) 43 4F 4D 4D 41 4E 44 20 43 4F 4D 21 00 00 00 00 COMMAND COM!
0080(0050) 00 00 00 00 00 00 00 60 71 0E 36 00 DB 62 00 00
0096(0060) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0112(0070) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0128(0080) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0144(0090) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0160(00A0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0176(00B0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0192(00C0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0208(00D0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0224(00E0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0240(00F0) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Home=beg of file/disk End=end of file/disk
ESC=Exit PgDn=forward PgUp=back F2=chg sector num F3=edit F4=get name
Рис.7. Дамп первого сектора FAT для минимальной DOS,
полученный с помощью PC TOOLS
Поле атрибутов файла
Поле атрибутов файла позволяет присваивать файлу определенный
"статус" относительно тех или иных операций. Не все биты байта
атрибутов используются. Биты нумеруются с нуля. Наименее значащий
(нулевой) бит соответствует аттрибуту READ ONLY, затем идут биты,
соответствующие атрибутам HIDDEN и SYSTEM. Биты нумеруются с нуля.
Атрибут READ ONLY ("только чтение") запрещает выполнение операций
удаления и модификации данного файла. Если установлен первый бит
(атрибут HIDDEN), то данный файл является так называемым скрытым файлом
(не выдается командой DIR). Второй бит означает, что это системный файл,
в отличие от пользовательских файлов. Используемые биты байта атрибутов
показаны на рис.8.
Ц7В6В5В4В3В2В1В0·
є ¦a¦d¦v¦s¦h¦rє
УДБДБТБТБТБТБТБТЅ бит *** маска ***
є є є є є ИН 0: 1 = только чтение (READ ONLY) (01h)
є є є є ИННН 1: 1 = спрятанный (HIDDEN) (02h)
є є є ИННННН 2: 1 = системный (SYSTEM) (04h)
є є ИННННННН 3: 1 = метка тома (08h)
є ИННННННННН 4: 1 = элемент подоглавления (10h)
ИННННННННННН 5: архив. 1=копия файла НЕ архивировалась (20h)
Рис.8. Формат поля атрибутов файла
Как видно из рис.8, метка тома представляет собой просто файл со
специальным атрибутом. Одна из функций DOS (21-43h) позволяет вирусу
"молча" изменять любой бит байта атрибутов, включая "только чтение",
что является явным дефектом реализации этой функции, существенно
облегчающим жизнь создателям вирусов. Впрочем, при отсутствии страничной
организации памяти и режима супервизора (как в старой, доброй системе
360/370), радикальных мер по исправлению этой ошибки, по сути, и
предложить нельзя.
Поля даты и времени
ЦFВEВDВCВBТAВ9В8†7В6В5Т4В3В2В1В0·
є час є минута є сек/2 є
УДБДБДБДБДРДБДБД†ДБДБДРДБДБДБДБДЅ
ИНННЛНННј ИННННЛННННј ИНННЛНННј
є є ИНННН 2-секундные единицы (0-31)
є ИННННННННННННННН минута (0-63)
ИНННННННННННННННННННННННННН час (0-31)
ЦFВEВDВCВBВAВ9Т8†7В6В5Т4В3В2В1В0·
є год є месяц є день є
УДБДБДБДБДБДБДРД†ДБДБДРДБДБДБДБДЅ
ИНННННЛНННННј ИННЛННј ИНННЛНННј
є є ИНННН день (0-31)
є ИННННННННННННН месяц (0-15)
ИНННННННННННННННННННННННН год - 1980 (0-127)
Рис.9. Формат полей даты и времени
Следует обратить внимание на то, что несовпадение систем представ-
ления часов, секунд и минут с двоичной системой приводит к наличию неко-
торого "запаса" в формате поля даты, что позволяет устанавливать "аб-
сурдное" время типа 31 час 63 минуты 62 секунды. Поскольку ни одна из
стандартных команд MS DOS не выдает количество секунд во времени образо-
вания файла, то значение "62 секунды" поля секунд может использоваться
(и используется) вирусами для специальных целей, например для отметки о
том, что данный файл был заражен.
Аналогично может использоваться поле даты. Год создания файла
храниться в IBM PC в виде остатка после вычитания 1980 (даны создания
данного компьютера). Некоторые вирусы используют этот факт для пометки
зараженных файлов: при заражении они добавляют к году создания файла
100. Это приращение не видно "невооруженным глазом", поскольку как
команда DIR, так и большинство оболочек выдает только две последние
цифры года. Один из вирусов устанавливает для зараженных файлов 13
месяц.
Пример элемента каталога показан на рис.10.
номер начального кластера
Элемент каталога є
ЦДДДДДДДДДДДДДДДВДДДДДВДВДДДВДДДВДДДВДVДВДДДДДДД·
єE X A M P L E ¦C O M¦a¦...¦tim¦dat¦08 ¦ длина є
УДБДБДБДБДБДБДБДБДБДБДБДБДДДБДБДБДБДБДЧДБДБДБДБДЅ
є
00 01 02 03 04 05 06 07 є8 09 0A 0B 0C 0D 0E 0F
ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪVД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬
00 ¦ID¦¦FF¦¦03Н>04Н>05Н>FF¦¦00¦¦00¦¦09Н>0AН>0BН>15¦¦00¦¦00¦¦00¦¦00¦
АДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАЧДЩАДДЩАДДЩАДДЩАДДЩ
ЙНННННННННННННННННННННННј
ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪVД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬ЪДД¬
10 ¦00¦¦00¦¦00¦¦00¦¦00¦¦16Н>17Н>19¦¦F7¦¦1AН>1BН>FF¦¦00¦¦00¦¦00¦¦00¦
АДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩАЧДЩАДДЩАAДЩАДДЩАДДЩАДДЩАДДЩАДДЩАДДЩ
ИНННННННј
Рис.10. Пример элемента каталога и цепочки элементов FAT
Как видно из рис.10, файл EXAMPLE.COM занимает 10 кластеров.
Первый кластер - это кластер 08, последний кластер - 1B. Цепочка
кластеров - 8, 9,0A,0B,15,16,17,19,1A,1B. Каждый элемент указывает на
следующий элемент цепочки, а последний элемент содержит специальный
код. Кластер 18 поме- чен как плохой и не входит в цепочку
распределения. Кластеры 6,7, 0C-14 и 1C-1F пусты и доступны для
распределения. Еще одна цепочка, возможно, начинается с кластера 2
(при условии, что не показанные на рис.10 элементы каталога равны нулю)
и кончается кластером 5. Чтобы узнать имя соответствующего файла,
нужно отыскать элемент каталога с начальным номером кластера 02.
Как уже отмечалось, кластеры нумеруются, начиная с друх (нулевой элемент