Защита данных от несанкционированного доступаРефераты >> Программирование и компьютеры >> Защита данных от несанкционированного доступа
keybd_flags_1_ equ 417h ;Флаги клавиатуры
data_10e equ 0
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h ;Счетчик команд
Block proc far
start:
jmp real_start
data_1 db 1
data_2 dw 7241h, 6574h
data_4 dw 2E6dh, 2020h
data_6 dw 2020h, 2020h
flag1 db 0
flag2 db 0
flag3 db 0
allf db 0
nameF db 'C:\sub_rosa\block.com', 0
Block endp
int_09h_entry proc far ;Процедура обработки 09h
push ax ;прерывания
push ds
mov al,cs:allf
xor al,1
mov cs:allf,al
jmp k2
k:
mov cs:allf,1
k2:
in al,60h ;Обращение к порту клавиатуры
cmp al,32h ;Проверка на нужную
je l1 ;комбинацию
cmp al,08h
je l2
cmp al,1eh
je l3
jmp loc_1
l1:
mov cs:flag1,1
jmp loc_2
l2:
cmp cs:flag1,0
je loc_1
mov cs:flag2,1
jmp loc_2
l3:
cmp cs:flag2,0
je loc_1
mov cs:flag3,1
jmp loc_2
loc_1:
pop ds
pop ax
cmp cs:allf,1
jne r2
mov cs:flag1,0
mov cs:flag2,0
mov cs:flag3,0
r2:
jmp dword ptr cs:data_2
loc_2:
sub ax,ax
mov ds,ax
test byte ptr ds:keybd_flags_1_,8
jz loc_1 ;Alt нажата ?
in al,61h
mov ah,al ;Слудующий код необходим для
or al,80h ;отработки аппаратного
out 61h,al ;прерывания
xchg ah,al
out 61h,al
mov al,20h ;Послать сигнал "конец
out 20h,al ;прерывания" контроллеру
;прерываний 8259
push bx
mov ah,0Fh
int 10h ;Video display
;ah=functn 0Fh
;get state, al=mode, bh=page
;ah=columns on screen
cmp cs:flag1,1
jne loc_6
cmp cs:flag2,1
jne loc_6
cmp cs:flag3,1
jne loc_6
cmp al,1
je loc_3 ;Jump if equal
cmp al,3
jne loc_6 ;Jump if not equal
loc_3:
mov ax,0B800h
mov ds,ax ;Установка ключа проверки
mov al,cs:data_1 ;для 13h прерывания
xor al,1
mov cs:data_1,al
test al,1
jz loc_4 ;Jump if zero
mov ax,7458h ;Вывод символа
jmp short loc_5
db 90h
loc_4:
mov ax,744Fh ;Вывод символа
loc_5:
mov cs:flag1,0
mov cs:flag2,0
mov cs:flag3,0
mov ds:data_10e,ax
loc_6:
mov cs:allf,1
pop bx
pop ds
pop ax
iret ;Interrupt return
int_09h_entry endp
int_2Fh_entry proc far ;Mультиплексное прерывание
cmp ah,13h
je loc_7 ;Jump if equal
jmp dword ptr cs:data_6
loc_7:
mov bx,0F000h
mov es,bx
mov bx,0FFF0h
mov dx,bx
iret ;Interrupt return
int_2Fh_entry endp
sub_1 proc near
sub ax,ax
mov ds,ax
mov ax,[bx+2]
mov es,ax
mov bx,[bx]
mov byte ptr es:[bx],0CFh
retn
sub_1 endp
int_13h_entry proc far ;Процедура обработки 13h
cmp ax,1059h ;прерывания
jne loc_8 ;Jump if not equal
cmp dx,2517h
jne loc_8 ;Jump if not equal
xchg dx,ax
iret ;Interrupt return
int_13h_entry endp
loc_8:
test cs:data_1,1 ;Проверка на ключ
jnz loc_10 ;Jump if not zero
loc_9:
jmp dword ptr cs:data_4 ;Вернуться к 13h прерыванию
loc_10:
push ax
push bx
push ds
push es
mov bx,4
call sub_1
mov bx,0Ch
call sub_1
pop es
pop ds ;Далее слудуют проверки
pop bx ;функций 13h прерывания
pop ax
cmp ah,3
je loc_11 ;Jump if equal
cmp ah,5
je loc_11 ;Jump if equal
cmp ah,6
je loc_11 ;Jump if equal
cmp ah,7
je loc_11 ;Jump if equal
cmp ah,0Bh
je loc_11 ;Jump if equal
cmp ah,1Ah
jne loc_9 ;Jump if not equal
loc_11:
mov dl,3
jmp short loc_9
real_start:
mov ax,1059h ;Block уже загружен ?
mov dx,2517h
int 13h
cmp ax,2517h
jne loc_12 ;Jump if not equal
cmp dx,1059h
jne loc_12 ;Jump if not equal
mov ax,4C01h ;Выход в DOS
int 21h
loc_12:
mov ax,3509h
int 21h
mov data_2,bx ;Запомнить адрес 09h INT
mov bx,es
mov word ptr data_2+2,bx
mov dx,offset int_09h_entry
mov ax,2509h
int 21h ;Установка нового 09h INT
mov ax,3513h
int 21h
mov data_4,bx ;Запомнить адрес 13h INT
mov bx,es
mov word ptr data_4+2,bx
mov dx,offset int_13h_entry
mov ax,2513h
int 21h ;Установка нового 13h INT
mov ax,352Fh
int 21h
mov data_6,bx ;Запомнить адрес 2Fh INT
mov bx,es
mov word ptr data_6+2,bx
mov dx,offset int_2Fh_entry
mov ax,252Fh
int 21h ;Установка нового 2Fh INT
;Необходимое число параграфов
;памяти
mov cs:data_1, 0
mov ah, 41h
push cs
pop ds
mov dx, offset nameF
int 21h
mov cs:data_1, 1
mov dx,((offset pgm_len+15)/16)+10h
mov ax,3100h ;Завершить и оставить
int 21h ;резидентным
data_8 db 'Защита Винчестера. '
copyright db 'Copyright(C) Юзефович Артем ( МГВРК,'
db ' Минск ), 1996'
db 0Dh, 0Ah, 'Винчестер'
db ' блокирован.', 0Dh, 0Ah
db 0Dh, 0Ah, 0Dh, 0Ah, '$'
pgm_len equ $-Block ;Длина программы
seg_a ends
end start
Список литературы
1. Данкан Р. Профессиональная работа в MS-DOS. — М.: Мир, 1993.
2. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. — М.: Диалог-Мифи, 1995.
3. Епанешников А., Епанешников В. Turbo Vision 2.0. Основы практического использования. — М.: Диалог-Мифи, 1995.
4. Кнут Д. Искусство программирования для ЭВМ. — М.: Мир, 1976. — Т.2.
5. Пильщиков В. Н. Программирование на языке ассемблера IBM PC. — М.: Диалог-Мифи, 1994
6. Спесивцев А. В., Вегнер В. А., Крутяков А. Ю. и др. Защита информации в персональных ЭВМ. — М.: Радио и связь, 1993.
7. Шураков В. В. Обеспечение сохранности информации в системах обработки данных (по данным зарубежной печати): Учебное пособие для вузов. — М.: Финансы и статистика, 1985.