Copy Link
Add to Bookmark
Report
40Hex Issue 03 File 004
![eZine's profile picture](https://www.neperos.com/profile_images/710b67/eZine_pz94a41d548ccb10.jpg)
40Hex Issue 3 0004
The Strange Case of Validate
- Fall to your knees, begging your way out of this disease.
Well we all know what a dick John Mcafee is. Well with his product
SCAN comes a program VALIDATE. I noticed when I took a close look
at the internal workings of this program (while working on a little
revenge project) that there is text in the program. The strings
read
"Enter password now"
"Access denied"
Well this got me going, what is this??? Well this brings up our
first 40Hex challenge. I am including a dissassembly of validate.
Here it is:
-------------------------------------------------------------------------------
data_1e equ 100h
data_2e equ 102h
data_3e equ 2Ch
data_4e equ 14h
data_5e equ 16h
data_6e equ 18h
data_7e equ 1Ah
data_8e equ 47h
data_9e equ 49h
data_10e equ 4Ah
data_11e equ 59h
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
validate proc far
start:
jmp loc_96
db 0Dh, ' ', 0Dh, 0Ah, 'VALIDATE 0'
db '.3 '
copyright db 'Copyright 1988-89 by McAfee Asso'
db 'ciates.'
db ' (408) 988-3832', 0Dh, 0Ah, 0Dh
db 0Ah, 'Written by Dennis Yelle', 0Dh
db 0Ah, 0Dh, 0Ah
db 1Ah
data_19 db 30h dexed access)
db '123456789ABCDEF'
db 10h, 0Fh, 0Dh, 8, 6, 3
db 1, 0, 0C8h, 10h, 0Ch, 5
db 0, 0C8h, 10h, 0Fh, 2, 0
db 0C8h, 10h, 0Fh, 0Eh, 7, 6
db 0, 0C8h, 10h, 0Fh, 0Dh, 0
db 0C8h
loc_1:
mov al,1
mov ah,4Ch
int 21h
db 0CDh, 20h
loc_2:
jmp short loc_2
validate endp
sub_1 proc near
mov dx,si
loc_3:
lodsb
cmp al,1
ja loc_3
pushf
mov cx,si
sub cx,dx
dec cx
mov ah,40h
mov bx,1
int 21h
popf
jz loc_1
retn
sub_1 endp
sub_2 proc near
mov bp,sp
xchg si,[bp]
call sub_1
xchg si,[bp]
retn
sub_2 endp
db 0B4h, 40h, 0BBh, 2, 0, 0B9h
db 48h, 0, 0BAh, 9, 1, 0CDh
db 21h, 0A1h, 2, 0, 8Ch, 0CBh
db 29h, 0D8h, 3Dh, 0, 10h, 77h
db 52h, 0E8h, 0D8h, 0FFh
db 0Dh, 0Ah, ' Sorry, there is not e'
db 'nough memory available.', 0Dh, 0Ah
db ' I need 66000 bytes of RAM.', 0Dh
db 0Ah
db 1, 0BEh, 80h, 0, 0ACh, 0Ah
db 0C0h
db 74h, 9
loc_4:
lodsb
cmp al,20h
je loc_4
cmp al,0Dh
jne loc_6
loc_5:
jmp loc_10
loc_6:
dec si
mov data_33,si
push si
mov si,197h
call sub_9
mov di,666h
call sub_10
mov si,186h
call sub_9
mov di,866h
call sub_10
call sub_2
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
inc si
db 'ile Name: '
db 0, 5Eh
loc_7:
lodsb
cmp al,20h
jg loc_7
push ax
xor al,al
mov [si-1],al
mov bx,1
mov cx,si
dec cx
mov dx,data_33
sub cx,dx
mov ah,40h
int 21h
push si
call sub_8
mov dx,data_33
mov ax,3D00h
int 21h
jc loc_11
mov data_32,ax
;* call sub_3
db 0E8h, 0B8h, 0
mov ah,3Eh
mov bx,data_32
int 21h
pop si
pop ax
cmp al,0Dh
je loc_9
loc_8:
lodsb
cmp al,20h
je loc_8
cmp al,0Dh
je loc_9
call sub_8
jmp loc_6
loc_9:
mov ax,4C00h
int 21h
loc_10:
mov dx,2E6h
mov cx,84h
jmp loc_17
loc_11:
mov dx,5FBh
mov cx,29h
jmp loc_17
db 'This program prints the validati'
db 'on information for a file.', 0Dh
db 0Ah, 'Examples:', 0Dh, 0Ah, ' '
db ' VALIDATE SCAN.EXE', 0Dh, 0Ah
db ' VALIDATE SCANRES.EXE', 0Dh
db 0Ah
sub_3 proc near
xor ax,ax
mov data_34,ax
mov data_35,ax
loc_12:
mov bx,data_32
mov dx,0A66h
mov cx,8000h
mov ah,3Fh
int 21h
jnc loc_13
jmp loc_16
loc_13:
or ax,ax
jz loc_14
mov dx,ax
push dx
mov si,0A66h
mov di,666h
mov cx,data_34
call sub_11
mov data_34,cx
pop dx
mov si,0A66h
mov di,866h
mov cx,data_35
call sub_11
mov data_35,cx
jmp short loc_12
loc_14:
call sub_2
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bx+si],ah
and [bp+di+69h],dl
jp $+67h
cmp ah,[bx+si]
and [bx+si],al
mov ax,4202h
mov bx,data_32
xor cx,cx
xor dx,dx
int 21h
jnc $+0Fh
call sub_2
jnz $+70h
db 6Bh, 6Eh, 6Fh, 77h, 6Eh, 0
db 0EBh, 3, 0E8h, 59h, 1, 0E8h
db 0D1h, 0FDh
db 0Dh, 0Ah, ' Date: '
db 0, 0B8h, 0, 57h, 8Bh, 1Eh
db 4Eh, 6, 0CDh, 21h, 73h, 8
db 0BEh, 0DDh, 3, 0E8h, 8Fh, 0FDh
db 0EBh, 26h, 52h, 8Bh, 0C2h, 0B1h
db 5, 0D3h, 0E8h, 25h, 0Fh, 0
db 0E8h, 70h, 1, 0E8h, 98h, 0
db 58h, 50h, 25h, 1Fh, 0, 0E8h
db 65h, 1, 0E8h, 8Dh, 0, 58h
db 0B1h, 9, 0D3h, 0E8h, 5, 0BCh
db 7, 0E8h, 57h, 1, 0E8h, 7Ch
db 0FDh
db 0Dh, 0Ah, 'File Authentication:', 0Dh
db 0Ah, ' Check Method 1 - '
db 0, 8Bh, 0Eh, 52h, 6, 0E8h
db 27h, 0, 0E8h, 43h, 0FDh
db 0Dh, 0Ah, ' Check Method 2 - '
db 0, 8Bh, 0Eh, 54h, 6, 0E8h
db 4, 0, 0E8h, 27h, 0, 0C3h
db 51h, 89h, 0C8h, 88h, 0E0h, 0E8h
db 1, 0
db 58h
sub_4:
mov bx,ax
mov cl,4
shr bx,cl
call sub_5
mov bx,ax
sub_5:
and bx,0Fh
mov dl,data_19[bx]
sub_6:
loc_15:
push ax
mov ah,2
int 21h
pop ax
retn
sub_7:
mov dl,2Dh
jmp short loc_15
sub_8:
mov dl,0Dh
call sub_6
mov dl,0Ah
jmp short loc_15
loc_16:
mov dx,624h
mov cx,29h
loc_17:
mov bx,2
push ax
mov ah,40h
int 21h
jc loc_18
pop ax
loc_18:
mov ah,4Ch
int 21h
sub_3 endp
sub_9 proc near
xor bx,bx
xor cx,cx
inc si
lodsb
loc_19:
mov cl,al
mov ax,1
shl ax,cl
or bx,ax
lodsb
cmp al,0C8h
jb loc_19
mov cl,8
mov di,656h
mov ax,bx
loc_20:
stosw
shr ax,1
jnc loc_21
xor ax,bx
loc_21:
dec cl
jnz loc_20
retn
sub_9 endp
sub_10 proc near
mov si,656h
xor dx,dx
loc_22:
mov cx,dx
mov bx,si
xor ax,ax
loc_23:
shl cl,1
jnc loc_24
xor ax,[bx]
loc_24:
add bx,2
or cl,cl
jnz loc_23
stosw
inc dl
jnz loc_22
retn
sub_10 endp
sub_11 proc near
loc_25:
lodsb
mov bl,cl
xor bl,al
xor bh,bh
mov cl,ch
mov ch,0
add bx,bx
xor cx,[bx+di]
dec dx
jnz loc_25
retn
sub_11 endp
data_27 dw 4240h
data_28 dw 0Fh
data_29 dw 3E8h
data_30 dw 0Ah
sub_12 proc near
cmp dx,data_28
jb loc_32
ja loc_26
cmp ax,data_27
jb loc_32
loc_26:
mov bx,data_27
mov cx,data_28
xor si,si
loc_27:
inc si
shl bx,1
rcl cx,1
jno loc_27
xor di,di
loc_28:
shl di,1
cmp dx,cx
jb loc_30
ja loc_29
cmp ax,bx
jb loc_30
loc_29:
sub ax,bx
sbb dx,cx
inc di
loc_30:
shr cx,1
rcr bx,1
dec si
jge loc_28
push dx
push ax
mov ax,di
xor dx,dx
call sub_14
mov al,2Ch
call sub_19
pop ax
pop dx
div data_29
push dx
call sub_15
jmp short loc_33
sub_13:
xor dx,dx
cmp ax,2710h
jae loc_32
cmp ax,3E8h
jb loc_32
div data_29
or ax,ax
push dx
jz loc_31
call sub_16
loc_31:
pop ax
jmp short loc_34
sub_14:
loc_32:
div data_29
push dx
or ax,ax
jz loc_31
call sub_16
loc_33:
mov al,2Ch
call sub_19
pop ax
sub_15:
xor dx,dx
div data_30
jmp loc_35
db 88h, 0E0h, 32h, 0E4h
sub_16:
loc_34:
cmp ax,0Ah
jb loc_37
xor dx,dx
div data_30
cmp al,0Ah
jb loc_36
loc_35:
push dx
xor dx,dx
div data_30
call sub_17
pop ax
jmp loc_37
sub_17:
loc_36:
push dx
call sub_18
pop ax
sub_18:
loc_37:
add al,30h
sub_19:
mov ah,2
mov dl,al
int 21h
retn
sub_12 endp
db 0Dh, 0Ah, ' Sorry, I cannot open '
db 'the input file.', 0Dh, 0Ah, 0Dh, 0Ah
db ' Sorry, I cannot read the input '
db 'file.', 0Dh, 0Ah
db 90h
data_32 dw 0
data_33 dw 0
data_34 dw 0
data_35 dw 0
db 0ACh, 29h, 0ADh, 29h, 0AEh, 29h
db 0AFh, 29h, 0B0h, 29h, 0E9h, 70h
db 2, 0E9h, 49h, 2
db 14 dup (0)
db 0E9h, 0C7h, 0, 0Dh, 0, 0
db 0
db 44h, 29h
db 42 dup (0)
db 0CCh, 7, 6, 7
db 13 dup (0)
db 3, 2, 0CFh, 0C8h, 0Dh, 0C9h
db 0Dh
db 79 dup (0)
db 0Dh, 0Ah, 'Please enter the passw'
db 'ord now: '
db 0
db 0Dh, 0Ah, 'This program requires '
db 'DOS 3.00 or greater'
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
db 2Eh, 2Ah, 0
db 0Dh, 0Ah, '%%211#---4677^^^%'
db 7, 0Dh, 0Ah, 0, 42h, 23h
db 0
db 305 dup (0)
db 50h, 53h, 0A1h, 1, 1, 5
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
db 50h, 53h, 51h, 52h, 56h, 57h
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
db 0, 0EBh, 15h, 90h, 3Ch, 44h
db 75h, 6, 0E8h, 78h, 0, 0EBh
db 0Bh, 90h
loc_38:
cmp al,4Ch
jne loc_39
call sub_21
jmp short loc_40
loc_39:
stc
loc_40:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
cmp byte ptr cs:data_7e,0
je loc_41
mov ax,cs:data_4e
mov ds:data_1e,ax
mov ax,cs:data_5e
mov ds:data_2e,ax
mov ax,100h
mov cs:data_4e,ax
mov cs:data_5e,ds
jmp short loc_42
loc_41:
mov ax,cs
sub ax,cs:data_6e
add cs:data_5e,ax
loc_42:
pop ax
mov ss,word ptr cs:[121h]
mov sp,word ptr cs:[11Fh]
jmp dword ptr cs:data_4e
db 0BAh, 4, 1, 0E8h, 0BCh, 0
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
db 6, 58h, 0, 29h, 0BAh, 58h
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
db 0, 0E8h, 87h, 0, 0C3h
sub_20 proc near
mov ah,2Ah
int 21h
cmp cx,ds:data_8e
jb loc_44
cmp dh,ds:data_9e
jb loc_44
cmp dl,ds:data_10e
jb loc_44
jmp short loc_44
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
db 3, 73h, 4, 0F8h, 0EBh, 25h
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
db 1, 26h, 8Eh, 6, 2Ch, 0
db 33h, 0FFh
loc_43:
repne scasb
scasb
jnz loc_43
add di,2
push es
pop ds
mov dx,di
mov ah,41h
clc
pop es
pop ds
loc_44:
cmc
retn
sub_20 endp
sub_21 proc near
mov ah,1Ah
mov dx,83h
int 21h
mov ah,4Eh
mov cx,8
mov dx,0FFh
int 21h
mov si,0A1h
mov di,4Bh
cld
loc_45:
lodsb
scasb
stc
jnz loc_ret_46
or al,al
jnz loc_45
loc_ret_46:
retn
sub_21 endp
sub_22 proc near
push ax
push bx
push cx
mov ah,0Ah
int 21h
mov bx,dx
inc bx
mov cl,[bx]
xor ch,ch
jcxz loc_48
locloop_47:
inc bx
not byte ptr [bx]
loop locloop_47
loc_48:
pop cx
pop bx
pop ax
retn
sub_22 endp
sub_23 proc near
push cx
push si
push di
mov cl,ds:data_11e
xor ch,ch
mov si,59h
mov di,1Dh
cld
repe cmpsb
jz loc_49
stc
loc_49:
pop di
pop si
pop cx
retn
sub_23 endp
sub_24 proc near
push bx
push dx
mov bx,dx
loc_50:
mov dl,[bx]
or dl,dl
jz loc_51
call sub_25
inc bx
jmp short loc_50
loc_51:
pop dx
pop bx
retn
sub_24 endp
sub_25 proc near
push ax
mov ah,2
int 21h
pop ax
retn
sub_25 endp
sub_26 proc near
push dx
mov dl,0Dh
call sub_25
mov dl,0Ah
call sub_25
pop dx
retn
sub_26 endp
db 0, 0, 0, 0, 0ACh, 29h
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
db 0B0h, 29h, 0E9h, 70h, 2, 0E9h
db 49h, 2
db 14 dup (0)
db 0E9h, 60h, 5, 0Dh, 0, 0
db 0
db 44h, 29h
db 42 dup (0)
db 0EAh, 7, 0Ch, 1Fh, 0
db 12 dup (0)
db 3, 2, 0CCh, 0CEh, 0Dh, 0C9h
db 0Dh
db 79 dup (0)
db 0Dh, 0Ah, 'Please enter the passw'
db 'ord now: '
db 0
db 0Dh, 0Ah, 'This program requires '
db 'DOS 3.00 or greater'
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
db 2Eh, 2Ah, 0
db 0Dh, 0Ah, '%%211#---4677^^^%'
db 7, 0Dh, 0Ah, 0, 42h, 23h
db 0
db 305 dup (0)
db 50h, 53h, 0A1h, 1, 1, 5
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
db 50h, 53h, 51h, 52h, 56h, 57h
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
db 0, 0EBh, 15h, 90h, 3Ch, 44h
db 75h, 6, 0E8h, 78h, 0, 0EBh
db 0Bh, 90h
loc_52:
cmp al,4Ch
jne loc_53
call sub_28
jmp short loc_54
loc_53:
stc
loc_54:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
cmp byte ptr cs:data_7e,0
je loc_55
mov ax,cs:data_4e
mov ds:data_1e,ax
mov ax,cs:data_5e
mov ds:data_2e,ax
mov ax,100h
mov cs:data_4e,ax
mov cs:data_5e,ds
jmp short loc_56
loc_55:
mov ax,cs
sub ax,cs:data_6e
add cs:data_5e,ax
loc_56:
pop ax
mov ss,word ptr cs:[121h]
mov sp,word ptr cs:[11Fh]
jmp dword ptr cs:data_4e
db 0BAh, 4, 1, 0E8h, 0BCh, 0
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
db 6, 58h, 0, 29h, 0BAh, 58h
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
db 0, 0E8h, 87h, 0, 0C3h
sub_27 proc near
mov ah,2Ah
int 21h
cmp cx,ds:data_8e
jb loc_58
cmp dh,ds:data_9e
jb loc_58
cmp dl,ds:data_10e
jb loc_58
jmp short loc_58
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
db 3, 73h, 4, 0F8h, 0EBh, 25h
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
db 1, 26h, 8Eh, 6, 2Ch, 0
db 33h, 0FFh
loc_57:
repne scasb
scasb
jnz loc_57
add di,2
push es
pop ds
mov dx,di
mov ah,41h
clc
pop es
pop ds
loc_58:
cmc
retn
sub_27 endp
sub_28 proc near
mov ah,1Ah
mov dx,83h
int 21h
mov ah,4Eh
mov cx,8
mov dx,0FFh
int 21h
mov si,0A1h
mov di,4Bh
cld
loc_59:
lodsb
scasb
stc
jnz loc_ret_60
or al,al
jnz loc_59
loc_ret_60:
retn
sub_28 endp
sub_29 proc near
push ax
push bx
push cx
mov ah,0Ah
int 21h
mov bx,dx
inc bx
mov cl,[bx]
xor ch,ch
jcxz loc_62
locloop_61:
inc bx
not byte ptr [bx]
loop locloop_61
loc_62:
pop cx
pop bx
pop ax
retn
sub_29 endp
sub_30 proc near
push cx
push si
push di
mov cl,ds:data_11e
xor ch,ch
mov si,59h
mov di,1Dh
cld
repe cmpsb
jz loc_63
stc
loc_63:
pop di
pop si
pop cx
retn
sub_30 endp
sub_31 proc near
push bx
push dx
mov bx,dx
loc_64:
mov dl,[bx]
or dl,dl
jz loc_65
call sub_32
inc bx
jmp short loc_64
loc_65:
pop dx
pop bx
retn
sub_31 endp
sub_32 proc near
push ax
mov ah,2
int 21h
pop ax
retn
sub_32 endp
sub_33 proc near
push dx
mov dl,0Dh
call sub_32
mov dl,0Ah
call sub_32
pop dx
retn
sub_33 endp
db 0, 0, 0, 0, 0ACh, 29h
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
db 0B0h, 29h, 0E9h, 70h, 2, 0E9h
db 49h, 2
db 14 dup (0)
db 0E9h, 60h, 9, 0Dh, 0, 0
db 0
db 44h, 29h
db 42 dup (0)
db 0C2h, 7, 9, 0Bh, 0
db 12 dup (0)
db 3, 2, 0CEh, 0CEh, 0Dh, 0C9h
db 0Dh
db 79 dup (0)
db 0Dh, 0Ah, 'Please enter the passw'
db 'ord now: '
db 0
db 0Dh, 0Ah, 'This program requires '
db 'DOS 3.00 or greater'
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
db 2Eh, 2Ah, 0
db 0Dh, 0Ah, '%%211#---4677^^^%'
db 7, 0Dh, 0Ah, 0, 42h, 23h
db 0
db 305 dup (0)
db 50h, 53h, 0A1h, 1, 1, 5
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
db 6Bh, 2, 50h, 0CBh, 5Bh, 58h
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
db 2Eh, 8Ch, 6, 1Bh, 1, 2Eh
db 0A3h, 1Dh, 1, 2Eh, 89h, 26h
db 1Fh, 1, 2Eh, 8Ch, 16h, 21h
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
db 4Fh, 2, 2Eh, 0A1h, 1Dh, 1
db 50h, 53h, 51h, 52h, 56h, 57h
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
db 3Ch, 50h, 75h, 6, 0E8h, 6Ah
db 0, 0EBh, 15h, 90h, 3Ch, 44h
db 75h, 6, 0E8h, 78h, 0, 0EBh
db 0Bh, 90h
loc_66:
cmp al,4Ch
jne loc_67
call sub_35
jmp short loc_68
loc_67:
stc
loc_68:
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
cmp byte ptr cs:data_7e,0
je loc_69
mov ax,cs:data_4e
mov ds:data_1e,ax
mov ax,cs:data_5e
mov ds:data_2e,ax
mov ax,100h
mov cs:data_4e,ax
mov cs:data_5e,ds
jmp short loc_70
loc_69:
mov ax,cs
sub ax,cs:data_6e
add cs:data_5e,ax
loc_70:
pop ax
mov ss,word ptr cs:[121h]
mov sp,word ptr cs:[11Fh]
jmp dword ptr cs:data_4e
db 0BAh, 4, 1, 0E8h, 0BCh, 0
db 0B8h, 0FFh, 4Ch, 0CDh, 21h, 0BAh
db 0AEh, 0, 0E8h, 0B1h, 0, 0C6h
db 6, 58h, 0, 29h, 0BAh, 58h
db 0, 0E8h, 74h, 0, 0E8h, 0BDh
db 0, 0E8h, 87h, 0, 0C3h
sub_34 proc near
mov ah,2Ah
int 21h
cmp cx,ds:data_8e
jb loc_72
cmp dh,ds:data_9e
jb loc_72
cmp dl,ds:data_10e
jb loc_72
jmp short loc_72
db 90h, 0B4h, 30h, 0CDh, 21h, 3Ch
db 3, 73h, 4, 0F8h, 0EBh, 25h
db 90h, 1Eh, 6, 32h, 0C0h, 0B9h
db 0, 80h, 2Eh, 8Eh, 6, 1Bh
db 1, 26h, 8Eh, 6, 2Ch, 0
db 33h, 0FFh
loc_71:
repne scasb
scasb
jnz loc_71
add di,2
push es
pop ds
mov dx,di
mov ah,41h
clc
pop es
pop ds
loc_72:
cmc
retn
sub_34 endp
sub_35 proc near
mov ah,1Ah
mov dx,83h
int 21h
mov ah,4Eh
mov cx,8
mov dx,0FFh
int 21h
mov si,0A1h
mov di,4Bh
cld
loc_73:
lodsb
scasb
stc
jnz loc_ret_74
or al,al
jnz loc_73
loc_ret_74:
retn
sub_35 endp
sub_36 proc near
push ax
push bx
push cx
mov ah,0Ah
int 21h
mov bx,dx
inc bx
mov cl,[bx]
xor ch,ch
jcxz loc_76
locloop_75:
inc bx
not byte ptr [bx]
loop locloop_75
loc_76:
pop cx
pop bx
pop ax
retn
sub_36 endp
sub_37 proc near
push cx
push si
push di
mov cl,ds:data_11e
xor ch,ch
mov si,59h
mov di,1Dh
cld
repe cmpsb
jz loc_77
stc
loc_77:
pop di
pop si
pop cx
retn
sub_37 endp
sub_38 proc near
push bx
push dx
mov bx,dx
loc_78:
mov dl,[bx]
or dl,dl
jz loc_79
call sub_39
inc bx
jmp short loc_78
loc_79:
pop dx
pop bx
retn
sub_38 endp
sub_39 proc near
push ax
mov ah,2
int 21h
pop ax
retn
sub_39 endp
sub_40 proc near
push dx
mov dl,0Dh
call sub_39
mov dl,0Ah
call sub_39
pop dx
retn
sub_40 endp
db 0, 0, 0, 0, 0ACh, 29h
db 0ADh, 29h, 0AEh, 29h, 0AFh, 29h
db 0B0h, 29h, 0E9h, 6Ch, 2, 0E9h
db 45h, 2, 0
db 13 dup (0)
db 0E9h, 60h, 0Dh, 0Dh, 0, 0
db 0
db 44h, 29h
db 42 dup (0)
db 0D2h, 7, 1, 1
db 13 dup (0)
db 3, 2, 0CFh, 0CEh, 0Dh, 0CDh
db 0Dh
db 79 dup (0)
db 0Dh, 0Ah, 'Please enter the passw'
db 'ord now: '
db 0
db 0Dh, 0Ah, 'This program requires '
db 'DOS 3.00 or greater'
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
db 2Eh, 2Ah, 0
db 0Dh, 0Ah, 'Access denied'
db 7, 0Dh, 0Ah, 0, 42h, 23h
db 0
db 305 dup (0)
db 50h, 53h, 0A1h, 1, 1, 5
db 3, 1, 0D1h, 0E8h, 0D1h, 0E8h
db 0D1h, 0E8h, 0D1h, 0E8h, 8Bh, 0D8h
db 8Ch, 0C8h, 3, 0C3h, 50h, 0B8h
db 67h, 2, 50h, 0CBh, 5Bh, 58h
db 2Eh, 0C6h, 6, 1Ah, 0, 0FFh
db 2Eh, 8Ch, 6, 17h, 1, 2Eh
db 0A3h, 19h, 1, 2Eh, 89h, 26h
db 1Bh, 1, 2Eh, 8Ch, 16h, 1Dh
db 1, 8Ch, 0C8h, 8Eh, 0D0h, 0BCh
db 4Bh, 2, 2Eh, 0A1h, 19h, 1
db 50h, 53h, 51h, 52h, 56h, 57h
db 55h, 1Eh, 6, 8Ch, 0C8h, 8Eh
db 0D8h, 8Eh, 0C0h, 0A0h, 1Bh, 0
db 3Ch, 50h, 75h, 6, 0E8h, 6Ch
db 0, 0EBh, 15h, 90h, 3Ch, 44h
db 75h, 6, 0E8h, 7Ah, 0, 0EBh
db 0Bh, 90h
loc_80:
cmp al,4Ch
jne loc_81
call sub_42
jmp short loc_82
loc_81:
stc
loc_82:
jc loc_85
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
cmp byte ptr cs:data_7e,0
je loc_83
mov ax,cs:data_4e
mov ds:data_1e,ax
mov ax,cs:data_5e
mov ds:data_2e,ax
mov ax,100h
mov cs:data_4e,ax
mov cs:data_5e,ds
jmp short loc_84
loc_83:
mov ax,cs
sub ax,cs:data_6e
add cs:data_5e,ax
loc_84:
pop ax
mov ss,word ptr cs:[11Dh]
mov sp,word ptr cs:[11Bh]
jmp dword ptr cs:data_4e
loc_85:
mov dx,104h
call sub_45
mov ax,4CFFh
int 21h
db 0BAh, 0AEh, 0, 0E8h, 0B6h, 0
db 0C6h, 6, 58h, 0, 29h, 0BAh
db 58h, 0, 0E8h, 79h, 0, 0E8h
db 0C2h, 0, 0E8h, 8Ch, 0, 0C3h
sub_41 proc near
mov ah,2Ah
int 21h
cmp cx,ds:data_8e
jb loc_88
cmp dh,ds:data_9e
jb loc_88
cmp dl,ds:data_10e
jb loc_88
mov ah,30h
int 21h
cmp al,3
jae loc_86
mov dx,0D0h
call sub_45
clc
jmp short loc_88
db 90h
loc_86:
push ds
push es
xor al,al
mov cx,8000h
mov es,word ptr cs:copyright+1
mov es,es:data_3e
xor di,di
loc_87:
repne scasb
scasb
jnz loc_87
add di,2
push es
pop ds
mov dx,di
mov ah,41h
int 21h
clc
pop es
pop ds
loc_88:
cmc
retn
sub_41 endp
sub_42 proc near
mov ah,1Ah
mov dx,83h
int 21h
mov ah,4Eh
mov cx,8
mov dx,0FFh
int 21h
mov si,0A1h
mov di,4Bh
cld
loc_89:
lodsb
scasb
stc
jnz loc_ret_90
or al,al
jnz loc_89
loc_ret_90:
retn
sub_42 endp
sub_43 proc near
push ax
push bx
push cx
mov ah,0Ah
int 21h
mov bx,dx
inc bx
mov cl,[bx]
xor ch,ch
jcxz loc_92
locloop_91:
inc bx
not byte ptr [bx]
loop locloop_91
loc_92:
pop cx
pop bx
pop ax
retn
sub_43 endp
sub_44 proc near
push cx
push si
push di
mov cl,ds:data_11e
xor ch,ch
mov si,59h
mov di,1Dh
cld
repe cmpsb
jz loc_93
stc
loc_93:
pop di
pop si
pop cx
retn
sub_44 endp
sub_45 proc near
push bx
push dx
mov bx,dx
loc_94:
mov dl,[bx]
or dl,dl
jz loc_95
call sub_46
inc bx
jmp short loc_94
loc_95:
pop dx
pop bx
retn
sub_45 endp
sub_46 proc near
push ax
mov ah,2
int 21h
pop ax
retn
sub_46 endp
sub_47 proc near
push dx
mov dl,0Dh
call sub_46
mov dl,0Ah
call sub_46
pop dx
retn
sub_47 endp
db 0, 0ACh, 29h, 0ADh, 29h, 0AEh
db 29h, 0AFh, 29h, 0B0h, 29h, 0E9h
db 6Ch, 2
loc_96:
jmp loc_97
db 0
db 13 dup (0)
db 0E9h, 60h, 11h, 0Dh, 0, 0
db 0
db 44h, 29h
db 42 dup (0)
db 0D0h, 7, 6, 6
db 13 dup (0)
db 3, 2, 0CFh, 0C9h, 0Dh, 0CFh
db 0Dh
db 79 dup (0)
db 0Dh, 0Ah, 'Please enter the passw'
db 'ord now: '
db 0
db 0Dh, 0Ah, 'This program requires '
db 'DOS 3.00 or greater'
db 7, 0Dh, 0Ah, 0, 5Ch, 2Ah
db 2Eh, 2Ah, 0
db 0Dh, 0Ah, 'Access denied'
db 7, 0Dh, 0Ah, 0, 42h, 23h
db 0
db 305 dup (0)
loc_97:
push ax
push bx
mov ax,word ptr ds:[101h]
add ax,103h
shr ax,1
shr ax,1
shr ax,1
shr ax,1
mov bx,ax
mov ax,cs
add ax,bx
push ax
mov ax,267h
push ax
retf
db 5Bh, 58h, 2Eh, 0C6h, 6, 1Ah
db 0, 0FFh, 2Eh, 8Ch, 6, 17h
db 1, 2Eh, 0A3h, 19h, 1, 2Eh
db 89h, 26h, 1Bh, 1, 2Eh, 8Ch
db 16h, 1Dh, 1, 8Ch, 0C8h, 8Eh
db 0D0h, 0BCh, 4Bh, 2, 2Eh, 0A1h
db 19h, 1, 50h, 53h, 51h, 52h
db 56h, 57h, 55h, 1Eh, 6, 8Ch
db 0C8h, 8Eh, 0D8h, 8Eh, 0C0h, 0A0h
db 1Bh, 0, 3Ch, 50h, 75h, 6
db 0E8h, 6Ch, 0, 0EBh, 15h, 90h
db 3Ch, 44h, 75h, 6, 0E8h, 7Ah
db 0, 0EBh, 0Bh, 90h
loc_98:
cmp al,4Ch
jne loc_99
call sub_49
jmp short loc_100
loc_99:
stc
loc_100:
jc loc_103
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
cmp byte ptr cs:data_7e,0
je loc_101
mov ax,cs:data_4e
mov ds:data_1e,ax
mov ax,cs:data_5e
mov ds:data_2e,ax
mov ax,100h
mov cs:data_4e,ax
mov cs:data_5e,ds
jmp short loc_102
loc_101:
mov ax,cs
sub ax,cs:data_6e
add cs:data_5e,ax
loc_102:
pop ax
mov ss,word ptr cs:[11Dh]
mov sp,word ptr cs:[11Bh]
jmp dword ptr cs:data_4e
loc_103:
mov dx,104h
call sub_52
mov ax,4CFFh
int 21h
db 0BAh, 0AEh, 0, 0E8h, 0B6h, 0
db 0C6h, 6, 58h, 0, 29h, 0BAh
db 58h, 0, 0E8h, 79h, 0, 0E8h
db 0C2h, 0, 0E8h, 8Ch, 0, 0C3h
sub_48 proc near
mov ah,2Ah
int 21h
cmp cx,ds:data_8e
jb loc_106
cmp dh,ds:data_9e
jb loc_106
cmp dl,ds:data_10e
jb loc_106
mov ah,30h
int 21h
cmp al,3
jae loc_104
mov dx,0D0h
call sub_52
clc
jmp short loc_106
db 90h
loc_104:
push ds
push es
xor al,al
mov cx,8000h
mov es,word ptr cs:copyright+1
mov es,es:data_3e
xor di,di
loc_105:
repne scasb
scasb
jnz loc_105
add di,2
push es
pop ds
mov dx,di
mov ah,41h
int 21h
clc
pop es
pop ds
loc_106:
cmc
retn
sub_48 endp
sub_49 proc near
mov ah,1Ah
mov dx,83h
int 21h
mov ah,4Eh
mov cx,8
mov dx,0FFh
int 21h
mov si,0A1h
mov di,4Bh
cld
loc_107:
lodsb
scasb
stc
jnz loc_ret_108
or al,al
jnz loc_107
loc_ret_108:
retn
sub_49 endp
sub_50 proc near
push ax
push bx
push cx
mov ah,0Ah
int 21h
mov bx,dx
inc bx
mov cl,[bx]
xor ch,ch
jcxz loc_110
locloop_109:
inc bx
not byte ptr [bx]
loop locloop_109
loc_110:
pop cx
pop bx
pop ax
retn
sub_50 endp
sub_51 proc near
push cx
push si
push di
mov cl,ds:data_11e
xor ch,ch
mov si,59h
mov di,1Dh
cld
repe cmpsb
jz loc_111
stc
loc_111:
pop di
pop si
pop cx
retn
sub_51 endp
sub_52 proc near
push bx
push dx
mov bx,dx
loc_112:
mov dl,[bx]
or dl,dl
jz loc_113
call sub_53
inc bx
jmp short loc_112
loc_113:
pop dx
pop bx
retn
sub_52 endp
sub_53 proc near
push ax
mov ah,2
int 21h
pop ax
retn
sub_53 endp
sub_54 proc near
push dx
mov dl,0Dh
call sub_53
mov dl,0Ah
call sub_53
pop dx
retn
sub_54 endp
db 0F0h, 0FDh, 0C5h, 0AAh, 0FFh, 0F0h
db 8Dh, 6Dh, 0B2h
db 73h
seg_a ends
end start
-------------------------------------------------------------------------------