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

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.


Страница: