;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