首页 / 专利库 / 软件 / 软件 / 自动实现软件程序免杀的方法

自动实现软件程序免杀的方法

阅读:276发布:2021-06-12

专利汇可以提供自动实现软件程序免杀的方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种自动实现 软件 程序免杀的方法,其特征在于,创建若干自定义的静态库以代替 操作系统 提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。本发明的自动实现软件程序免杀的方法,能够简化操作并降低程序被 杀毒软件 误报的概率。,下面是自动实现软件程序免杀的方法专利的具体信息内容。

1.一种自动实现软件程序免杀的方法,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。
2.根据权利要求1所述的自动实现软件程序免杀的方法,其特征在于,具体包括以下步骤:
S1:列举出所述操作系统的链接器的所有所述默认库;
S2:从操作系统软件开发工具包获取所述默认库的库文件,自动枚举出其中所有的API名,将从各个所述默认库中枚举出的API名分别保存为第一字符串数组;
S3:对所述第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组;
S4:对应每个所述默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码;
S5:编译所述源代码文件,生成自定义的静态库;
S6:返回步骤S2,直到生成所有所述默认库对应的自定义的静态库;
S7:修改要免杀的软件程序的工程配置,包括禁用所有所述默认库以及添加所有对应的自定义的静态库。
3.根据权利要求2所述的自动实现软件程序免杀的方法,其特征在于,步骤S3还包括对所述默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。
4.根据权利要求3所述的自动实现软件程序免杀的方法,其特征在于,步骤S4中所述函数体具体包括以下项:
A1:对所述字符串中的经变换的库文件名进行逆变换后得到的原库文件名;
A2:以所述原库文件名为参数调用系统功能而加载的动态库;
A3:对所述第二字符串数组中的对应项进行逆变换后得到的API名称;
A4:以进行逆变换后得到的API名称为参数调用系统功能而获取的API地址;
A5:跳转指令,其跳转目标是所述API地址。
5.根据权利要求1至4中任一项所述的自动实现软件程序免杀的方法,其特征在于,所述操作系统为Windows、Linux或者Unix。

说明书全文

自动实现软件程序免杀的方法

技术领域

[0001] 本发明涉及信息安全领域,尤其涉及一种自动实现软件程序免杀的方法。

背景技术

[0002] 杀毒软件,也称反病毒软件或防毒软件,是用于消除电脑病毒、特洛伊木恶意软件等计算机威胁的一类软件。杀毒软件通过集成监控识别、病毒扫描和清除和自动升级等功能,有的杀毒软件还带有数据恢复等功能,是计算机防御系统(包含杀毒软件,防火墙,特洛伊木马和其他恶意软件的查杀程序,入侵预防系统等)的重要组成部分。
[0003] 程序是否存在病毒,杀毒软件所判断的对象一般是代码和行为,前者,是扫描程序的代码,判断其中是否存在与已知病毒类似的代码模式,后者,是分析程序访问的系统对象及其访问方式,如文件、注册表键,是否匹配敏感的、可能危害系统的行为。由于目前病毒普遍使用代码变形等技术,直接分析代码越来越困难,后者逐渐成为杀毒软件主要使用的判断方式。
[0004] 而对行为的分析,主要是通过程序调用了哪些操作系统API,及其调用参数来实现的,在目前主流操作系统中,系统API一般是以动态库形式提供,一般情况下,编译后的程序使用“导入表”或类似结构来动态链接到系统动态库。“导入表”有很多项,每项对应于一个系统API,其中记录了该API的函数名、所在的动态库文件名等信息,是杀毒软件分析的数据来源,在此基础上,可以分析出代码中何处调用了哪些API,传递了什么参数,若调用的次序和参数与恶意行为在某种程度上匹配,则会报毒。
[0005] 现有技术中,目前,杀毒软件误报的现象越来越常见。所谓误报,即应用程序本来并不含有病毒或恶意代码,但是杀毒软件却认为它是恶意程序,因此,杀毒软件阻止其运行、对文件隔离或删除等操作。其原因在于,程序是否有病毒或恶意代码,并不存在完全准确的判断规则。杀毒软件往往只能通过代码的内容、访问数据的内容和模式,根据一些预先定义好的规则来进行模糊匹配。这种判断方式必然有一定的误判概率,即程序匹配了部分规则,但不一定匹配的就是病毒。杀毒软件的这种误报行为给软件提供商带来了很大的困扰。对此,目前也有一些解决方案,包括:
[0006] 1)针对具体问题与杀毒软件厂商联系,提供特征码让杀毒软件对具体的二进制程序不报毒;
[0007] 2)对程序加数字签名,使杀毒软件能够验证其发行者身份。
[0008] 这些方法的缺点一是治标不治本,一次只能解决一个最终二进制文件,二是要等待杀毒软件更新,并且用户配合升级才能生效,解决问题的时间较长,沟通环节较多。

发明内容

[0009] 本发明提供一种自动实现软件程序免杀的方法,能够简化操作并降低程序被杀毒软件误报的概率。
[0010] 为了解决上述技术问题,本发明提供了一种自动实现软件程序免杀的方法,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。
[0011] 作为优选,具体包括以下步骤:
[0012] S1:列举出所述操作系统的链接器的所有所述默认库;
[0013] S2:从操作系统软件开发工具包获取所述默认库的库文件,自动枚举出其中所有的API名,将从各个所述默认库中枚举出的API名分别保存为第一字符串数组;
[0014] S3:对所述第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组;
[0015] S4:对应每个所述默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码;
[0016] S5:编译所述源代码文件,生成自定义的静态库;
[0017] S6:返回步骤S2,直到生成所有所述默认库对应的自定义的静态库;
[0018] S7:修改要免杀的软件程序的工程配置,包括禁用所有所述默认库以及添加所有对应的自定义的静态库。
[0019] 作为优选,步骤S3还包括对所述默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。
[0020] 作为优选,步骤S4中所述函数体具体包括以下项:
[0021] A1:对所述字符串中的经变换的库文件名进行逆变换后得到的原库文件名;
[0022] A2:以所述原库文件名为参数调用系统功能而加载的动态库;
[0023] A3:对所述第二字符串数组中的对应项进行逆变换后得到的API名称;
[0024] A4:以进行逆变换后得到的API名称为参数调用系统功能而获取的API地址;
[0025] A5:跳转指令,其跳转目标是所述API地址。
[0026] 作为优选,所述操作系统为Windows、Linux或者Unix。
[0027] 与现有技术相比,本发明的自动实现软件程序免杀的方法的有益效果在于:由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本发明的方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。附图说明
[0028] 图1为本发明的实施例的自动实现软件程序免杀的方法的流程示意图;
[0029] 图2为应用本发明的实施例的自动实现软件程序免杀的方法处理前后的文件对照示意图。

具体实施方式

[0030] 下面结合附图和具体实施例对本发明的实施例的自动实现软件程序免杀的方法作进一步详细描述,但不作为对本发明的限定。
[0031] 图1为本发明的实施例的自动实现软件程序免杀的方法的流程示意图。本发明的实施例的自动实现软件程序免杀的方法,创建若干自定义的静态库以代替操作系统提供的默认库来实现对软件程序中用到的API的调用,自定义的静态库以显式加载方式实现调用。由于“显式加载”的函数没有“导出”(export)属性,链接后不会生成导入表项。
[0032] 本发明得以自动实现软件程序免杀的原理就是在编译阶段,使用“显式加载”替代“导入表”(隐式加载)。编译器默认使用隐式加载,隐式加载是每当源代码中调用了一个系统API,就将调用的目标地址设定为“导入表”中的某项(多次调用同一个API,目标地址相同),而在程序运行时,操作系统会根据该导入表项中填写的动态库名和API名,在该项中填入API真正的地址,使程序可以正常工作。“显式加载”则是不使用“导入表”机制,每当源代码中调用了一个系统API,则直接生成一段代码,用来加载相应的动态库,搜索库中的API地址,然后调用。在这段代码中,动态库名和API名都不是以明文形式存在,而是经过自定义算法变换过的,只有在运行时才可能知道其内容。由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。链接器一般提供若干“默认库”,对源代码中调用的系统API,由于其函数没有定义在程序的自身代码中,链接时会找不到,找不到时,链接器就会从“默认库”中寻找,并找到带有“导出”(export)属性的函数,此时链接器就会添加导入表项,记录动态库名和API名。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。
[0033] 作为一种改进,具体包括以下步骤:
[0034] S1:列举出操作系统的链接器的所有默认库。
[0035] 不同操作系统、平台下的默认库会有不同,但都是确定可预知的,如Windows程序一般是kernel32、user32、advapi32这三个默认库。
[0036] S2:从操作系统软件开发工具包获取默认库的库文件,自动枚举出其中所有的API名,将从各个默认库中枚举出的API名分别保存为第一字符串数组。
[0037] 其中,自动枚举API名,由于默认库使用“隐式加载”方式,因此,所有API名都会在库文件符号表中依次出现,所以可以解析库文件结构,自动枚举符号表。第一字符串数组格式如kernel_apis,user_apis,advapi_apis。
[0038] S3:对第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组。
[0039] S4:对应每个默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码。
[0040] S5:编译源代码文件,生成自定义的静态库。例如mykernel32.lib。
[0041] S6:返回步骤2,直到生成所有默认库对应的自定义的静态库。
[0042] S7:修改要免杀的程序的工程配置,禁用所有默认库,添加所有对应的自定义的静态库。
[0043] 作为进一步的改进,步骤S3还包括对默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。其中,自定义变换处理方式为自定义,变换算法不限,达到不易推断出明文的目的即可。例如将字符串倒序:“abc”=>“cba”。第二字符串数组,如对kenel_apis处理为kenel_api2。库文件名也可以做类似处理(“user”=>”resu”),保存为“变换后库名称”字符串如kenel_lib_name2。
[0044] 作为更进一步的改进,步骤S4中函数体具体包括以下项:
[0045] A1:对字符串中的库文件名进行逆变换(如字符串倒序)后得到的库名称;
[0046] A2:以原库文件名(例如进行逆变换后得到的库名称)为参数调用系统功能加载动态库(如loadlibrary);
[0047] A3:对第二字符串数组中的对应项进行逆变换后得到的API名称;
[0048] A4:以进行逆变换后得到的API名称为参数调用系统功能获取API地址(如GetProcAddress);
[0049] A5:跳转指令,其跳转目标是上述获取到的API地址。
[0050] 作为另一种改进,操作系统为Windows、Linux或者Unix。本发明的自动实现软件程序免杀的方法不仅适用于Windows系统,还适用于Linux、Unix等操作系统。
[0051] 图2为应用本发明的实施例的自动实现软件程序免杀的方法处理前后的文件对照示意图。为使本发明的目的、技术方案及优点更加清楚明白,以下参照图1和图2并举实施例,对本发明进一步详细说明(基于Windows操作系统下)。
[0052] 某Windows软件运行时被杀毒软件误报,源代码工程使用VC编译,软件开发商采用本发明的实施例的自动实现软件程序免杀做软件程序的源码免杀。
[0053] 首先确定系统默认库为kernel32.lib、user32lib和advapi32.lib;
[0054] 从Windows Platform SDK中获取上述库文件,分别枚举出其中所有的API名,保存到第一字符串数组kernel32_apis、user32_apis,和advapi32_apis;
[0055] 使用“字符串倒置”(strrev)算法对第一字符串数组和动态库名称做变换,得到第二字符串数组kernel32_api2、user32_api2、advapi32_api2和变换后库名称"lld.23lenrek"、"lld.23resu"、"lld.23ipavda";
[0056] 分别创建源代码文件mykernel32.c、myuser32.c和myadvapi32.c,在各文件中定义对应库中所有的API,例如advapi32.c中RegOpenKey函数代码如下:
[0057]
[0058]
[0059] 分别编译mykernel32.c、myuser32.c和myadvapi32.c,得到mykernel32.lib、myuser32.lib和myadvapi32.lib;
[0060] 在工程配置中禁用所有默认库,并添加静态库mykernel32.lib、myuser32.lib和myadvapi32.lib。
[0061] 本发明在其他操作系统如Linux、Unix上的实现方式与Windows下的实现方式基本相同,此处不再赘述。
[0062] 本发明的自动实现软件程序免杀的方法的有益效果在于:由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本发明的方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。
[0063] 以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈