cmp ah, 40h ; писать в файл
jz error21h
cmp ah, 41h ; удалить файл
jz error21h
cmp ah, 5bh ; создать новый файл
jz error21h
old21h:
; Вызов "старого" обработчика
jmp dword ptr cs:int21o
error21h:
; Установка ошибки
push bp
mov bp, sp
mov ax, [bp + 6]
or ax, 01h
mov [bp + 6], ax
mov ax, 0500h ; Access denided
pop bp
iret
realistart:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Код ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Получение вектора int13h
mov ax, 3513h
int 21h
; Проверка на первую загрузку
mov ax, es:[bx - 2]
cmp ax, here
je keyitest
call login
; Сохранение вектора int13h
mov ax, 3513h
int 21h
mov int13o, bx
mov int13s, es
; Установка нового вектора
mov ax, 2513h
mov dx, offset int13h
cli
int 21h
sti
; Получение вектора int21h
mov ax, 3521h
int 21h
mov int21o, bx
mov int21s, es
; Установка нового вектора
mov ax, 2521h
mov dx, offset int21h
sti
int 21h
sti
; Остаемся резидентными
mov ax, 3100h
mov dx, offset realistart
shr dx, 4
add dx, 8
int 21h
; Проверка ключей командной строки
keyitest:
mov si, 82h
mov di, offset delkey
mov cx, 2
repz cmpsb
jnz exit
; Выгрузка программы
mov ax, 3513h
int 21h
mov dx, es:[bx - 10]
push dx
mov dx, es:[bx - 8]
push dx
mov dx, es:[bx - 6]
push dx
mov dx, es:[bx - 4]
push dx
mov ax, 2521h
pop ds
pop dx
int 21h
mov ax, 2513h
pop ds
pop dx
int 21h
mov ah, 49h
int 21h
mov ah, 09h
push cs
pop ds
mov dx, offset delmsg
int 21h
mov ah, 04ch
int 21h
; Выход без загрузки exit:
mov ah, 09h
lea dx, alrmsg
int 21h
mov ah, 04ch
int 21h
login proc
; Проверка инженерного цилиндра
; Чтение старой DPT
mov ax, 351eh
int 21h
mov DPTofs, bx
mov DPTseg, es
; Установка новой DPT
mov ax, 251eh
mov dx, offset DPT
push cs
pop ds
cli
int 21h
sti
; Чтение информации из инженерного цилиндра
mov ax,0201h
mov ch,50h ; номер дорожки
mov cl,2 ; номер сектора
mov dl,0 ; номер устройства
mov dh,0 ; номер головки
push cs
pop es
mov bx, offset cs:buf
int 13h
; Восстановление DPT
mov dx, cs:DPTofs
mov ax, cs:DPTseg
mov ds, ax
mov ax, 251eh
cli
int 21h
sti
; Сравнение секторов
cld
push cs
pop ds
mov si, offset buf
push cs
pop es
mov di, offset PasRead
mov cx, 15
repe cmpsb
je Riloc
push cs
pop ds
mov si, offset buf
push cs
pop es
mov di, offset PasRW
mov cx, 15
repe cmpsb
je RWiloc
jmp notilogged
RWiloc:
mov RW, 1
mov ah, 09h
mov dx, offset RWmsg
int 21h
jmp logged
Riloc:
mov R, 1
mov ah, 09h
mov dx, offset Rmsg
int 21h
jmp logged
notilogged:
db 0eah
dw 0
dw 0ffffh
logged:
push cs
push cs
pop ds
pop es
ret
login endp
end start
4.Результати роботи програми:
Ви получили права на чтение/запись |
Висновок: розробили i налагодили резидентну програму, що обмежує доступ до диску залежно від прочитаної мітки з інженерного циліндру.В ході роботи були придбані навички із захисту вінчестера з використанням мітки на інженерних циліндрах.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.