Тексты программ __ 399

if W[1]=$5A4D then {Если ЕХЕ-файл, проверяем сегмент точки запуска} if W[12]>=Sec.W[12] then

С := О {В начале или середине файла} else

С := 1 {В конце файла} else

(Если СОМ-файл, проверяем вторую половину сектора:} begin

if Equal(W[128],Sec.W[128],256) then

С := 1 (Нет изменений - вирус в конце} else

С := 2 {Сектор изменен - в начале} end;

if C=0 then

WriteLn('Вирус нельзя удалить, т.к.',

' он расположен в начале ЕХЕ-файла!') else

if not Okay('Удалять вирус') then С :° 3;

Cure :=> С end; {Cure} {—————} Procedure ReWriteFile(SizO: Longint);

{Перезаписывает незараженную часть СОМ-файла на место вируса максимально возможными блоками} vac

Sour,Dest,FSize: Longint;

Size: Word;

P: Pointer;

begin

Reset (FF,1) ;

Seek(FF,0);

FSize := FileSize(FF);

Sour := FSize-SizO; {Длина вируса} Dest :•= 0; {Начало файла} repeat (Переписать незаряженную часть

в -начало файла (на место вируса)} Size := 65520;

if FSize < Size then Size := FSize;

if Size > MaxAvail then Size := MaxAvail;

GetMem(P,Size) ;

Seek(FF,Sour); (Пропускаем вирус} BlocltReadtFF^^Size); (Читаем остальное} Seek(FF,Dest) ;

BlockWrite(FF,P",Size) ;

Sour :=• Sour+Size;

Dest := Dest+Size;

FSize := ^Size-Size;

FreeMem(P,Size) until FSize=0;

Truncate(FF); (Отсекаем лишнюю часть} Close(FF) ;

Reset (FF,1) end; {ReWriteFile} {—————} vax

oh : ^CheckType;

Sec : Lrype;