【CTF-MISC-dmp】使用WinDbg分析Windows蓝屏崩溃转储文件dmp

【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- 崩溃发生在系统进程中,说明是内核级别的显卡问题

堆栈跟踪分析

堆栈显示调用链:

  1. nt!KeBugCheckEx- 系统发出崩溃检查
  2. dxgkrnl!TdrBugcheckOnTimeout- DirectX图形内核检测到TDR超时
  3. 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图形处理超时

建议操作

  1. 使用DDU完全卸载当前NVIDIA驱动
  2. 安装最新稳定版NVIDIA驱动
  3. 如果问题持续,可能是显卡硬件故障

查看最后一次编译时间

使用lm v m nvlddmkm命令查看 NVIDIA 驱动模块详细信息的输出。

lmvm nvlddmkm
12: 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)
  • 意味着只能看到内存地址,看不到函数名
  • 原因可能是:
    1. 符号文件不存在
    2. 符号路径配置错误
    3. 这是第三方驱动,公共符号不完整

对调试的影响

有符号文件时可以显示:

nvlddmkm!DriverEntry+0x100 # 显示函数名

无符号文件时只能显示:

nvlddmkm+0x1854790 # 只有偏移地址

如何解决符号问题

# 设置符号路径(微软公共符号服务器).sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols# 重新加载符号.reload /f nvlddmkm.sys

这个命令输出告诉我们:这是一个2025年2月编译的NVIDIA驱动,目前位于内存地址fffff8035b5c0000fffff803612ff000之间,但因为缺少符号文件,无法看到内部的函数名称。

构造正确的 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}