Читаем Защити свой компьютер на 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) – сигнал, сообщающий процессору о совершении какого-либо события. Прерывание подразумевает приостановку выполнения текущей последовательности команд и передачу управления обработчику прерывания.

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

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

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

Основы информатики: Учебник для вузов
Основы информатики: Учебник для вузов

Учебник состоит из двух разделов: теоретического и практического. В теоретической части учебника изложены основы современной информатики как комплексной научно-технической дисциплины, включающей изучение структуры и общих свойств информации и информационных процессов, общих принципов построения вычислительных устройств, рассмотрены вопросы организации и функционирования информационно-вычислительных сетей, компьютерной безопасности, представлены ключевые понятия алгоритмизации и программирования, баз данных и СУБД. Для контроля полученных теоретических знаний предлагаются вопросы для самопроверки и тесты. Практическая часть освещает алгоритмы основных действий при работе с текстовым процессором Microsoft Word, табличным редактором Microsoft Excel, программой для создания презентаций Microsoft Power Point, программами-архиваторами и антивирусными программами. В качестве закрепления пройденного практического курса в конце каждого раздела предлагается выполнить самостоятельную работу.

Максим Анатольевич Беляев , Вадим Васильевич Лысенко , Лариса Александровна Малинина

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT
Исповедь кардера-2
Исповедь кардера-2

Русь всегда славилась своими «левшами», не изменилась ситуация и сейчас. Не зря ведь большинство специалистов американской Силиконовой долины имеют русские корни.В продолжении фантастического романа о приключениях кардера Изи Питерского и его команды читатель вновь сможет оценить изворотливость и выдумку новых русских хакеров. Более того, теперь они работают на страну, для ее блага и процветания, создавая свой аналог известной долины разработчиков в США — Русскую Таежную опушку.Подпольная битва между кибер-войсками НАТО и русскими хакерами, противостояние спецслужб великих держав — со всем этим и многим другим читатель сможет познакомиться в книге Алексея Малова «Исповедь кардера — 2».

Алексей Малов

Детективы / Зарубежная компьютерная, околокомпьютерная литература / Криминальные детективы / Прочая компьютерная литература / Книги по IT