Смекни!
smekni.com

Захист від несанкціонованого доступу (стр. 3 из 3)

int 21h

;Зсунемо вказівник на старий кінець файла, тобто на ключ

mov АН,42h

mov AL,2

mov BX,handle

mov CX,-1

mov DX,-2

int 21h

;Прочитаємо ключ

mov AH,3Fh

mov BX,handle

mov CX,2

mov DX,of set key_rd

int 21h

;Порівняємо прочитаний ключ із записаним у програмі

mov AX,key

сmр AX,key_rd

je ok ;Ключі збігаються

;Ключі не збігаються, виведемо повідомлення mes1 про те,

;що програма не встановлена

jmp ahead ;Продовжимо програму

ok:

;Виведемо повідомлення ims про нормальну роботу

;Зрушимо вказівник на старий кінець файла

ahead:

mov AH,42h

mov AL,2

mov BX,handle

mov CX,-l

mov DX,-Z

Int 21h

;Виконаємо фіктивний запис 0 байтів, щоб зафіксувати поточну довжину файла

mov AH,0h

mov BX,handle

mov CX,0

mov DX,offset key_rd ;Фіктивнийпараметр

Int 21h

;Виведемоповідомлення mes2 провідмовувідкритиФайл

notopen:

jmp outprog

myproc endp

;Поляданих

fname db 'work3.exe',0 ;Ім'яфайла

handle dw 0 ;Коміркадлядескриптора

key dw 1234h ;Ключ, щозаписуєтьсяуфайл

key_rd dw 0 ;Ключ, щочитаєтьсязфайла

mes db 'Программа встановлена і буде працювати нормально',10,13

mes1 db 'Программа не встановлена і не може бути запущена',10,13

mes2 db 'Файл WORK3. EXE не відкрився'. 10.13

mes3 db 'Файл WORK3. EXE не знайдений у таблиці файлів'


Програма INSTALL3. EXE

;Установча програма, призначена для установки

;на жорсткому диску робочої програми WORK3.EXE ;Основні фрагменти програми

;Відчинимо файл із робочою програмою, щоб він потрапив у таблицю файлів

jnc go1

jmp notopen

go1:

mov handle,AX ;

;Одержимоіндекс SFT із JFT, щознаходитьсяв PSP

mov DI,l8h ;ES:DI->JFT

add DI,AX ;ЕS:DI->наш елемент у JFT

mov CL,ES:[DI] ;CL=індекс SFT

xor CH.CH ;CH=індекс SFT

;Одержимо доступ до системної таблиці файлів

mov AH,52h

Int 21h

les DI,ES:[BX+4] ;ES:DI->перша SFT сmр CX,ES:[OI+4] ;Індекс у цій SFT?

jb here ;І

sub CX,ES:[DI+4] ;Немає, віднімемо число блоків у цій ;SFT

les DI,ES:[OI] ;ES:DI->друга SFT

here:

;Знайшли ту SFT, у котрій наш індекс

mov AX,59 ;Розмір блока опису файла

mul CL

add DI,6 ;ЕS:DI->перший блок опису файла

add DI,AX ;ЕS:DI->блок опису файла

mov AX,ES:[DI+llh] ;АХ=молодше слово довжини

mov DX,ES:[DI+13h] ;DХ=старше слово довжини

les DI,ES:[DI+7] ;ЕS:DI=вказівник на DPB

mov BL,ES:[DI+4] ;ВL=номер старшого сектора кластера

inc BL ;BL=число секторів у кластері

xor BH,BH ;ВХ-число секторів у кластері

mov CL,9 ;Зсув на 9 бітій = множення на 512

shl BX,CL ;вх=число байтів у кластері

mov SI,BX ;Збережемо розмір кластера в SI

d1v BX ;DX:AX/BX.

push DX ;Збережемо у стекі залишок

;Встановимо вказівник на кінець файла

mov AH,42h

mov AL,2 ;Режим установки від кінця файла

mov BX,handle

mov CX,O ;0 байтів

mov DX,O ;відкінцяфайла

1nt 21h

;чи потрібна корекція довжини файла? Файл треба подовжити,

;якщо залишок дорівнює 0 або дорівнює довжині кластера-1.

pop DX ; Витягнемо зі стека залишок

dec SI ;SI-число байтів у кластері-1

cmp DX,0 ;Залишок дорівнює 0?

je incr ;Так, на корекцію

cmp DX.SI ;Залишок дорівнює довжині кластера-1?

je incr ;Так, на корекцію

jmp good ;корекція не потрібна

;Збільшемо файл на два байти, щоб він зайняв ще один кластер

incr:

mov AH,40h

mov BX,handle

mov CX.2

mov OX, offset null

Int 21h

jmp good ;Ha записключазамежаминовоїдовжинифайла

good:

;Запишемо за межами файла ключ

mov АН,40h

mov ВХ,handle

mov СХ,2

mov OX,offset key

Int 21h ;Зрушимопокажчикнастарийкінецьфайла, щобвідділитиключвідфайла

mov AH,42h

mov AL,2 ;Режимустановкивідкінцяфайла

mov ВХ,handle

mov СХ,-1 ;СХ:DХ=машиннеуявлення

mov DX,-2 ;числа -2

int 21h

; Виконаємо фіктивний запис 0 байтів, щоб укоротить файл

;до старої довжини

mov AH,40h

mov ВХ,handle

mov СХ.0

mov DX,offset key ;Фіктивний параметр

Int 21h ;Виведемо повідомлення mes про нормальну роботу

;Завершимо програму

notopen:

;Виведемо повідомлення mes2 про неможливість відкрити файл

jmp outprog ;Поля даних

fname db 'work3.exe',0 ;Ім'я файла handle dw 0 ;Осередок для дескриптора

key dw 1234h ;Ключ, що записується у файл

null dw 0

mes db 'Программа WORK3.EXE установлена на жорсткому дискі',10,13

mes2 db 'Файл WORK3.EXE не відкрився',10,13

Блок-схема алгоритму

1. Блок-схема робочої програми WORK3.EXE.


2. Блок-схема установочної програми INSTALL3.EXE.