长期以来,易语言4.x版本编译生成的可执行程序(EXE)和动态链接库(DLL),经常被国内外多家杀毒软件“误报为病毒或木马”,给使用易语言开发软件产品的广大开发者及其用户带来无尽烦恼,进而严重影响了易语言的发展
根据易语言公司开发人员liigo的爆料,长期以来,易语言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)”。 被误杀误报的易语言程序有没有责任?它是“长的奇怪”了点(非主流,不河蟹),但“长的奇怪”也罪不至杀头吧?所以易语言即使有责任也是次要责任。 然而在现在的中国软件产业国情下,追究是谁的责任是一件没有意义的事情。易语言公司两次赢了与卡巴斯基的官司,也只得到小额赔款而已,并不能改变“易语言程序经常被集体误杀误报”的现状。对于目前“误杀”“误报”的现状,“主流的”杀毒软件感到不痛不痒,而“非主流的”易语言却体会到生存的压力,所以后者有更大的责任努力改变现状。
|