易语言“非主流”,杀毒软件“躲猫猫”
易语言“非主流”,杀毒软件“躲猫猫”
——易语言5.0解决病毒误报情况分析测试报告
作者:庄晓立 (liigo)
日期:2010年2月
EMAIL: com.liigo [at] gmail.com
版本:1.0
同发易语言官方论坛和CSDN博客,转载请注明出处:http://blog.csdn.net/liigo
关键字:易语言 5.0 病毒误报 杀毒软件 误杀 软件 分析 测试
摘要
长期以来,易语言4.x版本编译生成的可执行程序(EXE)和动态链接库(DLL),经常被国内外多家杀毒软件“误报为病毒或木马”,给使用易语言开发软件产品的广大开发者及其用户带来无尽烦恼,进而严重影响了易语言的发展;另一方面,易语言5.0(静态编译版本)也已全新推出,其中一个重要目标就是“解决病毒误报”。本文将就此进行相关分析和测试。
一、易语言简介
易语言(eyuyan.com)是一门编程语言,是一款编译器(compiler),也是一套集成开发环境(IDE)。综合来说,易语言是一个自成体系的软件开发平台。其中包含了用于开发软件产品的几乎所有重要部件:编程语言,编译器,调试器,类库(支持库/模块),集成开发环境(IDE),以及周边工具。
易语言以其易学、易用、功能强大著称。
易语言是一个开放性产品,它可以很好地跟其它开发工具协作,例如:易语言可以调用其它编程语言开发的支持库(借助易语言支持库开发包)、COM、OCX、DLL等,易语言开发的标准DLL也可供其它语言调用,易语言可以使用几乎所有大中小型数据库,易语言甚至允许在代码中直接嵌入X86机器指令代码以期实现比汇编语言更底层的应用,5.1版本以后还将支持与其它编程语言共享静态库文件(.lib, .obj)。
易语言面向的主要用户群,一部分是对编程感兴趣的初、中级电脑用户,解决他们工作中遇到的软件方面的难题,一部分是非职业的、第三方的软件开发者,满足他们自行开发商业软件的需求。
易语言诞生于2000年,发展至今已有足足十年历史,2004年起成立易语言公司开始商业运作。目前最新版本是易语言5.0(静态编译版本)。
二、易语言长期以来深受“病毒误报”危害
长期以来,易语言4.x版本编译生成的“正常的”可执行程序(EXE)和动态链接库(DLL),经常被国内外多家杀毒软件“误报为病毒或木马”,给使用易语言开发软件产品的广大开发者及其用户带来无尽烦恼,进而严重影响了易语言的发展。
以一个简单的示例说明,易语言5.0正式版“关于”对话框程序,这是一个易语言编译的EXE文件(非独立编译模式),其界面和功能非常简单,只有几个标签、按钮、图片框等基本UI元素,几乎没有什么代码,它怎么可能是威胁用户电脑安全的病毒或木马呢,可是通过在线病毒扫描发现竟然有五六个“误报”:http://virscan.org/report/78d490f9f45a250dae2ae053a0facdd9.html。这只是易语言程序被较大范围误报的一个缩影。
易语言是软件开发工具,处于产业链的上层,其数十万直接用户(软件开发者)开发的各类软件产品,可能又各自拥有不止上百万用户(软件使用者),一旦出现病毒误报误杀情况,影响范围极大。
三、易语言4.x版本被“病毒误报”的技术分析
首先声明,本人对杀毒软件的实现原理没有多少了解,本文以下分析可能并无理论依据,也许仅仅只是推测甚至猜测。
我(liigo)个人分析认为,易程序程序被“误报”的原因在于:
1.确实有人用易语言开发病毒、木马、外挂等非法或恶意程序;
2.易语言程序自身的编译、运行模式比较“非主流”,存在被“大范围误报”可能;
3.易语言公司是个小公司,易语言也只是个小众产品,没有强势的市场地位;
4.杀毒软件公司不作为,其病毒查杀技术有待改进。
以上四个条件只要有一个不满足,就不会造成今日这样的结果。试想:如果从来没有人用易语言编写恶意程序,即所有易程序都是合法的安全的,当然不会引起杀毒软件注意;如果易程序自身编译、运行模式更加合理,那么既使杀毒软件查杀个别真正的病毒木马,也不会大范围“误杀”其它的易程序;如果易语言或易语言公司足够强势,也不会面对大范围“误杀”“误报”无可奈何(据传当年delphi刚出山时也遇到过类似的较大范围误报情况,后由于Borland公司的市场强势而很快解决);如果杀毒软件查杀技术更先进,能准确识别病毒木马与普通程序的区别,同样不会出现大范围“误杀”“误报”的情况。
偏偏四个条件都满足了。第一条是既成事实无法改变,第三第四条是现状且受外界所控短期内难以改变,只有第二条是突破口,易语言公司有动力也有能力予以改变,虽然困难也非常大。易语言5.0也恰恰是抓住了这个突破口,痛下决心变革了自身编译、运行模式,这是后话了。
我说易语言程序自身的编译、运行模式比较“非主流”,主要体现在:
1、非独立编译的易语言程序,运行时必须依赖一个或多个支持库文件(DLL),而这些个DLL可能被以前某个被证实为病毒或木马的易语言程序使用过,被株连,导致误杀误报;
2、独立编译的易语言程序,运行时会释放一个或多个支持库文件(DLL)到系统临时目录,然后再把释放出去的DLL加载(LoadLibrary)进来,这种行为(EXE携带PE数据文件运行时释放出去然后加载进来)与某些病毒木马类似,导致被错误识别;
3、易语言程序中的“易格式体”很特殊:易语言编译器编译生成的可执行代码(标准X86指令集合),并不像普通EXE那样位于PE文件的.text段中,反而位于一个不具名的(以前是.ecode,后来因杀软追杀就不具名了)没有可执行属性的数据段中(其内容即是著名的“易格式体”数据),更要命的是,EXE还要把这段没有可执行属性的数据交给另外一个DLL(易语言核心库)去执行,而且执行过程中又非常频繁的在多个DLL之间来回跳转(易语言程序调用支持库命令,同时需要核心库中转/协调),看看吧,几乎所有代码都是在各个DLL领空执行的,几乎没有EXE什么事,就这么折腾来折腾去,把杀毒软件及其人工分析员搞得晕头转向,以为是病毒或木马有意玩弄他,很生气,一杀了之,偏偏又说不清楚哪里是马哪里是毒,提取特征码时不知何处下手,索性简化处理把易语言程序集体坑杀,绝不肯冒风险漏杀一个,“查杀率”可是衡量杀毒软件质量的重要参数哦。
据我接触和了解的情况,各家杀毒软件公司也是非常重视针对易语言的误杀误报情况的,也经常积极配合临时解除误报。毕竟出现误杀误报情况,对他们也有负面影响。但是要彻底解决误杀误报易语言程序,杀毒软件可能要花费很大的代价和很高的成本,似乎还没有人肯下决心去做这么一件看上去得不偿失的工作。易语言公司也曾试图小范围技术调整,例如去除编译器生成的代码中的明显特征,甚至有意加入扰乱代码,避免杀毒软件找到易语言程序的统一特征码,结果并不理想。
我(liigo)把易语言程序被“误报”“误杀”的根源,最终归结为两点:易语言“非主流”,杀毒软件“躲猫猫”。
四、“误杀”“误报”责任在谁
杀毒软件该不该“误报”“误杀”易语言程序呢?
有这个“误”字存在,显然是不应该的,否则就是杀的对杀的好了。杀毒软件报错了、杀错了,当然占主要责任。当然他们也有理由说“偶尔误杀误报在所难免”“误杀你的不止我一家哦,有多家”,而且会反问“为什么总误杀你(易语言)不误杀别人(C/C++/JAVA)”。
被误杀误报的易语言程序有没有责任?它是“长的奇怪”了点(非主流,不河蟹),但“长的奇怪”也罪不至杀头吧?所以易语言即使有责任也是次要责任。
然而在现在的中国软件产业国情下,追究是谁的责任是一件没有意义的事情。易语言公司两次赢了与卡巴斯基的官司,也只得到小额赔款而已,并不能改变“易语言程序经常被集体误杀误报”的现状。对于目前“误杀”“误报”的现状,“主流的”杀毒软件感到不痛不痒,而“非主流的”易语言却体会到生存的压力,所以后者有更大的责任努力改变现状。
五、易语言5.0有效解决了“病毒误报”
在杀毒软件集体不作为的前提下,为求彻底解决病毒误报,易语言最终忍痛选择自身重大变革,完全颠覆了以前的编译、运行模式,推出了全新的易语言5.0静态编译版本。
据我(liigo)个人分析,易语言5.0静态编译的易语言程序,不会再被集体大范围误杀误报的理论依据是:
静态编译后生成的是完全标准的、“主流的”PE格式文件(EXE和DLL),完全取消了易语言以前版本中特有的“易格式体”数据,运行时也不再必须依赖除系统库(kernel32.Dll, user32.Dll 等)以外的其他任何形式的外部DLL,所有代码都执行于程序自身领空。而现有的杀毒软件,对于这种“主流的”“单纯的”“没有任何城府的”普普通通的程序(EXE/DLL),处理起来当然是拿手好戏,小菜一碟。我们必须承认,目前的病毒查杀技术,虽然不见得十分完美,但却是久经考验、基本成熟和可靠的,他们有能力查杀世界上大多数病毒木马并保护大多数正常程序,只是在某些个别的特殊复杂情况下(如处理易语言4.X版本编译的程序时)才可能会出现一点意外。
自易语言5.0及其测试版发布两个月以来,根据用户反馈等多方面数据显示,易语言5.0静态编译的易语言程序,确实有效解决了“病毒误报”,被误报的情况很少发生。一般情况下,用国内外数十家杀毒软件分别扫描易语言5.0静态编译的普通程序,仅有一两家“非主流”杀毒软件误报(相信他们也会尽快改进)。有以下实际测试结果为证。
除“空白窗口.exe”和“空白窗口+信息框.exe”外,其他程序的易语言源代码均在易语言安装目录中。使用易语言5.0正式版静态编译后,不经任何加壳或打乱处理(打乱和加壳反而有可能增加被误报的风险),直接上传到两大在线病毒扫描网站,VirScan.org和VirusTotal.com,在线扫描所用杀毒软件引擎及其病毒库版本以下面链接中的显示为准,在线查毒结果如下:
通用工资管理系统.exe,1.6M,源代码为:e\samples\行业软件\通用工资管理系统\工资管理.e
经VirScan.org在线扫描,国内外36家杀毒软件零误报:http://www.virscan.org/report/1e75bb6b6c655be9519de9f6ef742eb8.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,仅Prevx一家误报为"High Risk Cloaked Malware":http://www.virustotal.com/zh-cn/analisis/43c9a324615ed0b3472d14f70b8d89270f96f237a2f9d1ff3a40b1a628d5c4c5-1265446216
IT售后管理系统.exe,3.1M,源代码为:e\samples\行业软件\IT售后管理系统\IT售后管理系统.e
经VirScan.org在线扫描,国内外36家杀毒软件零误报:http://www.virscan.org/report/39439661237f03132ed964c64c3a08ef.html
经VirusTotal.com在线扫描,国内外40家杀毒软件零误报:http://www.virustotal.com/zh-cn/analisis/e87aa9a99fc165679e83ae36191650919a836da3a6c713f13f05dd3dd99011e1-1265445656
易用文件管理大师.exe,2.1M,源代码为:e\samples\常用工具\易用文件管理大师\易用文件管理大师.e
经VirScan.org在线扫描,国内外36家杀毒软件中,仅有ClamAV一家误报为"Trojan.Agent-121132":http://www.virscan.org/report/9ea6f1c1e6a2eaf7bb8d78870f4abf36.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,仅有ClamAV一家误报为"Trojan.Agent-121132":http://www.virustotal.com/zh-cn/analisis/2be454eda82d9d1bc83defc1a2322e97dfd72c8def921e57fda90e5afaa64a26-1265446711
中华办公系统.exe,3.3M,源代码为:e\samples\办公软件\中华办公系统\中华办公系统V1.2.e
经VirScan.org在线扫描,国内外36家杀毒软件零误报:http://www.virscan.org/report/eb96a286ff13258f36d2cb3876d4c881.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,仅有Prevx一家误报为"High Risk Cloaked Malware":http://www.virustotal.com/zh-cn/analisis/bc475d3cf956b818a94d38c5ed0f77c1c28748b8604b017a9f8e7667d40073f3-1265446993
数据库管理器.exe,680K,源代码为:e\samples\基本例程\数据库管理器.e
经VirScan.org在线扫描,国内外36家杀毒软件中,有两家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta":http://www.virscan.org/report/1403cd7eb040b577d1bfb77a5b53bcac.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,有两家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta":http://www.virustotal.com/zh-cn/analisis/d37d85ec27549fb524c0674d5ff2ddff8e284204ac01673af3418d443cd4888a-1265447286
面向对象编程.exe,560K,源代码为:e\samples\基本例程\面向对象编程.e
经VirScan.org在线扫描,国内外36家杀毒软件中,有两家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta":http://www.virscan.org/report/a945841a045828774a53145bc817f2e3.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,有两家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta":http://www.virustotal.com/zh-cn/analisis/8eea5d8f105c3f241337969fb7b2db8ad59c118ca2331aa5b7b4ce580ca89fc9-1265447568
超级玛丽.exe,730K,源代码为:e\samples\游戏软件\超级玛丽\超级玛丽.e
经VirScan.org在线扫描,国内外36家杀毒软件中,仅迈克菲一家误报为"Pasta":http://www.virscan.org/report/34e991305b2eafc363b7942cafc5c4ed.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,有三家误报,McAfee和McAfee+Artemis均误报为"Pasta",Prevx误报为"High Risk Cloaked Malware":http://www.virustotal.com/zh-cn/analisis/567893aef3c1d1aa121d67adc0186b8d6935ce33b45478bfd555723e71a58785-1265447889
推箱子.exe,960K,源代码为:e\samples\游戏软件\推箱子\推箱子.e
经VirScan.org在线扫描,国内外36家杀毒软件零误报:http://www.virscan.org/report/d552e687b43292b22129353aab448b49.html
经VirusTotal.com在线扫描,国内外40家杀毒软件零误报:http://www.virustotal.com/zh-cn/analisis/f8a8413e4fcb55259ed01937aaa275faf25abb2db1019ecd0f4a1e06b4cea2a8-1265448341
空白窗口.exe,530K,直接用易语言IDE创建窗口程序,不写任何代码
经VirScan.org在线扫描,国内外36家杀毒软件中,有四家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta",迈克菲误报为"Pasta",金山毒霸误报为"Win32.Troj.Pasta.548864":http://www.virscan.org/report/dc6b3756fa762f25c07b8c575b47e2a5.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,有四家误报,a-squared误报为"Trojan.Win32.Pasta!IK",Ikarus误报为"Trojan.Win32.Pasta",McAfee和McAfee+Artemis均误报为"Pasta":http://www.virustotal.com/zh-cn/analisis/78ac09738dfd573d8aa1ebafdaa7dedab0857072cec979fcf00d04a12503a78b-1265448476
空白窗口+信息框.exe,530K,直接用易语言IDE创建窗口程序,只写一行代码:信息框 (“123”, 0, )
经VirScan.org在线扫描,国内外36家杀毒软件中,有五家误报(a-squared,Arcavir,Ikarus,Norman,迈克菲):http://www.virscan.org/report/ac342c7f39b502570f283dfd086517de.html
经VirusTotal.com在线扫描,国内外40家杀毒软件中,有六家误报(a-squared,Ikarus,McAfee,McAfee+Artemis,Norman,Prevx):http://www.virustotal.com/zh-cn/analisis/aca2771b63c9bfbf7e47c1c1713c4022239d2d1e489d2d39ccdbf8f8ff9e1474-1265448962
注1:本人不对以上查毒结果作任何评论。
注2:以上易语言源代码是很早以前就随易语言安装包一起发行的,并非临时针对易语言5.0所写(最后两个除外)。
随着时间的推移,以后易语言程序被“误报”“误杀”的情况,会更少呢,还是会更多?我相信误报会逐步减少,直至彻底消除;误报越来越严重的情形,几乎不太可能发生。还是基于前面分析过的原因,静态编译的易语言程序,相对于杀毒软件而言,已经没有什么神秘性、复杂性和特殊性,它就像一张白纸摊在那里,杀毒软件有一百种手段精确识别谁是病毒、谁是木马、谁是可疑程序、谁是正常的合法的普通程序,没有任何误报的理由了。反过来说,它再误报易语言程序,很可能也会同时误报C++程序——因为易语言和C++程序没有什么本质区别啊——那么它的市场生存空间就非常令人担忧了,呵呵。
若说杀毒软件们依然追着易语言5.0编译器生成的代码特征不放,就非常无聊了,我相信他们绝不会如此草率。正如所有编译器生成的代码都有特征一样,易语言5.0编译器也不例外。类型为EAPP_INFO的全局变量(__eapp_info),LIB_INFO结构体数组,支持库实现函数的固定原型(PFN_EXECUTE_CMD),都是易语言5.0编译器生成的代码的通用重要特征。借助这些代码特征,辨别程序是否为易语言程序自然没错,若用于辨别是否为病毒或木马程序就令人万分不解了。即使是追杀易语言5.0编译的真正病毒木马程序,也绝对不应该定位到这些特征上,除非他认定易语言5.0编译器是病毒木马专用生成器。
总结
由于易语言4.x版本的编译、运行模式比较独特,而杀毒软件出于成本等各方面考虑不肯深入分析研究并作针对性处理,导致易语言4.x版本编译的易语言程序经常会被大范围集体“误报”为病毒或木马。此状况给易语言和杀毒软件双方都造成了负面影响,对易语言方面的打击更大,甚至威胁到其生存环境。易语言被迫寻求自身重大变革,推出全面支持静态编译的易语言5.0版本。本文对易语言4.x容易引发病毒误报的前因后果,和易语言5.0基本解除病毒误报的情况,做了比较全面而深入的分析、探讨和测试。有不当之处,敬请批评指正。
扩展阅读
1、易语言公司:《杀毒软件误报情况说明》(图文并茂)
http://bbs.eyuyan.com/dispbbs.asp?boardid=149&Id=92204
2、飞扬工作室:《“病毒误报”,让我们来一起消灭它!》
http://bbs.eyuyan.com/dispbbs.asp?BoardID=124&ID=187371
3、liigo:《重新编译shell.fne、dp1.fne(未改源码),有效解决多个杀软误报现象》
http://bbs.eyuyan.com/dispbbs.asp?boardid=124&Id=182151
4、易开发组:《2010新春巨献,易语言5.0正式版隆重发布,全面支持静态编译!》
http://bbs.eyuyan.com/dispbbs.asp?BoardID=124&ID=206690
5、易开发组:《易语言(5.0)最新研发进展汇报,静态编译,脱库,消除误报,防止秒脱》
http://bbs.eyuyan.com/dispbbs.asp?BoardID=124&ID=194904
6、易开发组:《易语言5.0静态编译测试版继续完善中》
http://bbs.eyuyan.com/dispbbs.asp?BoardID=124&ID=198143
7、易语言官方网站和官方论坛:
http://www.eyuyan.com, http://bbs.eyuyan.com
8、liigo's blog:
http://blog.csdn.net/liigo
全文完,谢谢!
上面格式有些杂乱,推荐阅读本文PDF格式,下载地址:http://download.csdn.net/source/2052202