#include <windows.h>
#include <winternl.h>
#include <stdio.h>
typedef NTSTATUS (NTAPI *pRtlAdjustPrivilege)(
ULONG Privilege,
BOOLEAN Enable,
BOOLEAN CurrentThread,
PBOOLEAN OldValue
);
typedef NTSTATUS (NTAPI *pNtRaiseHardError)(
LONG ErrorStatus,
ULONG NumberOfParameters,
ULONG UnicodeStringParameterMask,
PULONG_PTR Parameters,
ULONG ValidResponseOptions,
PULONG Response
);
int main() {
HMODULE hNtdll = GetModuleHandleA("ntdll.dll");
if (!hNtdll) {
printf("Failed to get ntdll.dll handle\n");
return 1;
}
pRtlAdjustPrivilege RtlAdjustPrivilege = (pRtlAdjustPrivilege)GetProcAddress(hNtdll, "RtlAdjustPrivilege");
pNtRaiseHardError NtRaiseHardError = (pNtRaiseHardError)GetProcAddress(hNtdll, "NtRaiseHardError");
if (!RtlAdjustPrivilege || !NtRaiseHardError) {
printf("Failed to get function addresses\n");
return 1;
}
BOOLEAN bl;
ULONG Response;
NTSTATUS status = RtlAdjustPrivilege(19, TRUE, FALSE, &bl);
if (status != 0) {
printf("RtlAdjustPrivilege failed: 0x%08X\n", status);
return 1;
}
NtRaiseHardError(STATUS_ASSERTION_FAILURE, 0, 0, NULL, 6, &Response);
return 0;
}
代码功能分解
-
获取
ntdll.dll模块句柄
GetModuleHandleA("ntdll.dll")获取当前进程已加载的ntdll.dll基址,因为RtlAdjustPrivilege和NtRaiseHardError都导出自该 DLL。 -
动态获取函数地址
-
RtlAdjustPrivilege:用于启用或禁用指定特权。 -
NtRaiseHardError:用于向**发送严重错误,并可选择执行“关闭/重启/蓝屏”等操作。
-
-
启用
SeShutdownPrivilege(特权值 19)
RtlAdjustPrivilege(19, TRUE, FALSE, &bl)将 关机特权 授予当前线程。
该特权是触发**级硬错误(hard error)并执行**关闭所必需的。如果未启用此特权,
NtRaiseHardError调用会失败或不会蓝屏。 -
调用
NtRaiseHardError触发蓝屏-
参数
STATUS_ASSERTION_FAILURE(0xC0000420)作为错误码。 -
后续参数为 0、
NULL表示不传递附加消息。 -
ValidResponseOptions = 6表示 强制**关闭(Shutdown),并且会触发蓝屏(在 Windows 中对应SHUTDOWN选项,实际会进入 BugCheck 路径)。 -
Response用于接收用户响应(此处未使用)。
-
运行效果
-
当程序以**员权限执行时,它会立即触发 蓝屏**机(BSOD),错误代码通常为
STATUS_ASSERTION_FAILURE。 -
如果没有**员权限,
RtlAdjustPrivilege可能失败(返回错误),或者NtRaiseHardError被**拦截,不会蓝屏(可能只弹出一个错误对话框)。
重要警告
-
不要在生产环境或未保存数据的情况下运行,因为会导致**瞬间崩溃,丢失未保存的工作。
-
该程序需要**员权限(否则特权提升失败)。
-
在 Windows 10/11 的某些版本中,**可能通过
Kernel-Mode Crash Dump设置或组策略限制了这种调用,但大多数情况下仍可生效。
如何编译和测试
-
使用 Visual Studio 或 MinGW 编译该 C 代码(需链接
kernel32和ntdll,通常默认已链接)。 -
以 “以**员身份运行” 启动编译好的 exe。
-
运行后屏幕会蓝屏并自动重启(或停留在蓝屏界面)。
扩展知识
-
特权值
19对应SE_SHUTDOWN_PRIVILEGE,定义在winnt.h中为SE_SHUTDOWN_PRIVILEGE(但直接数字19是硬编码,不推荐,可改为宏)。 -
ValidResponseOptions的值:-
0– 显示消息框,等待用户响应。 -
1– 关闭**(不蓝屏)。 -
6– 强制蓝屏并关闭(常用于调试)。
-
-
该技巧常被恶意软件用于****,因此安全软件可能会拦截此类行为。
-
AI
