2023年12月16日发(作者:)
Windows 蓝屏检测/分析思路与处理
2014.12.12 By 郭爽
一. 基本概念
1. 小存储器转储文件
小存储器转储文件记录可帮助确定计算机为什么意外停止的最小的有用信息集。此选项要求启动卷(一般指系统分区,如 C 区)上有一个至少为 2 MB 的页面文件。在运行 Microsoft Windows 2000 或更高版本的计算机上,计算机每次意外停止时 Windows 都会新建一个文件。这些文件的历史记录存储在一个文件夹中。
2. 为什么系统会出现蓝屏
NT内核的操作系统采用的是分层管理结构(层又称为模式),主要有用户层(User Mode)和内核层(Kernel Mode),出现蓝屏情况,是由于“用户层”(用户或者系统软件进行的操作)和“内核层”“沟通”过程中产生了冲突。我们可以通过下面这个形象的比喻来理解Windows的运行规范和蓝屏起因。平时产品制造厂运行得有序而高效,每个生产小组加班加点制造各种用途的产品,工厂里有个极为严格的规定,那就是不管要用什么装配零件,都必须经过直接控制所有零件的厂领导(具有高特许级别,可以直接访问所有硬件和内存)的批准,之后才能到仓库中提取相应零件,而生产小组只负责生产(只拥有较低权限,不能直接访问硬件和有限地利用内存)。有一天,A 生产小组没有经过厂领导批准,偷偷跑到仓库里面想拿一个装配零件,但马上就被年年被评为先进的值班员发现了,于是立即通知厂领导,这个生产小组的工作马上被停止,而且还在厂宣传栏贴出一个告示:XXX 生产小组出现了错误,厂领导决定马上将其关闭、整顿,并会记录在案,以观后效。但A 生产小组的错误似乎没有引起大家的注意,一天,D生产小组居然闯进仓库哄抢装配零件,为了防止零件资源失控,产生更严重的混乱,厂领导立即决定停止整个工厂的工作,并命令保卫科对所有生产小组进行全面检查,保卫科在检查后为厂领导提交了一份用蓝色纸写的报告,就是大家经常看到的“蓝屏图片”了。
二. DUMP 文件
1.
概念: Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。该文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg打开。
1 / 15
2.
用途: Dump 文件分析的用途之一就是分析蓝屏产生的原因。这种系统级的错误算是Windows提示错误中比较严重的一种(更严重的还有启动黑屏等硬件或软件兼容性错误等等)。说它是比较严重,是因为毕竟Windows还提供了dump文件给用户分析,至少能比较容易的找到错误的原因。一般蓝屏要么是内核程序中的异常或违规,要么是数据结构的损坏,也有启动或关机的时候内核出错。有时候蓝屏是一闪而过,紧接着是系统重启;有时候是蓝屏等待。总之蓝屏的时候都提示了一些停止代码和错误信息,不过这些提示是不全面的,最多知道哪个模块出错(比如驱动)。想了解进一步的信息,或者通过搜索引擎,最好的方式当然是dump文件分析。当然,如果有更进一步研究的欲望,内核调试是更好的方法,不过这需要某些软件支持和调试技巧。
3.
类型
Dump文件有三种:完整内存转储,内核内存转储,小内存转储。“系统属性”中的高级选项中可以看到这些设置。完整内存转储太大,一般是物理内存大小或多一些,包括了用户进程页面,这种方式不实用,2GB的物理内存转储出来至少要2GB的磁盘空间(还有文件头信息)。内核转储一般是200MB大小(物理内存小于4GB),它只是包含了所有属于内核模式的物理内存。小内存转储一般是64KB(64位上是 128KB),这两种方式是更常用的。
4.
小内存转储下的 DUMP文件
小内存转储在WindowsMinidump文件夹下生成了一个叫Mini日期+序列号.dmp的文件,这个珍贵的资源就是系统崩溃时刻的状态。前面说到的 dump
文件分析,其实就是借助工具软件读取该文件,然后对文件进行人为分析。
三. DUMP 文件分析工具
常见的DUMP文件分析工具有:微软出品的Windbg 和第三方软件BlueScreenView,首选:Windbg。
1. Windbg
⑴概念:WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。针对蓝屏这种情况,我们可以借助它来进行简单的分析。
⑵ 官方原版下载: 分为 x86 和 x64 两个版本,即:32位和 64位两个版本
● x86 32位系统版本:/download/symbols/debuggers/dbg_x86_
2 / 15
● x64 64位系统版本:
/download/symbols/debuggers/dbg_ia64_
●绿色版(32和64位系统通用):
101.199.96.36//windbg/
2. BlueScreenView
⑴说明:这款名为BlueScreenView(蓝屏信息速查)的免费小软件能够分析出Windows发生蓝屏崩溃后生成的“minidump”文件,使其容易阅读,从而帮助用户找出问题的症结所在。虽然它的功能没有windbg强大,但是软件中附带的一个小功能,会让我们有特别的“惊喜”
⑵下载:
● 1.29 绿色汉化版:/soft/
四. 开启 小内存转储(以便系统生成dump文件)
要使系统能够记录 dump 文件,我们必须事先确保系统盘开启了“虚拟内存,并且系统中的“小内村转储”功能已经开启。虚拟内存我就不截图了,属于基本操作。开启小内存转储,以Windows 7 为例,XP后面我附个图。具体方法如下:
1. 右键点击:计算机(我的电脑),选择:属性
3 / 15
2. Windows vista / 7,选择: “高级系统设置”(XP系统没有这步)
3. 选择:“高级”
4. 点击:“启动和故障恢复”中的“设置”
4 / 15
5. 去掉“自动启动”。在“写入调试信息”下方,选择:小内存转储(128 KB)。
6. 下方的“转储文件”,保持默认 即可。无需改动。
7. 附一张 XP 下的图,去掉“自动重新启动”,选择: 小内存转储(64 KB)
5 / 15
五.WinDbg使用方法
1. 以绿色版为例,解压缩文件夹后,进入文件夹,双击里面的:运行
2. 运行后,弹出软件主界面,点击:File —— Open Crash Dump(或者直接在软件界面中,按下 Ctrl+D 快捷键)
弹出选择对话框,选择Windows自动生成的 Dump 文件。Windows 的小内存转储dump文件,位于:X:WindowsMinidump文件夹下。如:
★知识点补充: XP下,生成的dump文件,是以日期命名的;而Windows vista 和
Windows 7系统,除了 *.dmp文件外,还有一种名称是: ,是其他的转储方式生成的。
6 / 15
选中后点击:打开 .dmp 文件,WinDbg弹出如下提示,点击: 否,即可
经过简单的分析,软件会给出最后的结论,看图:
7 / 15
红色框部分的意思是: 可能由(后面的文件)引起:
此例中,可以看到,是由 文件引起的蓝屏故障。
经软件分析后,即可确定导致的蓝屏的文件是哪个。我们就需要去搜索该文件,人为分析该文件用途。一般都能搜出有用的东西,即:可以尝试的解决方案。如图,下面是用Google搜出来的,虽然只有2个搜索结果,但已经足够了:
通过搜索结果,可以做出初步判断: TCP半开连接数 引起的蓝屏,那么TCP半开连接数又是什么意思呢? 继续Google吧……
8 / 15
Windbg最大的用途就是可以通过自动分析dump文件,直接告知导致蓝屏的罪魁祸首,而我们专家工程师需要做的,就是针对该文件,结合自己的知识。去做出进一步的判断、检查、分析、甚至包括后面的具体解决错误。
知识点补充:这个软件分析完,大家会发现我们无法继续打开别的dmp文件来继续分析,而必须重新运行软件。其实原因是“软件没分析完”,可以在软件中,通过点击下图的按钮,或者用 shift+F5 快捷键,停止当前分析过程,就能继续分析其他dmp文件了。如图:
六. BlueScreen View 使用方法
众所周知,在远程服务层面上,我们是肯定看不到用户电脑蓝屏界面的,而只能一味的询问用户,让用户尽可能的描述或者拍照。其实不需要这么麻烦,完全可以借助之前提到的第二个工具: BlueScreenView,在该软件中,直接“再现
Windows 蓝屏界面”。因为软件是绿色中文免费版,下载和运行我就不多说了。
★ 注意: 该软件和 WinDbg不同,在运行软件之前,必须确保:
WindowsMinidump 目录下存在 dump 文件!软件运行后,会自动读取该目录下全部dump文件。
我事先在Minidump文件夹放了几个dump文件。打开软件后如图:
9 / 15
1. 软件打开后,默认在下方窗口中显示可能导致蓝屏的“文件(如驱动文件)”,如果没有显示,可以在“选项”- 显示下方面板 中,选择“显示所有驱动程序”,即可。如图:
选择后就是上面图的样子了,背景色为粉丝的文件,就是可能导致蓝屏的文件。
2. “再现Windows 蓝屏界面”
点击软件的:选项 —— 显示下方面板,选择: 显示为 XP 样式的系统崩溃蓝屏
10 / 15
我们立刻就能看到久违的蓝屏现象再现:
看图中我圈选的两部分:
11 / 15
The Problem seems to be caused by the following file:
翻译过来:此问题可能是由于文件导致。
此外,上图中下方即可显示传统的蓝屏代码:STOP:0x000000d1,也可以帮助我们判断蓝屏故障的原因。
七. 关于蓝屏文件的 处理
导致蓝屏的文件类型,大部分情况就两种,一种是 EXE 运行程序,一种是 SYS 驱动文件,针对这两类文件,我们下面需要做的,就是: 区分 是否为系统自带文件。系统自带文件指系统正常安装(不是ghost) 就自带的文件。第三方软件和硬件驱动,这些都不算“系统自带文件”!那么分类说明
1. 系统自带文件
这类文件直接报错,可能是由于恶意程序感染导致,所以需要先在第三方进程管理器(如pchunter)里面,找到该文件,然后看看“签名是否改变了”,如果改变了,非微软签名了,那么就是被感染, 手动替换该文件。(特别提示:大部分系统文件,在当前系统下无法完成替换,可以尝试使用 LogAction 进行替换操作)。如果文件没有被篡改(感染),那么可以考虑是否有下挂模块,下挂模块异常也会直接导致文件(进程)蓝屏,如果模块也没有,就只能建议用户考虑重装系统了。
2. 第三方文件(包括硬件驱动)
对于这类文件,需要先确定该文件是来自于哪个“软件”。这就需要借助大家的“经验”了,有些人技术好,经验多。一眼就能看出来。如果你看不出来,自觉百度去。
12 / 15
驱动级的SYS文件操作,需要借助反Rootkit工具来删除。如XP下的Wsyscheck,目前流行的Pchunter,Xuetr,都可以。如图:在Pchunter中,找到“驱动模块”,因为文件非微软自带的,所以会显示为“蓝色”。
假设蓝屏文件为图中的: (通过 文件厂商,就能判断是 Tencent,腾讯的软件),点击右键-选择:删除文件和注册表。
特别注意!操作驱动模块,存在很大风险,强烈建议操作前和用户言明风险,用户同意操作后再行操作。
除了删除导致蓝屏的文件,对于第三方软件的文件,还可以通过:重新安装软件,升级/降级软件。等方式来解决。不一定非要直接删除文件。
3. 硬件因素
13 / 15
除了进行文件操作,蓝屏也可能是由于 硬件问题导致,特别是: 内存进尘土,金手指氧化,硬盘有坏道(文件读取不了产生蓝屏),硬件松动 等原因。这种情况,出现蓝屏的是 系统文件 较多。如果用户反馈重装了系统还蓝屏,那么就建议用户: 清理机箱尘土,擦拭内存金手指,HDtune检测硬盘坏道,重新插拔硬件等操作了。
八. 总结和补遗
1. 总结
在Windows系统中,蓝屏时时刻刻都会出现,究其原因,一般都是由于软件和系统的不完善、冲突 导致的。具体来说,可以简单理解为:在软件运行过程中,某(些)文件,需要读取/写入内存地址,在这个过程中出现了错误,导致冲突或者错误,而进一步造成的蓝屏。
因为这部分的具体操作,涉及到了系统内核,在实际分析过程中多会涉及编程方面的知识。因此现阶段,我们无法真正彻底的触及其“精髓”,我们需要做的就是:利用辅助软件,查出是由于哪个文件引起的,借助其他方面的知识,判断该文件的用途,以此来尝试解决、或者说是尽量减少用户系统蓝屏的可能。
如上面的例子,,是金山安全软件的文件。查出原因告知用户,可建议用户换其他安全软件。如果用户不愿意,不接受。可建议用户把此问题反馈给金山,由他们去改善产品。而不要一味的浪费时间,想着如何去实际解决该问题。
本次的文档,也算是带领大家“入门”,我们以后在条件允许的情况下,会引入编程方面的人才的。到时候自然就会让大家的分析水平,再上升N个档次!
2. 补遗
在某些情况下,虽然我们之前设置了“小内核转储”,但发生蓝屏情况时,系统并未生成dump文件,此时就需要我们手动的去生成。
手动生成Dump文件时,我们需要一个PS/2接口的键盘,并在系统中做如下设置:
1)、打开注册表编辑器 regedit;
2)、定位如下键值:14 / 15
HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession Manager
3)、设置GlobalFlag的值为00000400(16进制)
4)、定位如下键值:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesi8042prtParameters
5)、新建一个DWORD的键,命名为“CrashOnCtrlScroll”
6)、设置其值为1
7)、重启电脑使设置生效。
当系统问题发生时,我们使用PS/2的键盘触发蓝屏。当系统停在死机界面时,请按住右边的“Ctrl”键,然后连续按下”Scroll Lock”键2次。当我们看到蓝屏界面时,请等待至到系统收集dump文集的过程结束之后再重新启动服务器。因为这个操作只能通过本地的终端直接进行,不能通过任何的远程服务进行操作。 所以出现这种情况时,我们一般可以通过电话方式告知用户如何操作。
3. 无法生成dump 文件。
少部分操作系统,由于其特殊性,即便设置了小内存转储,也无法生成 dump 文件。针对这种用户,做法如下
⑴ 借助bluescreenview,查看“XP经典蓝屏模式”,获取蓝屏信息。
⑵ 一般获取的都是蓝屏代码。如图:
这种情况,只能是用上面代码,去网上搜索解决方案了。同时,也可以到微软官方的蓝屏代码库:/,填入上面检测到的蓝屏代码,进行查询。如图:
15 / 15


发布评论