解决迈克菲误报易语言库文件com.run为后门程序的过程
作者:liigo,转载请注明出处:http://blog.csdn.net/liigo/archive/2008/11/20/3342583.aspx。
这两天,迈克菲(McAfee)升级后(引擎版本:5.3.00,病毒库版本:5439),开始“误报”易语言库文件 com.run 为后门程序(“BackDoor-CJV”)。易语言公司与其中国区和外国总部多次联系未果后,我们决定尝试自行解决病毒误报问题。
注意,我使用“误报”二字,是因为com.run确实不是病毒或木马,也决不是恶意程序,——看完本文将印证此观点。com.run是一个DLL,它的作用是为易语言程序调用OCX/COM提供支持。杀软认定它是病毒/木马/恶意程序并删除之,是错误的不负责任的行为。
迈克菲之前一直没有误报com.run,而该文件近期也没有变动。之所以误报,显然是由于杀毒软件版本升级后,某个新增的病毒/木马“特征码”被com.run文件触发。
而我们自行解决“误报”问题,也是基于某种原始的认知:大概是某段C++代码编译结果,被杀软错误地提取了“特征码”。通过逐段屏蔽代码的方式,或许可以发现是哪段代码触发了“特征码”,然后将该段代码变换另一种写法(但保持功能不变),就有可能解决被“误报”的问题。
这种方式当然非常原始,也非常低效,但理论上应该可以可行。毕竟这是一个由 VC 6.0 编译出的标准DLL文件,我把所有代码都屏蔽,编译生成的空白DLL难道还会被报病毒或木马?
我(liigo)花了一整天的时间,把所有函数中的代码全部屏蔽,边屏蔽边查毒检测,然而直我把工程中的所有.cpp文件全部移除,编译出的DLL已经没有任何可执行代码了,迈克菲依然“误报”!
仔细检查程序,发现DLL中还有两个位图资源,哦,可能是图片内容被提取特征码了吧,把位图内容清空成纯白色,还是误报;把位图文件改个名字,还是误报。直接把位图删除呢,哎,不误报了!那我就奇了怪了,这个位图资源有什么特殊的地方吗?没有啊,在EXE或DLL文件中加入位图资源是非常普通的事情,而且我都把位图内容清除成纯白色背景了,你还想怎么样啊?
最后没办法了,我改一下位图资源的ID吧,随便改成了另一个数值,还别说,这次改到正点儿上了,迈克菲不再误报了。然后返工,把之前所有屏蔽或修改的代码全部复原,只是保留对位图资源ID的修改,提交给迈克菲检测,不再有“误报”现象发生。
结论,迈克菲针对com.run这个文件提取的“特征码”位于其中位图资源ID前后的位置。但我就不明白了,为什么在这个位置提取特征码,这里有威胁吗,你倒是给个正当的理由出来。况且当时我都已经将程序中的代码全部屏蔽了,这是一个空白的DLL(只有位图资源和版本资源,其中版本资源是VC6自动生成的)!哦,难道说,不修改这个数值,它就是病毒,修改了,就不是病毒了?呵呵,我只有苦笑!
有时候我(liigo)在想,我们是否需要另一种更先进更准确的检测手段,来取代目前主流的基于“特征码”的已经相对落后的病毒检测手段?联想到之前已经发生过多次的沸沸扬扬的病毒误报事件,公众对这种需求似乎更加迫切。否则,大家是否会逐渐失去对杀毒软件的信任?