0.ring0-蓝屏dump分析流程详解

以下是自己分析dump的一些经验,个人之见

系统蓝屏后,会先出来一个提示:

也可以通过dump来看到:

打开MSDN对蓝屏的说明:http://msdn.microsoft.com/en-us/library/windows/hardware/hh994433(v=vs.85).aspx

找到0x19的说明:

0×00000019 BAD_POOL_HEADER
再找到参数1为0x20的地方:
The pool entry that should have been found
The next pool entry
Reserved
The pool block header size is corrupt.
意思堆头大小被破坏,所以应该是堆分配问题!!!!!!!!!!!!!!!

所以看到0×19,第一个参数为20,第一反应是内存操作错误引发的
另一个常见错误是0×50,PAGE_FAULT_IN_NONPAGED_AREA,这种错误一般是对一个无效的地址进行了访问,如

_asm
{
    Xor eax,eax
    Mov [eax],eax
}

windbg分析(有符号pdb)
这个要注意一下,因为是内核dump,所以如果把它提取出来到本机(不在虚拟机了),先把符号路径设置好(指向它的内核文件Pdb,如虚拟机是XP,就用xp的,再加上它的本地pdb路径)

BugCheck 7E, {c0000005, f889b0d3, f8935b88, f8935884}:和上图一样的效果,指明了蓝屏类型和四个子参数
0xC0000005: STATUS_ACCESS_VIOLATION indicates a memory access violation occurred:MSDN表明这是个内存访问错误
Probably caused by : BSODCheck.sys ( BSODCheck!IsExitProcess+a3 ):指明了蓝屏引发的驱动
FAULTING_IP:
BSODCheck!IsExitProcess+a3 [e:\bsodcheck\bsodcheck.c @ 41]
f889b0d3 8b08 mov ecx,dword ptr [eax]: 指明了引发蓝屏的实际代码
CONTEXT: f8935884 — (.cxr 0xfffffffff8935884)
eax=00000014 ebx=00000000 ecx=80008138 edx=00000000 esi=e1b3129c edi=827743b8
eip=f889b0d3 esp=f8935c50 ebp=f8935c6c iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=0001020

蓝屏时候的现场上下文环境
这两者结合,一个是案发现场,一个是案发时现场的环境,结合起来才好办案

分析流程:
1.mov ecx,dword ptr [eax]: 指明了引发蓝屏的实际代码
2.eax=00000014:来自案发时现场的环境,这是个无效的值
3.代码:

kd> ub f889b0d3 l4
f889b0c8 8b11			mov	 edx,dword ptr [ecx]
f889b0ca 8955f8		  mov	 dword ptr [ebp-8],edx
f889b0cd 8b45f8		  mov	 eax,dword ptr [ebp-8]
f889b0d0 0345ec		  add	 eax,dword ptr [ebp-14h]
 
kd> u f889b0c8 l30
f889b0c8 8b11			mov	 edx,dword ptr [ecx]
f889b0ca 8955f8		  mov	 dword ptr [ebp-8],edx
f889b0cd 8b45f8		  mov	 eax,dword ptr [ebp-8]
f889b0d0 0345ec		  add	 eax,dword ptr [ebp-14h]
f889b0d3 8b08			mov	 ecx,dword ptr [eax]
f889b0d5 894dfc		  mov	 dword ptr [ebp-4],ecx

4.dword ptr [ebp-8]是一个局部变量,保存到eax,Eax+dword ptr [ebp-14h]局部变量
5.结合代码:Segment = *(PULONG)((ULONG)SectionObject + SegmentOffset);时蓝屏了
6.结合案发环境:ebp=f8935c6c:

kd> dd f8935c6c-8 l1
f8935c64 00000000
kd> dd f8935c6c-14 l1
f8935c58 00000014

相加等于14,然后对14做指针取值,挂掉!

//-------------------------------------------------------------------------------------------------------------------------

windbg分析(无符号Pdb,结合IDA)

FOLLOWUP_IP: 案发现场
BSODCheck+10d3
f889b0d3 8b08 mov ecx,dword ptr [eax]
CONTEXT: f8935884 — (.cxr 0xfffffffff8935884):案发现场环境
eax=00000014 ebx=00000000 ecx=80008138 edx=00000000 esi=e1b3129c edi=827743b8
eip=f889b0d3 esp=f8935c50 ebp=f8935c6c iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010206
1.通过7e类型,第一个参数c0000005在MSDN找到这是个内存访问错误
2.查看汇编:

kd> u f889b0ca l4
BSODCheck+0x10ca:
f889b0ca 8955f8 mov dword ptr [ebp-8],edx
f889b0cd 8b45f8 mov eax,dword ptr [ebp-8]
f889b0d0 0345ec add eax,dword ptr [ebp-14h]
f889b0d3 8b08 mov ecx,dword ptr [eax]            // 崩在这里
3.定位特征码:
kd> u f889b0d3
BSODCheck+0x10d3:
f889b0d3 8b08 mov ecx,dword ptr [eax]
f889b0d5 894dfc mov dword ptr [ebp-4],ecx
f889b0d8 8b55fc mov edx,dword ptr [ebp-4]
f889b0db 52 push edx
机器码是:
kd> db f889b0d3 f889b0db
f889b0d3 8b 08 89 4d fc 8b 55 fc-52
4.IDA打开sys,切换到文本模式,搜索特征码:8b 08 89 4d fc 8b 55 fc 52
直接Search–>sequence of bytes或快捷Alt+b


双击即可跳到指定的代码位置,对比就很清楚代码来自哪

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值