Читаем Защити свой компьютер на 100% от вирусов и хакеров полностью

call init_protected_mode

; Сам переход

call set_protected_mode

; Возврат в реальный режим

call set_real_mode

; Печатаем сообщение "Light General"

mov ah, 09h

lea dx, qw

int 21h

; Выход в DOS

mov ax, 4C00h

int 21h

; Макрокоманда для установки адреса для дескриптора

; в глобальной таблице дескрипторов GDT.

setgdtentry MACRO

mov [desc_struc.base_l][bx], ax

mov [desc_struc.base_h][bx], dl

ENDM

init_protected_mode PROC

mov ax, ds

mov dl, ah

shr dl, 4

shl ax, 4

; Устанавливаем адрес сегмента данных

; в глобальной таблице дескрипторов

mov bx, offset gdt_ds

setgdtentry

add ax, offset gdtr

adc dl, 0

; Останавливаем адрес сегмента GDT в глобальной таблице дескрипторов

mov bx, offset gdt_gdt

setgdtentry

; Вычисляем абсолютный адрес для сегмента кода ;

в соответствии со значением регистра CS

mov ax, cs

mov dl, ah

shr dl, 4

shl ax, 4

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

в глобальной таблице дескрипторов

mov bx, offset gdt_cs

setgdtentry

; Вычисляем абсолютный адрес для сегмента стека ;

в соответствии со значением регистра SS

mov ax, ss

mov dl, ah

shr dl, 4

shl ax, 4

; Устанавливаем адрес сегмента стека ;

в глобальной таблице дескрипторов

mov bx, offset gdt_ss

setgdtentry

; Перехватываем рестарт.

pushds

mov ax, 40h

mov ds, ax

mov word ptr ds:[0067h], offset shutdown_return

mov word ptr ds:[0069h], cs

pop ds

; Запрещаем маскируемые прерывания

cli

in al, INT_MASK_PORT

or al, OFFh

out INT_MASK_PORT, al

mov al, 8Fh

out CMOS_PORT, al

jmp $+2 mov al, 5

out CMOS_PORT+1, al

ret

init_protected_mode ENDP

; Подпрограмма, переводящая процессор в защищенный режим

set_protected_mode PROC

; Открываем адресную линию А20 для доступа свыше 1 Мбайт

call enable_a20

; Сохранение значения регистра SS для реального режима

mov real_ss, ss

; Перевод компилятора Turbo Assembler в улучшенный режим.

; IDEAL – это не команда и не оператор, это директива, влияющая

; только на интерпретацию дальнейших строк листинга

ideal

р286

;Загружаем регистр глобальной таблицы дескрипторов GDTR

lgdt[QWORD gdt_gdt] ; db OFh,01h,16h dw offset gdt_gdt ;

Переводим процессор в защищенный режим

mov ax, 0001h

lmswax ; db OFh,01h,FOh

; Переводим компилятор Turbo Assembler назад в режим MASM

masm

.286

jmp far flush

; db 0EAh

; dw offset flush

; dw CS_DESCR

flush:

; Останавливаем в регистр SS селектор сегмента стека

mov ax, SS_DESCR

mov ss, ax

; Устанавливаем в регистр DS селектор сегмента данных

mov ax, DS_DESCR

mov ds, ax

; Записываем в строку qw символ "L" и выходим из подпрограммы

mov byte ptr ds:[offset qw+2],"L"

ret

set_protected_mode ENDP

; Подпрограмма, возвращающая процессор в реальный режим

set_real_mode PROC

; Сохраняем значение регистра SP для реального режима

mov real_sp, sp

; Выполняем CPU Reset (рестарт процессора)

mov al, SHUT_DOWN

out STATUS_PORT, al

; Ждем, пока процессор перезапустится

wait_reset:

hlt

jmp wait_reset

; C этого места программа выполняется после перезапуска процессора

shutdown_return:

; Устанавливаем регистр DS в соответствии с регистром CS

pushcs

pop ds

; Восстанавливаем указатели на стек

; по ранее сохраненным значениям

mov ss, real_ss

mov sp, real_sp

; Закрываем адресную линию А20

call disable_a20

; Разрешаем немаскируемые прерывания

mov ax, 000dh

out CMOS_PORT, al

; Разрешаем маскируемые прерывания

in al, INT_MASK_PORT

and al, 0

out INT_MASK_PORT, al

sti

ret

set_real_mode ENDP

; Процедура, открывающая адресную линию А20. После открытия

; адресной линии программам будет доступна память свыше 1 Мбайт

enable_a20 PROC

mov al, A20_PORT

out STATUS_PORT, al

mov al, A20_ON

out KBD_PORT_A, al

ret

enable_a20 ENDP

disable_a20 PROC

mov al, A20_PORT

out STATUS_PORT, al

mov al, A20_OFF

out KBD_PORT_A, al

ret

disable_a20 ENDP

; Здесь сохраняется адрес стека

real_sp dw ?

real_ss dw ?

; Эта строка выводится на экран после работы программы ;

Символ "?" заменяется на "L" в защищенном режиме

qw db 13,10,"?ight General",13,10,"$"

; Глобальная таблица дескрипторов. Нулевой дескриптор

; обязательно должен быть "пустым"

GDT_BEG=$

gdtr label WORD

gdt_0 desc_struc 0,0,0,0,0;

gdt_gdt desc_struc GDT_SIZE-10,DATA_ACC,0

gdt_ds desc_struc DSEG_SIZE-10,DATA_ACC,0

gdt_cs desc_struc CSEG_SIZE-10,CODE_ACC,0

gdt_ss desc_struc STACK_SIZE-10,DATA_ACC,0

GDT_SIZE=($-GDT_BEG)

END start

FLASH BIOS – почему бы и нет! Самая обычная ситуация – это когда код привязан к файловой системе и/или является резидентным (выполняющимся в оперативной памяти). Но что если вирусный код работает в BIOS?!

Да-да, именно, а почему бы и нет. Отлов и уничтожение такого "зверя" потребует от антивирусной программы чего-то большего, а именно – возможности трассировать прерывание INT 16h.

ПРИМЕЧАНИЕ

Прерывание (от англ. interrupt) – сигнал, сообщающий процессору о совершении какого-либо события. Прерывание подразумевает приостановку выполнения текущей последовательности команд и передачу управления обработчику прерывания.

Почему все так сложно и как с этим связан антивирусный монитор?

Перейти на страницу:

Похожие книги

1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих

Книга предоставляет полное описание приемов и методов работы с программой "1С:Управление небольшой фирмой 8.2". Показано, как автоматизировать управленческий учет всех основных операций, а также автоматизировать процессы организационного характера (маркетинг, построение кадровой политики и др.). Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, формировать разнообразные отчеты, выводить данные на печать. Материал подан в виде тематических уроков, в которых рассмотрены все основные аспекты деятельности современного предприятия. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов. Все приведенные в книге примеры и рекомендации основаны на реальных фактах и имеют практическое подтверждение.

Алексей Анатольевич Гладкий

Экономика / Программное обеспечение / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии