<2017年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

文章分类

导航

订阅

是谁破坏了内核调试

这是前些日发生的一个故事,星期五一早到单位,开机收邮件,发现一封急件,要求一定要在xxx日之前打好某个补丁。对于这样的邮件,不得不重视,于是就打吧,过了一阵,要求重启系统,那就重启吧。没想到,重启之后系统一直停留在一个画面,显示如下两行字:

“Preparing to configure Windows"

"Do not turn off your computer”

当然除了这两行字,还有一个代表忙碌的旋转图标,转啊转啊,转啊转啊,5分钟过去了,还转啊转啊,十分钟过去了,还转啊转啊,转啊转啊...

实在看不下去了,强制蓝屏后重启,结果还是这个画面,转啊转啊...

尝试进安全模式,但也遇到同样的问题,转啊转啊...

尝试"Last known good...",也是转啊转啊...

尝试WRE,顺利进入到修复环境,但是因为主系统的Windows 7使用了全硬盘加密,所以无法休息,晕倒。

怎么办,上调试器,在WRE中启用内核调试,选择串口方式,将本子放在dock上,找到另一台有串口的机器,开始调试。

起初很顺利,目标机启动后,WinDBG便收到了握手信息,可以顺利断下来。因为问题出在登录阶段,所以g,让目标系统继续跑,过了一会,转啊转啊的场景又出现了,心里想,这下可以看看到底是为什么停在这里了,激动的按下Ctrl + Break,然后等待目标系统“应声落马”,乖乖的中断到调试器中,但实际却没有反应,目标系统根本没有中断下来,还是在那里转啊转啊,转啊转啊,真是气煞我也!

眼看着时间一分一秒的过去,上午本来要做的事情还没有做,但是电脑进不去,啥也干不成啊。是可忍,孰不可忍。脱下外套,倒一杯茶,准备好打一场硬仗。

第一步要搞清楚的是为什么出现“转啊转啊”的时候内核调试不工作了。启动初期工作的好好的,后来为何不工作了呢?

根据经验,一定是被哪个坏蛋破坏掉了。怎么抓住破坏内核调试的黑手呢?一种方法就是监视禁止内核调试的KD函数(KdDisableDebuggerWithLock和KdDisableDebugger),当坏蛋调用这个函数时将其当场抓住。

于是bp KdDisableDebuggerWithLock;bp KdDisableDebugger将两个函数都设置上断点,然后再g恢复目标运行。

过了一会,登录桌面出现,就要进入“转啊转啊”阶段了,这时断点命中了,看来坏蛋正是在这个时候对内核调试下狠手了。k命令追查调用者:

2: kd> k
Child-SP          RetAddr           Call Site
fffff880`035b6828 fffff880`0838840a nt!KdDisableDebuggerWithLock
fffff880`035b6830 fffff800`03c66047 PECKP_x64+0x540a
fffff880`035b6860 fffff800`03c66445 nt!IopLoadDriver+0xa07
fffff880`035b6b30 fffff800`03882ca9 nt!IopLoadUnloadDriver+0x55
fffff880`035b6b70 fffff800`03b1a34a nt!ExpWorkerThread+0x111
fffff880`035b6c00 fffff800`0386a946 nt!PspSystemThreadStartup+0x5a
fffff880`035b6c40 00000000`00000000 nt!KxStartSystemThread+0x162

狐狸露出尾巴了,名字叫PECKP_x64。还挺隐晦的名字。lm观察详情:

3: kd> lm vm pec*
start             end                 module name
fffff880`086f3000 fffff880`08708000   PECKP_x64   (deferred)            
    Image path: \??\C:\Windows\system32\drivers\PECKP_x64.SYS
    Image name: PECKP_x64.SYS
    Timestamp:        Thu Jul 12 23:06:36 2012 (4FFEE7FC)
    CheckSum:         0000B31B
    ImageSize:        00015000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

没有描述,只好搜索了,Google加baidu,查到了,原来是某银行网银控件的一部分,所谓的键盘保护驱动,防止用户输入密码时被嗅探。出发点是好的,但为什么要破坏内核调试啊?怕被跟踪么?哎,那也不能这样干啊,亲爱的同行。

u看了下汇编,没有两秒钟,就想出了一个化解的方法:

eb nt!KdBlockEnable 1

然后跟踪几下,KdDisableDebuggerWithLock就直接返回了。再g继续,转啊转啊的又出现了,再次Ctrl + Break,目标系统应声停下,转啊转啊的图标也定格在那里了。

又经过一番分析,发现问题与TrustedInstaller.exe有关,一通追查(另文记述),问题排除,可以进入系统了。


posted on 2013年5月4日 21:39 由 Raymond

# re: 是谁破坏了内核调试 @ 2013年5月17日 10:17

等着张老师的另文记述啊,呵呵

s5689412

# re: 是谁破坏了内核调试 @ 2013年7月10日 13:12

突然发现,调试真的可以改变命运

cgc20xin

Powered by Community Server Powered by CnForums.Net