Вирусы

Автор: Пользователь скрыл имя, 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 Полный текст резидентного

Работа содержит 1 файл

virur.doc

— 1.23 Мб (Скачать)

    раммы можно " вылечить " зараженный диск, если ви-

    рус вам " надоест  ".

 

 

                        ЗАКЛЮЧЕНИЕ

 

    Эта книга  задумывалась  и писалась лишь для того,

    чтобы приоткрыть завесу  таинственности и секретно-

    сти, которой  окутана  почти не овещаемая в литера-

    туре тема  компьютерных вирусов . Автор  ни в коем

    случае не ставил своей  целью обучить пользователей

    ЭВМ разработке всевозможных "вредных"  программных

    средств, а просто  хотел поделиться своими знаниями

    и результатами экспериментов  с широкой  обществен-

    ностью .Наверняка найдется  немало людей -  специа-

    листов и любителей,которых  интересует затронутая в

    данной работе тема .И  если кто - то из них пожела-

    ет ознакомиться с  предлагаемой книгой, я буду счи-

    тать, что потратил время  не зря .Разработка дейст-

    вующих компьютерных  вирусов - захватывающее и сло-

    жное дело, требующее  немалого опыта и определенной

    теоретической базы .Надеюсь,  эта книга сможет ока-

    зать вам некоторую  помощь .

    К сожалению,изложение  не рассчитано на начинающих,

    поэтому автору не  удалось приблизить стиль книги  к

    научно - популярному . Хотя  это  трудно отнести  к

    недостаткам .

    До встречи !

 

 

                      ПРИЛОЖЕНИЕ 1

 

       Краткий справочник  по функциям MS DOS и BIOS

 

     *

      Справочные  материалы  по  функциям MS DOS и BIOS

      с  незначительными   изменениями  заимствованы из

      [1], за  что автор  приносит К.Г.Финогенову  свои

      извинения.

 

    --------------------------------------------------

 

    Функция 09h - Вывод строки на экран.Последним сим-

    волом строки должен  быть " $ " .Управляющие коды :

    07h - звонок, 08h - шаг назад, 0Ah - перевод стро-

    ки, 0Dh - возврат каретки  .

    Вызов :   AH = 09h

              DS : DX = адрес строки .

 

    Функция 0Eh - Выбор диска .Предназначена для смены

    текущего диска .Также  возвращает количество  логи-

    ческих дисков .

    Вызов :   AH = 0Eh

              AL = код дисковода ( 0 = A, 1 = B, 80h =

              = C и т.п. )

    Возврат : AL = количество  дисководов в системе .

 

    Функция 19h - Получение  текущего диска .

    Вызов :   AH = 19h

    Возврат : AL = код текущего  диска ( 0 = A, 1 = B,

              80h = C и т.п. ) .

 

    Функция 1Ah - Установка   адреса  области  передачи

    данных ( DTA ) .Устанавливает заданный адрес DTA .

    Вызов :   AH = 1Ah

              DS : DX = адрес DTA .

 

    Функция 25h - Установка   вектора прерывания .Запи-

    сывает адрес программы  обработки заданного  преры-

    вания в таблицу векторов .

    Вызов :   AH = 25h

              AL = номер вектора прерывания

              DS : DX = адрес программы обработки  пре-

              рывания .

 

    Функция 19h - Получение  даты .

    Вызов :   AH = 2Ah

    Возврат : CX = год

              DH = месяц

              DL = день

              AL = день недели ( 0 = воскресенье,  6 -

              суббота ) .

 

    Функция 2Fh - Получение   адреса  области  передачи

    данных ( DTA ) .Возвращает  текущий адрес DTA .

    Вызов :   AH = 2Fh

    Возврат : ES : DX = адрес  DTA .

 

    Функция 35h - Получение вектора прерывания .Считы-

    вает адрес программы  обработки заданного  прерыва-

    ния из таблицы векторов .

    Вызов :   AH = 35h

              AL = номер вектора прерывания

    Возврат : ES : BX = адрес  программы обработки пре-

              рывания .

 

    Функция 3Bh - Смена каталога.Предназначена  для вы-

    бора текущего каталога .

    Вызов :   AH = 3Bh

              DS : DX = полное имя каталога (например,

              C:\TASM\VIRUS\

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 3Dh - Открытие  файла .Открывает файл с за-

    данным именем и возвращает  дескриптор,  выделенный

    этому файлу системой .Указатель устанавливается на

    начало файла .

    Вызов :   AH = 3Dh

              AL = режим доступа : 0 - для чтения

                                   1 - для записи

                                   2 - для чтения

                                       и записи

              DS : DX = полное  имя  файла ( например,

              C:\TASM\VIRUS\EXE_VIR.COM )

    Возврат : AX = дескриптор

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 3Eh - Закрытие  файла .Закрывает файл с за-

    данным дескриптором.Дескриптор  освобождается, кро-

    ме того, модифицируются дата и время создания фай-

    ла, если файл был изменен  .

    Вызов :   AH = 3Eh

              DX = дескриптор

    При ошибке :

              CF = 1

              AX = код ошибки .

    Функция 3Fh - Чтение из  файла или устройства .Счи-

    тывает данные из файла или устройства и  модифици-

    рует указатель .При  чтении читается строка указан-

    ной длины . При чтении  из символьного  устройства

    чтение прекращается,  если встретился символ  воз-

    врата каретки ( например,при  вводе с клавиатуры ).

    Вызов :   AH = 3Fh

              BX = дескриптор

              CX = количество передаваемых символов

              DS : DX = адрес буфера,  в который  поме-

              щаются данные

    Возврат : AX = число переданных  байт

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 40h - Запись в  файл или в устройство .Счи-

    тывает данные из буфера  и записывает их в файл,при

    этом модифицируется  указатель .При записи  записы-

    вается строка указанной  длины .

    Вызов :   AH = 40h

              BX = дескриптор

              CX = количество передаваемых символов

              DS : DX = адрес буфера,  в который  поме-

              щаются данные

    Возврат : AX = число переданных  байт

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 42h - Установка  указателя в файле .Предна-

    значена для установки   указателя на требуемый байт

    в файле .

    Вызов :   AH = 42h

              BX = дескриптор

              AL = режим установки указателя:

                   0 - смещение от начала файла

                   1 - смещение от текущего  положения

                   указателя

                   1 - смещение от конца файла

              CX = старшая часть смещения

              DX = младшая часть смещения

    Возврат : CX = старшая  часть возвращенного  указа-

              теля

              DX = младшая часть возвращенного   указа-

              теля .

 

    Функция 48h - Выделение   блока  памяти  указанного

    размера .Выделяет блок  памяти, после чего  возвра-

    щает его сегментный  адрес .

    Вызов :   AH = 48h

              BX = Размер блока памяти в параграфах

    Возврат : AX = сегментный  адрес выделенного систе-

    мой блока

    При ошибке :

              CF = 1

              AX = код ошибки .

              BX = размер   наибольшего  доступного  в

              данный момент блока .

 

    Функция 49h - Освобождение  блока  памяти .

    Вызов :   AH = 49h

              ES = сегментный адрес блока,который  сле-

              дует освободить

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 4Ah - Изменение  размера блока  памяти, ко-

    торый был выделен  программе .

    Вызов :   AH = 4Ah

              BX = новый размер блока в параграфах .

              ES = сегментный адрес блока,размер кото-

              рого следует изменить

    При ошибке :

              CF = 1

              AX = код ошибки .

              BX = размер   наибольшего  доступного  в

              данный момент блока .

 

    Функция 4Ch - Завершение  процесса с кодом  возвра-

    та .Завершает текущую  задачу и передает код завер-

    шения родительскому  процессу .Освобождает выделен-

    ную программе память, сбрасывает на диск  буферы,

    закрывает дескрипторы,  восстанавливает из PSP век-

    тора прерываний INT 22h, INT 23h и INT 24h . Далее

    управление передается  родительскому процессу .

    Вызов :   AH = 4Ch

              AL = код возврата .

 

    AL = 00h обычно соответствует  нормальному заверше-

    нию программы .

 

    Функция 4Eh - Поиск первого файла .Производит  по-

    иск в заданном каталоге  первого файла,  соответст-

    вующего заданной маске  и имеющего указанные  атри-

    буты .

    Вызов :   AH = 4Eh

              CX = атрибуты  файла ( могут   комбиниро-

              ваться ) :

                   1   - только читаемый ( read only )

                   2   - скрытый ( hidden )

                   4   - системный ( system )

                   8   - метка тома

                   20h - архивный ( archive )

              DS : DX = адрес маски для поиска

    Возврат : имя  найденного  файла и его  расширение

    записывается в DTA в  байты 1Eh - 2Ah .За последним

    символом расширения  всегда следует точка : " . "

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Функция 4Fh - Поиск следующего файла .Почти всегда

    используется в паре  с предыдущей функцией и   вызы-

    вается после того, как  был найден первый файл .

    Вызов :   AH = 4Fh

    Возврат : имя  найденного  файла и его  расширение

    записывается в DTA в байты 1Eh - 2Ah .За последним

    символом расширения  всегда следует точка : " . "

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    Мультиплексное прерывание INT 2Fh.Используется для

    организации взаимодействия  резидентных программ  с

    системой и друг с  другом.Для программиста зарезер-

    вированы функции : C0h - FFh .

    Вызов :   AH = 2Fh

              AL = подфункция

    Возврат : AL = 0 - программа  не  установлена  и ее

              можно установить

              AL = 1 - программа не  установлена и ее

              нельзя установить

              AL = 0FFh - программа уже установлена  .

    При ошибке :

              CF = 1

              AX = код ошибки .

 

    --------------------------------------------------

 

    Прерывание INT 13h,  функция 02h - чтение сектора.

    Считывает один или  несколько определенных  пользо-

    вателем  секторов  физического диска в  выделенный

    буфер.Для начального  сектора указываются такие ко-

    ординаты : дорожка,сектор, головка .Секторы на до-

    рожке  нумеруются  от единицы,  дорожки и  головки

    нумеруются от нуля .

    Вызов :   AH = 02h

              AL = количество читаемых секторов

              CH = дорожка

              CL = начальный сектор

              DH = головка

              DL = дисковод ( 00h - 07Fh - для дискет-

                   ного   дисковода,  80h - 0FFh - для

                   " винчестера " .

              ES : BX = адрес буфера, в который   будет

                        читаться информация из

                        секторов

    Возврат : CF = 0

              AH = 0

              AL = количество прочитанных секторов

    При ошибке :

              CF = 1

              AH = байт состояния .

 

     *

      Биты регистра CX 5...0 определяют номер сектора,

      а биты 15...6 - номер дорожки !!!

      Это выглядит так  :

 

       ____________________________________________

      | Номер бита |15 |14 |13 |12 |11 |10 | 9 | 8 |

      |------------|---|---|---|---|---|---|---|---|

      | Содержимое |   |   |   |   |   |   |   |   |

      |    бита    |c  |c  |c  |c  |c  |c  |c  |c  |

      |____________|___|___|___|___|___|___|___|___|

 

       ____________________________________________

      | Номер бита | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |

      |------------|---|---|---|---|---|---|---|---|

      | Содержимое |   |   |   |   |   |   |   |   |

      |    бита    |C  |c  |S  |s  |s  |s  |s  |s  |

      |____________|___|___|___|___|___|___|___|___|

 

      Буква " C " или  " c " означает, что  бит   при-

      надлежит номеру дорожки;

      Буква " S " или  " s " означает, что  бит   при-

      надлежит номеру  сектора.

 

      Таким образом,  биты "7" и "6" являются старши-

      ми битами номера  дорожки, а биты "5" и "4" яв-

      ляются старшими  битами номера сектора.

 

    Прерывание INT 13h,  функция 03h - запись сектора.

    Записывает один или  несколько определенных пользо-

    вателем секторов на  физический диск .Для начально-

    го сектора указываются  такие координаты : дорожка,

    сектор, головка .Секторы  на дорожке нумеруются  от

    единицы, дорожки и  головки нумеруются от нуля .

    Вызов :   AH = 03h

              AL = количество записываемых секторов

              CH = дорожка

              CL = начальный сектор

              DH = головка

              DL = дисковод ( 00h - 07Fh - для дискет-

                   ного   дисковода,  80h - 0FFh - для

                   " винчестера " .

              ES : BX = адрес буфера,информация из  ко-

                        торого будет записываться

                        в сектора

Информация о работе Вирусы