【CTF-MISC-dmp】使用WinDbg分析Windows蓝屏崩溃转储文件dmp
题目
furryCTF 2025 赛前热身\MSIC\PassDump
解题
用WinDbg打开文件
加载较慢,等待加载完成
加载完成
分析崩溃转储文件
执行命令
!analyze-v!analyze -v是 WinDbg(Windows 调试器)中的一个扩展命令,用于自动分析崩溃转储文件并提供详细的错误信息。
!analyze
- 这是 WinDbg 的自动化分析引擎
- 会自动检查当前的崩溃转储,尝试找出问题的根本原因
!前缀表示这是一个扩展命令(不是内置命令)
-v参数
- v = verbose(详细模式)
- 让分析结果显示最详细的信息
- 不加
-v只显示简要摘要,加上后显示完整分析报告
输出内容解读
当运行!analyze -v,会得到类似你之前看到的输出:
- Bugcheck Analysis- 错误类型和描述
- Arguments- 错误的具体参数
- STACK_TEXT- 调用堆栈
- SYMBOL_NAME- 出问题的模块
- FAILURE_BUCKET_ID- 错误分类ID
- Followup- 建议的跟进方
分析报告
Loading unloaded module list......................................... For analysis of this file, run!analyze-vnt!KeBugCheckEx: fffff803`b1f00450 48894c2408 mov qword ptr[rsp+8],rcx ss:ffffc982`1c9677e0=000000000000011612: kd>!analyze-vLoading Kernel Symbols..Press ctrl-c(cdb, kd, ntsd)or ctrl-break(windbg)to abort symbol loads that take too long. Run!sym noisy before .reload to track down problems loading symbols............................................................................................................................................................................................................................................................................................................Loading User Symbols Loading unloaded module list......................................... ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* VIDEO_TDR_FAILURE(116)Attempt to reset the display driver and recover fromtimeoutfailed. Arguments: Arg1: ffffe30a4b8cd010, Optional pointer to internal TDR recovery context(TDR_RECOVERY_CONTEXT). Arg2: fffff8035ce14790, The pointer into responsible device driver module(e.g. owner tag). Arg3: ffffffffc000009a, Optional error code(NTSTATUS)of the last failed operation. Arg4: 0000000000000004, Optional internal context dependent data. Debugging Details: ------------------ Unable to load image nvlddmkm.sys, Win32 error 0n2 *** WARNING: Unable to verify timestampfornvlddmkm.sys KEY_VALUES_STRING:1Key:Analysis.CPU.mSec Value:4359Key:Analysis.Elapsed.mSec Value:71395Key:Analysis.IO.Other.Mb Value:0Key:Analysis.IO.Read.Mb Value:1Key:Analysis.IO.Write.Mb Value:1Key:Analysis.Init.CPU.mSec Value:1062Key:Analysis.Init.Elapsed.mSec Value:68685Key:Analysis.Memory.CommitPeak.Mb Value:102Key:Analysis.Version.DbgEng Value:10.0.29507.1001 Key:Analysis.Version.Description Value:10.2511.5.1 amd64fre Key:Analysis.Version.Ext Value:1.2511.5.1 Key:Bugcheck.Code.LegacyAPI Value: 0x116 Key:Bugcheck.Code.TargetModel Value: 0x116 Key:Dump.Attributes.AsUlong Value: 0x21808 Key:Dump.Attributes.DiagDataWrittenToHeader Value:1Key:Dump.Attributes.ErrorCode Value: 0x0 Key:Dump.Attributes.KernelGeneratedTriageDump Value:1Key:Dump.Attributes.LastLine Value: Dump completed successfully. Key:Dump.Attributes.ProgressPercentage Value:0Key:Failure.Bucket Value: 0x116_IMAGE_nvlddmkm.sys Key:Failure.Exception.IP.Address Value: 0xfffff8035ce14790 Key:Failure.Exception.IP.Module Value: nvlddmkm Key:Failure.Exception.IP.Offset Value: 0x1854790 Key:Failure.Hash Value:{c89bfe8c-ed39-f658-ef27-f2898997fdbd}Key:Faulting.IP.Type Value: Paged Key:Hypervisor.Enlightenments.ValueHex Value: 0x7417df84 Key:Hypervisor.Flags.AnyHypervisorPresent Value:1Key:Hypervisor.Flags.ApicEnlightened Value:0Key:Hypervisor.Flags.ApicVirtualizationAvailable Value:1Key:Hypervisor.Flags.AsyncMemoryHint Value:0Key:Hypervisor.Flags.CoreSchedulerRequested Value:0Key:Hypervisor.Flags.CpuManager Value:1Key:Hypervisor.Flags.DeprecateAutoEoi Value:1Key:Hypervisor.Flags.DynamicCpuDisabled Value:1Key:Hypervisor.Flags.Epf Value:0Key:Hypervisor.Flags.ExtendedProcessorMasks Value:1Key:Hypervisor.Flags.HardwareMbecAvailable Value:1Key:Hypervisor.Flags.MaxBankNumber Value:0Key:Hypervisor.Flags.MemoryZeroingControl Value:0Key:Hypervisor.Flags.NoExtendedRangeFlush Value:0Key:Hypervisor.Flags.NoNonArchCoreSharing Value:1Key:Hypervisor.Flags.Phase0InitDone Value:1Key:Hypervisor.Flags.PowerSchedulerQos Value:0Key:Hypervisor.Flags.RootScheduler Value:0Key:Hypervisor.Flags.SynicAvailable Value:1Key:Hypervisor.Flags.UseQpcBias Value:0Key:Hypervisor.Flags.Value Value:55185662Key:Hypervisor.Flags.ValueHex Value: 0x34a10fe Key:Hypervisor.Flags.VpAssistPage Value:1Key:Hypervisor.Flags.VsmAvailable Value:1Key:Hypervisor.RootFlags.AccessStats Value:1Key:Hypervisor.RootFlags.CrashdumpEnlightened Value:1Key:Hypervisor.RootFlags.CreateVirtualProcessor Value:1Key:Hypervisor.RootFlags.DisableHyperthreading Value:0Key:Hypervisor.RootFlags.HostTimelineSync Value:1Key:Hypervisor.RootFlags.HypervisorDebuggingEnabled Value:0Key:Hypervisor.RootFlags.IsHyperV Value:1Key:Hypervisor.RootFlags.LivedumpEnlightened Value:1Key:Hypervisor.RootFlags.MapDeviceInterrupt Value:1Key:Hypervisor.RootFlags.MceEnlightened Value:1Key:Hypervisor.RootFlags.Nested Value:0Key:Hypervisor.RootFlags.StartLogicalProcessor Value:1Key:Hypervisor.RootFlags.Value Value:1015Key:Hypervisor.RootFlags.ValueHex Value: 0x3f7 Key:WER.System.BIOSRevision Value:1.23.0.0 BUGCHECK_CODE:116BUGCHECK_P1: ffffe30a4b8cd010 BUGCHECK_P2: fffff8035ce14790 BUGCHECK_P3: ffffffffc000009a BUGCHECK_P4:4FILE_IN_CAB: furryCTF.dmp DUMP_FILE_ATTRIBUTES: 0x21808 Kernel Generated Triage Dump FAULTING_THREAD: ffffe30a86af3040 VIDEO_TDR_CONTEXT: dt dxgkrnl!_TDR_RECOVERY_CONTEXT ffffe30a4b8cd010 Symbol dxgkrnl!_TDR_RECOVERY_CONTEXT not found. PROCESS_OBJECT: 0000000000000004 BLACKBOXACPI:1(!blackboxacpi)BLACKBOXBSD:1(!blackboxbsd)BLACKBOXNTFS:1(!blackboxntfs)BLACKBOXPNP:1(!blackboxpnp)BLACKBOXWINLOGON:1(!blackboxwinlogon)PROCESS_NAME: System IP_IN_PAGED_CODE: nvlddmkm+1854790 fffff803`5ce14790 488b05b9f28dff mov rax,qword ptr[nvlddmkm+0x1133a50(fffff803`5c6f3a50)]STACK_TEXT: ffffc982`1c9677d8 fffff803`43a2375d:00000000`00000116 ffffe30a`4b8cd010 fffff803`5ce14790 ffffffff`c000009a:nt!KeBugCheckEx ffffc982`1c9677e0 fffff803`43c97be6:fffff803`5ce14790 ffffe30a`5b80b5a0 00000000`00000004 ffffe30a`4b8cd010:dxgkrnl!TdrBugcheckOnTimeout+0x101 ffffc982`1c967820 fffff803`43a324be:00000000`00000000 00000000`00002000 00000000`00000004 00000000`00000004:dxgkrnl!ADAPTER_RENDER::Reset+0x232 ffffc982`1c967850 fffff803`43a69375:ffffe30a`00000100 00000000`00000000 ffffc982`00000000 00000000`00000000:dxgkrnl!DXGADAPTER::Reset+0x59a ffffc982`1c9678e0 fffff803`43a694d2:fffff803`b290ce60 00000000`00000000 ffffb881`c42d1100 fffff803`b29cfbc0:dxgkrnl!TdrResetFromTimeout+0x15 ffffc982`1c967910 fffff803`b1c3072c:ffffe30a`86af3040 ffffe30a`478ddae0 ffffe30a`478dda00 fffff803`44b52750:dxgkrnl!TdrResetFromTimeoutWorkItem+0x22 ffffc982`1c967950 fffff803`b1ea007a:ffffe30a`86af3040 ffffe30a`86af3040 fffff803`b1c30140 ffffe30a`478ddae0:nt!ExpWorkerThread+0x5ec ffffc982`1c967b30 fffff803`b20a5db4:ffffb881`c42d1180 ffffe30a`86af3040 fffff803`b1ea0020 00000000`0e5f57dc:nt!PspSystemThreadStartup+0x5a ffffc982`1c967b80 00000000`00000000:ffffc982`1c968000 ffffc982`1c961000 00000000`00000000 00000000`00000000:nt!KiStartSystemThread+0x34 SYMBOL_NAME: nvlddmkm+1854790 MODULE_NAME: nvlddmkm IMAGE_NAME: nvlddmkm.sys STACK_COMMAND: .process /r /p 0xffffe30a476cb040;.thread 0xffffe30a86af3040;kb FAILURE_BUCKET_ID: 0x116_IMAGE_nvlddmkm.sys OSPLATFORM_TYPE: x64 OSNAME: Windows10FAILURE_ID_HASH:{c89bfe8c-ed39-f658-ef27-f2898997fdbd}Followup: MachineOwner ---------这是一个Windows蓝屏崩溃转储文件的分析结果,解释其中的关键内容:
错误概述
- 错误代码:
VIDEO_TDR_FAILURE (116)- 显卡驱动超时恢复失败 - 问题本质: 显卡驱动在指定时间内没有响应,系统尝试重置驱动但失败了
崩溃参数含义
Arg1: ffffe30a4b8cd010 - TDR恢复上下文的内存地址 Arg2: fffff8035ce14790 - 出问题的驱动模块地址(指向nvlddmkm.sys) Arg3: ffffffffc000009a - 错误码(STATUS_DEVICE_DATA_ERROR,设备数据错误) Arg4: 0000000000000004 - 内部上下文数据涉及模块
nvlddmkm.sys-NVIDIA显卡驱动(导致崩溃的驱动)- 系统无法加载此驱动的符号文件(Win32 error 0n2 = 文件找不到)
崩溃进程
PROCESS_NAME: System- 崩溃发生在系统进程中,说明是内核级别的显卡问题
堆栈跟踪分析
堆栈显示调用链:
nt!KeBugCheckEx- 系统发出崩溃检查dxgkrnl!TdrBugcheckOnTimeout- DirectX图形内核检测到TDR超时nvlddmkm+1854790- NVIDIA驱动的特定代码位置触发了问题
最后几行含义解释
SYMBOL_NAME: nvlddmkm+1854790
- 符号名称,指示崩溃发生在NVIDIA驱动模块的偏移量0x1854790处
- 这是驱动内的具体函数位置
MODULE_NAME: nvlddmkm
- 出问题的模块是NVIDIA显卡驱动
IMAGE_NAME: nvlddmkm.sys
- 导致崩溃的具体文件是NVIDIA驱动的系统文件
FAILURE_BUCKET_ID: 0x116_IMAGE_nvlddmkm.sys
- 微软用于分类错误的唯一标识
- 表明这是由NVIDIA驱动引起的TDR错误类型
Followup: MachineOwner
- 建议由计算机所有者(通常是设备制造商或微软)跟进处理
问题根源总结
NVIDIA显卡驱动(nvlddmkm.sys)超时,导致系统尝试重置显卡,但重置过程也失败了。这通常与以下因素有关:
- 显卡驱动版本不兼容或损坏
- 显卡硬件问题(过热、供电不足)
- DirectX图形处理超时
建议操作:
- 使用DDU完全卸载当前NVIDIA驱动
- 安装最新稳定版NVIDIA驱动
- 如果问题持续,可能是显卡硬件故障
查看最后一次编译时间
使用lm v m nvlddmkm命令查看 NVIDIA 驱动模块详细信息的输出。
lmvm nvlddmkm12: kd>lmvm nvlddmkm Browse full module list start end module name fffff803`5b5c0000 fffff803`612ff000 nvlddmkm T(no symbols)Loaded symbol image file: nvlddmkm.sys Image path: nvlddmkm.sys Image name: nvlddmkm.sys Browse all global symbols functions data Symbol Reload Timestamp: Tue Feb1113:40:162025(67AAE2C0)CheckSum: 05B57FA7 ImageSize: 05D3F000 Mapping Form: Loaded Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables:命令解析
lm- List Modules(列出模块)v- verbose(详细模式)m nvlddmkm- match(匹配名称,只显示 nvlddmkm 模块)
模块基本信息
start end module name fffff803`5b5c0000 fffff803`612ff000 nvlddmkm T (no symbols)- start/end: 模块在内存中的起始和结束地址
- 起始:
fffff8035b5c0000 - 结束:
fffff803612ff000 - 大小: 约 93.7 MB (0x5D3F000 字节)
- 起始:
- T: 表示这是内核模块(Kernel mode)
- (no symbols):没有加载符号文件,意味着无法看到函数名等调试信息
文件信息
Loaded symbol image file: nvlddmkm.sys # 实际加载的镜像文件 Image path: nvlddmkm.sys # 文件路径(当前目录) Image name: nvlddmkm.sys # 文件名时间戳
Timestamp: Tue Feb 11 13:40:16 2025 (67AAE2C0)- 这是驱动编译的时间戳
- 这个驱动是2025年2月11日编译的
- 括号内是16进制时间戳值
校验信息
CheckSum: 05B57FA7 # 文件校验和,用于验证完整性 ImageSize: 05D3F000 # 镜像大小(十六进制)- CheckSum: 文件的理论校验值
- ImageSize: 0x5D3F000 ≈ 97.7 MB
格式信息
Mapping Form: Loaded # 映射方式:已加载 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 # 字符集转换信息- Translations: 表示支持的语言编码
- 04b0: Unicode
- 04e4: 其他编码
- 0409: 美国英语
“(no symbols)” 的含义
- 调试器没有找到这个驱动的符号文件(.pdb)
- 意味着只能看到内存地址,看不到函数名
- 原因可能是:
- 符号文件不存在
- 符号路径配置错误
- 这是第三方驱动,公共符号不完整
对调试的影响
有符号文件时可以显示:
nvlddmkm!DriverEntry+0x100 # 显示函数名无符号文件时只能显示:
nvlddmkm+0x1854790 # 只有偏移地址如何解决符号问题
# 设置符号路径(微软公共符号服务器).sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols# 重新加载符号.reload /f nvlddmkm.sys这个命令输出告诉我们:这是一个2025年2月编译的NVIDIA驱动,目前位于内存地址fffff8035b5c0000到fffff803612ff000之间,但因为缺少符号文件,无法看到内部的函数名称。
构造正确的 flag
1. 出现问题的文件
从IMAGE_NAME: nvlddmkm.sys可知,出问题的文件是nvlddmkm.sys。
2. 蓝屏错误代码
从BUGCHECK_CODE: 116可知,错误代码为0x116。
3. 该文件的最后一次编译时间lm v m nvlddmkm输出里有:
Timestamp: Tue Feb 11 13:40:16 2025 (67AAE2C0)文件编译时间是2025.02.11-13:40:16,但我们需要转换为YYYY.MM.DD-HH:MM:SS格式。
得到:2025.02.11-13:40:16
4. 失败事件的缩写
错误代码0x116对应VIDEO_TDR_FAILURE。
TDR =Timeout, Detection, and Recovery。
缩写为TDR。
5. 当时正在使用的应用程序名称PROCESS_NAME: System表示崩溃发生时在System 进程(系统空闲/内核线程)上下文中。
所以应用程序名称应为System。
组合起来:
furryCTF{nvlddmkm.sys_0x116_2025.02.11-13:40:16_TDR_System}