наиболее часто используемых программ MS DOS. Поэтому она является излюб-
ленной мишенью для атаки файловыми вирусами. Дискета, содержащая
указанные три файла является минимальной конфигурацией операционной
системы MS DOS и ее удобно использовать в качестве дрозофилы для
бутовых вирусов. Поэтому приводимые в дальнейшем примеры ориентированы,
в основном на указанную минимальную конфигурацию:
ЙННННННННННННСННН A:\ НСННННННННСНННННН»
є Name ¦ Size ¦ Date ¦ Time є
єIbmbio °com¦ 22100¦ 3-17-87¦12:00pє
єIbmdos °com¦ 30159¦ 3-17-87¦12:00pє
єcommand com¦ 25307¦ 3-17-87¦12:00pє
є ¦ ¦ ¦ є
Структура управляющей информации на дискете
Первые 12 секторов (0-11) содержат три управляющих таблицы:
загрузчик (BOOT), таблицу распределения файлов (FAT), и корневой
каталог (root directory). Схема расположения этих секторов приведена на
рис.1.
ЙНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСНННСН. . .НСННН»
є B ¦ F ¦ F ¦ F ¦ F ¦ R ¦ R ¦ R ¦ R ¦ R ¦ R ¦ R ¦ ¦ ¦ . . . ¦ є
ИНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПНННПН. . .НПНННј
а)
PC Tools Deluxe R4.30 Vol Label=None
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДDisk Mapping ServiceДДДДДДДДДДДДДДДДДДДДДД
Path=A:\*.*
Entire disk mapped 78% free space
Track 1 1 2 2 3 3 3
0 5 0 5 0 5 0 5 9
Double sided BhhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
FhhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
Side 0 FhhhhhhrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
DhhhhhhrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
----DhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
DhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
Side 1 hhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
hhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
hhhhhhrrrІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІІ
Explanation of Codes
І Available Allocated
B Boot record h hidden
F File Alloc Table r Read Only
D Directory x Bad Cluster
"F" to map files. ESC to return.
б)
Рис.1. Расположение секторов на дискете.
а: схематическое представление (границы кластеров для системных
секторов не показаны, поскольку нумерация кластеров начинается со
второго). Используемые обозначения: B - бутсектор; F - FAT; R -
корневой каталог;
б: карта, выдаваемая в режиме MAP PC Tools (в случае, если на дискете
есть сбойные кластеры, которые могут возникнуть в результате заражения
бутовым вирусом, они отчетливо видны при просмотре карты на экране
дисплая в виде мигающих символов "х"). Дискеты, имеющие сбойные
кластеры, должны быть дополнительно исследованы.
Бутсектор
Бутсектор всегда размещается в нулевом секторе дискеты и содержит
сведения о формате дискеты, а также короткую программу - загрузчик.
Структура бутсектора показана на рис.2. Формат рисунка соответствует
формату дампа на экране дисплея - по 16 символов в строке, что облегчает
интерпретацию дампа
0 1 2 3 4 5 6 7 8 9 A B C 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¦
ГДДДБДДД†ДДДБДДД†ДДДБДДД†ДДДБДДД†ДДДБДДД†ДДДБДДД†ДДДБДДДРДДДБДДДЩ
Рис.2. Структура бутсектора
Используемые обозначения:
JMP - NEAR-переход на начало загрузчика;
8 байт, содержащих произвольную информацию, обычно заносимую
программой форматирования диска;
SectSiz - количество байтов в одном секторе;
CS (ClustSiz) - количество секторов в одном кластере;
ResSecs - количество резервных секторов (перед FAT);
Fat (FatCnt) - количество FAT;
RootSiz - макс.число 32-байтовых элементов корневого каталога;
TotSecs - общее число секторов на носителе (разделе диска);
Med (Media) - дескриптор носителя (то же, что 1-й байт FAT);
FatSize - количество секторов в одной FAT;
TrkSecs - количество секторов в одном треке;
HeadCnt - число головок чтения/записи (поверхностей);
HidnSec - количество спрятанных секторов;
- размер форматированной порции корневого сектора.
Как видно из рис.2, сведения о программе, с помощью которой
выполнялось форматирование, расположены с 4 байта.
На рис.3 показан бутсектор двухсторонней дискеты двойной
плотности (2D-2S), содержащей 40 треков и размеченный программой
FORMAT MS DOS 3.3. Бутсектор винчестера отличается только таблицей
параметров. Программа загрузчик остается неизменной. Другие версии
операционной системы имеют несколько отличающийся от приведенного
загрузчик, однако его структура неизменна: в конце сектора всегда
имеется текст диагностического сообщения и имена системных файлов (на
рис.3 - IO.SYS и MSDOS.SYS; для PC DOS используются имена IBMBIO.COM и
IBMDOS.COM). В конце бутсектор всегда содержит два идентификационных
байта : 55h AAh.
Следует обратить внимание, что первые три байта стандартного
бутсектора MS DOS 3.3 содержат EB 34 90. Несовпадение этих байтов при
просмотре бутсектора должно сразу настораживать, поскольку может
свидетельствовать о заражении вирусом.
Absolute sector 0000000, System BOOT
Disp ДДДДДДДДДДДДДДДДД Hex codesДДДДДДДДДДДДДДДДДДДД
place-00 01 02 03 04 05 06 07 08 09 0A¦OB 0C 0D 0E 0F
ment ¦SectSiz
¦ ¦ClustSiz
ЪДДДJMPДД¬ ¦ ¦ ¦ResSecs
¦ ¦ ¦ ¦ ¦
0000:¦EB 34 90¦4D 53 44 4F 53 33 2E 33¦00 02¦02¦01 00 .4.MSDOS3.3.....
0010: 02 70 00 D0 02 FD 02 00 09 00 02 00 00 00 00 00 .p..............
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 ................
0030: 00 00 00 00 01 00 FA 33 C0 8E D0 BC 00 7C 16 07 .......3.....|..
0040: BB 78 00 36 C5 37 1E 56 16 53 BF 2B 7C B9 0B 00 .x.6.7.V.S.+|...
0050: FC AC 26 80 3D 00 74 03 26 8A 05 AA 8A C4 E2 F1 ..&.=.t.&.......
0060: 06 1F 89 47 02 C7 07 2B 7C FB CD 13 72 67 A0 10 ...G...+|...rg..
0070: 7C 98 F7 26 16 7C 03 06 1C 7C 03 06 0E 7C A3 3F |..&.|...|...|.?
0080: 7C A3 37 7C B8 20 00 F7 26 11 7C 8B 1E 0B 7C 03 |.7|. ..&.|...|.
0090: C3 48 F7 F3 01 06 37 7C BB 00 05 A1 3F 7C E8 9F .H....7|....?|..
00A0: 00 B8 01 02 E8 B3 00 72 19 8B FB B9 0B 00 BE D6 .......r........
00B0: 7D F3 A6 75 0D 8D 7F 20 BE E1 7D B9 0B 00 F3 A6 }..u... ..}.....
00C0: 74 18 BE 77 7D E8 6A 00 32 E4 CD 16 5E 1F 8F 04 t..w}.j.2...^...
00D0: 8F 44 02 CD 19 BE C0 7D EB EB A1 1C 05 33 D2 F7 .D.....}.....3..
00E0: 36 0B 7C FE C0 A2 3C 7C A1 37 7C A3 3D 7C BB 00 6.|...<|.7|.=|..
00F0: 07 A1 37 7C E8 49 00 A1 18 7C 2A 06 3B 7C 40 38 ..7|.I...|*.;|@8
0100: 06 3C 7C 73 03 A0 3C 7C 50 E8 4E 00 58 72 C6 28 .<|s..<|P.N.Xr.(
0110: 06 3C 7C 74 0C 01 06 37 7C F7 26 0B 7C 03 D8 EB .<|t...7|.&.|...
0120: D0 8A 2E 15 7C 8A 16 FD 7D 8B 1E 3D 7C EA 00 00 ....|...}..=|...
0130: 70 00 AC 0A C0 74 22 B4 0E BB 07 00 CD 10 EB F2 p....t".........
0140: 33 D2 F7 36 18 7C FE C2 88 16 3B 7C 33 D2 F7 36 3..6.|....;|3..6
0150: 1A 7C 88 16 2A 7C A3 39 7C C3 B4 02 8B 16 39 7C .|..*|.9|.....9|
0160: B1 06 D2 E6 0A 36 3B 7C 8B CA 86 E9 8A 16 FD 7D .....6;|.......}
0170: 8A 36 2A 7C CD 13 C3 0D 0A 4E 6F 6E 2D 53 79 73 .6*|.....Non-Sys
0180: 74 65 6D 20 64 69 73 6B 20 6F 72 20 64 69 73 6B tem disk or disk
0190: 20 65 72 72 6F 72 0D 0A 52 65 70 6C 61 63 65 20 error..Replace
01A0: 61 6E 64 20 73 74 72 69 6B 65 20 61 6E 79 20 6B and strike any k
01B0: 65 79 20 77 68 65 6E 20 72 65 61 64 79 0D 0A 00 ey when ready...
01C0: 0D 0A 44 69 73 6B 20 42 6F 6F 74 20 66 61 69 6C ..Disk Boot fail
01D0: 75 72 65 0D 0A 00 49 4F 20 20 20 20 20 20 53 59 ure...IO SY
01E0: 53 4D 53 44 4F 53 20 20 20 53 59 53 00 00 00 00 SMSDOS SYS....
01F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U.
АДДВДДЩ
АДДД идентификационные
байты
Рис.3. Бутсектор дискеты 2D-2S, размеченной программой FORMAT
При интерпретации дампа следует обратить внимание на то, что
микропроцессор 8086 записывает в память машинное слово (2 байта)
в формате <младший байт><старший байт>. Поэтому при интерпретации
двухбайтовых полей для получения правильного значения следует
переставить байты местами. Например, поле SectSiz содержит "00 02", т.е.
его значение равно 0200h - 512 байт.
Таблица распределения файлов (FAT)
На дискетах 360К под FAT отведены четыре сектора - текущее состоя-
ние FAT в секторах 1,2 и его копия в секторах 3,4. Дискеты 720К содержат
основную FAT в секторах 1,2,3 и ее копию в секторах 4,5,6.
FAT представляет собой карту дискового пространства, распределяемо-
го под файлы, и содержит по три шестнадцатеричные цифры для каждого име-
ющегося на диске кластера. Каталог (см. ниже) содержит номер первого
кластера, занятого файлом; в свою очередь, в каждом элементе содержится
указатель на следующий кластер файла. Если кластер является последним
кластером файла, то он содержит FFF.
Таким образом, MS DOS может отслеживать последовательность класте-
ров, принадлежавших файлу, независимо от фактического расположения их на
диске. Для незанятых кластеров указатель имеет 000. Если кластер повреж-
ден и MS DOS не может считать или записать в него информацию, то такой
кластер содержит FF7 (признак сбойного кластера), и MS DOS не использует
отмеченные таким образом кластеры при распределении.
Таблица распределения файлов по сути является односвязным списком,
который DOS использует для отслеживания физического расположения данных
на диске и для поиска свободной памяти для новых файлов. Слово по смеще-
нию 1Ah в элементе оглавления содержит номер первого кластера в цепочке
распределения файла. Соответствующий элемент FAT либо указывает конец
цепочки, либо ссылается на следующий элемент, и т.д.
FAT может состоять из 12-битовых или 16-битовых элементов. 12-бито-
вые элементы используются для дискет. 16-битовые элементы FAT были вве-
дены, начиная с DOS 3.0, когда возникла необходимость управления 20-ме-
габайтным винчестером.
Поскольку 12 битовые элементы трудно анализировать на обычном
дампе, для анализа FAT целесообразно использовать Norton Utilities,
выдающую разобранный на 12 битовые элементы (полуинтерпретированный) дамп
(рис.5).
Й FAT area ННННННННННННННННННННННННННННННННННННННННННННННННННННННН FAT format Н»