Доклад: Маскировка вирусов
- выходит в реальный режим
- разрешает прерывания, закрывает А20 -т
- выводит на экран строку qw ("Light General")
- выход в DOS
.286
.model tiny
.code
org 100h
Определения для защищенного режима работы программы
;Структура дескриптора
desc_struc STRUC
limit dw 0
baseJ dw 0
base_h db 0
access db 0
rsrv dw 0
desc_struc ENDS
ACC_PRESENT equ WOOOOOOb
ACC_CSEG equ OOO-MOOOb
ACC_DSEG equ 000-IOOOOb
ACC_EXPDOWN equ 000001 OOb
ACC_CONFORM equ 000001 OOb
ACC_DATAWR equ 0000001 Ob
DATA_ACC=ACC_PRESENT or ACC_DSEG or ACC_DATAWR
; 1001001 Ob
CODE_ACC=ACC_PRESENT or ACC.CSEG or ACC_CONFORM
; 10011100b
STACK_ACC=ACC_PRESENT or ACC_DSEG or ACC_DATAWR or
ACC.EXPDOWN; 1001011 Ob
;Размеры сегментов (реальные размеры на единицу больше)
CSEG SIZE=65535
DSEG_SIZE=65535
STACK_SIZE=65535
[Смещения используемых дескрипторов
CS_DESCR=(gdt_cs-gdt_0)
DS_DESCR=(gdt_ds-gdt_0)
SS_DESCR=(gdt_ss-gdt_0)
;Константы значений портов ?
CMOS_PORT equ 70h
STATUS_PORT equ 64h
SHUTDOWN equ OFEh
A20_PORT equ OD1h
A20_ON equ ODFh
A20_OFF equ ODDh
INT_MASK_PORT equ 21 h
KBD_PORT_A equ 60h
start:
.Инициализируем необходимые данные для перехода
;в защищенный режим
call init_protected_mode
[Переходим в защищенный режим
call set_protected_mode
;Теперь компьютер работает в защищенном режиме!
;Так как таблица прерываний реального режима не может быть
использована в защищенном, прерывания запрещены!
;Именно тут можно вставить инструкции, нужные вирусу
.Возвращаемся в реальный режим
call set_real_mode
[Печатаем сообщение "Light General"
mov ah,09h
lea dx.qw
int 21 h
;Выходим в DOS
mov ax,4COOh
int 21 h
[Макрокоманда для установки адреса для дескриптора
;в глобальной таблице дескрипторов GDT.
;На входе регистры DLAX должны содержать
.абсолютный адрес сегмента
setgdtentry MACRO
mov [desc_struc.base_l][bx],ax
mov [desc_struc.base_h][bx],dl
ENDM
•<
; Процедура инициализации необходимых данных
.для перехода в защищенный режим
init_protected_mode PROC
вычисляем абсолютный адрес для сегмента данных
;в соответствии со значением регистра DS
mov ax.ds