<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

文章分类

导航

订阅

亲历误删......


昨天中午,一个朋友打电话给我说他的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,它果然是某个安全软件的配置文件,用来记录需要延迟删除的文件和注册表项。于是可以确认是这个安全软件误删了重要的系统文件。

“警察也有误伤好人的时候”,这个逻辑害死人!

 

 

 

 

 

 

 

posted on 2008年9月25日 22:22 由 tudouni

# re: 亲历误删...... @ 2008年12月26日 8:29

原来操作系统也可以这样修复的,学习了。

mybios

# re: 亲历误删...... @ 2009年2月20日 15:49

瑞星

zhoujiamurong

# re: 亲历误删...... @ 2010年2月2日 17:24

虽然评论的晚了点,因为我刚注册此论坛,不过感觉分享的知识不错,所以支持!!!

yuhongweidebug

Powered by Community Server Powered by CnForums.Net