前言
在 蓝屏(BSOD)转储设置,看本文就够了! 这篇文章里比较详细的介绍了蓝屏转储设置。做好设置后,我们就可以在需要的时候使系统蓝屏了。这样我们就可以拿到一份系统转储,供我们分析问题了。本文介绍几种可以使系统蓝屏的办法。当然肯定还有其它办法,如果哪位小伙伴儿知道比较实用的方法,欢迎留言分享。
几种蓝屏方法
1、通过驱动
思路是:在内核执行有问题的代码(比如,在驱动的入口处加上简单的 int* p = 0; *p = 0;
,然后加载有问题的驱动即可)。sysinternals
系列工具中的 NotMyFault
就是加载驱动,然后在驱动中模拟各种非法操作来使系统蓝屏的。
我们可以点击 Colors...
按钮,来看看其它颜色的 “蓝屏” 效果。可以通过 Hang
让系统挂起,还可以通过 Leak
模拟内核级内存泄漏。
我们还可以在命令行执行 notMyfault.exe /crash
来直接使系统蓝屏。如果我们想指定崩溃类型,可以使用 NotMyFault
的命令行版本 —— notmyfaultc.exe
。具体选项大家可以直接运行 notmyfaultc.exe
查看或者参考下图:
2、杀死系统关键进程
如果系统关键进程挂掉了(比如,csrss.exe
),那么系统也会蓝屏。
在
win7
系统中,具有管理员权限的进程可以杀死 csrss
进程,但是在 win10
中不能简单粗暴的杀死 csrss
进程了。
win10 变通方法: 我们可以把其它进程设置为系统关键进程,然后杀掉。或者伪装成系统关键进程,然后自动退出。感谢 https://bytecode77.com/hacking/payloads/bsod
int _tmain(int argc, _TCHAR* argv[])
{
typedef NTSTATUS (*pfnRtlSetProcessIsCritical) (BOOLEAN, PBOOLEAN, BOOLEAN); // __cdecl
typedef BOOL(WINAPI * pfnRtlAdjustPrivilege) (ULONG, BOOL, BOOL, PBOOLEAN);
auto ntdll = ::LoadLibrary(TEXT("ntdll.dll"));
auto RtlAdjustPrivilege = (pfnRtlAdjustPrivilege)GetProcAddress((HINSTANCE)ntdll, "RtlAdjustPrivilege");
auto RtlSetProcessIsCritical = (pfnRtlSetProcessIsCritical)GetProcAddress((HINSTANCE)ntdll, "RtlSetProcessIsCritical");
BOOLEAN e = 0;
RtlAdjustPrivilege(20, 1, 0, &e);
RtlSetProcessIsCritical(1, 0, 0);
return 0;
}
效果如下:
3、使用快捷键
如果系统由于某些原因挂起了,我们没办法杀死系统关键进程,也不能运行 NotMyFault
了。这时候我们还可以通过快捷键来使系统蓝屏!不过我们需要预先做一些设置才行。把下面的代码保存到 .reg
文件,然后双击导入注册表,重启生效。
Windows Registry Editor Version 5.00
;------------------------------------------------------------------------------
; enable BSOD by right CTRL + SCROLL + SCROLL
;------------------------------------------------------------------------------
; For PS/2 keyboards
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"CrashOnCtrlScroll"</