Прерывание INT 13h
Прерывание INT 13h, обработчик которого находится в BIOS, позволяет любой программе беспрепятственно читать и записывать любые секторы жесткого или гибкого диска. Зная логическую структуру файловой системы MS-DOS (частично описанную в предыдущей главе), разработчик вируса при помощи этого прерывания может встроить вирусный код в загрузочную запись или в любое другое подходящее с его точки зрения место.
Разумеется, о прерывании INT 13h знают не только разработчики вирусов, но и авторы антивирусных программ. И те и другие борятся за получение “настоящей” точки входа в обработчик этого прерывания, который должен быть расположен в постоянном запоминающем устройстве. Целью вируса является перехват прерывания INT 13h, а целью антивирусной программы - обнаружение такого перехвата.
Тем не менее, даже надежно защитив точку входа в обработчик прерывания INT 13h, нельзя гарантировать полную защиту от вирусной атаки.
Как вы, возможно, знаете, в реальном режиме работы процессора программе разрешается выполнять операции обмена данными с любыми портами периферийных устройств. В том числе и с портами контроллера жесткого диска или накопителя на гибком магнитном диске. В 19 томе “Библиотеки системного программиста” мы привели пример программы, которая работает именно таким образом, читая сектор дискеты без обращения к прерыванию INT 13h.
Для того чтобы у вас было некоторое представление о том, что может сделать вирус при помощи прерывания INT 13h, приведем краткое описание функций этого прерывания:
Номер функции | Описание | ||
00h | Сброс дисковой системы | ||
01h | Определение состояния дисковой системы | ||
02h | Чтение сектора | ||
03h | Запись сектора | ||
04h | Проверка сектора | ||
05h | Форматирование дорожки | ||
06h | Форматирование дорожки НМД | ||
07h | Форматирование НМД | ||
08h | Получить текущие параметры НГМД или НМД | ||
09h | Инициализация таблиц параметров НМД | ||
0Ah | Чтение длинное (только для НМД) | ||
0Bh | Запись длинная (только для НМД) | ||
0Ch | Поиск цилиндра (только для НМД) | ||
0Dh | Альтернативный сброс НМД | ||
0Eh | Чтение буфера (только для НМД) | ||
0Fh | Запись буфера (только для НМД) | ||
10h | Проверка готовности НМД | ||
11h | Рекалибровка НМД | ||
12h | Проверка памяти контроллера НМД | ||
13h | Проверка НМД | ||
14h | Проверка контроллера НМД | ||
15h | Получить тип НМД или НГМД | ||
16h | Проверка замены диска | ||
17h | Установка типа дискеты | ||
18h | Установка среды носителя данных для форматирования | ||
19h | Парковка головок (только для НМД) | ||
1Ah | Форматирование НМД с интерфейсом ESDI |
Как видите, вирус может прочитать, записать и отформатировать дорожку диска. Используя команды 0Ah и 0Bh, разработанные для диагностических целей, вирус может изменить контрльные суммы секторов данных, которые обычно подсчитываются, записываются и проверяются автоматически.
SillyRE.666
Опасный шифрованный вирус.
После загрузки в память своей резидентной копии вирус записывает "мусор" в 11 сектор нулевой дорожки (головка с номером 1), пользуясь для этого операцией длинной записи. Обычно на этом месте диска находится первая копия таблицы размещения файлов FAT
С помощью функций прерывания INT 13h вирус может получить доступ к внутреннему буферу, расположенному непосредственно в дисковом накопителе.
Другой “лакомый кусочек” для вирусов - прерывание INT 76h, которое вырабатывается при завершении операции в контроллере жесткого диска. Вирус может перехватывать это прерывание для реализации стелс-технологии.