- •Часть 1 . Com - вирусы ....................... 6
- •Глава 1 . Разработка нерезидентной
- •Глава 2 . Разработка резидентной
- •Часть 2 . Exe - вирусы ....................... 82
- •Глава 1 . Разработка нерезидентного
- •1.3 Как вирус может заразить
- •1.4 Работа вируса в
- •1.5 Начало работы ....................... 88
- •Глава 2 . Разработка резидентного
- •Часть 3 . Загрузочные вирусы ................. 143
- •Глава 1 . Разработка загрузочной
- •Часть 1 . Com - вирусы
- •Глава 1 . Разработка нерезидентной
- •1.5 Начало работы
- •1.6 Вирус получает управление
- •1.8 Запоминаем содержимое dta
- •1.9 Ищем подходящий файл
- •1.10 Читаем исходные три байта
- •1.11 Выполняем необходимые расчеты
- •1.12 Проверяем файл на зараженность
- •1.13 Заражаем com - программу
- •1.14 Восстанавливаем dta
- •1.16 Область данных вирусной программы
- •1.17 Завершаем запускающую программу
- •1.18 Текст нерезидентного com - вируса
- •1.19 Комментарии
- •1.20 Испытание вируса
- •Глава 2 . Разработка резидентной
- •2.3 Алгоритм работы резидентного
- •2.4 Заголовок вируса
- •2.5 Вирус начинает работу
- •2.6 Сохраняем регистры процессора
- •2.8 Запрашиваем блок памяти
- •2.9 Делаем вирус " незаметным "
- •2.10 Получаем вектора прерываний
- •2.11 Копируем вирусный код в память
- •2.12 Устанавливаем вектора прерываний
- •2.13 Пишем резидентную часть
- •2.14 Заражаем com - файл
- •2.15 Восстанавливаем регистры
- •2.16 Пишем обработчики прерываний
- •2.17 Обработчик Int 13h
- •2.18 Обработчик Int 21h
- •2.19 Обработчик Int 24h
- •2.20 Обработчик Int 2Fh
- •2.21 Обработчик Int 28h
- •2.22 Область данных вируса
- •2.23 Процедура идентификации command.Com
- •2.24 Завершаем программу
- •2.25 Текст резидентного com - вируса
- •2.26 Комментарии
- •2.27 Испытание вируса
- •Часть 2 . Exe - вирусы
- •Глава 1 . Разработка нерезидентного
- •1.1 Формат exe - файла на диске
- •1.5 Начало работы
- •1.6 Вирус получает управление
- •1.7 Ищем подходящий файл
- •1.8 Читаем заголовок файла
- •1.10 Заражаем exe - программу
- •1.11 Восстанавливаем dta
- •1.12 Восстанавливаем точку входа
- •1.13 Область данных вируса
- •1.14 Используемые процедуры
- •1.15 Работа завершена
- •Глава 2 . Разработка резидентного
- •2.1 Алгоритм работы резидентного
- •2.3 Как реализовать защиту от
- •2.4 Реализуем предложенный алгоритм
- •2.5 Пишем промежуточный обработчик
- •2.6 Защита от обнаружения вируса в файле
- •2.7 Несколько слов о вредных
- •Часть 3 . Загрузочные вирусы
- •Глава 1 . Разработка загрузочной
- •1.2 Понятие о загрузочных вирусах
- •1.3 Алгоритм работы загрузочного
- •1.5 Начало работы
- •1.6 Вирус получает управление
- •1.12 Используемые процедуры
- •1.13 Область данных вируса
- •1.16 Комментарии
- •1.17 Испытание вируса
2.3 Как реализовать защиту от
эвристического анализа
Очевидно, вирус не будет найден в памяти,если раз-
местить обработчик INT 21h в той ее части, в кото-
рую загружаются пользовательские программы .С дру-
гой стороны, наш вирус помещает свой код в самые
старшие адреса основной памяти . Единственным вы-
ходом из положения было бы написание обработчика ,
состоящего из двух частей. При этом "первая" часть
должна загружаться в область памяти,выделенную для
загрузки прикладных программ,а "вторую" - вместе с
остальной частью вируса - следует записать в стар-
шие адреса основной памяти .В случае возникновения
прерывания INT 21h управление будет передаваться
первой части, которая затем передаст его второй.
К сожалению, данный метод себя не оправдывает.DOC-
TOR WEB в процессе эвристического анализа просто
трассирует обработчик INT 21h до входа в его исхо-
дный ( системный ) код, одновременно контролируя
адрес обработчика, и при получении любых подозри-
тельных результатов выдает сообщение о наличии не-
известного вируса .Поэтому необходимо сделать так,
чтобы при трассировании "первой" части под управ-
лением отладчика вызывался системный обработчик, а
при "нормальном" трассировании - вирусный ( экспе-
рименты показывают,что DOCTOR WEB,вероятнее всего,
содержит встроенный отладчик) .Для реализации ука-
занного метода можно использовать особенность мик-
ропроцессора, состоящую в наличии очереди команд .
Однако этот путь по существу является тупиковым,
так как вирус, реализующий такой алгоритм,не будет
работать на процессорах PENTIUM из-за наличия в
последних так называемой системы прогнозирования
переходов. Мы же поступим по другому.Как вы знаете
все отладчики интенсивно используют прерывание 01h
( One Step ),обработчик которого останавливает ра-
боту микропроцессора после выполнения каждой ко-
манды. Поэтому естественно предположить, что для
проведения эвристического анализа DOCTOR WEB уста-
навливает собственный обработчик Int 01h,а значит,
заменяет адрес системного обработчика в таблице
векторов прерываний.На факт замены этого адреса мы
и будем ориентироваться. Экспериментальным путем
было установлено, что системный обработчик Int 01h
находится в памяти по такому адресу : 0070:XXXX.
Следовательно, достаточно проверить сегментный ад-
рес обработчика Int 01h, чтобы сказать, перехваче-
но-ли это прерывание какой-нибудь прикладной про-
граммой.
Следующая проблема,возникающая при построении про-
граммы обработки прерывания из двух частей, состо-
ит вот в чем: непонятно, куда именно следует поме-
стить " первую " часть,чтобы она не затиралась при
загрузке программ и их работе, и не была бы видна
с помощью, например, VC.COM или RELEASE.
Многочисленными экспериментами было установлено ,
что для размещения участка обработчика прерывания,
ответственного за " обман " эвристического анали-
затора, можно использовать байты с 38h по 5Ch,при-
надлежащие PSP первой загруженной в память програ-
ммы .Эти байты зарезервированы разработчиками опе-
рационной системы, вероятно,для будущих ее версий,
и их значения остаются постоянными в течение всего
сеанса работы компьютера .Кроме того, зарезервиро-
ванного пространства в PSP вполне хватит для раз-
мещения программы обработки прерывания .
Итак, можно предложить следующий алгоритм :
1.) Отыскивается PSP первой загруженной в память
программы .
2.) В байты 38h - 5Ch записывается код " промежу-
точного " обработчика прерывания INT 21h .Этот
код должен вызывать системный обработчик при
работе под управлением отладчика и вирусный в
противном случае .
* На самом деле можно использовать и другие об-
ласти PSP, расположенные после байта со смеще-
нием 5Ch ( примерно 32 байта - без всяких пос-
ледствий. ).
3.) В таблице векторов прерываний вектор INT 21h
заменяется на точку входа в промежуточный об-
работчик .
Вот, собственно, и все .