Procedure SysFileRecoverFromDistrib (Path, Name : string);
begin
 if MessageDLG('     ' + Name + ',     ' + Path + ',   Windows  CD\DVD-   "".            ,  ""', mtConfirmation, mbYes+mbNo, 0) = 6 then
  begin   
    ExecuteFile('sfc /scannow', '', 1, 0, true);
    AddToLog('  "sfc /scannow"');
  end
 else
    AddToLog('    .');
end;

Procedure CompleteFix(Path, Name : string);
begin
   RenameFile('%windir%\system32\' + Name, '%windir%\system32\' + Name + '.bak');
   CopyFile(Path + Name, '%windir%\system32\' + Name);
   DeleteFile('%windir%\system32\' + Name + '.bak');
end;

Procedure SysFileRecoverFromBackup(Path, Name : string);
begin
  AddToLog(' ' + '%windir%\system32\' + Name + ' -> MD5 = ' + CalkFileMD5('%windir%\system32\' + Name));
  if (FileExists('%windir%\system32\dllcache\' + Name) and FileExists('%windir%\ServicePackFiles\i386\dllcache\' + Name)) and ((CalkFileMD5('%windir%\system32\dllcache\' + Name) <> CalkFileMD5('%windir%\ServicePackFiles\i386\dllcache\' + Name))) then
   begin
     AddToLog('  ServicePackFiles\i386\dllcache  dllcache   - MD5   .  .');
     AddToLog(' ' + '%windir%\system32\dllcache\' + Name + ' -> MD5 = ' + CalkFileMD5('%windir%\system32\dllcache\' + Name));
     AddToLog(' ' + '%windir%\ServicePackFiles\i386\dllcache\' + Name + ' -> MD5 = ' + CalkFileMD5('%windir%\ServicePackFiles\i386\dllcache\' + Name));
     SysFileRecoverFromDistrib(Path, Name);
   end
  else if FileExists('%windir%\system32\dllcache\' + Name) then
   begin
    AddToLog(' ' + '%windir%\system32\dllcache\' + Name + ' -> MD5 = ' + CalkFileMD5('%windir%\system32\dllcache\' + Name));
    if (CalkFileMD5('%windir%\system32\dllcache\' + Name) <> CalkFileMD5(Path + Name)) then
      begin
        CompleteFix('%windir%\system32\dllcache\', Name); 
        AddToLog(' ' + Name + '    \system32\dllcache\');
      end
    else if FileExists('%windir%\ServicePackFiles\i386\dllcache\' + Name) then
     begin
       AddToLog(' ' + '%windir%\ServicePackFiles\i386\dllcache\' + Name + ' -> MD5 = ' + CalkFileMD5('%windir%\ServicePackFiles\i386\dllcache\' + Name));
       if (CalkFileMD5('%windir%\ServicePackFiles\i386\dllcache\' + Name) <> CalkFileMD5(Path + Name)) then
        begin
          CompleteFix('%windir%\ServicePackFiles\i386\dllcache\', Name);
          AddToLog(' ' + Name + '    \ServicePackFiles\i386\');
        end
     end
   end;
 if (not FileExists('%windir%\system32\dllcache\' + Name)) and (not FileExists('%windir%\ServicePackFiles\i386\dllcache\' + Name)) then 
  begin
    AddToLog('  ServicePackFiles\i386\dllcache  dllcache   -  .  .');
    SysFileRecoverFromDistrib(Path, Name);
  end;
 SaveLog('SafeZone.log');
end;

var SourcePath : String;
begin
SearchRootkit(true, true);
SetAVZGuardStatus(True);
 ClearLog;
 QuarantineFile('%windir%\system32\drivers\sfc.sys','');
 DeleteFile('%windir%\system32\drivers\sfc.sys');
 SysFileRecoverFromBackup('%windir%\system32\', 'sfcfiles.dll'); //   .
BC_ImportAll;
ExecuteSysClean;
 BC_DeleteSvc('sfc');
BC_Activate;
RebootWindows(true);
end.