Защита данных от несанкционированного доступа
| Категория реферата: Рефераты по информатике, программированию
| Теги реферата: изложение на тему, контрольная работа 6
| Добавил(а) на сайт: Vonifat.
Предыдущая страница реферата | 21 22 23 24 25 26 27 28 29 30 31 | Следующая страница реферата
WriteLn;
WriteLn('Система готова к работе');
ChDir('c:sub_rosa');
Mem[$40:$1a]:=Mem[$40:$1c];
{Восстановить вектора прерываний}
SetIntVec($23, Save23hInt);
SetIntVec($1b, Save1bhInt);
End.
{**************************************************************************
*}
{**************************************************************************
*}
{**
**}
{** КП "ЗАЩИТА ДАННЫХ ОТ НСД"
**}
{** Выполнил учащийся гр.46491 ЕГАНОВ МАКСИМ
**}
{** 1996
**}
{** **}
{** Модуль привязки к BIOS
**}
{**************************************************************************
*}
{**************************************************************************
*}
Unit SetConf;
Interface function config: string; {Дата BIOS}
Implementation
{Получить дату BIOS} function config: string; var conf, s: String;
Control: char absolute $F000:$FFF5; i :byte; begin
Move(Control, s[1], 8); s[0] := #8; for i := 1 to length(s) do conf[i] := chr(ord(s[i]) + 5*i); conf[0] := #8; config := conf; end;
End.
{**************************************************************************
**}
{**************************************************************************
**}
{**
**}
{** КП "ЗАЩИТА ДАННЫХ ОТ НСД"
**}
{** Выполнил учащийся гр.46491 ЮЗЕФОВИЧ АРТЕМ
**}
{** 1996
**}
{**
**}
{** Дописывание к файлу
**}
{**************************************************************************
**}
{**************************************************************************
**} code segment public assume cs: code, ds: code, es: code, ss: code org 80h ;Хвост команды dta label byte com_siz db ? probel db ? com_par db ? org 100h start: jmp test_par type_t db ? ;Тип расширения target len_s dw ? ;Длина source_file len_t_1 dw ? ;Длина target_file len_t_2 dw ? ;Длина target_file hand_1 dw ? ;Обработка source_file hand_2 dw ? ;Обработка target_file
NameTarOff dw ? ;Смещение имени target_file
NameSouOff dw ? ;Смещение имени source_file ext_a db 'com', 'exe' ;Допустимые расширения mbad_use db 10, 13 syn db 10, 13
TEST_PAR: lea si, dta+1 ;Далее идет проверка l_0: ;параметров в командной cmp byte ptr [si], 0Dh ;строке je c_syn cmp byte ptr [si], '?' je c_h cmp byte ptr [si], ' ' jne not_prob inc si jmp short l_0 c_syn: int 20h c_h: int 20h use: int 20h not_prob: mov NameTarOff, si ;1-ый параметр правильный ? l_1: cmp byte ptr [si], 0Dh je c_b_1_m_2 cmp byte ptr [si], ' ' je c_b_1 cmp byte ptr [si], '.' je d_t_1 inc si jmp short l_1 c_b_1_m_2: jmp use ;Недопустимое расширение c_b_1: ;у target_file jmp use
D_T_1: ;Анализ расширения inc si call det_type pop ax mov type_t, al cmp ax, 2 je C_B_1 add si, 3 lea cx, dta add cl, byte ptr dta adc ch, 0 cmp cx, si jbe C_M_2 mov byte ptr [si], 0 l_2: ;2-ой параметр правильный ? inc si cmp cx, si jb c_m_2 cmp byte ptr [si], ' ' je l_2 mov NameSouOff, si l_3: cmp byte ptr [si], '.' je d_t_2 inc si cmp cx, si jb c_b_2 jmp l_3 ;Отсутствует source_file c_m_2: jmp use d_t_2: inc si call det_type pop ax cmp ax, 0 je test_end c_b_2: jmp use test_end: add si, 2 cmp cx, si jb c_b_2 mov byte ptr [si+1], 0
OPEN_F: ;Открыть, определить длину mov ah, 3dh ;и прочитать в буфер файл mov al, 2 ;source_file mov dx, NameSouOff int 21h jnc yes_open int 20h yes_open: ;Определить длину mov bx, ax mov hand_2, ax mov ah, 42h xor cx, cx xor dx, dx mov al, 2 int 21h jnc yes_p_1 cn_mov_2: int 20h yes_p_1: mov word ptr len_s, ax mov ah, 42h xor cx, cx xor dx, dx mov al, 0 int 21h jc cn_mov_2 mov ah, 3Fh lea dx, buff mov cx, word ptr len_s int 21h jnc open_targ int 20h
OPEN_TARG ;Открыть target_file mov ah, 3Dh mov al, 2 mov dx, NameTarOff int 21h jnc det_len_1 int 20h det_len_1: mov hand_1, ax mov bx, hand_1 mov ah, 42h xor cx, cx xor dx, dx mov al, 2 int 21h jnc rest_len jmp cn_mov_1 rest_len: mov len_t_1, dx mov len_t_2, ax
TO_PROC: ;Если target_file - COM, cmp type_t, 0 ;то CALL WR2COM. je c_com ;Если target_file - EXE, call wr2exe ;то CALL WR2EXE. jmp short CLOSE_F c_com: call wr2com
CLOSE_F: ;Закрыть файлы mov ah, 3Eh ;source_file и target_file mov bx, hand_1 int 21h jnc cl_2 int 20h cl_2: mov ah, 3Eh mov bx, hand_2 int 21h jnc OK int 20h
OK: mov ah, 9 int 20h
det_type proc ;Подпрограммы mov bp, sp push ax push cx push di xor ax, ax lea di, ext_a loo_1: push si push di mov cx, 3 repe cmpsb jne end_loo_1 pop di pop si mov [bp+2], ax jmp d_ret end_loo_1: inc al pop di add di, 3 pop si cmp al, 2 jb loo_1 mov [bp+2], ax d_ret: pop di pop cx pop ax ret det_type endp
wr2exe proc push ax push bx push cx push dx push si push di jmp st_2exe hdr label byte dw ?
PartPag dw ?
PageCnt dw ? dw ?
HdrSize dw ? dw 5 dup(?)
ExeIP dw ?
ReloCS dw ? len_hdr equ $-hdr ;Команды, записываемые imit label byte ;в конец файла mov ax, es ;Команды записи в стек
I_1: ;адреса начала EXE-файла add ax, 0 add ax, 10h push ax
I_2: mov ax, 0 push ax ;Команды пердачи управления mov ax, 100h ;source_file, как и для COM push ax ;файла db 0C3h len_imit equ $-imit st_2exe: mov ah, 42h ;Читать заголовок EXE-файла mov bx, hand_1 ;Установить указатель на xor cx, cx ;начало файла xor dx, dx mov al, 0 int 21h jc cn_mov_1 mov ah, 3Fh lea dx, hdr mov cx, len_hdr int 21h jnc prep_end cn_r_1: int 20h prep_end: ;Настроить команды, дописываемые mov ax, ReloCS ;в конец файла target_file mov word ptr i_1[1], ax ;Записать в стек адреса mov ax, ExeIP ;начала EXE-файла mov word ptr i_2[1], ax ;Передать управление файлу mov cx, len_t_1 ;source_file по соглашениям mov dx, len_t_2 ;системы DOS mov si, cx ;Записать команды в конец mov di, dx ;EXE-файла mov ah, 42h mov al, 0 mov bx, hand_1 int 21h jnc yes_wr cn_mov_1: int 20h yes_wr: mov ah, 40h lea dx, imit mov cx, len_imit int 21h jnc wr_sour cn_w_1: int 20h wr_sour: ;Записать source_file в конец mov cx, si ;EXE-файла mov dx, di add dx, len_imit jnc m1 inc cx m1: add dx, 15 jnc m2 inc cx m2: and dx, 0FFF0h mov si, cx mov di, dx mov ah, 42h mov al, 0 int 21h jc cn_mov_1 mov ah, 40h lea dx, buff mov cx, len_s int 21h jc cn_w_1 mov ax, si mov bx, di add bx, ax mov cl, 4 ror bx, cl sub bx, 10h sub bx, HdrSize mov ReloCS, bx mov ax, PartPag and ax, 000Fh mov bx, ax add ax, len_imit add ax, 15 and ax, 0FFF0h add bx, 100h sub bx, ax mov ExeIP, bx mov ax, si mov bx, di add bx, len_s jnc m3 inc ax m3: mov dx, bx and dx, 1FFh mov PartPag, dx add bx, 511 jnc m4 inc ax m4: and bh, 0FEh mov ah, bh mov cl, 9 ror ax, cl mov PageCnt, ax ;Записать настроенный mov ah, 42h ;заголовок в начало
EXE-файла mov bx, hand_1 xor cx, cx xor dx, dx mov al, 0 int 21h jnc write_1 jmp cn_mov_1 write_1: mov ah, 40h lea dx, hdr mov cx, len_hdr int 21h jnc m_ret jmp cn_w_1 m_ret: pop di pop si pop dx pop cx pop bx pop ax ret wr2exe endp
wr2com proc ;Процедура дописывания в
;конец COM-файла jmp st_2com new_beg label byte mov ax, cs c_1: add ax, 0 push ax c_2: mov ax, 0 push ax db 0CBh len_new_beg equ $-new_beg com label byte mov di, 100h push cs pop ds c_3: mov ax, 0 c_4: add ax, 0 and AX, 000Fh mov bx, 16 sub bx, ax and bx, 000Fh add bx, len_new_beg mov ax, 100h sub ax, bx mov si, ax mov cx, len_new_beg rep movsb push es pop ds push es mov ax, 100h push ax push ax db 0C3h len_com equ $-com old_beg label byte db len_new_beg dup(?) len_im equ $-com st_2com: mov bx, hand_1 mov ah, 42h xor cx, cx xor dx, dx mov al, 0 int 21h jnc read_beg jmp cn_mov_2 read_beg: mov ah, 3Fh lea dx, old_beg mov cx, len_new_beg int 21h jnc prep_beg jmp cn_r_1 prep_beg: mov ax, len_t_1 mov bx, len_t_2 add bx, len_im jnc pr1 inc ax pr1: add bx, 15 and bx, 0FFF0h add bx, ax mov cl, 4 ror bx, cl mov word ptr c_1[1], bx mov ax, len_t_2 and ax, 000Fh mov bx, ax add ax, len_im add ax, 15 and ax, 0FFF0h add bx, 100h sub bx, ax mov word ptr c_2[1], bx mov bx, hand_1 mov ah, 42h xor cx, cx xor dx, dx mov al, 0 int 21h jnc wr_beg jmp cn_mov_2 wr_beg: mov ah, 40h lea dx, new_beg mov cx, len_new_beg int 21h jnc prep_c_end jmp cn_w_1 prep_c_end: mov ax, len_t_2 mov word ptr c_3[1], ax mov word ptr c_4[1], len_im mov bx, hand_1 mov ah, 42h mov cx, len_t_1 mov dx, len_t_2 mov al, 0 int 21h jnc wr_end jmp cn_mov_2 wr_end: mov ah, 40h lea dx, com mov cx, len_im int 21h jnc cal_b jmp cn_w_1 cal_b: mov cx, len_t_1 mov dx, len_t_2 add dx, len_im jnc cal_1 inc cx cal_1: add dx, 15 jnc cal_2 inc cx cal_2: and dx, 0FFF0h mov bx, hand_1 mov ah, 42h mov al, 0 int 21h jnc wr_sr jmp cn_mov_2 wr_sr: mov ah, 40h lea dx, buff mov cx, len_s int 21h jnc end_2com jmp cn_w_1 end_2com: ret wr2com endp buff label byte copyright db 'Copyright(C) Юзефович Артем ( МГВРК,' db ' Минск ), 1996' db 0Dh, 0Ah, 'Программа дописывания' db ' по вирусному принципу.', 0Dh, 0Ah db 0Dh, 0Ah, 0Dh, 0Ah, '$' code ends end start
{**************************************************************************
**}
{**************************************************************************
**}
{**
**}
{** КП "ЗАЩИТА ДАННЫХ ОТ НСД"
**}
{** Выполнил учащийся гр.46491 ЮЗЕФОВИЧ АРТЕМ
**}
{** 1996
**}
{**
**}
{** Пароль на файл
**}
{**************************************************************************
**}
{**************************************************************************
**} сode segment assume cs: code, ds:code, es: code, ss: code org 100h start: jmp print enter_pas label byte db 'E'+60h, 80h,'n'+60h, 80h,'t'+60h, 80h,'e'+60h, 80h db 'r'+60h, 80h db 80h, 80h, 80h db 'P'+60h, 80h,'a'+60h, 80h,'s'+60h, 80h,'s'+60h, 80h db 'w'+60h, 80h,'o'+60h, 80h,'r'+60h, 80h,'d'+60h, 80h,
':'+60h db 6Ah, 6Dh len_enter equ $-enter_pas password label byte db 'm'+60h, '&'+60h, 'a'+60h ;Пароль m&a len_pas equ $-password ;Счетчик повторов count_err equ 3 buff label byte db len_pas dup(?) print: push es push ds push cs push cs ;Адресация регистров pop es mov cx, count_err ;Инициализация счетчика pr_1: ;Печать приглашения mov ah, 2 mov bx, 0 pr_ent: mov dl, enter_pas[bx] 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
Рекомендуем скачать другие рефераты по теме: конспект урока 5 класс, оформление доклада.
Категории:
Предыдущая страница реферата | 21 22 23 24 25 26 27 28 29 30 31 | Следующая страница реферата