被安全软件撞了一下腰

半个月前的调试记录,整个过程还是挺有意思的,发出来存档用吧。

不久前,客户给工程部的同事反映最近软件出现了一些奇怪的问题。现象就是有在进行使用某个功能的时候要载入一个Dll,有一台电脑在会载入失败,而且载入失败的时候会反复弹出提示对话框,都点掉之后程序就会崩溃。同事首先尝试重新拷贝这个dll文件,现象依旧;重新拷贝整个应用软件,依然无果。事情还没完,又过了几天,到了周末的时候,客户突然打电话给我说,陆续又有几台客户端载入这个Dll都会失败了。同时,客户还反映了一个新的问题,应用在下载文件时非常慢,同样的一开始也是一两机有这种情况,几天过去越来越多的机器遇到同样的问题。

于是周一就到客户那边现场看看情况。第一判断感觉像是病毒,因为只有病毒才符合“扩散”这种特征。实际观察之后,进程和启动项的确有一些疑似流氓软件的东西。但是手工清除之后故障没有得到排除。而且客户的电脑上还装有正版nod32,病毒库也有更新。分析到这里,感觉无从下手了,只有出绝招,上调试器。

在客户机上安装好WinDBG,在LoadLibrary上下断点。

操作程序,触发断点

接下来就比较诡异了,先看一下LoadLibrary的代码

单步执行应该是要走到7c801d7d这个地方,单步一下
见鬼了,这是什么地方
继续多次单步,
嗯,这下要回到LoadLibrary了吧
靠,又跑到这个鬼地方了。

这个步骤会反复多次。最终会LoadLibray失败,而且虽然代码里只有LoadLibrary一次,实际还是会重复Load多次,最后会飞到一个莫名其妙的地方,使程序崩溃。

没办法,建议客户重装系统。先重装了一台,然后再试,没问题了。不过客户又提出由于机器数量较多,重装比较费时,希望能找到一个简便的解决方法,能找到原因最好,实在不行再考虑全部重装。虽然问题很棘手,我还是答应下来,尽一尽人事。

还是上调试器,那断点从哪里开始设呢想,程序使用了共享方式进行下载,要先进行共享连接。于是断点就设在WNetAddConnection2A上

断点命中后看看共享连接的地址,看看MSDN里对于WNetAddConnection2A的参数说明 依葫芦画瓢,找到lpRemoterName
和A的地址一样,连接没有错,那连接是否成功呢 eax=0,表示NO_ERROR,那么连接成功了。

继续单步跟踪,具体不再赘述,在没有源代码的情况下进行单步跟踪,大家都可以想象得到有多么的枯燥。

终于跟踪到CopyFile函数的地方了,当时还犹豫了一下,是步过还是步入呢。转念一想,都跟踪到这了,进去看看吧。

继续单步,到了内部调用CopyFileExW的地方了。

继续步入,WinDBG一阵忙碌,我正心生疑惑,蹦出结果来了 我靠,这就是传说中的DllHook跟了几句,看得头晕脑胀(饿得,那个时候加班到晚上8点了)。退出来,直接看看CopyFileExW的结果 eax=0,拷贝失败。原来罪魁祸首就是这个xxxhook.dll呀。立马打电话给客户,告知已经找到结果了,那个dll不是木马就是病毒。客户倒是提了个醒,说会不会是某个安全软件的。于是看了一下Dll的描述,还真是。由于卸载还需要密码,无法立即操作验证,当晚就先回去了。第二天再来,卸掉那个安全软件,故障消失了,Dll载入成功了,文件拷贝的速度也正常了。

有趣的是,重新安装那个安全软件后,故障也没有再次出现,具体原因就不得而知了。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2013年4月4日
下一篇 2013年4月4日

相关推荐