Защита данных от несанкционированного доступа
Рефераты >> Программирование и компьютеры >> Защита данных от несанкционированного доступа

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 **

;** **

;** Защита винчестера **

;****************************************************************************

;****************************************************************************


Страница: