Metropoli BBS
VIEWER: pwd-mbr.a86 MODE: TEXT (ASCII)
;From Cristian Marg
;
; Password protect your MBR, taken from the German magazine
; "Design & Elektronic" ??/1988
; Sorry to the Author, but I dont know his name anymore
;
code segment
assume cs:code,es:code,ds:code
org    100h
start:  jmp  operate
;____________________________________________________________________
try  equ 3 ;number of tries
task_code   equ 5ah  ; Add to encode Text
passw_code  equ 6fh  ; Add to encode pwd
;_____________________________________________________________________
              Org   600H
New_Sector:
           CLI
           XOR    BX,BX
           mov    SS,BX
           mov    Sp,7C00h
           mov    SI,SP
           mov    ES,BX
           mov    DS,BX
           STI
           CLD
           MOV    DI,600h
           MOV    CX,100h
           Repnz  MOVSW
           Jmp    Next-7600h

  Next:    MOV    CX,TaSK_LEN
           MOV    SI,OFFSET TASK
           XOR    DX,DX
           MOV    BL,TASK_Code
           CALL   DISPLAY
           MOV    BP,OFFSET PASSWORD
           CALL   READ_PASSW

  Password_ok:
           MOV    BP,0201H
           MOV    CX,0010H
           MOV    BX,7C00H
           CALL   RW_SECTOR
           JNC    WRITE_OLD

  Transfer_error:
           MOV    SI,OFFSET ERROR
           MOV    CX,38

  Show_error:
           XOR    BX,BX
           MOV    DX,0100H
           CALL   DISPLAY
           JMP    GOOD_BYE

  Write_old:
           MOV    BP,0301H
           MOV    CX,0001H
           CALL   RW_SECTOR
           JC     TRANSFER_ERROR

           DB     0EAH,000H,07CH,00H,00H ;JMP  0000:7C00H

  Task_Len  EQU    17
  TASK:    DB      'E'+task_code
           DB      'n'+task_code
           DB      't'+task_code
           DB      'e'+task_code
           DB      'r'+task_code
           DB      ' '+task_code
           DB      'p'+task_code
           DB      'a'+task_code
           DB      's'+task_code
           DB      's'+task_code
           DB      'w'+task_code
           DB      'o'+task_code
           DB      'r'+task_code
           DB      'd'+task_code
           DB      ' '+task_code
           DB      '-'+task_code
           DB      '>'+task_code
password db     9 dup(?)
wrong   db      7


read_passw proc near
        mov     di,try
read_password:
        mov     si,bp
        mov     wrong,00
        mov     cl,[si]
read_next_key:
        inc     si
        xor     ah,ah
        int     16h
        add     al,passw_code
        cmp     al,[si]
        jz      good_key
        mov     wrong,0ffh
good_key:
        loop    read_next_key
        cmp     wrong,0
        jnz     wrong_passw
        ret
wrong_passw:
        mov     cl,8
        sub     cl,[bp]
        jcxz    beep
read_dummy:
        xor     ah,ah
        int     16h
        loop    read_dummy
        beep:   mov     ax,0e07h
        int     10h
        dec     di
        jz      good_bye
        jmp     read_password
good_bye:  jmp  good_bye                ;hang system

read_passw endp


rw_sector  proc near
        mov     dx,80h
        mov     di,5                    ;num of tries
rw_sector_again:
        mov ax,bp
        int     13h
        jc      no_sucess
        ret
no_sucess:
        xor     ah,ah
        int     13h
        dec     di
        jnz     rw_sector_again
        stc
        ret
rw_sector endp


display proc    near
show:   mov     ah,02
        int     10h
        lodsb
        sub     al,bl
        mov     ah,0eh
        int     10h
        inc     dl
        loop    show
        ret
display endp

error:  db      "Error loading OS",00
intern_flag:
        db      081h

        org     7eeh
bootflag:  db   0

startsector:


s_Head:
  DB 0
s_sector:
  db 1
S_Track:
  DB 0
System:
  DB 0ABH
Endesector:
E_Head:
  DB 4
E_Sector:
  DB 0dbh
E_Track:
  DB 255
Relative_Sectors: DB 0
  DB 0
  DB 0
  DB 0
Number_Sectors: DB 2
  DB 22
  DB 32
  DB 6fh
Endflag: DB 055h,0aah         ;Endmarker of MBR
End_new_sector:
;---------------------------------------------------------------------
Sector_Buffer DB 512 DUP(?)
Init_Text:
  DB 0AH,0DH,'pwd installed',0Ah,0dh
  DB 'Put Setpass.com to Autoexec.bat ',0ah,0dh,'$'
Init_Task:
  DB 0AH,0DH,'Enter Password ->$'
Disk_error_text:
  DB 0ah,0dh,'HDDerror'
  DB 0ah,0dh,'PWD not installed/de-installed'
  DB 0ah,0dh,0ah,'$'
De_install_Task:
  DB 0ah,0dh,'For De-installation enter Pwd :$'
DE_install_Text:
  DB 0ah,0dh,'Passwort de-inst.!!'
  DB 0ah,0dh,'remove Setpass '
  DB 0dh,0ah,'$'
Operate:
  mov bx,offset Sector_Buffer
  mov bp,0201h
  mov cx,11h
  Call Rw_Sector ;read Sector 11h einlesen...
  JNC Test_New_Sector
Disk_error:
  mov DX, Offset Disk_error_text
  mov ah,09
  int 21h
  Operate_end:
  mov ah,4Ch
  int 21h                        ;term Prog

Test_new_Sector:
  mov di,offset Intern_Flag-600H
  cmp Byte ptr [BX+DI],81h       ;Sector 11h = Passwort-Urlader??
  JNZ Install_Password           ;wenn ja de-instalieren

;***********************Password-MBR deinstall*****************

De_Install:
  mov dx,offset De_install_task
  mov ah,09

        int  21H
        mov  bp,bx
        add  bp,offset password-600H
        call read_passw
DE_INST:
        mov bp,0201H
        mov cx,0010H
        call rw_sector
        jc disk_error
        mov bp,0301H
        mov cx,1
        call rw_sector
        jc disk_error
        mov di,offset intern_flag
        mov byte ptr [di],0ffh
        mov cx,0011H
        mov bx,offset new_sector
        call rw_sector
        jc disk_error
        mov dx,offset de_install_text
        jmp end_de_inst

;******* INSTALLATION ***********

Install_Password:
        mov bp,0201H
        mov cx,0001H
        call rw_sector
        jnc read_success
Disk_Error_Jmp:
        jmp disk_error
Read_Success:
        mov bp,0301H
        mov cx,10H
        call rw_sector
        jc disk_error
        mov ah,09H
        mov dx,offset init_task
        int 21H
        mov ax,0c0aH
        mov sector_buffer,09
        mov dx,offset sector_buffer
        int 21H
        mov si,offset sector_buffer+1
        mov cl,[si]
        mov di,offset password
        movsb
write_pw:
        lodsb
        add al,passw_code
        stosb
        loop write_pw
        mov bp,0301H
        mov cx,0011H
        mov bx,offset new_sector
        call rw_sector
        jc disk_error_jmp
        mov cx,0001H
        call rw_sector
        jc disk_error_jmp

end_install:
        mov dx,offset init_text
end_de_inst:
        mov ah,09
        int 21H
        jmp operate_end
        code ends
        end start

------------------------------
sorry `bout poor comments or other texts...
here is the source of Setpass.com..
it re installs the pwd-mbr after each boot
------------------------------
title   setpass.com
page    ,132

;*******************************************************
;*  SETPASS.COM copies  Password-mbr  to sector     1  *
;*******************************************************

code    segment
        assume cs:code,ds:code
        org    100h

operate:
        mov     bp,0201h
        mov     cx,0011h
        mov     bx,offset sector_buffer
        call    rw_sector
        jc      error
        mov     bp,0301h
        mov     cx,0001h
        call    rw_sector
        jc      error
        xor     al,al
end_set:
        mov     ah,4ch
        int     21h
error:  mov     dx,offset error_text
        mov     ah,09
        int     21h
        mov     ax,0e07h
        int     10h
        int     10h
        mov     al,01
        jmp     end_set

;**************************************************
;*  reads and writes.. Sector Buffer is  ES/DS:BX *
;*  BP=Operationscode for AX (INT13h)             *
;*  error when carry                              *
;**************************************************

rw_sector proc  near
        mov     dx,80h
        mov     di,5
rw_sector_again:
        mov     ax,bp
        int     13
        jc      no_sucess
        ret
no_sucess:
        xor     ah,ah
        int     13
        dec     di
        jnz     rw_sector_again
        stc
        ret
rw_sector endp

;*** Datenbereich
sector_buffer:
        db      512 dup(?)
error_text:
        db      0ah,0dh,'Password not   installed  !!!',0ah,0dh,'$'

code    ends                            ;Segment End
end     operate                         ;Verweis auf Start-Label

[ RETURN TO DIRECTORY ]