Как проверить windows 10 на ошибки

Проверка целостности файлов в Windows

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

Основные принципы

Основная идея контроля целостности – вычислить хэш от содержимого файла или его части, а затем сравнить его с эталонным. Могут быть использованы три основных способа контроля целостности:

  1. Вычисление хэша исполняемого файла вручную
  2. Задание контрольной суммы в заголовке исполняемого файла
  3. Проверка встроенной цифровой подписи исполняемого файла
  4. Проверка цифровой подписи исполняемого файла при запуске

Симптомы

Средство проверки системных файлов Windows (SFC) встроено во все современные версии Windows. Этот инструмент позволяет восстанавливать поврежденные системные файлы в Windows. SFC может быть запущено с правами администратора как в Windows, так и с помощью носителя для восстановления Windows.

Если SFC не может восстановить поврежденные системные файлы Windows, следующим вариантом будет выполнить чистую установку Windows.

Причина

Информация о причине отсутствует.

Разрешение

Запуск средства проверки системных файлов (SFC) в Windows от имени администратора.

Windows 11, Windows 10, Windows 8 или 8.1

  1. На рабочем столе нажмите сочетание клавиш Windows+X.
  2. В меню выберите пункт Командная строка (администратор).
  3. В окне контроля учетных записей (UAC) нажмите Да.
  4. В окне Командная строка введите SFC /scannow и нажмите клавишу Enter.
  5. Средство проверки системных файлов проверяет целостность системных файлов Windows и при необходимости восстанавливает их.
  6. После завершения процесса перезагрузите компьютер.

Запуск средства проверки системных файлов (SFC) с помощью носителя для восстановления Windows

Windows 11, Windows 10, Windows 8 или 8.1

  1. Создайте установочный диск Windows с помощью инструмента Dell OS Recovery.
  2. Подключите установочный USB-накопитель к компьютеру.
  3. Включите компьютер и нажмите клавишу F12, чтобы войти в меню однократной загрузки.
  4. Выберите из списка USB-накопитель и нажмите Enter.
  5. Компьютер загружается с установочного USB-накопителя.
  6. Выберите Язык и нажмите кнопку Далее.
  7. Выберите параметр Восстановление компьютера.
  8. Нажмите Устранение неполадок, а затем Дополнительные параметры.
  9. Выберите Командная строка в списке.
  10. Введите sfc /scannow /offbootdir=c:\ /offwindir=c:\windows и нажмите Enter.
  11. Средство проверки системных файлов проверяет целостность системных файлов Windows и при необходимости восстанавливает их.
  12. После завершения процесса перезагрузите компьютер.

Примечание: Этот процесс может занять до часа, в зависимости от конфигурации компьютера.

Модификаторы

Базовое сканирование с помощью средства проверки системных файлов (SFC) с модификатором /scannow устраняет большинство проблем. Однако можно использовать другие модификаторы.

Функция модификатора

  • /scannow — сканирование всех системных файлов с заменой поврежденных или неверных файлов.

  • /scanonce — сканирование всех системных файлов один раз.

  • /scanboot — сканирование всех системных файлов во время загрузки при каждой перезагрузке системы.

  • /cancel — отменяет все предстоящие сканирования (например, модификатор /scanboot).

  • /enable — включает WFP (защита файлов Windows), которая предотвращает изменение системных файлов Windows какими-либо программами.

Возможные результаты

Существует четыре возможных сообщения о завершении:

  • Защита ресурсов Windows не обнаружила нарушений целостности.

  • Защита ресурсов Windows обнаружила поврежденные файлы и успешно исправила их. Подробные сведения приведены в журнале CBS.log: %inDir%\logs\cbs\cbs.log

  • Защита ресурсов Windows обнаружила поврежденные файлы, но не смогла исправить некоторые из них. Подробные сведения приведены в журнале CBS.log: %Windir%\logs\cbs\cbs.log

  • Защите ресурсов Windows не удалось выполнить требуемую операцию.

Дополнительная информация

Chromebox, Alienware, Inspiron, Legacy Desktop Models, OptiPlex, Vostro, XPS, G Series, Chromebook, G Series, Alienware, Inspiron, Latitude, Vostro, XPS, Legacy Laptop Models, Fixed Workstations, Mobile Workstations

18 окт. 2023

В процессе эксплуатации в операционной системе Windows накапливаются ошибки. Иногда они внешне проявляются в виде замедления работы компьютера и жёсткого диска, самопроизвольной перезагрузки или отключения. Грамотный пользователь периодически выделяет время для проверки системы на обнаружение ошибок и их исправления. Кажущаяся потеря времени компенсируется длительным периодом комфортной работы на компьютере. Игнорирование тревожных признаков, наоборот, неминуемо приведёт к появлению серьёзных неприятностей и потере значительно большего времени на избавление от них.

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

Так и тут, в первую очередь следует воспользоваться встроенными программами, которые при корректном применении гарантированно не нанесут никакого вреда компьютеру и помогут предотвратить осложнения в будущем. Сегодня мы расскажем, как проверить Windows 10 на ошибки.

В Windows предусмотрено несколько встроенных утилит для проверки системы на жёстком диске. Большинство из них запускается только в режиме командной строки.

Check Disk

Решение проблем с жестким диском в Windows

Многие проблемы с компьютерами могут возникать из-за поврежденных или битых секторов на жестком диске. Утилита CHKDSK (Check Disk) специализируется на обнаружении и исправлении этих проблем.

Проверка с помощью CHKDSK

  1. В контекстном меню кнопки Пуск выберите Командная строка (администратор).

Вызов командной строки

  1. В командной строке введите команду chkdsk C: для проверки системного диска. Добавьте параметры:
    • F – исправить обнаруженные ошибки;
    • R – обнаружить битые сектора (при наличии F).

Подготовка к проверке системного диска

  1. После запуска утилиты система предложит отложить проверку до следующей перезагрузки. Согласитесь, набрав y и нажав Enter.

После перезагрузки Windows произойдет проверка системного диска на ошибки в три этапа.

Экран в процессе проверки системного диска

System File Checker (SFC)

Утилита проверяет целостность системных файлов Windows. Чтобы запустить ее:

  1. Запустите командную строку с правами администратора.
  2. Введите sfc /scannow и нажмите Enter.

После завершения проверки вы увидите одно из трех сообщений:

  • Защита ресурсов Windows не обнаружила нарушений целостности;
  • Защита ресурсов Windows обнаружила поврежденные файлы и успешно их восстановила;
  • Защита ресурсов Windows обнаружила поврежденные файлы, но не может восстановить некоторые из них.

Восстановление системных файлов

Deployment Image Servicing and Management (DISM)

Перед запуском DISM учтите, что проверка может занять время. Предварительно отключите режим отключения винчестера, закройте антивирус и открытые окна.

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

Восстановление компонентов Windows с помощью утилиты DISM

Шаг 1: Запуск утилиты DISM для сканирования

После вызова командной строки с правами администратора (см. п.1 первого подзаголовка) набираем в ней следующую команду:

DISM.exe /Online /Cleanup-image /ScanHealth

Повреждённые компоненты можно восстановить.

Диагностическое сообщение о потенциальной возможности восстановления

Шаг 2: Ожидание завершения сканирования

Как указывалось выше, процесс сканирования здоровья не быстрый. Утилита может кажется зависшей на 20%, но по окончании проверки обычно выдает сообщение о необходимости восстановления хранилища компонентов.

Шаг 3: Восстановление компонентов

Для восстановления запускаем утилиту DISM с изменённым третьим параметром:

dism /Online /Cleanup-image /RestoreHealth

В большинстве случаев попытка проходит успешно, и на экране появляется сообщение о завершении восстановления.

Осведомительное сообщение об успешном восстановлении

Однако, если восстановление не удалось, придется использовать образ системы или выполнять переустановку Windows.

Осведомительное сообщение о неудачной попытке восстановления


Dism можно использовать и в PowerShell, запущенной от имени администратора. Команды в PowerShell будут немного отличаться:

  • Repair-WindowsImage -Online -ScanHealth — диагностика наличия повреждений.
  • Repair-WindowsImage -Online -RestoreHealth — исправление неполадок.

Проверка целостности компонентов программы Kaspersky Security Center

Для проверки целостности компонентов программы Kaspersky Security Center используется утилита klscmodchk. Эта утилита проверяет модули и файлы программы на наличие неавторизованных изменений или повреждений.

Если модуль или файл программы имеет некорректную контрольную сумму, то он считается поврежденным.


Включение проверки целостности модулей

Чтобы включить проверку целостности модулей программы Kaspersky Security Center, необходимо выполнить следующие шаги:

  1. Скачать сертифицированный образ диска программы.
  2. Запустить утилиту klscmodchk для проверки целостности компонентов.
  3. При необходимости, заменить поврежденные файлы из сертифицированного образа.

Следуя этим шагам, можно обеспечить безопасность и целостность программы Kaspersky Security Center.

По умолчанию проверка целостности модулей при запуске программы выключена. Для включения проверки используются стандартные ключи реестра операционной системы Windows.

► Чтобы включить проверку целостности модулей при запуске программы, выполните следующие действия:

1. Откройте реестр Windows устройства, на котором установлен Сервер администрирования, и добавьте новый ключ типа DWORD (32-разрядный) с именем KLMODCHK_ENABLE_CHECKING в соответствующую директорию:

Больше проверок:  Как составляется техническое задание на разработку

• HKEY_LOCAL_MACHINE\SOFTWARE\KasperskyLab\Components\34\1093\1.0.0.0\S erverFlags для 32-разрядных систем;

• HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\KasperskyLab\Components\34\10 93\1.0.0.0\ServerFlags для 64-разрядных систем.

2. Используйте утилиту klscflag, чтобы установить ключ. Для этого в командной строке Windows введите следующую команду:

klscflag.exe -fset -pv klserver -n KLMODCHK_ENABLE_CHECKING -t d -v 1

3. Перезагрузите устройство с Сервером администрирования. При следующем запуске программы Kaspersky Security Center одновременно с Сервером администрирования запустится утилита klscmodchk, которая начнет проверку целостности модулей. Результаты всех автоматических проверок целостности (сообщения об успешной или неуспешной проверке, сообщения об ошибках), выполненных при запуске Сервера администрирования, записываются в журнал событий Kaspersky Event Log и доступны для просмотра в любой момент.

Процедура проверки целостности модулей

Проверка целостности модулей программы Kaspersky Security Center выполняется автоматически при каждом запуске программы, если эта опция была включена. Кроме того, проверку можно запустить в любое время вручную.

Утилита klscmodchk проверяет целостность модулей на основе файла манифеста kl_file_integrity_manifest.hml, который входит в состав сборки Kaspersky Security Center и расположен в папке установки программы. Файл манифеста содержит список проверяемых модулей программы, который формируется при ее установке.

Не рекомендуется вносить изменения в файл манифеста kl_file_integrity_manifest.hml, так как это приведёт к изменению цифровой подписи файла и ошибкам в работе утилиты klscmodchk.

Чтобы проверить целостность файлов и модулей программы Kaspersky Security Center путем ручного запуска утилиты klscmodchk, выполните следующую команду в консоли командной строки:

Для использования в команде доступны следующие опции:

• –help – выводит в консоль текст справки с описанием опций утилиты klscmodchk;

• –version – выводит в консоль номер версии утилиты klscmodchk;

• –verbose – выполняет расширенный вывод выполняемых действий и результатов (если эта опция не используется в команде, в консоли отображаются только ошибки, объекты, не прошедшие проверку, и суммарная статистика проверки);

• –trace – выполняет назначение файла для записи результатов проверки (если эта опция не используется в команде, результаты выводятся только в консоль), где — полный путь к файлу на диске.

В качестве аргумента командной строки используется значение path_to_manifest, после которого необходимо указать полный путь к файлу манифеста на диске.

Пробую как в режиме, так и в ручном:

integrity_checker –verbose –trace

и ловлю ошибкупустой структуры

01.thumb.JPG.ddef52112400fb7ce77f171073e1d344.JPG

что собственно внутри файла так и есть, там только строка подписи самого файла манифеста:

В более старых утилита чуть другая была, содержала команды генерации, нормализации. Может и тут какая-то первоначальная инициализация подсчета контрольных сумм после установки должна была быть? Кто сталкивался или сразу в техподдержку топать?

А еще в приложении к формуляру такие абзацы есть, надо ли понимать, что integrity_checker вообще не надо применять для KSC14 Windows?

Подсчет контрольных сумм неизменяемых компонент программного изделия, установленного на операционной системе семейства Linux, и веб-плагинов удаленного управления осуществляется утилитой integrity_checker из состава программного изделия по алгоритму вычисления хэш-функции ГОСТ Р 34.11-2012. Контрольные суммы представлены в кодировке Base64. Подсчет контрольных сумм неизменяемых компонент программного изделия, установленного на операционной системе семейства Windows, осуществляется программой ФИКС 2.0.2 по алгоритму вычисления хэш-функции ГОСТ Р 34.11.

Windows Repair (All In One) – бесплатный инструмент восстановления все-в-одном, которые позволяет исправить большое количество известных проблем Windows, включая ошибки реестра и разрешения файлов, а также проблемы, связанные с веб-браузером Internet Explorer, обновлениями Windows Update, Брандмауэром Windows Firewall и многое другое.

Вредоносные программы и установленные приложения могут изменить настройки системы по умолчанию. С помощью Tweaking.com – Windows Repair можно восстановить первоначальные настройки ОС Windows.

Цель программы – предоставить инструмент восстановления, который может спасти пользователей от необходимости делать переустановку системы Windows. Инструмент помогает пользователям, которые не достаточно сильны в компьютерных технологиях, и, конечно, опытным пользователям и специалистам в их работе.

Основные возможности Windows Repair (All In One)

• Сброс всех разрешений в реестре Windows

• Сброс прав доступа к файлам

• Регистрация системных файлов для исправления возможных ошибок

• Восстановление WMI

• Восстановление Брандмауэра Windows

• Восстановление Internet Explorer

• Восстановление MDAC и MS Jet

• Восстановление файла Hosts

• Удаление ограничений, установленных вредоносным ПО

• Восстановление ярлыков

• Восстановление Winsock и кэша DNS

• Восстановление важных служб Windows

• Удаление временных файлов

• Восстановление параметров Proxy

• Отображение скрытых не системных файлов

• Восстановление обновлений Windows Updates

• Исправление отсутствие CD/DVD и проблем работы

• и многое другое

Возможности Windows Repair (All In One) Pro-версии

• Автоматические обновления программы.

• Расширенная очистка Windows.

• Твики производительности системы.

• Твики ускорения системных ярлыков.

• Добавление собственных пользовательских скриптов и файлов реестра для запуска после операции восстановления.

• Автоматическое применение системных твиков после завершения восстановления.

• Пожизненная лицензия в рамках основной версии. Например, для всех версий в рамках v3, а после выхода v4 будет предложена скидка на обновление.

• Доступ ко всем pro функциям, инструментам и возможностям, которые будут выпущены в будущем.

• Смена логотипа в главном окне на собственный логотип компании.

• Помощь в подготовке к бесплатному восстановлению.

Использование Windows Repair (All In One)

Ознакомьтесь с данной инструкцией перед использованием утилиты Windows Repair (All In One).

При первом запуске программы вам будет предложен мастер, включающий 5 шагов, которые необходимо пройти до выполнения операции восстановления. Эти шаги рекомендуется пройти до запуска восстановления с помощью Windows Repair.

Шаг 1. Important – Сброс питания компьютерной системы

Важная инструкция по правильному сбросу питания для полного обесточивания компьютерной системы. Это позволяет очистить энергозависимую память и избавить систему Windows после запуска от возможной утечки памяти, недостатков ресурсов или других проблем, которые могут возникнуть перед восстановлением.

Правильный сброс питания сделать легко. Выключите компьютер / ноутбук и отключите кабель питания / вытащите батарею. После этого несколько раз нажмите кнопку включения – это позволит полностью обесточить оборудование. Подключите кабель / вставьте батарею и запустите компьютер / ноутбук.

Шаг 2. Clean Your System Of Infections – Очистка системы от заражений

Попытки исправить систему, которая в настоящее время является зараженной, очевидно, является очень плохой идеей и могут сделать только хуже. Активное вредоносное ПО может контролировать компьютер и препятствовать правильному выполнению ряда задач восстановления. Поскольку только часть задач восстановления будут выполнены, другие незавершенные операции в конечном итоге могут вызвать проблемы. Для начала убедитесь, что система чистая. Даже если вы думаете, что ваша система является не зараженной, рекомендуется сделать проверку, с помощью антивирусного сканера.

Шаг 3. Check File System – Проверка файловой системы

Необходимо сделать проверку жестких дисков на вашем компьютере. Функция после перезагрузки системы запустит инструмент Windows для проверки файловой системы на жестком диске и исправления любой найденной проблемы. Поврежденные файлы могут нарушить многие операции, в том числе восстановление. Таким образом, обязательны условием является проверка целостности файловой системы.

Шаг 4. System File Check (SFC) – Проверка системных файлов

Интегрированный в Windows инструмент проверки системных файлов проверяет файлы ОС Windows на целостность, возможные повреждения и правильность версий. Прежде чем делать восстановление системы, необходимо выполнить операцию для восстановления системных файлов, которые повреждены и могут помешать задачам восстановления.

Шаг 5. System Restore & Registry Backup – Создание точки восстановления системы и резервное копирование реестра

На данном этапе вы можете сделать точку восстановления системы, прежде чем выполнять какие-либо задачи исправления с помощью Windows Repair (All In One). Если возникнут любые непредвиденные проблемы после выполнения задач Windows Repair (All In One), вы сможете вернуть систему в первоначальное состояние с помощью созданной точки восстановления. Этот этап особенно рекомендуется.

Инструмент Tweaking.com – Registry Backup для резервного копирования реестра также включен в данную программу.

Примечание. Бесплатная версия Windows Repair (All In One) предлагает все функции восстановления и доступна как для личного, так и коммерческого использования. Платная Pro версия имеет дополнительные опции, настройки и инструменты.

Больше проверок:  Что будет если работать без ип

Встроенное в Windows средство проверки системных файлов (System File Checker tool или SFC) может просканировать системные файлы на предмет повреждения или каких-либо других изменений. Если файл был изменён, то данный инструмент заменит его на правильный. Читайте, как им воспользоваться.

Если команда SFC не работает, то для восстановления с образа системы можно использовать команду DISM (Deployment Image Servicing and Management или Система обслуживания образов развёртывания и управления ими) в Windows 10 или Windows 8. В Windows 7 и более ранних версиях Microsoft предлагал вместо этого «Инструмент подготовки системы к обновлению».

Когда необходимо запускать данные команды

Запустите эту команду если хотите исправить ошибки системы Windows. Если Windows выдаёт синее окно, приложения дают сбой или какие-то функции Windows просто не работают, команда SFC может устранить эти проблемы. Даже если команда SFC не восстановит никакие файлы, её запуск подтвердит, что в вашей системе нет повреждённых файлов и можно продолжить устранение неполадок системы другими способами.

Не стоит просто так запускать команду DISM. Но, если команда SFC не помогает или не может восстановить повреждённый системный файл, то команда DISM или Инструмент подготовки системы к обновлению (System Update Readiness Tool) может устранить ошибки системы Windows, что даст возможность нормально запускаться SFC.

Для восстановления системных файлов запустите команду SFC

Запускать её нужно с Командной Строки от имени Администратора. Для того чтобы открыть её в Windows 10 или 8.1, кликните правой кнопкой мышки на кнопке меню Пуск и выберите «Командная строка (администратор)». Во всех версиях Windows можно также открыть данное приложение через Поиск в меню пуск: просто введите в окошке поиска «Командная строка», а когда компьютер её найдёт, кликните на ней правой кнопкой мышки и выберите «Запуск от имени администратора».

Для запуска сканирования всей системы, введите следующую команду в командной строке и нажмите «Ввод»:

sfc /scannow

Не закрывайте окно командной строки пока команда не выполнится полностью. Это может занять какое-то время. В случае положительного результата вы увидите следующее сообщение: “Windows Resource Protection did not find any integrity violations” («Windows Resource Protection не нашла каких-либо нарушений целостности»).

Если вы увидите сообщение “Windows Resource Protection found corrupt files but was unable to fix some of them” («Windows Resource Protection найдены поврежденные файлы, но не в состоянии исправить некоторые из них»), попробуйте перезагрузиться в безопасном режиме. Для доступа в меню расширенных параметров загрузки (“Advanced boot options menu”), в Windows 10, 8.1 или 8 удерживайте клавишу «Shift» и нажмите «Перезагрузка». В Windows 7 или более ранних версиях, перезагрузите компьютер после чего нажмите и удерживайте клавишу F8 пока не загрузится данное меню. Запустите команду sfc /scannow в безопасном режиме.

Для исправления проблем с SFC запустите команду DISM

В Windows 10, 8.1, and 8 Система обслуживания образов развёртывания и управления ими (Deployment Image Servicing and Management tool) может устранить ошибки, которые не позволяют команде SFC правильно работать.

Для того чтобы запустить данную команду, откройте Командную строку от имени администратора. Введите данную команду и нажмите Enter. DISM проверит компоненты Windows на наличие ошибок и автоматически устранит их.

DISM /Online /Cleanup-Image /RestoreHealth

Не закрывайте окно Командной строки пока команда не закончит свою работу. Это займёт несколько минут. Если строка прогресса остановится на 20% или около того, не переживайте – это нормально.

Если команда DISM ничего не изменила, перезагрузите компьютер. Теперь можете снова запустить команду SFC и она сможет заменить повреждённые файлы исправными.

В Windows 7 и более ранних версиях отсутствует команда DISM. Вместо этого, можно загрузить и запустить “System Update Readiness Tool” (Инструмент подготовки системы к обновлению) с сайта Microsoftи использовать его для сканирования системы на наличие проблем и ошибок и исправлять их.

Восстановление или Сброс системы

Если после указанного выше у вас не пропали проблемы с системой, можете попробовать применить более радикальные действия. Запустив инструмент Восстановление системы вы восстановите файлы операционной системы до более раннего состояния и это может устранить ошибки и сбои в работе системы если она не была повреждена ещё раньше.

Не стоит также забывать о сбросе системы или её переустановке. В Windows 10, 8.1, and 8 можно запустить операцию Сброс системы («Reset this PC») для сброса настроек в начальное состояние.

Осуществляя сброс системы будьте внимательны, так как есть два варианта сброса:

  • – без удаления файлов – без потери фотографий, музыки, видео и других личных файлов;

  • – с удалением всех данных – возврат в исходное состояние.

В случае выбора второго варианта восстановить ваши данные стандартными средствами Windows уже не представляется возможным. И если данная функция была выбрана случайно, то без сторонних программ для восстановления файлов вам никак не обойтись.

Команды, которые мы рассмотрели в статье, также имеют и другие функции. Например, команда SFC может проверить только один из файлов Windows на повреждение и восстановить его. С помощью команды DISM можно произвести проверку системы на повреждения, но не восстанавливать её.

Команды SFC и DISM – это очень удобные функции, которые Microsoft разработал для того, чтобы позаботится о своей операционной системе. И это очень хорошо, что такие команды есть, часто они помогают спасти операционную систему, а вместе с ней и большие объёмы важных файлов.

Вычисление хэша исполняемого файла (Cryptography Next Generation API)

Вычисление хэша с использованием Cryptography Next Generation APIs аналогично предыдущему случаю с использованием CryptoAPI. Инициализация криптопровайдера для выбранного алгоритма хэширования осуществляется вызовом функции BCryptOpenAlgorithmProvider. Далее выделяется память под объект функции хэширования. Объем памяти, необходимый для хранения данного объекта, определяется при помощи функции BCryptGetProperty. Объект функции хэширования создается вызовом функции BCryptCreateHash. Далее читаем файл небольшими частями (в данной примере по 1024 байта) и добавляем считанные данные к созданному объекту хэширования при помощи функции BCryptHashData. Итоговое значение хэша получается функцией BCryptFinishHash. Далее вычисленное значение хэша сравнивается с эталонным. В завершении необходимо освободить используемые ресурсы, закрыв дескрипторы объекта хэширования, криптопровайдера и исполняемого файла и освободив память, выделенную для объекта функции хэширования.


BCRYPT_ALG_HANDLE hAlg = NULL;

BCRYPT_HASH_HANDLE hHash = NULL;



PBYTE hashObject = NULL;



ULONG bytesRead = 0;

DWORD hashObjectSize = 0;



BYTE hash[MD5_LENGTH] = { 0 };

DWORD hashLength = MD5_LENGTH;



TCHAR fileName[MAX_PATH] = { 0 };

GetModuleFileName(NULL, fileName, MAX_PATH);



HANDLE hFile = CreateFile(fileName, GENERIC_READ,

						  FILE_SHARE_READ, NULL,

						  OPEN_EXISTING, 

						  FILE_ATTRIBUTE_NORMAL, NULL);



BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_MD5_ALGORITHM, NULL, 0);

BCryptGetProperty(hAlg, BCRYPT_OBJECT_LENGTH, 

				  (PBYTE)&hashObjectSize, sizeof(DWORD),

				  &bytesRead, 0);



hashObject = (PBYTE)HeapAlloc(GetProcessHeap(),0,hashObjectSize);



BCryptCreateHash(hAlg, &hHash, hashObject, hashObjectSize, NULL, 0, 0);



BOOL readRes = FALSE;

BYTE buffer[BUFFER_SIZE] = { 0 };



do

{

	readRes = ReadFile(hFile, buffer, BUFFER_SIZE, &bytesRead, NULL);



	if (bytesRead == 0)

	{

		break;

	}



	BCryptHashData(hHash, buffer, bytesRead, 0);

} while (readRes);



BCryptFinishHash(hHash, hash, hashLength, 0);



BYTE storedHash[MD5_LENGTH] = { 0 };



GetStoredFileHash(storedHash, hashLength);



SIZE_T hashCmpRes = RtlCompareMemory(hash, storedHash, hashLength);



if (hashCmpRes == hashLength)

{

	printf("Integrity check success\n");

}



else

{

	printf("Integrity check failed\n");

}



BCryptDestroyHash(hHash);

BCryptCloseAlgorithmProvider(hAlg, 0);

HeapFree(GetProcessHeap(), 0, hashObject);

CloseHandle(hFile);

Задание контрольной суммы в заголовке исполняемого файла

После включения данной опции при сборке исполняемого файла в поле CheckSum будет помещено вычисленное значение хэша.

Функция MapFileAndCheckSum позволяет вычислить значение контрольной суммы заданного исполняемого файла и получить значение из поля CheckSum его заголовка. При совпадении вычисленного значения хэша файла со значением из заголовка исполняемый файл считается неизмененным.


TCHAR fileName[MAX_PATH] = {0};

GetModuleFileName(NULL, fileName, MAX_PATH);



DWORD headerSum = 0;

DWORD checkSum = 0;



MapFileAndCheckSum(fileName, &headerSum, &checkSum);



if (headerSum == checkSum)

{

	printf("Integrity check successful\n");

}



else

{

	printf("Integrity check failed\n");

}

Проверка встроенной цифровой подписи исполняемого файла

Для подписания исполняемого файла сначала необходимо создать или приобрести сертификат.

Для создания сертификата воспользуемся утилитой makecert, запущенной от имени администратора в Visual Studio Developer Command Prompt:


makecert -r -pe -n "CN=Integrity Test" -ss MY IntegrityTestCert.cer

Далее необходимо добавить сертификат в хранилище сертификатов доверенных корневых центров сертификации. Это можно сделать из командной строки:


certmgr -add IntegrityTestCert.cer -s -r LocalMachine Root

Того же можно добиться, используя графический интерфейс установщика сертификатов, дважды кликнув мышью на файле сертификата:

Больше проверок:  Государственная информационная система

Теперь осталось только подписать исполняемый файл созданным сертификатом при помощи утилиты signtool:


signtool sign /v /s MY /n "Integrity Test" /t http://timestamp.digicert.com /fd SHA256 "IntegrityTest.exe"

После подписывания исполняемого файла в его свойствах появится вкладка «Digital Signatures», в которой будет отображена информация об имеющихся цифровых подписях:

При запуске подписанного исполняемого файла от имени администратора будет отображено окно UAC со сведениями об издателе (организации, чьей цифровой подписью подписан исполняемый файл).

При патчинге файла, его хэш не сойдется со значением, указанным в цифровой подписи. При этом будет отображено желтое окно UAC с предупреждением о запуске файла от неизвестного издателя.

Для получения информации о цифровой подписи файла можно воспользоваться функциями WinVerifyTrust / WinVerifyTrustEx или MsiGetFileSignatureInformation.

Основные возвращаемые значения данных функций:

  • ERROR_SUCCESS – проверка цифровой подписи завершилась успешно, хэш файла совпал с хэшем, указанным в цифровой подписи

  • TRUST_E_NOSIGNATURE – файл не содержит цифровой подписи

  • TRUST_E_BAD_DIGEST – хэш файла не совпал с хэшем, указанным в цифровой подписи. Обычно это означает, что файл был изменен (например, пропатчен)

Функции WinVerifyTrust необходимо передать адрес переменной, содержащей GUID выполняемого действия и используемого провайдера, и адрес структуры WINTRUST_DATA, необходимой криптопровайдеру для проверки цифровой подписи исполняемого файла. Для проверки цифровой подписи исполняемого файла необходимо указать значение GUID WINTRUST_ACTION_GENERIC_VERIFY_V2. В структуре WINTRUST_DATA необходимо присвоить полю dwUnionChoice значение WTD_CHOICE_FILE. При этом в поле pFile необходимо указать адрес структуры WINTRUST_FILE_INFO, в которой хранится путь к проверяемому исполняемому файлу.


WCHAR fileName[MAX_PATH] = { 0 };

GetModuleFileNameW(NULL, fileName, MAX_PATH);



WINTRUST_FILE_INFO fileInfo = { 0 };

fileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO);

fileInfo.pcwszFilePath = fileName;

fileInfo.hFile = NULL;

fileInfo.pgKnownSubject = NULL;



GUID winTrustPolicy = WINTRUST_ACTION_GENERIC_VERIFY_V2;

WINTRUST_DATA winTrustData = { 0 };



winTrustData.cbStruct = sizeof(WINTRUST_DATA);

winTrustData.pPolicyCallbackData = NULL;

winTrustData.pSIPClientData = NULL;

winTrustData.dwUIChoice = WTD_UI_NONE;

winTrustData.fdwRevocationChecks = WTD_REVOKE_NONE;



winTrustData.dwUnionChoice = WTD_CHOICE_FILE;



winTrustData.dwStateAction = WTD_STATEACTION_VERIFY;

winTrustData.hWVTStateData = NULL;

winTrustData.pwszURLReference = NULL;

winTrustData.dwProvFlags = 0;

winTrustData.dwUIContext = WTD_UICONTEXT_EXECUTE;

winTrustData.pFile = &fileInfo;



LONG res = WinVerifyTrust(NULL, &winTrustPolicy, &winTrustData);



switch(res)

{

	case ERROR_SUCCESS:

		printf("Signature verified\n");

		break;



	case TRUST_E_NOSIGNATURE:

		printf("No signature\n");

		break;



	case TRUST_E_BAD_DIGEST:

		printf("File corrupted\n");

		break;



	default:

		printf("Other result: 0x%X\n", res);

}

Функция MsiGetFileSignatureInformation упрощает получения информации о цифровой подписи файла. При этом данная функция для получения контекста сертификата цифровой подписи и хэша файла вызывает WinVerifyTrust.


TCHAR fileName[MAX_PATH] = { 0 };

GetModuleFileName(NULL, fileName, MAX_PATH);



PCCERT_CONTEXT pContext = NULL;



HRESULT res = MsiGetFileSignatureInformation(fileName, MSI_INVALID_HASH_IS_FATAL, 

                                             &pContext, NULL, NULL);



switch(res)

{

	case ERROR_SUCCESS:

		printf("Signature verified\n");

		break;



	case TRUST_E_NOSIGNATURE:

		printf("No signature\n");

		break;



	case TRUST_E_BAD_DIGEST:

		printf("File corrupted\n");

		break;



	default:

		printf("Other result: 0x%X\n", res);

}

При использовании первого способа с вызовом WinVerifyTrust осуществляется проверка наличия сертификата, с помощью которого был подписан исполняемый файл, в хранилище «Trusted Root Certification Authorities» («Доверенные корневые центры сертификации»). При отсутствии сертификата в данном хранилище будет возвращена ошибка CERT_E_UNTRUSTED_ROOT (0x800B0109). Функция MsiGetFileSignatureInformation не проверяет наличие сертификата, с помощью которого был подписан исполняемый файл, в хранилище сертификатов.

Исправление ошибок Windows программой CCleaner

С ошибками Windows борются и программы сторонних компаний. Однако их разработчики не знают систему Windows в мельчайших деталях, поэтому их воздействие можно сравнить с лекарством неизбирательного действия. Решив сиюминутную задачу, они могут нанести ущерб в других аспектах работоспособности системы. Поэтому к использованию сторонних программ следует подходить осторожно, и использовать только те, которые хорошо зарекомендовали себя во время многолетней эксплуатации. К их числу относится и широко распространённая программа CCleaner, имеющая бесплатную версию.

Ряд ошибок Windows можно устранить, исправив повреждённые записи в реестре системы. Один из разделов программы CCleaner как раз предназначен для этой цели.

Проверка реестра Windows

  1. После открытия программы CCleaner Free переходим в раздел «Реестр» (Registry) и щёлкаем пункт «Поиск проблем». При этом должны быть активированы все компоненты проверки целостности реестра (по умолчанию так оно и есть).

Инициация поиска проблем в реестре

Ищем проблемы в реестре

  1. Спустя несколько секунд в окне появляется список обнаруженных проблем реестра. Щёлкаем «Исправить выбранное».

Запуск исправления обнаруженных проблем

Запускаем исправление обнаруженных проблем

  1. В следующем окне отказываемся от сохранения резервных копий исправленных записей реестра (в них нет нужды). В новом окне щёлкаем пункт «Исправить отмеченные» с тем, чтобы не корректировать каждую из проблемных 791 записей в отдельности.

Одновременное исправление всех проблемных записей реестра без сохранения их резервных копий

Исправляем все проблемные записи реестра сразу без сохранения их резервных копий

  1. Опять-таки через несколько секунд появляется информация о подробностях исправления последней проблемной записи. Щёлкаем «Закрыть».

На этом наша инструкция подошла к концу. Надеемся, что вам успешно удалось проверить Windows 10 на ошибки системного характера. Удачи!

Проверка цифровой подписи исполняемого файла при запуске

Еще одним способом контроля целостности исполняемого файла является выставление в поле DllCharacteristics опционального заголовка исполняемого файла флага IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY. При этом при запуске исполняемого файла ОС проверит валидность его цифровой подписи и факт выдачи сертификата, с помощью которого подписан файл, одним из доверенных корневых центров сертификации. При невалидности цифровой подписи или подписания исполняемого файла тестовым сертификатом (как в предыдущем примере) будет отображено следующее сообщение об ошибке:

Флаг IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY необходимо выставлять для DLL, используемых определенными компонентами Windows. Также данный флаг рекомендуется выставить для драйверов. Помимо этого, драйверы, использующие API для фильтрации запуска и завершения процессов и т.д., должны быть собраны с опцией /INTEGRITYCHECK.

Для подписания исполняемого файла с флагом IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY «настоящей» цифровой подписью в настоящее время необходимо воспользоваться Azure Code Signing.

Для того, чтобы иметь возможность запускать исполняемые файлы, собранные с опцией /INTEGRITYCHECK и подписанные тестовым сертификатом, необходимо включить режим тестовой подписи, обычно используемый при разработке и тестировании драйверов, выполнив от имени администратора команду:


bcdedit /set TESTSIGNING ON

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

Если сбросить флаг IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY, то проверки цифровой подписи при запуске исполняемого файла производиться не будет. Однако, цифровая подпись файла в данном случае станет невалидной.

Вычисление хэша исполняемого файла вручную (CryptoAPI)

Разумеется, хэш-функцию можно реализовать и вручную. Мы же для подсчета хэша файла воспользуемся CryptoAPI. В CryptoAPI реализован ряд алгоритмов хэширования, в том числе MD5, SHA256, SHA384, SHA512 и т.д. В качестве примера будем вычислять хэш по алгоритму MD5. Длина MD5-хэша составляет 128 бит (16 байт).

В начале с помощью функции GetModuleFileName получаем путь к исполняемому файлу текущего процесса. Далее открываем дескриптор данного исполняемого файла вызовом функции CreateFile. Затем необходимо выполнить подготовительные действия для использования алгоритма хэширования из CryptoAPI. Получение дескриптора криптопровайдера осуществляется вызовом функции CryptAcquireContext. Последующий вызов функции CryptCreateHash осуществляет инициализацию хэширования потока данных и сохранение дескриптора объекта хэширования. Далее читаем файл небольшими частями (в данной примере по 1024 байта) и добавляем считанные данные к созданному объекту хэширования при помощи функции CryptHashData. Итоговое значение хэша получается функцией CryptGetHashParam. Функция GetStoredFileHash получает эталонный хэш файла, который может хранится в файле или ключе реестра, получен по сети и т.д. Далее вычисленное значение хэша сравнивается с эталонным. При совпадении данных значений файл будет считаться неизмененным. В завершении необходимо освободить используемые ресурсы, закрыв дескрипторы объекта хэширования, криптопровайдера и исполняемого файла.


#define BUFFER_SIZE 1024

#define MD5_LENGTH 16



HCRYPTPROV hProv = 0;

HCRYPTHASH hHash = 0;



HANDLE hFile = NULL;

BYTE buffer[BUFFER_SIZE] = { 0 };

BYTE hash[MD5_LENGTH] = { 0 };

DWORD hashLength = MD5_LENGTH;



TCHAR fileName[MAX_PATH] = { 0 };

GetModuleFileName(NULL, fileName, MAX_PATH);



hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 

                    FILE_ATTRIBUTE_NORMAL, NULL);



CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);



CryptCreateHash(hProv, CALG_MD5, NULL, 0, &hHash);



DWORD bytesRead = 0;

BOOL readRes = FALSE;



do

{

	readRes = ReadFile(hFile, buffer, BUFFER_SIZE, &bytesRead, NULL);



	if (bytesRead == 0)

	{

		break;

	}



	CryptHashData(hHash, buffer, bytesRead, 0);

} while (readRes);



CryptGetHashParam(hHash, HP_HASHVAL, hash, &hashLength, 0);



BYTE storedHash[MD5_LENGTH] = { 0 };

GetStoredFileHash(storedHash, MD5_LENGTH);



SIZE_T hashCmpRes = RtlCompareMemory(hash, storedHash, MD5_LENGTH);



if (hashCmpRes == MD5_LENGTH)

{

	printf("Integrity check successful\n");

}



else

{

	printf("Integrity check failed\n");

}



CryptDestroyHash(hHash);

CryptReleaseContext(hProv, 0);

CloseHandle(hFile);

Однако, функции CryptoAPI считаются устаревшими и в новых приложениях рекомендуется использовать Cryptography Next Generation APIs.

Заключение

Каждый из рассмотренных способов обладает своими достоинствами и недостатками. При помощи всех перечисленных способов, кроме последнего, можно проверить целостность не только исполняемого файла текущего процесса, но и произвольного PE-файла.