может быть занято другой информацией без возникновения ошибок.
Собственно, описанные два типа вирусов и их специальные
формы полностью исчерпывают все возможности распространения виру-
сов. Путем несложных логических рассуждений легко придти к выво-
ду, что распространяться путем "генерации некоторой более или
менее точной копии внутри другой программы" могут лишь эти два
типа вирусов.
Приведенные ниже пояснения касаются лишь стратегии, с
помощью которой достигается распространение вирусов. Потому сам
вирус может быть как перезаписывающим, так и неперезаписывающим.
9.3 ОЗУ - резидентные вирусы
Как уже пояснялось в разделе 1, ОЗУ-резидентные программы
компьютерных вирусов "паразитируют" на самой программе. Находящи-
еся в оперативной памяти программы не перезаписываются данными или
другими программами; эта область памяти специальным образом упра-
- 145 -
вляется и становится недоступной для других программ. Система
после загрузки ОЗУ-резидентной программой ведет себя так, как
если бы данной области памяти не существовало. В экстремальном
случае при использовании ОЗУ-резидентных программ оперативная
память может оказаться полностью занятой, после чего MS-DOS выда-
ет сообщение: "Programm passt nicht in den Speicher". ("Для прог-
раммы нет места в памяти").
Перед вызовом ОЗУ-резидентных программ оперативная память
выглядит таким образом:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ Старший адрес системы
¦ Занято системой ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Свободная память ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Операционная система ¦ Младший адрес системы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
После загрузки ОЗУ-резидентных программ оперативная память
выглядит таким образом :
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ Старший адрес системы
¦ Занято системой ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Свободная память ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Резидентная часть программы ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Операционная система ¦ Младший адрес системы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Размещенная в оперативной памяти резидентная часть программы
может быть активизирована в любой момент при возникновении опре-
деленных условий. Например, таким условием может быть прерывание
(см. п. 1.1) или обращение из некоторой другой программы.
Для того, чтобы уяснить себе, каким образом может при этом
внедряется вирус, нужно иметь определенное представление о струк-
туре прерываний процессора 8088 и их применении в MS-DOS.
Функции RIOS (Basic Input Output System - базовая система
ввода-вывода) находятся в ПЗУ в самой верхней области памяти ЭВМ.
Нижняя часть памяти занята под адреса прерываний. Эти адреса
управляются определенными стандартными программами, находящимися
в ПЗУ (а частично и в ЗУПВ как часть MS-DOS).
- 146 -
Таким способом достигается всемирно известная совместимость
работающих под управлением MS-DOS ЭВМ. Так как совершенно безра-
злично, какое аппаратное обеспечение используется, функции опера-
ционной системы реализуются путем генерации прерываний. Затем
процессор выбирает из нижней области адрес прерывания (вектор
прерываний) соответствующей процедуры прерывания, которые могут
быть различными в различных системах.
Если теперь вектор некоторого прерывания изменяется (преоб-
разуется), вызов операционной системы (например, вывод на печать)
может изменить свое направление, переключившись на любую другую
программу вывода, резидентную в памяти. Таким же способом можно
переключиться с набора символов, несогласующихся с кодами АSCII,
на стандартные коды АSCII.
Но и с использованием той же техники можно "перехватить " все
обращения к дискете и переключить их на программу-вирус, которая
вначале выполнит задачу своего внедрения в систему, затем предус-
мотренные программой-вирусом манипуляции и лишь после этого выпо-
лнит собственно обращение к дискете, создавая тем самым видимость
безупречной работы.
На схеме при нормальном выполнении функций это выглядит
примерно так (здесь решающие функции по сравнению с другими схе-
мами сильно расширены):
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ Старший байт системы
¦ Занято системой ¦
¦ Стандартная программа обращения ¦
¦ к дискете, завершающаяся командой ¦
¦ RETURN ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Свободная память ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Запущенная пользователем прикладная¦
¦ программа (вызов системной функции ¦
¦ обращение к дискете) ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Операционная система ¦
¦ Адресная ссылка (вектор) на ¦
¦ стандартную программу обращения ¦
¦ к дискете ¦ Младший адрес системы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
- 147 -
После установки ОЗУ-резидентной программы-вируса процесс
выполнения функций изменится следующим образом (здесь также реша-
ющие функции по сравнению с другими схемами сильно расширены):
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ Старший адрес системы
¦ Занято системой ¦
¦ Стандартная программа обращения к ¦
¦ дискете, завершающаяся командой ¦
¦ RETURN ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Свободная память ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Запущенная пользователем прикладная¦
¦ программа (вызов системной функции ¦
¦ обращение к дискете) ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ ОЗУ-резидентная программа-вирус ¦
¦ (сохраняет регистры ЦП, копирует ¦
¦ вирус, передает управление ¦
¦ стандартной программе обращения к ¦
¦ дискете) ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Операционная система ¦
¦ Измененная адресная ссылка (вектор)¦
¦ указывающая теперь на программу- ¦
¦ вирус ¦ Младший адрес системы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Такие вирусы, как правило, сохраняются в оперативной памяти
(если они не запрограммированы иначе) до тех пор, пока не будет
выключен компьютер. Если затем ЭВМ включить вновь, оперативная
память будет свободна от вирусов. Но это будет продолжаться лишь
дот тех пор, пока не будет запущена инфицированная программа. При
запуске такой программы вирус вновь становится резидентным. Поэ-
тому наиболее устойчивые вирусы программируются таким образом,
чтобы загружаться в качестве первого сектора начальной загрузки
системы или в качестве сектора начальной загрузки процессора
команд, что обеспечивает их жизнестойкость.
9.4 Вызов программы-вируса
- 148 -
Рассмотренные выше типы программ-вирусов имеют один серьез-
ный недостаток - длину. И даже если можно написать на ассемблере
достаточно компактную программу-вирус, занимающую менее 400 бай-
тов, то и эти 400 байтов должны будут где-то отведены под прог-
рамму. Итак, перезаписывающие вирусы разрушают весьма значитель-
ную часть программы-носителя, а неперезаписывающие вирусы значи-
тельно удлиняют такую программу. Естественно, при последующем
контроле эти изменения обнаруживаются. Тем более, когда для прог-
раммирования осуществляемых вирусом операций используются языки
высокого уровня, в результате чего объектная программа занимает
достаточно много места.
Но и здесь есть средства, позволяющие обойти и эти
трудности. Программу-вирус можно значительно сократить, если не
связывать с каждым вирусом заново задание на выполнение опреде-
ленных операций, а поместить такое задание в массовую память один
раз, а вирус запишет в программу-носитель вируса лишь вызов прог-
раммы выполнения таких манипуляций ("Manipuliere.EXE").
Вирус можно еще более сократить, поместив готовый вирус
однажды в оперативную память (например, в виде "невидимого файла"
(HIDDEN FILE)), и тогда внедрение вируса состоит лишь из вызова
программы-вируса.
Правда, это имеет тот недостаток, что при ошибке в
программе-вирусе инфицированная программа будет опасно пытаться
вызвать вирус.
Самые короткие вирусы могут получиться, если удастся
программу-вирус постоянно иметь в оперативной памяти в качестве
резидентной. Но и в этом случае код "внедренной инфекции" не
может занимать меньше одного байта.
Процессор 8088 благодаря своей структуре имеет некоторые
особенности в написании программ-вирусов. Например, если в
программу встроено прерывание 3 ( полушаговое прерывание (СС16)),
а вектор такого прерывания указывает на резидентную программу-
вирус, то удается создать вирус, длина которого уже не имеет
особого значения.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ Старший адрес системы
¦ Занято системой ¦
¦ Стандартная программа обращения к ¦
¦ дискете, завершающаяся командой ¦
¦ RETURN ¦
- 149 -
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Свободная память ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Запущенная пользователем прикладная¦
¦ программа ¦
¦ В любой точке встраивается ¦
¦ прерывание 3 ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Резидентная программа-вирус ¦
¦ (сохраняет регистры ЦП, копирует ¦
¦ вирус передает управление ¦
¦ стандартной программе обращения к ¦
¦ дискете) ¦
¦ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¦
¦ Операционная система ¦
¦ Измененная адресная ссылка (вектор)¦
¦ прерывание 3 указывает теперь на ¦
¦ резидентную программу-вирус ¦ Младший адрес системы
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
9.5 Прочие вирусы
Теперь, после того как обсуждены наиболее часто встречающие-
ся при работе с MS-DOS типы вирусов, рассмотрим еще не сколько
более редких их видов.
Однако следует сразу же отметить, что приведенные ниже
распечатки "нестандартных" вирусов ни в коей мере не претендуют
на полноту. Вполне возможно, что в специальных операционных систе-
мах, ориентированных на специальное аппаратное обеспечение,
открываются совершенно новые врзможности для программирования
вирусов, что полностью учесть совершенно невозможно.
Аппаратные вирусы
Эти вирусы внедряются в систему лишь при изменении аппарат-
ного обеспечения. Например, при замене ПЗУ начальной загрузки. И
хотя такие вирусы очень сложно внедряются в систему, избавиться
от них еще сложнее, поскольку при перезапуске ЭВМ с новой опера-
ционной системой они появляются снова.
- 150 -
"Буферизованные" вирусы
Вирусы, которые "гнездятся" в буферизованном ЗУПВ, имеют те
же отличительные признаки, что и аппаратные вирусы, но могут быть
устранены путем удаления буферных батарей. Но нужно учитывать,
что вирусы могут появиться вновь через инфицированные программы.
Вирусы "жизни и смерти" (Live and Die)
Вирусы, которые внедряются в программу за определенное
время. По истечению этого времени они сами удаляются из заражен-