Защита данных от несанкционированного доступаРефераты >> Программирование и компьютеры >> Защита данных от несанкционированного доступа
sub dl, 60h
int 21h
inc bx
cmp bx, len_enter
jb pr_ent
push cx
mov cx, len_pas ;Ввести пароль
lea di, buff
rd_pass:
mov al, 7
mov ah, 0Ch
int 21h
stosb
loop rd_pass
pop cx
mov bx, 0
cmp_p:
mov al, password[bx] ;Сравнить пароль с введенным
sub al, 60h
cmp al, buff[bx]
jne repeat
inc bx
cmp bx, len_pas
jb cmp_p
equal:
pop ds ;Пароль верный
pop es ;Перейти к основной
db 0CBh ;программе
repeat:
loop pr_1
dos:
jmp cs_1
ms_1 db '*', 10, 13, '$'
cs_1:
mov ah, 9 ;Пароль не верный
lea dx, ms_1
int 21h ;Вывести сообщение
mov ah, 4Ch
int 21h ;Выйти в DOS
copyright db 'Copyright(C) Юзефович Артем ( МГВРК,'
db ' Минск ), 1996'
db 0Dh, 0Ah, 'Запрос'
db ' пароля.', 0Dh, 0Ah
db 0Dh, 0Ah, 0Dh, 0Ah, '$'
code ends
end start
{****************************************************************************}
{****************************************************************************}
{** **}
{** КП "ЗАЩИТА ДАННЫХ ОТ НСД" **}
{** Выполнил учащийся гр.46491 ЮЗЕФОВИЧ АРТЕМ **}
{** 1996 **}
{** **}
{** Ключевая дискета **}
{****************************************************************************}
{****************************************************************************}
code segment
assume cs: code, ds:code, es: code, ss: code
org 100h ;Счетчик команд-100h
start: jmp print
recsize equ 512 ;Размер сектора
buffer db recsize dup(?) ;Буферы ввода-вывода
bufrez db recsize dup(?)
buffer1 db recsize dup(?)
protect label byte
db 'T'+60h,'h'+60h,'i'+60h,'s'+60h
db 80h, 80h
db 'i'+60h,'s'+60h
db 80h, 80h
db 'k'+60h,'e'+60h,'y'+60h
db 80h, 80h
db 'd'+60h,'i'+60h,'s'+60h,'k'+60h
len_enter2 equ $-protect ;Длина сообщения
dsk_key label byte
db 'Э'+10h,'т'+10h,'о'+10h
db 30h, 30h
db 'н'+10h,'е'+10h
db 30h, 30h
db 'к'+10h,'л'+10h,'ю'+10h,'ч'+10h
db 'е'+10h,'в'+10h,'а'+10h,'я'+10h
db 30h, 30h
db 'д'+10h,'и'+10h,'с'+10h,'к'+10h
db 'е'+10h,'т'+10h,'а'+10h
db 6Ah-50h, 6Dh-50h
len_enter1 equ $-dsk_key ;Длина сообщения
enter_pas label byte
db 'В'+10h, 30h,'с'+10h, 30h,'т'+10h, 30h,'а'+10h, 30h
db 'в'+10h, 30h, 'ь'+10h, 30h, 'т'+10h, 30h, 'е'+10h, 30h
db 30h, 30h, 30h
db 'к'+10h, 30h,'л'+10h, 30h,'ю'+10h, 30h,'ч'+10h, 30h
db 'е'+10h, 30h,'в'+10h, 30h,'у'+10h, 30h,'ю'+10h, 30h
db 30h, 30h, 30h
db 'д'+10h, 30h,'и'+10h, 30h,'с'+10h, 30h,'к'+10h, 30h
db 'е'+10h, 30h,'т'+10h, 30h,'у'+10h, 30h
db 30h, 30h, 30h
db 'и'+10h
db 30h, 30h, 30h
db 'н'+10h, 30h,'а'+10h, 30h,'ж'+10h, 30h,'м'+10h, 30h
db 'и'+10h, 30h,'т'+10h, 30h,'е'+10h, 30h
db 30h, 30h
db 'В'+10h, 'В'+10h, 'О'+10h, 'Д'+10h
db 6Ah-50h, 6Dh-50h
len_enter equ $-enter_pas ;Длина сообщения
print:
push es ;Сохранение регистров
push ds
push cs
push cs
pop ds ;cs=>ds
pop es ;cs=>es
mov ah, 2
mov bx, 0
pr_ent:
mov dl, enter_pas[bx] ;Вывод сообщения
sub dl, 10h
int 21h
inc bx
cmp bx, len_enter
jb pr_ent
mov ah, 08h ;Ожидание нажатия Ввода
int 21h
mov al, 0
mov cx, 1
mov dx, 1
mov bx, offset buffer
int 25h ; считали FAT
pop dx ;25h и 26h оставляют лишнее
mov al, 0 ;слово в стеке, извлекаем его
mov cx, 1
mov dx, 1
mov bx, offset bufrez ;Сохраняем резервную копию
int 25h ;FAT
pop dx
mov bx, offset buffer ;Процедура,которая определяет
mov ax, 118 ;запись FAT по номеру сектора
mov cx, ax
shl ax, 1
add ax, cx
test ax, 1
pushf
shr ax, 1
add bx, ax
mov ax, [bx]
popf
jnz getFAT11
and ax, 0FFFh
jmp getFAT21
getFAT11:
shr ax, 4
getFAT21:
cmp ax, 0ff7h ;1-ая проверка. BAD-?
jne no_disk1 ;НЕТ
mov bx, offset buffer ;ДА
mov ax, 120
mov cx, ax
shl ax, 1
add ax, cx
test ax, 1
pushf
shr ax, 1
add bx, ax
mov ax, [bx]
popf
jnz getFAT111
and ax, 0FFFh
jmp getFAT212
getFAT111:
shr ax, 4
getFAT212:
cmp ax, 0ff7h ;2-ая проверка. BAD-?
jne no_disk1 ;НЕТ
jmp f1
no_disk1:
jmp no_disk
f1:
good macro x, y ;Макроопределение, которое
mov bx, offset buffer ;помечает сектор, как
mov ax, x ;свободный(занятый, плохой)
mov cx, ax
shl ax, 1
add ax, cx
test ax, 1
pushf
shr ax, 1
add bx, ax
popf
mov ax, y
mov [bx], ax
endm
good 118, 0h ;Пометить, как свободный
good 120, 0h ;Пометить, как свободный
fat macro b
mov al, 0
mov cx, 1
mov dx, 1
mov bx, offset b
int 26h ;Записали 1-ую копию FAT
pop dx
endm
fat buffer ;Запись FAT
mov al, 0
mov cx, 1
mov dx, 248
mov bx, offset buffer1
int 25h ;Считываем сектор
pop dx
mov bx, 0
mov ax, 0
pr_ent2:
mov dh, protect[bx] ;3-яя проверка. Проверяется
cmp buffer1[bx], dh ;наличие на диске
jne g1 ;закодированной информации
jmp g2
g1:
inc ax
g2:
inc bx
cmp bx, len_enter2
jb pr_ent2
cmp ax, 0
jne no_disk
mov al, 0
mov cx, 1
mov dx, 244
mov bx, offset buffer
int 26h ;Попытка записи на сектор
pop dx
mov al, 0
mov cx, 1
mov dx, 244
mov bx, offset buffer1
int 25h ;Попытка чтения с сектора
pop dx
cld ;df=0
lea si, buffer
lea di, buffer1
mov cx, 512
mov ax, 0
l:
cmpsb ;Сравнение записанной и
jne l1 ;считаной информации
jmp l2
l1: inc ax
l2: loop l
cmp ax, 5
jl no_disk
fat bufrez ;Запись FAT
pop ds
pop es
db 0cbh ;RetF. Перейти на программу
no_disk: ;Это не ключевая дискета
mov ah, 2
mov bx, 0
pr_ent1:
mov dl, dsk_key[bx] ;Вывод сообщения
sub dl, 10h
int 21h
inc bx
cmp bx, len_enter1
jb pr_ent1
fat bufrez ;Запись FAT
mov ah, 4ch ;Выход в DOS
mov al, 0
int 21h
copyright db 'Copyright(C) Юзефович Артем ( МГВРК,'
db ' Минск ), 1996'
db 0Dh, 0Ah, 'Ключевая'
db ' дискета.', 0Dh, 0Ah
db 0Dh, 0Ah, 0Dh, 0Ah, '$'
code ends
end start
;****************************************************************************
;****************************************************************************
;** **
;** КП "ЗАЩИТА ДАННЫХ ОТ НСД" **
;** Выполнили учащиеся гр.46491 ЕГАНОВ МАКСИМ и ЮЗЕФОВИЧ АРТЕМ **
;** 1996 **
;** **
;** Защита винчестера **
;****************************************************************************
;****************************************************************************