日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

系统蓝屏的几种姿势,确定不了解下么?

發布時間:2023/12/4 windows 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 系统蓝屏的几种姿势,确定不了解下么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在 藍屏(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 變通方法:我們可以把其它進程設置為系統關鍵進程,然后殺掉?;蛘邆窝b成系統關鍵進程,然后自動退出。感謝 https://bytecode77.com/hacking/payloads/bsod

int _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] "CrashOnCtrlScroll"=dword:00000001; For USB keyboards [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters] "CrashOnCtrlScroll"=dword:00000001; For Hyper-V keyboards (BCN:I never use this, copy it from document) [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd\Parameters] "CrashOnCtrlScroll"=dword: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] "Dump1Keys"=dword:00000020 "Dump2Key"=dword: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] "Dump1Keys"=dword:00000020 "Dump2Key"=dword: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] "Dump1Keys"=dword:00000020 "Dump2Key"=dword:00000001

重啟后,按住左側的 Ctrl 鍵,然后連續按兩下 ` 鍵就可以使系統藍屏了。注意:一定要連續按兩下! 按一下是不行的。

想要正確設置自定義藍屏快捷鍵,不是一件容易的事。需要了解以下幾點:

1. 使用自定義快捷鍵需要先關閉?CrashOnCtrlScroll?設置,上面的代碼已經做好了。因為不同類型的鍵盤對應的注冊表位置不一樣,怎么知道自己的機器上的鍵盤是哪種類型的?

2. 我們可以打開設備管理器,查看當前機器上的鍵盤信息。


我們可以用如下方法打開?設備管理器:

  • win10?系統中,可以直接在搜索框(或者按一下?windows?鍵)輸入?設備管理器?搜索打開。

  • win10?系統中,按?Windows + x?快捷鍵,在彈出的系統菜單里點擊?設備管理器(M)?打開。

  • 輸入?devmgmt.msc?打開。

  • 通過控制面版打開(不同系統中可能不一樣)。

  • 還有很多其它方法,不一一列舉了。

3. Dump1Keys?的值可以是組合值,比如,0x70?表示同時按下左側的?ALT + CTRL + SHIFT。每一項的意義請參考下表(摘自微軟官方文檔):

值意義
0x01Rightmost SHIFT key
0x02Rightmost CTRL key
0x04Rightmost ALT key
0x10Leftmost SHIFT key
0x20Leftmost CTRL key
0x40Leftmost ALT key

4. 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-179

6. 我們參考相關文檔的時候需要注意:按下按鍵對應的術語是(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] "NMICrashDump"=dword:00000001

6. 內核調試器

如果已經用內核調試器附加到目標系統了,我們可以直接使用 .dump 命令保存轉儲文件,沒必要使系統藍屏再保存轉儲文件。當然,如果我們喜歡,也可以使用 .crash 命令使系統藍屏,如果執行完該命令后,系統沒藍屏,請執行 g 命令。說明:如果當前正在執行 bug check處理函數,不要使用 .crash 命令。

7. 其它

  • 利用 NtRaiseHardError,參考 github 上的 Invoke-BSOD 項目[2]

  • 利用系統漏洞。這方面我不擅長,歡迎搞安全的小伙伴兒分享。

藍屏轉儲一瞥

通過殺死系統關鍵進程導致的藍屏,對應的 Bug Check Code 是 0xF4(CRITICAL_OBJECT_TERMINATION)。

通過 NMI 導致的藍屏,對應的 Bug Check Code 是 0x80(NMI_HARDWARE_FAILURE),表示這個藍屏是由于硬件錯誤觸發的。

通過系統快捷鍵導致的藍屏,對應的 Bug Check Code 是 0xe2(MANUALLY_INITIATED_CRASH),表示這個藍屏是用戶手動觸發的。

我們可以用 !analyze -show 來查看轉儲文件中的 bug check code 信息。

windbg !analyze -show & k

從輸出結果可知,這個藍屏是用戶手動觸發藍屏產生的。從調用棧可知,是 i8042prt.sys 處理了我們的按鍵,從而導致的藍屏。

友情提示:

如果直接用 windbg 打開 %SystemRoot%\MEMORY.DMP 會提示權限不夠??梢砸怨芾韱T權限運行 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-Dump

  • https://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 2012"

  • https://docs.microsoft.com/en-us/windows/client-management/generate-kernel-or-complete-crash-dump#use-nmi

  • https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/forcing-a-system-crash-from-the-debugger

  • https://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-9.html

  • https://codertw.com/%E4%BC%BA%E6%9C%8D%E5%99%A8/135227/

  • http://advdbg.org/forums/3067/PrintPost.aspx

  • https://en.wikipedia.org/wiki/Scancode

  • https://en.wikipedia.org/wiki/Keyboard_layout

  • http://www.philipstorr.id.au/pcbook/book3/scancode.htm

  • https://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-9.html

  • http://www.geoffchappell.com/studies/windows/win32/ntdll/api/rtl/peb/setprocessiscritical.htm

References:

[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事件修復程序功能異常

總結

以上是生活随笔為你收集整理的系统蓝屏的几种姿势,确定不了解下么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。