(Из книги: Безруков Н.Н., Компьютерная вирусология,
Киев, УСЭ, 1991; написано до создания Win95, поэтому
вопрос кодировки длинных имён не рассмотрен).
Приложение 4
НЕКОТОРЫЕ СВЕДЕНИЯ
О ФАЙЛОВОЙ СИСТЕМЕ MS DOS
Существуют два основных типа дисков, используемых в
MS DOS: гибкие диски (дискеты) и жесткие диски (винчестеры).
В дальнейшем мы будем рассматривать преимущественно диске*
ты, поскольку отличия в организации информации между диске'
тами и винчестерами незначительны и касаются в основном коли-
чественных характеристик. Впрочем, количественные характери-
стики отличаются и для разных типов дискет (5- и 3-дюймовых,
одно- и двухсторонних и пр.). Поэтому для упрощения изложе-
ния далее везде будет предполагаться дискета 360К (2 стороны по
40 треков, 9 секторов на трек).
Информация записывается на фиксированное число концент-
рических окружностей, называемых треками или Дорожками, ив
которые может быть выставлена магнитная головка. Их количе-
ство зависит от типа дисковода и дискеты. Обычная 360К пяти-
дюймовая дискета (DS/DD) рассчитана на запись 40 треков на
каждой стороне. Треки нумеруются, начиная с нуля, причем трек
О расположен ближе к внешнему краю диска (имеет наибольший
радиус), а трек 39 - к внутреннему отверстию дискеты.
Имеются дискеты и другой емкости. Так, дискеты DS/QD
(720К) рассчитаны для записи 80 треков (0-79). Опыт показал,
что большинство дискет DS/DD можно успешно размечать на 80
дорожек в использовать как DS/QD без снижения надежности за-
писи Информации, Кроме того, дисковод может вести запись на
40 и более старшие дорожки (до 43) или на 80-83. В частности 41
дорожка часто используется для "защиты от копирования* -
часть информации размещается на ней и пропадает при обычном
копировании. Впрочем, имеются специальные программы
(СоруПРС, CopyWrite), позволяющие обходить простейшую реали-
зацию такой защиты за счет копирования "всего Подряд". Вуто-
вые вирусы Также иногда используют 40 дорожку для хранения
своего хйоста.
Каждый трек разделен на секторы, которые являются едини-
цами считывания и записи информации на диск. Любая операция
чтения или записи в конечном счете сводится к чтению или запи-
си определенного числа секторов. На одном треке для обычной
дискеты располагаются девять секторов. Каждый сектор обычно
содержит 612 байтов. Операционная система выделяет файлам
единицы дискового пространства, называемые кластерами. Для
обычных двухсторонних дискет 360 К (DS/DD) кластер состоит яз
двух секторов и имеет размер 1024 байта (1К). Даже если размер
файла меньше 1К, операционная система выделяет файлу целый
кластер. Таким образом, кластер является минимальной едини-
цей распределения дискового пространства, что приводит к потере
значительного количества секторов в "хвостах" файлов. Следует
отметить, что чем меньше размер кластера, тем более оптимально
используется дисковое пространство. Например, при переходе на
обычном 20М винчестере от стандартного кластера размером 2К
к уменьшенному размером 1К увеличивается полезная емкость
382
винчестера почти на 20% при практически неизменной скорости
ввода-вывода.
Количество секторов, которое можно записать на дискету, за-
висит от качества дисковода. Обычные дисководы позволяют за-
писывать до 10 секторов на трек (формат 10 секторов:40 тре-
ков - 400К и 10 секторов:80 треков - 800К), а дисководы по-
вышенного качества - 17 секторов на трек (для дискет HD емко-
стью 1,2М используется разметка 80 дорожек по 15 секторов).
Следует отметить, что если разметить дискету DS/DD (DS/QD) в
формате HD, то после записи информации обычно ее нельзя про-
читать.
Хотя дискета имеет форму диска, операционная система рас-
сматривает ее как последовательность секторов от нулевого до
максимального. Последний зависит от емкости дискеты. При
этом первые 12 секторов (0-11) содержат управляющие блоки
MS DOS для любого типа диска. Следует отметить, что размеры
управляющих блоков на дискете (FAT и каталога) приведены для
дискеты 360К и могут отличаться от стандартных: их размер хра-
нится в бут-секторе и не является фиксированным. Дальнейшее
содержимое диска зависит от того, является ли он системным или
нет. Для обычного диска сектора, начиная с 12, содержат данные.
Для системного диска сектора с 12-го заняты файлами
IBMBIO.COM и IBMDOS.COM (IO.SYS и MSDOS.SYS). Эти файлы
являются скрытыми и не видны командой DIR. Чтобы рассмот-
реть их, можно воспользоваться утилитами (Norton Commander,
PCTools и т.д.). Систему с файлами IBMBIO.COM и
IBMDOS.COM правильнее называть не MS DOS, a PC DOS, по-
скольку она является версией MS DOS, распространяемой фирмой
IBM. Хотя версии функционально эквивалентны, размеры боль-
шинства файлов в них отличаются. На системной дискете файл
IBMBIO.COM (IO.SYS) должен располагаться первым. Сразу за
ним должен следовать файл IBMDOS.COM (MSDOS.SYS).
Помимо IBMBIO.COM и IBMDOS.COM, на системном диске
содержится файл COMMAND.СОМ (командный процессор), размер
которого для MS DOS версии 3.3 составляет 25276 байтов, а для
PC DOS версии 3.3 - 25307 байтов. Эта программа обеспечивает
обработку вводимых команд и является наиболее часто используе-
мой компонентой MS DOS. Поэтому она является излюбленной
мишенью для атаки файловыми вирусами. Дискета, содержащая
указанные три файла, является минимальной конфигурацией опе-
рационной системы MS DOS, и ее удобно использовать в качестве
дрозофилы для бутовых вирусов. Приводимые далее примеры
ориентированы в основном на указанную конфигурацию (рис.1):
====== A: =====
Name Size Date Тime
Ibmbio com 22100 3-17-87 12:00p
Ibmdos com 30159 3-17-87 12:00p
command com 25307 3-17-87 12:00p
Рис.1. Фрагмент панели Norton Commander
с каталогом дискеты с минимальной DOS.
383
0 BOOT
1 FAT
2 FAT
3 Копия FAT
4 Копия FAT
5 ROOT
...
11 ROOT
12 IO.SYS
a
PC Tools Deluxe R4.30 Vol Label=None
-----Disk Mapping Service-----
Path=A:\*.*
Entire disk mapped 78% free space
Double sided
Track 1 1 2 2 3 3 3
0 5 0 5 0 5 0 5 9
Bhhhhhhrrr..............................
Fhhhhhhrrr..............................
Side 0 Fhhhhhhrr...............................
Dhhhhhhrr...............................
---- -Dhhhhhrrr...............................
Dhhhhhrrr...............................
Side 1 hhhhhhrrr...............................
hhhhhhrrr...............................
hhhhhhrrr...............................
Explanation of Codes
В Boot record h hidden
F File Alloc Table r Read Only
D Directory x Bad Cluster
"F" to map files. ESC to return.
6
Рис.2. Расположение секторов на дискете
384
Структура управляющей информации ва дискете. Первые 12
секторов (0-11) содержат три управляющих таблицы: загрузчик
(BOOT), таблицу распределения файлов (FAT) и корневой каталог
(root directory). Схема расположения этих секторов приведена на
рис.2. Карта, выдаваемая такими утилитами, как PC Tools
(рис.26) и Norton Utilities 4.5, позволяет легко определить нали-
чие, а в случае Norton Utilities и просмотреть содержимое сбой-
ных кластеров. Если содержимое секторов кластера, отмеченного
как сбойный, читается нормально, то скорее всего этот кластер
является псевдосбойным и, возможно, создан бутовым вирусом
для хранения своего хвоста.
Бут-сектор. Первый сектор дискеты или раздела винчестера
называется бут-сектором и содержит сведения о формате диске-
ты, а также короткую программу - загрузчик. Структура бут-
сектора показана на рис.3.
Программа-загрузчик находит на диске и загружает в опе-
ративную память системный файл IO.SYS (или IBMBIO.SYS).
Если файл не найден, то выдается сообщение "Non-System disk or-
disk error. Replace and strike any key when ready" ("Несистемный
диск или ошибка при считывании. Замените и нажмите любую
клавишу") и процесс загрузки прекращается. Эта ситуация обыч-
но возникает, когда на компьютере с винчестером пытаются пере-
загрузиться при установленной и защелкнутой дискете в диско-
воде А. Если дискета заражена бутовым вирусом, то рри выполне-
нии этой рекомендации винчестер также будет заражен. Поэтому
в ответ на данное сообщение следует всегда нажимать клавищу
Reset. Даже если дискета была вакцинирована с помощью буто-
вой вакцины VitaminB, перезагрузка не является гарантией пред-
отвращения заражения (некоторые бутовые вирусы успевают к
этому моменту заразить винчестер). В то же время, если вакцина
выдала какие-то предупреждающие сообщения, то необходимо
обязательно проверить содержимое бут-сектора дискеты, с кото-
рой произошла попытка загрузки. Если программа загрузки на
дискете повреждена, то система зависает. При этом мигающий
курсор расположен в левом верхнем углу экрана.
Второй компонентой бут-сектора является таблица парамет-
ров. Она содержит важную информацию о структуре дискеты или
логического диска (положение и размер FAT, количество секторов
в кластере и др.). Эта структура устанавливается при разметке и
является статической, т.е. в дальнейшем не меняется. Если табли-
ца параметров испорчена, то информацию с диска прочитать
нельзя и при загрузке система зависает. Как видно из рис.3, све-
дения о программе, с помощью которой выполнялось форматиро-
вание, расположены с 4 байта.
На рис.4 показан бут-сектор двухсторонней дискеты двойной
плотности (2D-2S), содержащей 40 треков и размеченной про-
граммой Format в MS DOS 3.3. Бут-сектор винчестера отличается
только таблицей параметров. Программа-загрузчик остается неиз-
менной. Другие версии операционной системы имеют несколько
отличающийся от приведенного загрузчик, однако его структура
неизменна: в конце сектора всегда имеется текст диагностическо-
го сообщения и имена системных файлов (на рис.4 - IO.SYS и
385
0 1 2 3 4 5 6 7 8 9 А В С D E F
-----------------------------------------------------------------
| | | | | | | | | | | | | | | | |
00|JMP xx xx|'I' 'B' 'M' '3' '.' '3'|SectSiz|CS |ResSecs|
10|Fat|RootSiz|TotSecs|Med|FatSize|TrkSecs|HeadCnt|HidnSec| |
20| код загрузчика (в конце загрузчика всегда расположены диагно-|
30| стмческие сообщения и имена системных файлов) |
...
1F0| | 55 AA|
-----------------------------------------------------------------
Рис.3. Структура бут-сектора:
Используемые обозначения:
JMP - NEAR-переход на начало загрузчика;
8 байтов, содержащих произвольную
информацию, обычно заносимую программой форматирования диска;
SectSiz - количество байтов в одном
секторе;
CS (ClustSiz) - количество секторов в одном кластере;
ResSecs -> количество резервных секто-
ров (перед FAT);
Fat (FatCnt) " количество FAT;
RootSiz - макс.число 32-байтовых элементов корневого
каталога;
TotSecs - общее число секторов на носителе (разделе диска);
Med (Media) - дескриптор носи-
теля (то те, что 1-й байт FAT);
PatSize - количество секторов в одной FAT;
TrkSecs - количество секторов в одном треке;
HeadCnt - число головок чтения/записи (поверхностей);
HidnSec - количество спрятанных секторов;
далее - размер форматированной порции корневого сектора.
386
MSDOS.SYS; для PC DOS используются имена ГВМВЮ.СОМ в
DBMDOS.COM). В конце бут-сектор всегда содержит два идентифи-
кационных байта : 55h AAh.
Следует обратить внимание, что первые три байта стандарт-
ного бут-сектора MS DOS 3.3 содержат ЕВ3490. Несовпадение
этих байтов при просмотре бут-сектора должно сразу насторажи-
вать, т.к. может свидетельствовать о заражении вирусам.
(ne wy`itywaem - pro]e polu`itx istinn. damp)
000: EB34904D53444F53 332E330002020100 .4.MSDOS3.3.....
010: 027000D002FD0200 0900020000000000 .р..............
020: 0000000000000000 0000000000000012 ................
030: 000000000100FA33 C08EDOBC007C1607 ....... .... I..
040: ВВ780036С5371Е56 1653BF2B7CB90BOO .X.6.7.V.S.+I...
050: FCAC26803D007403 268A05AA8AC4E2F1 ..&.=.t.&.......
060: 061F894702C7072B 7CFBCD137267A010 ...G...+|...rg..
070: 7C98F726167C0306 1C7C03060E7CA33F |..&J...|.. .Т.?
080: 7CA3377CB82000F7.26117C8B1EOB7C03 |.7Т. ..&.1...I.
090: C348F7F30106377C BB0005A13F7CE89F .Н....7|....?|..
ОАО: ООВ80102Е8В30072 198BFBB90BOOBED6 .......г........
ОВО: 7DF3A6750D8D7F20 BEE17DB90BOOF3A6 }..u... ..}.....
ОСО: 7418BE777DE86AOO 32E4CD165E1F8F04 t..w}.j.2..."...
ODO: 8F4402CD19BEC07D EBEBA11C0533D2F7 .0....Л.... .3..
ОЕО: 360B7CFECOA23C7C А1377GA33D7CBBOO б.|.,.<1.71.=|..
OFO: 07А1377СЕ84900А1 187С2А063В7С4038 ..7|Л...|*.;|@8
100: 063С7С7303АОЗС7С 50Е84Е005872С628 .<|s.. Поэтому
при интерпретации двухбайтовых полей для получения правиль-
13*
387
FAT area FAT format
Sector 1 in 1st copy of FAT Cluster 2; hex
3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 EOF 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 EOF 55 56 57 58 59 60 61 62
63 64 65 66 67 68 69 70 71 72 73 74
75 76 77 78 EOF 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
1 Help 2 Hex 3 Text 4 Dir 5 FAT 6 Partn 7 8 Choose 9 Undo 10 QuitNU
Рис.5. Полуинтерпретированный дамп FAT минимальной DOS,
полученный с помощью Norton Utilities
388
вого значения следует переставить байты местами. Например,, по-
ле SectSiz содержит "00 02", т.е. его значение равно 0200h - 512
байт.
Таблица распределения файлов (FAT). FAT представляет со-
бой карту дискового пространства, распределяемого под файлы, и
содержит по три шестнадцатиричные цифры для каждого имею-
щегося на диске кластера. Каталог (см. ниже) содержит номер
первого кластера, занятого файлом; в свою очередь, в каждом
элементе содержится указатель на следующий кластер файла. Ес-
ли кластер является последним кластером файла, то он .содержит
FFF.
С помощью FAT MS DOS отслеживает последовательность
кластеров, принадлежавших файлу, независимо от фактического
расположения их на диске. Для незанятых кластеров указатель
имеет вид 000. Если кластер поврежден и MS DOS не может счи-
тать или записать в него информацию, то такой кластер содержит
FF7 (признак сбойного кластера), и MS DOS не использует отме-
ченные таким образом кластеры при распределении.
Таблица распределения' файлов по сути является односвязным
списком, который DOS использует для отслеживания физического
расположения Данных на диске и для поиска свободной памяти
для новых файлов. Слово .по смещению lAh в элементе оглавле-
ния содержит номер первого кластера в цепочке распределения
файла. Соответствующий элемент FAT либо указывает конец це-
почки, либо ссылается на следующий элемент.
FAT может состоять из 12-битовых или 16-битовых элемен-
тов. 12-битовые элементы используются для дискет, 16-битовые
элементы FAT были введены, начиная с DOS 3.0, когда возникла
Необходимость управления 20М винчестером. На дискетах 360К
под FAT отведены четыре сектора - текущее состояние FAT в
секторах 1,2 и его копия в секторах 3,4. Дискеты 720К содержат
основную FAT в секторах 1,2,3 и ее копию в секторах 4,5,6.
Поскольку 12-битовые элементы трудно анализировать на
обычном дампе, для анализа FAT целесообразно использовать
Ndrton iJtilities, выдающую разобранный на 12-битовые элементы
(пояуинтерпретированный) дамп (рис.5).
На рисунке отчетливо видны три цепочки кластеров для трех
имеющихся в минимальной DOS файлов. Если диск был предва-
рительно сжат, т.е. файлы расположены друг за другом и занима-
ют последовательные сектора (что имеет место для дискеты с ми-
нимальной DOS), цепочки кластеров в FAT вырождаются в возра-
стающую последовательность номеров и при минимальном навы-
ке разрушенную FAT можно восстановить вручную. Поэтому ре-
гулярная дефрагментация файлов на диске с помощью утилиты
SpeeDisk или аналогичной является приемом, значительно повы-
шающим надежность хранения информации. Эту операцию реко-
мендуется проводить каждый раз в конце рабочего дня.
Повреждение FAT является тяжелой аварией, и при отсутст-
вии резервных копий обычно ведет к значительной потере инфор-
мации. В некоторых случаях поврежденной оказывается только
первая из двух копий FAT. В этом случае можно переписать уце-
левшую копию с помощью DiskEdit.
389
0 1 2 3 4 5 6 7 8 9 A B C D E F
-----------------------------------------------------------------
| | | | | | | | | | | | | | | | |
00| name | ext |atr| резерв |
-----------------------------------------------------------------
| | | | | | | | | | | | | | | | |
10| резерв | time | date |ClstrNo| размер файла |
-----------------------------------------------------------------
| | | | | | | | | | | | | | | | |
Рис.6. Структура Элемента каталога
Границы Полей отмечены двойной Линией. Используются следующие
обозначений (в квадратных скобках указаны Смещений в 16-ричной
системе счисления и длина):
name - имя файла [+0;8];
ext - расширение имени [+8;3];
atr - атрибут файла [+OBh;1];
резерв [+OCh;OAh];
time - время создания [+18h,2);
date - дата создания [+18h;2],
CIstrNo - номер начального кластера данных
(связь с FAT) [+1Ah;2]
размер файла - размер файла в байтах [+1Ch;4].
390
Помимо старания частя или всей, FAT, возможны мелкие
ошибке типа сращивания цепочек кластеров (когда один и тот же
шмйжер принадлежит двум файлам сразу) или зацикливания дере-
ва каталогов. Указанные ошибки можно устранить с помощью
утилит DiskEdit и NDD. Восстановление облегчается при наличии
резервной копии FAT, полученной утилитой IMAGE, которую ре-
комендуется включать в AUTOEXEC.BAT.
Корневой каталог. MS DOS хранит информацию о файлах в
каталогах, которые образуют древовидную структуру. Корневой
каталог хранит сведения о всех содержащихся в нем файлах и
подкаталогах. Он занимает семь секторов, начиная с сектора 5.
Каждый элемент корневого каталога занимает 32 байта. Очевид-
но, в одном секторе может разместиться 16 элементов. Это озна-
чает, что в семи секторах корневого каталога могут быть описаны
до 112 файлов и подкаталогов. Структура каталога показана на
рис.6. Как видно из рисунка, имя файла состоит не более чем из
восьми символов, дополненных справа пробелами. За именем сле-
дует факультативное трехсимвольнае^расширсние. Цря длине ме-
нее трех символов оно также дополняется пробелами.
Байт атрибутов позволяет MS DOS идентифицировать статуе
файла, по которому подразумевается некоторая (с точки зрения
защиты от вирусов - иллюзорная) степень защиты от несанкцио-
нированных действий пользователя. Не все биты байта атрибутов
используются. Первый (наименее значащий) бит показывает, что
это скрытый файл (не выдается командой DIR). Второй бит озна-
чает, что это системный файл, в отличие от пользовательских
файлов.
Номер первого кластера позволяет определить место в FAT,
занимаемое файлом. Если файл является каталогом (подкатало-
гом), то он имеет установленный бит 4 байта атрибутов.
Дамп главного каталога для минимальной конфигурации
приведен на рис.7.
000: 494F202020202020 5359532700000000 10 SYS'....
010: 0000000000000100 21100200875ВОООО ........Г.... С..
020: 4D53444F53202020 5359532700000000 MSDOS SYS'....
030: 0000000000000100 21101900В0750000 .........>.. ..u..
040: 434F4D4D414E4420 434F4D2000000000 COMMAND COW ....
050: 0000000000000100 F80E3700BC620000 ..........7..b..
060: 0000000000000000 0000000000000000 ................
*** последующие строки идентичны предьщущим ***
Рис.7. Дамп главного каталога для минимальной 90S.
Поле атрибутов файла. Поле атрибутов файла позволяет при-
сваивать файлу определенный "статус" относительно тех или
иных операций. Не все биты байта атрибутов используются. Биты
нумеруются с нуля. Наименее значащий (нулевой) бит соответст-
вует атрибуту READ ONLY, затем идут биты, соответствующие
атрибутам HIDDEN и SYSTEM. Атрибут READ ONLY ("только
чтение") запрещает выполнение операций удаления и модифика-
ции данного файла. Если установлен первый бит (атрибут
391
HIDDEN), то данный файл является так называемым скрытым
файлом (не выдается командой DIR). Второй бит означает, что
это системный файл, в отличие от пользовательских файлов. Ис-
пользуемые биты байта атрибутов показаны на рис.8.
7 6 5 4 3 2 1 0
a d v s h r
| | | | | | бит *** маска ***
| | | | | \--0:1=только чтение (READ ONLY) (Olh)
| | | | \----1:1=спрятанный (HIDDEN) (02h)
| | | \------2:1=системный (SYSTEM) (04h)
| | \--------3:1=метка тома (08h)
| \----------4:1=элемент подоглавления (10h)
\------------5:1=копия файла НЕ архивировалась(20h)
Рис.8. Формат поля атрибутов файла.
Как видно из рис.8, метка тома представляет собой просто
файл со специальным атрибутом. Одна из функций DOS (21h.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 с
(рис.9). Поскольку ни одна из стандартных команд MS DOS не
выдает количество секунд во времени образования файла, то зна-
392
номер начального кластера
Элемент каталог
номер начального кластера
|
-------------------------------------v-----------
| | | | | | | | | | | | |...| | | | | | | | | | |
|E X A M P L E C O M a|...|tim|dat|08 | длина |
|
|
v
00 01 02 03 04 05 06 07 08 09 ОA 0B ОC 0D OE OF
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
| ^
\-------/
Рис.10. Пример элемента каталога и цепочки элементов FAT.
393
чение "62 секунды" поля секунд может использоваться (и исполь-
зуется) вирусами для отметки зараженных файлов.
Аналогично может использоваться поле даты. Год создания
файла хранится в IBM PC в виде остатка после вычитания 1980
(даты создания данного компьютера). Некоторые вирусы Исполь-
зуют этот факт для пометки зараженных файлов: при заражении
они добавляют 100 к году создания файла. Это приращение не
видно "невооруженным глазом", поскольку как команда DIR, так
и большинство оболочек выдает только две последние цифры го-
да. Один из вирусов устанавливает для зараженных файлов 13 ме-
сяц.
Пример-элемента каталога показан на рис.10. Как видно из
рисунка, файл EXAMPLE. СОМ занимает 10 кластеров. Первый
кластер - это яластер OS, последний кластер - IB. Цепочка
кластеров -* 8,!?>OA,OB,1S,I. Compress из пакета PC Shell или любой другой анало-
гичной утилитой.
Таблица разделов диска -Partition Table (только для вин-
честера). MS DOS различает, два типа дисков: физические и логи-
ческие. Физический диск - это установленное устройство (вин-
честер). Обычно на компьютере установлен один винчестер, хотя
их может быть два или больше. Этот физический диск может
быть разделен на несколько логических дисков (разделов). Сведе-
ния о положении логических дисков на физическом содержатся в
специальной таблице, обычно называемой Partition Table (таблица
разделов), которая является составной часть так называемого
главного бут-сектора винчестера - Master Boot Record- (MBR).
Название ^Главный бут-сектор" (буквальный перевод термина
Master Boot Record - главная загрузочная запись) связано с тем,
что MBR первым загружается в оперативную память, если загруз-
ка операционной системы выполняется с винчестера.
MBR всегда занимает первый сектор винчестера (цилиндр О,
сторона О, сектор 1). Как видно из рис.11 и 12, он состоит из вы-
полняемого кода и таблицы разделов. Последняя расположена в
конце сектора и состоит из четырех 16-байтовых элементов. Ин-
формация в таблицу разделов заносится утилитой Fdisk или ана-
логичной ей несистемной утилитой. Просматривать таблицу раз-
делов удобнее всего с помощью DiskEditor из 5 версии утилит
Нортона или NU из версии 4.5. Наличие таблицы разделов позво-
ляет не только^иметь несколько логических дисков, но и несколь-
ко операционных систем на одном диске (например, MS DOS и
XENIX или несколько разных версий MS DOS).
Во время загрузки ROM-BIOS загружает MBR и передает уп-
равление на ее код. Этот код считывает таблицу разделов, чтобы
определить раздел, помеченный как загружаемый (Bootable). За-
тем в память считывается бут-сектор из этого раздела и ему пере-
дается управление. Отсюда следует, что, заражая винчестер, вирус
может заменять не только бут-сектор, но и MBR. И действитель-
но, существует несколько вирусов, использующих этот способ.
Повреждение MBR ведет к тому, что логические диски стано-
вятся недоступными. В результате система зависает при загрузке.
Обычно MBR можно восстановить с помощью Norton Disk Doctor,
однако надежнее иметь резервную копию первых секторов каждо-
го логического диска на специальной дискете. В случае поврежде-
ния MBR при загрузке экран дисплея остается пустым с курсо-
ром, мигающим в левом верхнем углу экрана. Восстановление
таблицы в случае тяжелых повреждений и отсутствия эталона
можно провести вручную, пользуясь шаблоном, приведенным на
рис.11 <12. Особенно удобно использовать для этой цели утилиту
Disk Editor из 5 версии утилит Нортона.
396
0 1 2 3 4 5 6 7 8 9 А В С D E F
-----------------------------------------------------------------
| | | | | | | | | | | | | | | | |
10| |Bot|HdS|
20|Sec|Cyl|Sys|HdE|Sec|Cyl|младш. |старш. |младш. |старш. | |
Рис.12. Структура элемента раздела
(поля показаны в тех положениях, в которых они расположены в дампе).
Bot - флаг загрузки ( 0 - не загружаемый, 80h - загружаемый) [+0,1];
HctS - начало раздела: номер головки [+1,1];
- начало раздела: сектор/цилиндр бут-сектора[+2,2];
Sys - код системы: 0 - неизв., 1 - DOS 12-бит FAT, 4 - 16-бит[+4,1];
HdE - конец раздела: номер головки [+5,1];
- конец раздела: сектор/цилиндр последнего сектора[+6,2];
<младш><старш> - относительный номер начального сектора[+8,4];
<младш><старш> - размер (число секторов)[+OCh,4];
далее (со смещением 10h) следует начало следующего элемента раздела (или OAA55h
для последнего элемента). В таблице разделов используется абсолютная адресация.
Значения цилиндра и сектора занимают 10 и 6 бит соответственно:
F E D C B A 9 8 7 6 5 4 3 2 1 0
|c c c c c c c c C C|s s s s s S|
\--/
|
\---- биты, обозначенные большими буквами С,
являются старшими,
т.е. при дешифровке номера цилиндра они
приписываются слева, а не справа.
397
Значение ^относительного сектора" по смещению 8 в каждом
разделе эквивалентно. цилиндру, дорожке и сектору начального
адреса раздела. Относительный сектор 0 совпадает с цилиндром О,
дорожкой 0, сектором Г. Относительный номер сектора увеличи-
вается сначала по каждому сектору на головке, затем по каждой
дорожке и, наконец, по каждому цилиндру.
Применима формула:
отн_сек = (#цил * сек_на_дор * дор_на_цил)
+ (#Гол * сек_на_дор) + (#Сек-1)
Разделы винчестера обычно начинаются е четного цилиндра,
за исключением первого раздела, который иногда размещается с
цилиндра 9, дорожки Q, сектора 2 (поскольку сектор' I - это
главный бут-сектор), а чаще веет> на^ввавется со следующей до*
рожки, оставляя остальные сектора нулевой дорожки пустыми.
Последнее овстоятельство используется рядом бутовых вирусов
для храяевия там своего хвоста, поэтому содержимое указанных
секторов рекомендуется периодически просматривать.
Следует отметить, что помимо бутовых вирусов > указанных
секторах могут хранить информацию другие программы, напри-
мер Advanced Disk Manager. В этом случае заражение винчестера
бутовым вирусом, истользующям те же сектора- ведет к потере со-
ответствующей информации. Поэтому всегда, необходимо иметь
резервную копию их содержимого на специальной дискете. На
этой же дискете следует хранить копай MBR, бутсекторов всех
логических дисков, копию CMOS и другую полезную для восста-
новления системных блоков информацию.
398