亲历误删......
昨天中午,一个朋友打电话给我说他的XP系统“开始”菜单不见了。询问了他一番后,感觉确实出了什么问题,可能是explorer程序(explorer.exe)被插件搞乱了,或者中其它招了。
晚上又收到他的电话,显然比中午更加焦急,说系统进不去了。完整的故事是,他使用了某种【隐去真名,不想引来不必要的争议】杀毒软件,杀毒软件“确实”发现了问题,并提示要执行删除动作,他发出确认命令同意这么做了,而后重启,但是再也起不来了,XP的启动进度条滚了一阵后,是杀毒软件的Splash,而后便是黑屏,黑屏持续几秒后,自动重新启动,如此往复不已。
而且,安全模式已经试验过,Last good configuration也试验过【久病成医呀:-(】。都是难得一致的症状,在同一个地点重启。
我尝试在电话里给了他一些建议,寻找问题,但是无济于事。
因为是老朋友,所以今天他把硬盘送了过来。我很想一探究竟,便将硬盘挂在一个有串行口的系统上,使用调试选项开始启动,很快收到了目标内核的信息,赫赫,能建立调试会话,就是成功的一半!
继续启动,过程与他描述的非常一致,在桌面出现前,黑屏了数秒钟。这时,我期待会有Bug Check发生,不要内核都没有反应就重启。因为有Bug Check,就说明NT内核对于这个错误还是有察觉和控制的。
又一次,NT没有让我失望,熟悉的Bug Check提示出现了:
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Use !analyze -v to get detailed debugging information.
BugCheck C000021A, {e1c52ce0, c0000034, 0, 0}
查询停止码(Stop Code),其含义是关键进程异常终止,括号中的第一个参数是有关进程的信息。使用db命令观察这个内存地址:
0: kd> db e1c52ce0
e1c52ce0 57 69 6e 64 6f 77 73 20-4c 6f 67 6f 6e 20 50 72 Windows Logon Pr
e1c52cf0 6f 63 65 73 73 00 00 00-04 02 0a 0c 47 78 6c 74 ocess.......Gxlt
e1c52d00 8e 00 00 00 07 00 00 00-00 00 00 00 02 00 00 00 ................
原来是WinLogon进程。这与症状很相符,在桌面出现前,是先要有WinLogon进程。
那么WinLogon怎么了呢?会不会是被病毒替换掉了,还是删除了呢?使用一个完好的XP系统观察出问题的系统目录,在system32中果然找不到winlogon.exe。这一定是有问题的。于是想办法从其它系统寻找一个winlogon.exe复制过来。
运气不错,找到了,复制进去,然后重新启动。抱着侥幸心理先没有使用调试选项,望着屏幕等待结果......
黑屏——停顿——几秒后,再次重启.......
看来这个问题没这么简单。于是再使用调试选项观察,居然与刚才一样的Bug Check。
再用正常的XP观察出问题的系统目录,哦......刚才复制过来的winlogon.exe不见了!!!
怎么回事?谁又把这么重要的文件删了?XP系统对winlogon.exe这样的系统文件是有保护的,一般方法是删除不掉的。难道凶悍的病毒还在系统中??
列了一下已经加载的驱动程序,很多,看来这个系统用的时间已经不断,各种驱动程序、杀毒软件的内核模块好多......
如何找到是谁在删除文件呢?这个“人”能在系统启动过程中“作案”,那么它的身份也一定很特殊,因为这个时候,普通的应用程序还没有运行。它多半应该是驱动程序。
联想到朋友说这个系统这两天才出问题,于是,我开始按照时间顺序在system32目录中寻找可疑对象。近两天的文件很少,而且基本不是目标。于是转到上一级目录(windows)。到了这个目录并按时间排序后,时间最新的这个文件立刻引起了我的兴趣:
它的名字叫xxdelay.def【xx为虚构】,多谢这个文件的命名者,这个delay单词用的很准确,它让我想起了删除系统文件常用的“延迟删除”。
使用记事本打开这个文件,虽然不是纯文本,但是里面的很多信息依然可读,基本上是一个个的带有完整路径的文件名。居然有很多!搜索一下winlogon,赫然在其列!
呀呀呀,有哪个病毒还先把要下手的目标统一放到配置文件里,然后再一起喀嚓呀?不应该是,更可能的是杀毒软件干的。但我一时还不敢确认自己的判断,会不会这个文件中的文件不都是要删除的。
于是我将这个文件复制到其它地方一份后,将其改名。然后再把好的winlogon.exe复制一份过来。
再次重启,有起色,看到鼠标了!但是还没有桌面。观察一下进程列表:
0: kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 8a78e020 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 7e1c0000 ObjectTable: e1002a00 HandleCount: 62.
Image: System
PROCESS 8a6725e0 SessionId: none Cid: 0168 Peb: 7ffde000 ParentCid: 0004
DirBase: 0c75a000 ObjectTable: e100a0f8 HandleCount: 17.
Image: smss.exe
PROCESS 8a5adda0 SessionId: 0 Cid: 01b4 Peb: 7ffdd000 ParentCid: 0168
DirBase: 0ff62000 ObjectTable: e1b661f0 HandleCount: 75.
Image: csrss.exe
PROCESS 8a5ef8c0 SessionId: 0 Cid: 01cc Peb: 7ffde000 ParentCid: 0168
DirBase: 105a9000 ObjectTable: e1c71178 HandleCount: 107.
Image: winlogon.exe
PROCESS 8a541da0 SessionId: 0 Cid: 01f8 Peb: 7ffd6000 ParentCid: 01cc
DirBase: 110a3000 ObjectTable: e1f4fd78 HandleCount: 107.
Image: services.exe
这个列表中包含winlogon了,因此也就不再自动重启了,尽管没有桌面。
因为explorer.exe与此密切相关,于是检查,原来也被删除了,复制一个好的过来,再重启果然进入桌面了,最初的开始菜单不见问题也好了,开始菜单出现了!
后来在网上搜索了一下这个xxdelay.def,它果然是某个安全软件的配置文件,用来记录需要延迟删除的文件和注册表项。于是可以确认是这个安全软件误删了重要的系统文件。
“警察也有误伤好人的时候”,这个逻辑害死人!