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 -------------------------------------------------------------------------------