Энциклопедия компьютерных вирусов

         

Strange


Резидентный загрузочный вирус. Занимает четыре сектора (три сектора - тело вируса, один сектор - старый загрузочный сектор или MBR). На жестком диске записывает старый MBR и свое продолжение начиная с 17 сектора первого трека, на гибких дисках использует для этого последние четыре сектора диска. При загрузке системы вирус размещается в область верхних адресов оперативной памяти, уменьшая значение по адресу 0000:0413 на 3 и перехватывает INT 8. При появлении обработчика прерывания INT 2Ah (вектор по адресу 0000:00A8h не равен 0000:0000) восстанавливает INT 8 и перехватывает INT 21h. При загрузке COMMAND.COM увеличивает длину области драйверов и копирует свое тело в эту область. При этом восстанавливается старое значение INT 21h и перехватываются INT 9 и INT 13h. Область памяти, занимаемая ранее вирусом, освобождается: значение по адресу 0000:0413 увеличивается на 3, величина последнего MZ-блока увеличивается на 3K. Если копирование вируса в область драйверов невозможна, вирус выводит фразу:

Hmm... Strange drivers you have, very strange... ;-)

При обработке INT 13h вирус проверяет наличие трассировки. Для этого он запрещает аппаратные прерывания (команда CLI), заталкивает в стек регистр AX, выталкивает его и сравнивает содержимое стека со значением регистра. Если эти значения не совпадают, вирус возвращает код ошибки "disk write-protect" независимо от функции. По-видимому, подразумевалась передача управления дальше, чтобы произошла запись случайного сектора, но в вирусе стоит RET FAR. Вирус перехватывает INT 9 (клавиатура) и дублирует одну случайно выбранную клавишу. Помимо этого если при записи секторов через прерывание INT 13h первые два байта - 'MZ', то вирус заменяет их на 'ZM'. Кроме прерываний INT 9 и INT 13h, которые вирус использует по "прямому" вирусному назначению (эффекты на клавиатуре и заражение дисков), вирус перехватывает еще одно из аппаратных прерываний - либо INT 0Dh, либо INT 76h. Эти прерывания соответствуют аппаратному запросу компьютера - hardware interrupt request (IRQ).
INT 0Dh соответствует IRQ5 на PC/XT fixed disk, INT 76h - IRQ14 на PC/AT hard disk controller. При обращении к винчестеру компьютерное железо генерирует соответствующий IRQ (IRQ5 на PC/XT и IRQ14 на компьютерах класса IBM/AT), основной процессор реагирует на полученный запрос вызовом прерывания. Для того чтобы правильно перехватить прерывание винчестера, вирус должен определить класс компьютера (т.е. тип процессора), на котором он работает. Вирус делает это с помощью команды SHR AX,CL (AX=0002h, CL=41h). Если значение регистра AX после этого равно 1, то компьютер класса i286 и выше (вирус перехватывает INT 76h), если 0 - i86 (иначе перехватывается INT 0Dh). С помощью прерываний INT 0Dh и INT 76h вирус организует "стелс"-механизм на винчестере. Для этого он постоянно хранит в памяти оригинальный (незараженный) MBR и при чтении зараженного MBR подставляет незараженный. На PC/XT при вызове INT 0Dh вирус считывает адрес дискового буфера из порта 6, после чего проверяет зараженность этого сектора. Если сектор заражен, вирус копирует в дисковый буфер код оригинального MBR. На PC/AT при вызове INT 76h вирус считывает номера сектора, трека и головки через порты 1F3h, 1F4h, 1F5h и 1F6h. Если их значения соответствуют MBR, вирус записывает в вышеуказанные порты адрес сектора, содержащего оригинальный MBR. Если попытаться протрассировать прерывание INT 13h (с учетом того, что вирус проверяет наличие трассировки) при чтении MBR, то трассировка доходит до ROM BIOS, изменений в значениях регистров нет, но тем не менее в буфер считывается оригинальный MBR, а не вирус! Можно установить INT 13h напрямую в BIOS, но вирус все равно останется невидимым! Удаление вируса с дисков при условии незараженой памяти - занятие несложное. Старый MBR хранится вирусом по адресу 0/0/11 (сторона/трек/сектор), а флоппи-диски легко восстанавливаются простой перезаписью стандартного загрузочного сектора. Однако перед тем как проделывать эти процедуры, следует удалить вирус из памяти либо перезагрузкой компьютера с незараженной дискеты, либо обеззараживанием оперативной памяти компьютера.В памяти вирус слудует искать при помощи трассировки прерывания INT 13h, поскольку кроме области драйверов и верхней памяти вирус может находиться в конце одного из MZ-блоков. У нас, например, он садился в 'хвост' NC.EXE (Norton Commander). Для поиска вируса на жестком диске необходимо лечение вируса в памяти, причем лечения прерывания INT 13h недостаточно из-за "стелс"-механизма. Поэтому лечить кроме INT 13h нужно еще INT 0Dh и INT 76h.


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