从用户模式创建BSOD?

Nat*_*ver 5 c c++ bsod kernel

有一天,我对我的XP盒子感到厌倦,所以我决定尝试一些这个问题的答案,看看是否有任何一个会导致BSOD.
他们没有,他们似乎最有可能这样做,所以我想知道是否有可能在C/C++中从用户模式触发BSOD,如果是这样,怎么样?

小智 11

还有未记录的函数NtRaiseHardError.

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/NtRaiseHardError.html

http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/Error/HARDERROR_RESPONSE_OPTION.html

如果第五个参数是6(OptionShutdownSystem),你将得到一个BSOD.这需要启用关闭权限.


sar*_*rat 7

除非用户模式程序与错误的驱动程序交互(可能是特定的操作序列可以揭示特定驱动程序中的错误)干扰驱动程序堆栈,否则从用户模式制作BSOD非常困难.从用户模式来看,输入在进入内核模式之前已经过充分验证,以确保系统的稳定性.大多数Microsoft API /驱动程序已经过验证,可以避免系统中的安全问题; 司机制造也是如此.

最好的方法是打扰驱动程序堆栈,但它不是用户模式.

您可以使用NotMyFault SystInternals实用程序创建BSOD.它从根本上注入了一个驱动程序并创建了BSOD

http://download.sysinternals.com/Files/Notmyfault.zip


Пет*_*ров 5

就是这样:

#include <iostream>
#include <Windows.h>
#include <winternl.h>
using namespace std;
typedef NTSTATUS(NTAPI *pdef_NtRaiseHardError)(NTSTATUS ErrorStatus, ULONG NumberOfParameters, ULONG UnicodeStringParameterMask OPTIONAL, PULONG_PTR Parameters, ULONG ResponseOption, PULONG Response);
typedef NTSTATUS(NTAPI *pdef_RtlAdjustPrivilege)(ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN Enabled);
int main()
{
    BOOLEAN bEnabled;
    ULONG uResp;
    LPVOID lpFuncAddress = GetProcAddress(LoadLibraryA("ntdll.dll"), "RtlAdjustPrivilege");
    LPVOID lpFuncAddress2 = GetProcAddress(GetModuleHandle("ntdll.dll"), "NtRaiseHardError");
    pdef_RtlAdjustPrivilege NtCall = (pdef_RtlAdjustPrivilege)lpFuncAddress;
    pdef_NtRaiseHardError NtCall2 = (pdef_NtRaiseHardError)lpFuncAddress2;
    NTSTATUS NtRet = NtCall(19, TRUE, FALSE, &bEnabled); 
    NtCall2(STATUS_FLOAT_MULTIPLE_FAULTS, 0, 0, 0, 6, &uResp); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果有人在第 12 行遇到错误,请将其更改为:`LPVOID lpFuncAddress2 = GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtRaiseHardError");` (2认同)