0%

2019-10-22-记一次诡异的进程崩溃分析

无甚技术含量,且当时无法截图,自己记录备份用,大牛略过……

起因

    N个月前的某天正在沉迷于工作的时候,同事说公司财务电脑崩溃了,报了个奇怪的内存错误,让帮忙看看。之前去财务的时候曾经听财务说过这个问题,据说是Excel里面如果选中几个单元格再点击右键就会崩溃,同事帮重装了下Office之后,奇特的事情发生了,重启电脑之后资源管理器进程Explorer.exe闪现了下就崩溃无法进入桌面环境,当然不是我自己的电脑一般都建议重装了,无奈财务电脑里软件数据较多,无法重装。万般无奈之下只好接手看看情况了,毕竟关系到下月工资吃饭呢。。。


分析

    首先查看进程崩溃信息中,根据显示的异常号也看不出什么具体信息,但是能看到问题出在Explorer.exe进程中的m**.dll中(名字忘了,凑合看吧),该DLL是Office程序注册到Explorer.exe进程的组件,所以问题还是Office的问题。

    因为Explorer.exe进程奔溃,无法进入到资源管理器,且主机上还装了数字杀软,我的Od变种出现即被报毒,导入调试工具都折腾了好久,首先Win+R调起CMD窗口,然后Dir尝试出U盘盘符,在命令行里运行我的Od,设置成默认调试器,因为进程早已崩溃,还需要重启再次触发,还好能够稳定触发该Bug,重启之后进程崩溃终于把我的Od挂起来了。然而更奇特的事情出现,Od在加载许久之后报错“m**.dll不存在”,这现象有点迷,明明刚还能在崩溃信息里查看到该DLL存在,在该DLL文件夹中dir也是可以看到DLL存在的,终于在尝试把这个“不存在“的dll拷贝出来分析的时候爆出了信息框:[“无法访问磁盘,数据错误(循环冗余检查)”!]

    到此问题就清楚了,应该是该DLL所在的磁盘扇区出现了磁盘坏道,之前财务所说的Excel选中单元格右键时崩溃的现象也就可以解释了,应该是右键菜单调用的代码引用了磁盘坏道处的数据。而重装Office之后m**.dll覆盖了坏道位置,导致Explorer.exe进程引用该DLL时挂掉了。现在看其实发现该问题并不难,也根本不需要调试代码,最麻烦的反而是导入调试器。


解决

    磁盘坏道一般分为逻辑坏道和物理坏道,如果时逻辑坏道还好说,可以尝试使用DiskGenius等工具修复,物理坏道也即磁盘损坏较麻烦,也可以使用一些工具屏蔽坏道。当然对于我司来说不差硬盘钱没必要这样折腾,数据就直接换个新硬盘克隆下旧的,现在硬盘也不贵。

    克隆磁盘数据镜像一般Winhex(工具->磁盘工具->克隆磁盘)就足够用了,为了确保数据靠谱,我还专门进了个PE(推荐WEPE哦~)对拷磁盘数据,拷贝完之后还有最后一个问题,磁盘坏道数据无法正常导出,导致最终克隆的m**.dll数据错误,需要从正常的机器上重新拷贝一个dll过来,搞完收工~


总结

    这里还是遗留一些需深入研究的地方,为什么磁盘坏道数据损坏了该DLL仍然能被成功LoadLibrary呢?因为环境限制也一直没来及深究,此处就留个疑问吧。有了解的可以赐教下。