怎么自己的电脑做网站,微信辅助网站制作,wordpress 附件清理,基于多站点的网站内容管理平台的管理与应用前言在 蓝屏#xff08;BSOD#xff09;转储设置#xff0c;看本文就够了#xff01;这篇文章里比较详细的介绍了蓝屏转储设置。做好设置后#xff0c;我们就可以在需要的时候使系统蓝屏了。本文介绍几种使系统蓝屏的办法#xff0c;当然肯定还有其它办法#xff0c;如果… 前言在 蓝屏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/bsodint _tmain(int argc, _TCHAR* argv[])
{typedef NTSTATUS (*pfnRtlSetProcessIsCritical) (BOOLEAN, PBOOLEAN, BOOLEAN); // __cdecltypedef 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;
}
效果如下win10 关键进程结束导致蓝屏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]
CrashOnCtrlScrolldword:00000001; For USB keyboards
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters]
CrashOnCtrlScrolldword:00000001; For Hyper-V keyboards (BCN:I never use this, copy it from document)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd\Parameters]
CrashOnCtrlScrolldword:00000001
重启后按住右侧的 Ctrl 键然后按两下 SCROLL LOCK 键就可以使系统蓝屏了。这个方法在极少数的情况下会失效。比如系统挂起在更高的中断请求级别IRQL没办法处理按键。不过我们应该没那么点儿背。正如微软官方文档介绍的那样有时候即使 CTRL ALT DELETE 不响应了RCTRL SCROLL SCROLL 还能工作。如果键盘上没有 Scroll Lock 键怎么办4. 使用自定义快捷键也许有的小伙伴使用的笔记本电脑的键盘上没有 Scroll Lock 键该怎么办呢Windows 已经考虑到了这种情况允许我们自定义蓝屏快捷键。具体设置可以参考 微软官方文档 —— Forcing a System Crash from the Keyboard[1] 。保存下面的代码到 .reg 文件双击导入注册表重启生效。Windows Registry Editor Version 5.00;------------------------------------------------------------------------------
; enable BSOD by custom key, mutually exclusive with CrashOnCtrlScroll setting
; Dump1Keys: 20 stands for LEFT CTRL
; Dump2Key: HEXadecimal INDEX in keyToScanTbl[134]
; 01 stands for /~ key (left of 1/! key)
; 3d stands for space key.
; 1f stands for A key. but after test, ctrl a will not work.
; WARNING: not sure this works for all keyboards, try your luck :)
;------------------------------------------------------------------------------; For PS/2 keyboards
; disable CrashOnCtrlScroll first
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
CrashOnCtrlScroll-; setup custom key
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\crashdump]
Dump1Keysdword:00000020
Dump2Keydword:00000001; For USB keyboards
; disable CrashOnCtrlScroll first
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters]
CrashOnCtrlScroll-; setup custom key
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\crashdump]
Dump1Keysdword:00000020
Dump2Keydword:00000001; For Hyper-V keyboards (BCN:I never use this, reference above setting)
; disable CrashOnCtrlScroll first
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd\Parameters]
CrashOnCtrlScroll-
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd\crashdump]
Dump1Keysdword:00000020
Dump2Keydword:00000001
重启后按住左侧的 Ctrl 键然后连续按两下 键就可以使系统蓝屏了。注意一定要连续按两下 按一下是不行的。想要正确设置自定义蓝屏快捷键不是一件容易的事。需要了解以下几点1. 使用自定义快捷键需要先关闭 CrashOnCtrlScroll 设置上面的代码已经做好了。因为不同类型的键盘对应的注册表位置不一样怎么知道自己的机器上的键盘是哪种类型的2. 我们可以打开设备管理器查看当前机器上的键盘信息。我们可以用如下方法打开 设备管理器win10 系统中可以直接在搜索框或者按一下 windows 键输入 设备管理器 搜索打开。win10 系统中按 Windows x 快捷键在弹出的系统菜单里点击 设备管理器(M) 打开。输入 devmgmt.msc 打开。通过控制面版打开不同系统中可能不一样。还有很多其它方法不一一列举了。3. Dump1Keys 的值可以是组合值比如0x70 表示同时按下左侧的 ALT CTRL SHIFT。每一项的意义请参考下表摘自微软官方文档值意义0x01Rightmost SHIFT key0x02Rightmost CTRL key0x04Rightmost ALT key0x10Leftmost SHIFT key0x20Leftmost CTRL key0x40Leftmost ALT key4. Dump2Key 是按键的扫描码在数组 keyToScanTbl[134] 中的索引值keyToScanTbl[134]的定义如下摘自微软官方文档const UCHAR keyToScanTbl[134] {0x00,0x29,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x7D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x00,0x3A,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x2B,0x1C,0x2A,0x00,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x73,0x36,0x1D,0x00,0x38,0x39,0xB8,0x00,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD2,0xD3,0x00,0x00,0xCB,0xC7,0xCF,0x00,0xC8,0xD0,0xC9,0xD1,0x00,0x00,0xCD,0x45,0x47,0x4B,0x4F,0x00,0xB5,0x48,0x4C,0x50,0x52,0x37,0x49,0x4D,0x51,0x53,0x4A,0x4E,0x00,0x9C,0x00,0x01,0x00,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x57,0x58,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x7B,0x79,0x70 };
上面的例子中 键的扫描码是 0x29在keyToScanTbl[134]的索引是 1 。5. 关于扫描码按下和抬起按键时会产生不同的扫描码我们需要关注的是按下时对应的扫描码。同时不同的键盘可能有不同的扫描码。下面给出 101/102键 键盘PC/AT 和 PS/2 的扫描码。101/102键 键盘PC/AT 和 PS/2图摘自Defrag-Tools-1796. 我们参考相关文档的时候需要注意按下按键对应的术语是Make抬起按键对应的术语是Break。下面贴一张扫描码表的部分截图表格最后的说明非常重要高亮部分的意思是操作系统的其它部分和所有的应用程序按 Scan Code Set 1 里的值处理扫描码。所以我猜测微软官方文档里的 keyToScanTbl[134] 的值是按照 Scan Code Set 1 给出的。实在没精力调查的更清楚了如果哪位小伙伴儿熟悉相关内容请务必指点我特意录制了使用自定义快捷键 CTRL 触发蓝屏的过程。按一次 是不行的一定要按两次。使用 CTRL 手动蓝屏5. 借助硬件如果以上方法都行不通还可以使用 PCI Express Dump Switch Card 使系统蓝屏。Windows 7, Windows Server 2008 R2 及更早的系统需要设置如下注册表项[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
NMICrashDumpdword:00000001
6. 内核调试器如果已经用内核调试器附加到目标系统了我们可以直接使用 .dump 命令保存转储文件没必要使系统蓝屏再保存转储文件。当然如果我们喜欢也可以使用 .crash 命令使系统蓝屏如果执行完该命令后系统没蓝屏请执行 g 命令。说明如果当前正在执行 bug check处理函数不要使用 .crash 命令。7. 其它利用 NtRaiseHardError参考 github 上的 Invoke-BSOD 项目[2]。利用系统漏洞。这方面我不擅长欢迎搞安全的小伙伴儿分享。蓝屏转储一瞥通过杀死系统关键进程导致的蓝屏对应的 Bug Check Code 是 0xF4CRITICAL_OBJECT_TERMINATION。通过 NMI 导致的蓝屏对应的 Bug Check Code 是 0x80NMI_HARDWARE_FAILURE表示这个蓝屏是由于硬件错误触发的。通过系统快捷键导致的蓝屏对应的 Bug Check Code 是 0xe2MANUALLY_INITIATED_CRASH表示这个蓝屏是用户手动触发的。我们可以用 !analyze -show 来查看转储文件中的 bug check code 信息。windbg !analyze -show k从输出结果可知这个蓝屏是用户手动触发蓝屏产生的。从调用栈可知是 i8042prt.sys 处理了我们的按键从而导致的蓝屏。友情提示如果直接用 windbg 打开 %SystemRoot%\MEMORY.DMP 会提示权限不够。可以以管理员权限运行 windbg 后再打开。或者拷贝转储文件到其它目录后再打开即可。注意一定是拷贝而不是剪切。windbg 打开 MEMORY.dmp 失败总结特殊情况下我们可能会主动使系统蓝屏来保存一份转储文件供我们事后分析。我们可以通过本文介绍的几种方法来使系统蓝屏。我个人偏向使用 NotMyFault 或者蓝屏快捷键使系统蓝屏。使用自定义的蓝屏快捷键的时候需要关闭 CrashOnCtrlScroll 设置。Dump1Keys 的值可以是组合值比如0x70 表示同时按下左侧的 ALT CTRL SHIFT。Dump2Key 的值是对应按键的扫描码在数组 keyToScanTbl[134] 中的索引值而且是 16 进制的。需要连续按两次设置的按键才能蓝屏比如我们需要按 CTRL 而不是 CTRL 。尽量不要设置已经被占用的快捷键。我尝试使用 CTRL A A 作为快捷键但是不能触发蓝屏猜测是因为 CTRL A 被占用了。但是 ALT CTRL SHIFT A A 是可以的。在 windbg 中通过 !analyze -show 可以查看转储文件中的 bug check code 信息。对于手动蓝屏得到的转储文件使用 !analyze -v 不能得到更多有效的信息我们需要分析转储文件中的其它信息。%SystemRoot%\MEMORY.DMP 需要管理员权限才能打开可以拷贝而不是剪切到其它目录就可以正常打开了。参考资料https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-179-Manually-Forcing-a-Crash-Dumphttps://support.microsoft.com/en-us/help/2750146/nmi-hardware-failure-error-when-an-nmi-is-triggered-on-windows-8-and-w NMI_HARDWARE_FAILURE error when an NMI is triggered on Windows 8 and Windows Server 2012https://docs.microsoft.com/en-us/windows/client-management/generate-kernel-or-complete-crash-dump#use-nmihttps://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/forcing-a-system-crash-from-the-debuggerhttps://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-9.htmlhttps://codertw.com/%E4%BC%BA%E6%9C%8D%E5%99%A8/135227/http://advdbg.org/forums/3067/PrintPost.aspxhttps://en.wikipedia.org/wiki/Scancodehttps://en.wikipedia.org/wiki/Keyboard_layouthttp://www.philipstorr.id.au/pcbook/book3/scancode.htmhttps://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-9.htmlhttp://www.geoffchappell.com/studies/windows/win32/ntdll/api/rtl/peb/setprocessiscritical.htmReferences:[1]微软官方文档 —— Forcing a System Crash from the Keyboard: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/forcing-a-system-crash-from-the-keyboard[2]github 上的 Invoke-BSOD 项目: https://github.com/peewpw/Invoke-BSOD/blob/master/Invoke-BSOD.ps1猜你喜欢转储文件系列转储文件知多少你需要知道的 N 种抓取 dump 的工具你生成的转储文件有问题吗向大厂看齐为自己的程序增加自动转储的功能内核转储开抓啦蓝屏BSOD转储设置看本文就够了调试系列调试实战——你知道怎么使用DebugView查看调试信息吗调试实战——程序CPU占用率飙升你知道如何快速定位吗调试实战——崩溃在ComFriendlyWaitMtaThreadProc调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs调试实战——调试PInvoke导致的内存破坏调试实战——调试excel启动时死锁调试实战——调试DLL卸载时的死锁调试实战——调试TerminateThread导致的死锁排错系列排错实战——VS清空最近打开的工程记录排错实战——拯救加载调试符号失败的IDA排错实战——你知道拖动窗口时只显示虚框怎么设置吗排错实战——解决Tekla通过.tsep安装插件失败的问题排错实战——使用process explorer替换任务管理器排错实战——通过对比分析sysinternals事件修复程序功能异常