Тексты программ __ 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;