本发明专利技术公开了一种自动实现软件程序免杀的方法,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。本发明专利技术的自动实现软件程序免杀的方法,能够简化操作并降低程序被杀毒软件误报的概率。
【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。本专利技术的,能够简化操作并降低程序被杀毒软件误报的概率。【专利说明】
本专利技术涉及信息安全领域,尤其涉及一种。
技术介绍
杀毒软件,也称反病毒软件或防毒软件,是用于消除电脑病毒、特洛伊木马和恶意软件等计算机威胁的一类软件。杀毒软件通过集成监控识别、病毒扫描和清除和自动升级等功能,有的杀毒软件还带有数据恢复等功能,是计算机防御系统(包含杀毒软件,防火墙,特洛伊木马和其他恶意软件的查杀程序,入侵预防系统等)的重要组成部分。程序是否存在病毒,杀毒软件所判断的对象一般是代码和行为,前者,是扫描程序的代码,判断其中是否存在与已知病毒类似的代码模式,后者,是分析程序访问的系统对象及其访问方式,如文件、注册表键,是否匹配敏感的、可能危害系统的行为。由于目前病毒普遍使用代码变形等技术,直接分析代码越来越困难,后者逐渐成为杀毒软件主要使用的判断方式。而对行为的分析,主要是通过程序调用了哪些操作系统API,及其调用参数来实现的,在目前主流操作系统中,系统API —般是以动态库形式提供,一般情况下,编译后的程序使用“导入表”或类似结构来动态链接到系统动态库。“导入表”有很多项,每项对应于一个系统API,其中记录了该API的函数名、所在的动态库文件名等信息,是杀毒软件分析的数据来源,在此基础上,可以分析出代码中何处调用了哪些API,传递了什么参数,若调用的次序和参数与恶意行为在某种程度上匹配,则会报毒。现有技术中,目前,杀毒软件误报的现象越来越常见。所谓误报,即应用程序本来并不含有病毒或恶意代码,但是杀毒软件却认为它是恶意程序,因此,杀毒软件阻止其运行、对文件隔离或删除等操作。其原因在于,程序是否有病毒或恶意代码,并不存在完全准确的判断规则。杀毒软件往往只能通过代码的内容、访问数据的内容和模式,根据一些预先定义好的规则来进行模糊匹配。这种判断方式必然有一定的误判概率,即程序匹配了部分规则,但不一定匹配的就是病毒。杀毒软件的这种误报行为给软件提供商带来了很大的困扰。对此,目前也有一些解决方案,包括:I)针对具体问题与杀毒软件厂商联系,提供特征码让杀毒软件对具体的二进制程序不报毒;2)对程序加数字签名,使杀毒软件能够验证其发行者身份。这些方法的缺点一是治标不治本,一次只能解决一个最终二进制文件,二是要等待杀毒软件更新,并且用户配合升级才能生效,解决问题的时间较长,沟通环节较多。
技术实现思路
本专利技术提供一种,能够简化操作并降低程序被杀毒软件误报的概率。为了解决上述技术问题,本专利技术提供了一种,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。作为优选,具体包括以下步骤:S1:列举出所述操作系统的链接器的所有所述默认库;S2:从操作系统软件开发工具包获取所述默认库的库文件,自动枚举出其中所有的API名,将从各个所述默认库中枚举出的API名分别保存为第一字符串数组;S3:对所述第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组;S4:对应每个所述默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码;S5:编译所述源代码文件,生成自定义的静态库;S6:返回步骤S2,直到生成所有所述默认库对应的自定义的静态库;S7:修改要免杀的软件程序的工程配置,包括禁用所有所述默认库以及添加所有对应的自定义的静态库。作为优选,步骤S3还包括对所述默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。作为优选,步骤S4中所述函数体具体包括以下项:Al:对所述字符串中的经变换的库文件名进行逆变换后得到的原库文件名;A2:以所述原库文件名为参数调用系统功能而加载的动态库;A3:对所述第二字符串数组中的对应项进行逆变换后得到的API名称;A4:以进行逆变换后得到的API名称为参数调用系统功能而获取的API地址;A5:跳转指令,其跳转目标是所述API地址。作为优选,所述操作系统为Windows、Linux或者Unix。与现有技术相比,本专利技术的的有益效果在于:由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本专利技术的方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。通过本专利技术提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。【专利附图】【附图说明】图1为本专利技术的实施例的的流程示意图;图2为应用本专利技术的实施例的处理前后的文件对照示意图。【具体实施方式】下面结合附图和具体实施例对本专利技术的实施例的作进一步详细描述,但不作为对本专利技术的限定。图1为本专利技术的实施例的的流程示意图。本专利技术的实施例的,创建若干自定义的静态库以代替操作系统提供的默认库来实现对软件程序中用到的API的调用,自定义的静态库以显式加载方式实现调用。由于“显式加载”的函数没有“导出”(export)属性,链接后不会生成导入表项。本专利技术得以自动实现软件程序免杀的原理就是在编译阶段,使用“显式加载”替代“导入表”(隐式加载)。编译器默认使用隐式加载,隐式加载是每当源代码中调用了一个系统API,就将调用的目标地址设定为“导入表”中的某项(多次调用同一个API,目标地址相同),而在程序运行时,操作系统会根据该导入表项中填写的动态库名和API名,在该项中填入API真正的地址,使程序可以正常工作。“显式加载”则是不使用“导入表”机制,每当源代码中调用了一个系统API,则直接生成一段代码,用来加载相应的动态库,搜索库中的API地址,然后调用。在这段代码中,动态库名和API名都不是以明文形式存在,而是经过自定义算法变换过的,只有在运行时才可能知道其内容。由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。链接器一般提供若干“默认库”,对源代码中调用的系统API,由于其函数没有定义在程序的自身代码中,链接时会找不到,找不到时,链接器就会从“默认库”中寻找,并找到带有“导出”(export)属性的函数,此时链接器就会添加导入表项,记录动态库名和API名。通过本专利技术提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。作为一种改进,具体包括以下步骤:S1:列举出操作系统的链接器的所有默认库。不同操作系统、平台下的默认库会有不同,但都是确定可预知的,如Windows程序一般是 kernel32、user32、advapi32 这三个默认库。S2:从操本文档来自技高网...
【技术保护点】
一种自动实现软件程序免杀的方法,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。
【技术特征摘要】
【专利技术属性】
技术研发人员:孙吉平,韩勇,
申请(专利权)人:北京深思数盾科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。