Розмежування доступу до дискового простору вiнчестера, страница 2

        cmp     ah, 40h                 ; писать в файл

        jz      error21h

        cmp     ah, 41h                 ; удалить файл

        jz      error21h

        cmp     ah, 5bh                 ;                                                                                                                                                                                            создать новый файл

        jz      error21h

old21h:

        ; Вызов "старого" обработчика

        jmp     dword ptr cs:int21o

error21h:

        ; Установка ошибки

        push    bp

        mov     bp, sp

        mov     ax, [bp + 6]

        or      ax, 01h

        mov     [bp + 6], ax

        mov     ax, 0500h               ; Access denided

        pop     bp

        iret

realistart:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;     Код              ;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        ; Получение вектора int13h

        mov     ax, 3513h

        int     21h

        ; Проверка на первую загрузку

        mov     ax, es:[bx - 2]

        cmp     ax, here

        je      keyitest

        call    login

        ; Сохранение вектора int13h

        mov     ax, 3513h

        int     21h

        mov     int13o, bx

        mov     int13s, es

        ; Установка нового вектора

        mov     ax, 2513h

        mov     dx, offset int13h

        cli

        int     21h

        sti

        ; Получение вектора int21h

        mov     ax, 3521h

        int     21h

        mov     int21o, bx

        mov     int21s, es

        ; Установка нового вектора

        mov     ax, 2521h

        mov     dx, offset int21h

        sti

        int     21h

        sti

        ; Остаемся резидентными

        mov     ax, 3100h

        mov     dx, offset realistart

        shr     dx, 4

        add     dx, 8

        int     21h

     ; Проверка ключей командной строки

keyitest:

     mov  si, 82h

     mov  di, offset delkey

     mov  cx, 2

repz cmpsb

     jnz  exit

     ; Выгрузка программы

     mov  ax, 3513h

     int  21h

     mov  dx, es:[bx - 10]

     push dx

     mov  dx, es:[bx - 8]

     push dx

     mov  dx, es:[bx - 6]

     push dx

     mov  dx, es:[bx - 4]

     push dx

     mov  ax, 2521h

     pop  ds

     pop  dx

     int  21h

     mov  ax, 2513h

     pop  ds

     pop  dx

     int  21h

     mov  ah, 49h

     int  21h

     mov  ah, 09h

     push cs

     pop  ds

     mov  dx, offset delmsg

     int  21h

     mov  ah, 04ch

     int  21h

    ; Выход без загрузки exit:

        mov     ah, 09h

        lea     dx, alrmsg

        int     21h

        mov     ah, 04ch

        int     21h

login   proc

        ; Проверка инженерного цилиндра

        ; Чтение старой DPT

        mov     ax, 351eh

        int     21h

        mov     DPTofs, bx

        mov     DPTseg, es

        ; Установка новой DPT

        mov     ax, 251eh

        mov     dx, offset DPT

        push    cs

        pop     ds

        cli

        int     21h

        sti

        ; Чтение информации из инженерного цилиндра

       mov ax,0201h

        mov ch,50h        ; номер дорожки

        mov cl,2          ; номер сектора

        mov dl,0          ; номер устройства

        mov dh,0          ; номер головки

        push    cs

        pop     es

        mov     bx, offset cs:buf

        int 13h

        ; Восстановление DPT

        mov     dx, cs:DPTofs

        mov     ax, cs:DPTseg

        mov     ds, ax

        mov     ax, 251eh

        cli

        int     21h

        sti

        ; Сравнение секторов

        cld

        push    cs

        pop     ds

        mov     si, offset buf

        push    cs

        pop     es

        mov     di, offset PasRead

        mov     cx, 15

repe    cmpsb

        je      Riloc

        push    cs

        pop     ds

        mov     si, offset buf

        push    cs

        pop     es

        mov     di, offset PasRW

        mov     cx, 15

repe    cmpsb

        je      RWiloc

        jmp     notilogged

RWiloc:

        mov     RW, 1

        mov     ah, 09h

        mov     dx, offset RWmsg

        int     21h

        jmp     logged

Riloc:

        mov     R, 1

        mov     ah, 09h

        mov     dx, offset Rmsg

        int     21h

        jmp     logged

notilogged:

     db   0eah

     dw   0

     dw   0ffffh

logged:

     push cs

     push cs

     pop  ds

     pop  es

        ret

login   endp

        end     start


4.Результати роботи програми:

Ви получили права на чтение/запись

Висновок: розробили i налагодили резидентну програму, що обмежує доступ до диску залежно від прочитаної мітки з інженерного циліндру.В ході роботи були придбані навички із захисту вінчестера з використанням мітки на інженерних циліндрах.