hex.pp.ua

Как вызвать BSOD

Как вызвать синий экран смерти из пользовательского режима




Всем известно, что синий экран смерти (BSOD, Blue Screen Of Death) появляется из-за ошибок в ядре. Но так ли это? Можно ли вызвать BSOD из пользовательского режима?

При всем многообразии причин, которые приводят к BSOD, для его отображения (и дополнительных действий, описание которых здесь опустим) разработан специальный механизм, который необходимо вызвать. Банальность ответа о причине BSOD заключается в том, что BSOD «наступает» всякий раз, как только вызывается функция ядра KeBugCheckEx, и, независимо от источника и кода ошибки, именно эта функция и вызывается драйверами режима ядра. Процессы из пользовательского режима не могут напрямую её вызывать, однако, отображение BSOD всё-таки возможно по желанию пользовательского процесса.

Хитрость заключается в использовании функции ZwRaiseHardError с параметром OptionShutdownSystem. Для успешного вызова процесс должен иметь привилегию завершения работы (SE_SHUTDOWN_PRIVILEGE). Пример кода:

 HARDERROR_RESPONSE hr;
 UNICODE_STRING us = {24, 26, L"GENERIC BSOD"};
 ULONG a[3] = { 0, 0, (ULONG)&us };
 ZwRaiseHardError (Status, 3, 4, &a, OptionShutdownSystem, &hr);

или ещё короче:

 HARDERROR_RESPONSE hr;
 ZwRaiseHardError (Status, 0, 0, NULL, OptionShutdownSystem, &hr);

Есть ещё один способ, который, правда, не отличается универсальностью от предложенного выше, ибо нет возможности передавать свои параметры и требуется привилегия отладки. При загрузке системы SMSS запускает CSRSS и WINLOGON, в случае их успешного запуска SMSS ждёт их обоих с помощью ZwWaitForMultipleObjects, и если он их дожидается (то есть, если один из этих двух процессов завершается) — генерирует BSOD. Идея способа — «помочь» SMSS дождаться любого из процессов. Выбрав для примера WINLOGON, берём привилегию отладки, после чего открываем процесс WINLOGON с правом доступа на завершение процесса и убиваем его с кодом завершения 9. После этого хэндл на WINLOGON можно даже не закрывать :). Сообщалось, что это работает только в NT4, однако это не так, что довольно легко проверить.

система комментирования CACKLE

Автор: Сергей Васкецов
Дата: 19.11.2002


Разделы сайта
Главная
Блог
Native API
NTFS и ReFS
Микроконтроллеры
Справочник NTDLL
Коды NTSTATUS
Разное

Избранное
NTFS Stream Explorer
Native Shell
Тенгвар

Остальное
nvpnhcknn (архив)
English pages
Контакты

Ленты atom
Лента Atom сайта Лента Atom блога



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