Проверка целостности системных файлов утилитой sfc

Проверка целостности системных файлов утилитой sfc 0.7.6

Кирилл

Команда форума
Администратор
Ассоциация VN
Сообщения
14,068
Реакции
5,780
Пользователь Koza Nozdri разместил новый ресурс:

Проверка целостности системных файлов утилитой sfc - Проверка целостности системных файлов утилитой sfc с выводом лога.

Автоматизированный скрипт проверки sfc/scannow.
Определяет версию ОС и выполняет действия соответствующие версии системы.
Самостоятельно определяет путь к виртуальному приводу с смонтированным образом,проверяет наличие диска и уровня доступа пользователя.
На системах старше Vista выводит лог проверки на рабочий стол.

Обсуждение в этой теме.

Узнать больше об этом ресурсе...
 
Пользователь Koza Nozdri обновил ресурс Проверка целостности системных файлов утилитой sfc новой записью:

Обновление скрипта-добавлена возможность выбора папки для сохранения лога,улучшен сбор лога.

Учтены случаи когда лог не создавался,добавленв возможность самостоятельно выбрать папку для сохранения отчета.
Планируется Win PE версия.

Узнать больше об этом обновлении...
 
Кирилл, пересохрани, пожалуйста, в zip-формате. А то 7z не везде удобно распаковывать, особенно на виртуалках.

И я все же настоятельно прошу сначала копировать CBS в другой каталог, а затем парсить.
В новых системах не всегда findstr может получить доступ к этому файлу в системном каталоге (возможен также конфликт общего доступа).

Код:
copy /y %windir%\Logs\CBS\CBS.log %live%\
findstr /c:"[SR]" %live%\CBS.log>%live%\sfcdetails.txt
del /F /Q %live%\CBS.log

Зачем это Эхо без ничего?.
Код:
echo | cscript.exe //nologo "%~dp0Copy.vbs" "%~dpnx0" >null

++ здесь везде %live% без кавычек. Если юзер выберет папку с пробелами, будут проблемы.

Код:
cscript.exe //nologo "%~dp0Copy.vbs" "%~dpnx0" >null
set /p live=<nul
Чтобы контролировать, когда не выбрана вообще папка (и не создавать лишнего файла null),
можно заменить на:
Код:
For /F "delims=" %%a in ('cscript.exe //nologo "%~dp0Copy.vbs" "%~dpnx0"') do set live=%%a
if not Defined live Echo (Не выбран каталог& echo ++ тут сам придумаешь какая команда)
Тогда в скрипте нужно будет вместо
Код:
echo if err then WScript.Echo^("Не выбран каталог"^) else WScript.Echo ^(sPath^)
написать:
Код:
echo if not err then WScript.Echo ^(sPath^)
 
Кирилл, пересохрани, пожалуйста, в zip-формате. А то 7z не везде удобно распаковывать, особенно на виртуалках.

.....

где то косяк,ищу...

@echo off
Chcp 866 >nul
title Проверка целостности системных файлов.
SetLocal EnableExtensions EnableDelayedExpansion

SET Version=Unknown
VER | FINDSTR /IL "5.0" > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows 2000"
VER | FINDSTR /IL "5.1." > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows XP"
VER | FINDSTR /IL "5.2." > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows 2003"
VER | FINDSTR /IL "6.0." > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows Vista"
VER | FINDSTR /IL "6.1." > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows 7"
VER | FINDSTR /IL "6.2." > NUL
IF %ERRORLEVEL% EQU 0 SET Version="Windows 8"


echo.
echo.


IF %VERSION% == "Windows XP" GOTO XP
IF %VERSION% == "Windows 2000" GOTO XP
IF %VERSION% == "Windows 2003" GOTO XP
IF %VERSION% == "Windows Vista" GOTO Elevate
IF %VERSION% == "Windows 7" GOTO Elevate
IF %VERSION% == "Windows 8" GOTO Elevate
GOTO Unknown

:WIN7
REG DELETE hkcr\test.associatoon /f
cls
echo Версия Вашей операционной системы: %VERSION%
echo.
echo.
echo ---- _SFC_ ----
echo.
echo Если есть установочный диск с версией Вашей Windows вставьте его в дисковод.
echo.
echo.
echo 1. Продолжить проверку без диска
echo (Введите цифру 1 и нажмите клавишу Enter)
echo.
echo 2. Продолжить проверку с диском
echo (Вставьте диск в дисковод,введите цифру 2 и нажмите клавишу Enter)
echo.
If exist %~dp0Elevating.vbs (erase /q %~dp0Elevating.vbs)
GoTo menu

:menu
set choice=
Set /p choice="Ваш выбор: "
if not defined choice goto menu
if "%choice%"=="1" (goto sfco)
if "%choice%"=="2" (goto sfco)
Echo.
cls
Echo ═Вы выбрали неверное значение=
Echo.
echo.
echo.
echo 1. Продолжить проверку без диска
echo (Введите цифру 1 и нажмите клавишу Enter)
echo.
echo 2. Продолжить проверку с диском
echo (Вставьте диск в дисковод,введите цифру 2 и нажмите клавишу Enter)
goto menu

:Elevate
reg add hkcr\test.associatoon /f && goto :WIN7
cls
Echo Требуются права Администратора.
Echo.
echo Для продолжения нажмите клавишу ENTER
echo.
pause>nul
Echo CreateObject^("Shell.Application"^).ShellExecute WScript.Arguments^(0^),"%~1","","runas",1 >"%~dp0Elevating.vbs"
cscript.exe //nologo "%~dp0Elevating.vbs" "%~dpnx0"& exit

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:sfco
cls
Echo.
Echo ВНИМАНИЕ!
Echo.
Echo Сейчас будет запущена проверка системных файлов на целостность.
Echo Не выключайте компьютер и не закрывайте окно консоли пока не закончится проверка
sfc/scannow||(
cls
echo Ошибка выполнения скрипта,перезагрузите компьютер и попробуйте снова
echo запустить скрипт.
Echo.
echo Сообщите о проблеме хэлперу .
ping -n 10 127.0.0.1 > NUL
GoTo exite
)
echo.
echo.
echo.
echo.
echo Проверка завершена,теперь выберите папку для сохранения результата проверки,
echo он будет сохранен в выбранной папке в виде файла Sfcdetalis.txt
echo Прикрепите его на форум к вашему сообщению.
goto folder

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:folder
(
echo on error resume next
echo sPath = CreateObject^("Shell.Application"^).BrowseForFolder^(0, "┬√схЁшЄх яряъє фы ёюїЁрэхэш ыюура", 17^).self.Path
echo if not err then WScript.Echo ^(sPath^) )> "%~dp0Copy.vbs"

For /F "delims=" %%a in ('cscript.exe //nologo "%~dp0Copy.vbs" "%~dpnx0"') do set live=%%a
if not Defined live Echo ( Не выбран каталог для сохранения лога
cls
goto folder
)
goto parser
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:parser

echo Вы выбрали папку "%live%"
echo.
del /f /q %~dp0Copy.vbs
del /f /q %~dp0null
copy /y %windir%\Logs\CBS\CBS.log %live%\
findstr /c:"[SR]" %live%\CBS.log>%live%\sfcdetails.txt
IF NOT EXIST "%live%"\sfcdetails.txt (
echo При сохранении отчета произошла ошибка,прикрепите файл "%live%"\CBS.log
echo или %windir%\Logs\CBS\CBS.log
echo.
echo Для продолжения нажмите клавишу ENTER
echo.
pause>nul) else (echo Лог сохранен в "%live%"
echo.
del /F /Q %live%\CBS.log
echo Для продолжения нажмите клавишу ENTER
pause>nul

start "%live%")
GoTo exite

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:XP
echo Версия Вашей операционной системы: %VERSION%
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i:
if not exist %cdrom%\win51.* (
echo.
echo.
echo.
echo Вам необходимо вставить диск с вашей копией Windows XP
echo либо смонтировать образ диска в виртуальный привод.& goto cdopen
) else (goto koz)


::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:cdopen
set m.msg=^
ДА - Диск с Windows вставлен (или образ смонтирован)^&^
НЕТ - Выход из программы (ни диска ни образа нет)

cmd /U /C echo Wscript.Echo Msgbox^(replace^(Wscript.Arguments^(0^),"&",vbLF^),67,"Проверка диска"^)>"msgbox.vbs"
for /f %%a in ('cscript "msgbox.vbs" "%m.msg%"^& del "msgbox.vbs"') do set err=%%a
if "%err%"=="2" goto Exite
if "%err%"=="6" goto XP
if "%err%"=="7" goto Exite
goto Exite

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:koz
echo.
echo.
echo Сохраняю резервную копию реестра...
reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" %systemdrive%\install.reg
echo.
echo Устанавливаю значения реестра...
echo.
echo Дистрибутив обнаружен...
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v ServicePackSourcePath /t reg_sz /d %cdrom%\ /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v "Installation Sources" /t reg_sz /d %cdrom%\ /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup" /v SourcePath /t reg_sz /d %cdrom%\ /f
sfc/scannow
reg import %systemdrive%\install.reg
del /q %systemdrive%\install.reg
echo.
echo.
ping -n 5 127.0.0.1 > NUL
cls
echo Проверка целостности системных файлов начата.
echo Дождитесь окончания проверки.
ping -n 15 127.0.0.1 > NUL
goto Exite

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


:Exite
cls
Echo ====== Работа скрипта завершена ======
Echo.
Echo.
Echo Скрипт подгтовлен Koza Nozdri
Echo Сайт: SafeZone.cc
Echo E-mail: Fire@safezone.cc
Echo.
Echo======================================================================
Echo Бесплатное лечение компьютерных вирусов и решение проблем в работе ПК
ping -n 15 127.0.0.1 > NUL
Exit

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:UNKNOWN
cls
Echo ===== ERROR! =====
Echo Данный скрипт не предназначен для Вашей операционной системы,
Echo воспользуйтесь соответствующим версии Вашей операционной системs сценарием
Echo или обратитесь за помощью на форум: SafeZone.cc
ping -n 10 127.0.0.1 > NUL
Exit
For /F "delims=" %%a in ('cscript.exe //nologo "%~dp0Copy.vbs" "%~dpnx0"') do set live=%%a
Переменная Live не создается в таком варианте.
 
Последнее редактирование:
Напиши вместо @echo off
Код:
Echo. 1>&3 2>&4 3>>log.txt 4>&3

Запусти скрипт. Проанализируй команды в протоколе.
 
Пользователь Koza Nozdri обновил ресурс Проверка целостности системных файлов утилитой sfc новой записью:

Доработан алгоритм,добавлено определение Windows 8.1

Доработан алгоритм,добавлено определение Windows 8.1
Благодарность за замечания Dragokas и glax24

Узнать больше об этом обновлении...
 
Koza Nozdri, известен ли тебе сам механизм проверки валидности (целостности) системных файлов ?
Например, в XP диск запрашивается только если обнаружено повреждение целостности (т.е. проверка идет не сравнительным анализом).
Следовательно меня интересует по каким критериям это происходит -
т.е. как вариант - я проверил проходит ли проверка по каталогу безопасности Microsoft.
Судя из имен импортируемых в sfc.dll и sfc_os.dll функций это неверный вариант.
А еще - какие конкретно сис. файлы подлежат проверке (как получить их исчерпывающий перечень) ?
 
Последнее редактирование:
механизм проверки валидности


так и назовем пост.
Начнем с ХР.

Проверка правильности версии защищенных системных файлов производится с помощью подписей файлов и файлов каталога, созданных в процессе подписывания.
Список анализируется с помощью механизма защиты файлов Windows (WFP),SFC контролирует около 3000 системных файлов.
(Библиотека Sfc.dll обеспечивает защиту указанных в списке файлов.)
Вот примерный список каталогов,за которыми ведется "наблюдение":
Код:
\%systemroot%\
\%systemroot%\system\
\%systemroot%\system32\
\%systemroot%\system32\wbem\
\%systemroot%\system32\usr\bri\
\%systemroot%\system32\spool
\prtprocs\
\%systemroot%\system32\spool
\prtprocs\w32x86\
\%systemroot%\system32\spool
\drivers\w32x86\3\
\%systemroot%\system32\rpcproxy\
\%systemroot%\system32\reminst\
\%systemroot%\system32\os2\dll\
\%systemroot%\system32\npp\
\%systemroot%\system32\netmon\
\%systemroot%\system32\mui\0009\
\%systemroot%\system32\mts\
\%systemroot%\system32\mts\mtxclex\
\%systemroot%\system32\inetsrv\
\%systemroot%\system32\export\
\%systemroot%\system32\drivers\
\%systemroot%\system32\com\
\%systemroot%\system32\clients
\tsclient\net\win32a\
Но это не весь список.Копии оригинальных файлов из списка SFC хранятся в каталоге \%systemroot%\ system32\dllcache, если только в реестре в параметре SfcDllCacheDir не указано иное.

Говорят можно отследить список запустив sfc.dll через утилиту Strings
Не разбирался с этим еще.

Если цифровая подпись не совпадает (т.е. отсутствует в каталоге) или замененный файл вообще не имеет подписи, служба защиты файлов Windows извлекает оригинальную версию файла из папки кэша и перезаписывает оригинальную версию поверх новой версии файла. Уведомление о предпринятых действиях записывается в журнал изменений.

Выполняемые файлы, для которых компанией Microsoft создаются цифровые подписи, распространяются в составе следующих приложений.

  • Пакеты обновлений, запускаемые с помощью Update.exe
  • Исправления (hotfix), запускаемые с помощью Ноtfiх.ехе
  • Обновления операционной системы, запускаемые с помощью Winnt32.ехе
  • Служба Windows Update
  • Диспетчер устройств/Установщик классов (Device Manager/Class Installer)
Если в \%systemroot%\ system32\dllcache оказалось не густо,или вообще ничего не оказалось то идет поиск директории i386 и уже оттуда идет восстановление в аналогичном порядке- сначала в \%systemroot%\ system32\dllcache,потом в целевую папку.
 

Вложения

  • sfc.dll.txt
    1.1 KB · Просмотры: 5
  • sfc.exe.txt
    10.9 KB · Просмотры: 5
В общем файлы сравниваются по данным,сертификаты зашифрованы в

HKCU\Software\Microsoft\SystemCertificates\CA\Certificates\
HKLM\SOFTWARE\Microsoft\SystemCertificates\CA\Certificates

И всех остальных,данные как я понял дешифруются с помощью crypt32.dll (шифрование диска),далее криптография на 10 страниц,куча инфы которую сложно перевести на русский,так же сложно воспринимать,если разбираться то понадобятся знания разных областей.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb204781(v=vs.85).aspx


Думаю перенести обсуждение непосредственно в тему про sfc
https://safezone.cc/threads/obzor-utility-sfc-exe.18934/
 
Пользователь Koza Nozdri обновил ресурс Проверка целостности системных файлов утилитой sfc новой записью:

Убрал автоматическую элевацию UAС (особенности bath),убрал весь мусор.

Финальный вариант,на всех системах работает отлично.
Убрал автоматическую элевацию UAС (особенности bath),убрал весь мусор,исправил баг с удалением следов работы скрипта.

Узнать больше об этом обновлении...
 
Посмотри утилиту SFCFix by niemiro
Может, есть смысл переговорить с ее разработчиком для свежих идей.

Пришел ответ.
Позитивный.

Во первых привет @akok от тамошнего админа (уж не знаю какие у них дела)
А во вторых встает вопрос о том,как избежать анекдотичности при общении.
Трнаслит это конечно нечто,несерьезно.

Ну и я думаю тут коллективно нужно подойти к проекту.

От меня - все наработки и алгоритмы,мысли ,от вас - содействие.

Что скажете насчет трансконтинентального проекта?:Big Boss:в понедельник покажу им некоторые обновления утилиты,которые пока не доступны другим пользователям.
 
Последнее редактирование:
Трнаслит это конечно нечто,несерьезно.
Ну и я думаю тут коллективно нужно подойти к проекту.
От меня - все наработки и алгоритмы,мысли ,от вас - содействие.

Пишите, стучите... Чем смогу помогу.

Для начала нужно для себя определится, что это будет.
Просто перевод или что-то большее.

Основная затея той утили - скачивание с их файл.сервера сис. файла, если он поврежден в хранилище
(на это действие запрашивается разрешение у пользователя).
 
Назад
Сверху Снизу