Elf共享库保护方法及其系统的制作方法

文档序号:10471374阅读:373来源:国知局
Elf共享库保护方法及其系统的制作方法
【专利摘要】本发明公开了一种ELF共享库保护方法及其系统,方法包括:依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;读取目标ELF共享库文件至内存;对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据;将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。本发明可防止动态共享库被反编译逆向分析后得到设计者的程序设计思路或代码执行细节,提高对软件的保护,避免软件开发企业的经济损失,保护消费者的利益。
【专利说明】
ELF共享库保护方法及其系统
技术领域
[0001]本发明涉及计算机安全领域,尤其涉及一种ELF共享库保护方法及其系统。
【背景技术】
[0002]软件的防盗版、防修改一直是计算机安全领域的一个重要课题。非法破译者可以通过反编译和逆向工程来分析软件,进而发现软件的设计思路和技术细节,这直接给软件开发企业带来了直接的经济损失,也间接损害了消费者的利益。因此设计一套专有、独特的软件保护方法尤为重要。
[0003]目前对Linux中ELF保护的方法通常是通过嵌入式的方法来进行保护。先在可执行文件或动态共享库里注入一段跳转代码,系统运行该可执行文件或动态库时先执行此部分跳转代码,然后再根据跳转代码指定的地址跳转到真正的有效代码段部分执行。此方法虽然可以隐藏有效代码段,但并不能很好的防止动态逆向分析。
[0004]在公开号为102136053A的专利授权文件中,提出了一种对可执行文件源代码保护的方法,包括以下步骤:获取需要加壳的目标可执行链接格式ELF文件;提取目标ELF文件中的核心部分;所述核心部分包括数据段、代码段、堆栈段及动态链接表;创建新的ELF文件框架;将目标文件的核心部分和加壳部分整合,将整合结果按ELF结构填入到新的ELF文件框架中;完成重构新的ELF文件并设置其属性为可执行。该方法主要通过对核心代码进行加壳来提高反动态跟踪能力,但该方法只有一重保护,安全性较低。

【发明内容】

[0005]本发明所要解决的技术问题是:提供一种ELF共享库保护方法及其系统,有效防止动态共享库被反编译逆向分析,提高对软件的保护。
[0006]为了解决上述技术问题,本发明采用的技术方案为:一种ELF共享库保护方法,包括:
[0007]依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;
[0008]读取目标ELF共享库文件至内存;
[0009]对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据;
[0010]将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。
[0011 ]本发明还涉及一种ELF共享库保护系统,包括:
[0012]构建模块,用于依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;
[0013]第一读取模块,用于读取目标ELF共享库文件至内存;
[0014]加密模块,用于对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据;
[0015]填充模块,用于将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。
[0016]本发明的有益效果在于:对目标ELF共享库文件进行了加密操作并将密文ELF数据填充至加壳ELF共享库文件中,实现了双重保护;对外发布的加壳ELF共享库文件中只包含目标ELF共享库文件的密文ELF数据,用户面向的对象都是加壳ELF共享库,其目标ELF共享库是加密隐藏不可见的,反编译逆向后也无法看到目标ELF共享库文件的实际代码流程,可防止动态共享库被反编译逆向分析后得到设计者的程序设计思路或代码执行细节,提高对软件的保护,避免软件开发企业的经济损失,保护消费者的利益。
【附图说明】
[0017]图1为本发明一种ELF共享库保护方法的流程图;
[0018]图2为本发明实施例一的方法流程图;
[0019]图3为本发明一种ELF共享库保护系统的结构示意图;
[0020]图4为本发明实施例二的系统结构示意图。
[0021]标号说明:
[0022]1、构建模块;2、第一读取模块;3、第一判断模块;4、加密模块;5、填充模块;6、第二读取模块;7、解密模块;8、第二判断模块;9、获取模块;
[0023]91、获取单元;92、调用单元。
【具体实施方式】
[0024]为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
[0025]本发明最关键的构思在于:对目标ELF共享库文件进行加密处理,进行一重保护,再以加壳ELF共享库文件的方式对外发布,实现对共享库文件的二重保护。
[0026]请参阅图1,一种ELF共享库保护方法,包括:
[0027]依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;
[0028]读取目标ELF共享库文件至内存;
[0029]对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据;
[0030]将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。
[0031]从上述描述可知,本发明的有益效果在于:可有效隐藏代码,目标ELF共享库是加密隐藏不可见的,可防止动态共享库被反编译逆向分析后得到设计者的程序设计思路或代码执行细节,提高对软件的保护,避免软件开发企业的经济损失,保护消费者的利益。
[0032]进一步地,所述“将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内”之后,进一步包括:
[0033]读取所述加壳ELF共享库文件内的密文ELF数据至内存;
[0034]对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件;
[0035]根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数。
[0036]进一步地,所述加壳ELF共享库文件包括关联目标ELF共享库文件中的目标函数的代理函数。
[0037]进一步地,所述“根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数”具体为:
[0038]根据所述目标ELF共享库文件的段头表和函数映射表,获取所述目标ELF共享库文件的目标函数的运行地址;
[0039]所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标函数。
[0040]由上述描述可知,当调用方需调用目标函数时,需要先将加壳ELF共享库文件中的密文ELF数据解密为目标ELF共享库文件,获取目标函数的运行地址,然后由加壳ELF共享库文件中的代理函数根据运行地址,才能调用目标函数,可有效地防止了目标ELF共享库被反编译逆向分析出程序设计者的代码逻辑,提高软件的安全性;同时,整个过程都在内存中进行,目标函数调用完毕后即释放内存,使得目标ELF共享库文件不会在实际存储器中留有任何痕迹,进一步提高了软件的安全性。
[0041 ]进一步地,所述“读取目标ELF共享库文件至内存”之后,进一步包括:
[0042]判断所述目标ELF共享库文件是否合法。
[0043]由上述描述可知,通过对合法性进行判断,保证目标ELF共享库文件是安全的,防止感染病毒,提高了系统的安全性。
[0044]进一步地,所述“对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件”之后,进一步包括:
[0045]判断所述目标ELF共享库文件是否合法。
[0046]由上述描述可知,在解密完再进行一次合法性的判断,可防止在获取加壳ELF共享库文件前密文ELF共享库数据被修改,进一步提高了系统的安全性。
[0047]请参照图3,本发明还提出一种ELF共享库保护系统,包括:
[0048]构建模块,用于依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;
[0049]第一读取模块,用于读取目标ELF共享库文件至内存;
[0050]加密模块,用于对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据;[0051 ]填充模块,用于将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。
[0052]进一步地,还包括:
[0053]第二读取模块,用于读取所述加壳ELF共享库文件内的密文ELF数据至内存;
[0054]解密模块,用于对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件;
[0055]获取模块,用于根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数。
[0056]进一步地,所述加壳ELF共享库文件包括关联目标ELF共享库文件中的目标函数的代理函数。
[0057]进一步地,所述获取模块包括:
[0058]获取单元,用于根据所述目标ELF共享库文件的段头表和函数映射表,获取所述目标ELF共享库文件的目标函数的运行地址;
[0059]调用单元,用于所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标函数。
[0060]实施例一
[0061]请参照图2,本发明的实施例一为一种ELF共享库保护方法,包括如下步骤:
[0062]S1:依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件,所述加壳ELF共享库文件包括关联目标ELF共享库文件中的目标函数的代理函数;具体是根据目标ELF共享库文件抛出的可供调用的函数列表,即目标函数列表,在加壳ELF共享库文件中实现代理函数,调用方,即第三方调用者通过调用代理函数来完成目标函数的调用。例如,在目标ELF共享库文件内有目标函数target_funcl(),则在加壳ELF共享库文件内实现代理函数proxy_funcl (),在代理函数proxy_funcl ()内部完成对目标函数target_funci ()的调用。优选地,所述加壳ELF共享库文件还包括初始化函数,可在初始化函数中完成下述的加密运算、解密运算和定位目标函数运行地址的操作。
[0063]S2:读取目标ELF共享库文件至内存;在加壳ELF共享库文件的数据段内开辟一定大小的临时数据空间,将目标ELF共享库文件的全部数据读取到所述临时数据空间中。
[0064]S3:判断所述目标ELF共享库文件是否合法,若是,则执行步骤S4,若否,则结束流程;优选地,可根据目标ELF共享库文件的格式判断合法性,因为目标ELF共享库文件的文件头指明了该目标ELF共享库文件的类型、文件运行的机器平台、体系结构、大小等,可通过解析其文件头来判断是否合法。
[0065]S4:对合法的所述目标ELF共享库文件进行加密处理,得到密文ELF数据;加密算法可根据实际需求,选择对称加密算法或非对称加密算法;对称加密算法是使用单钥密码系统的加密方法,加密和解密使用同一个秘钥,加解密速度快,常用的有DES、3DES等,和非对称加密算法相比对称加密算法更容易被破解;非对称加解密算法需要2个秘钥,使用公钥加密,私钥解密,公私钥分开保存,与对称加密算法相比非对称加密算法的安全性更好,但加解密速度更慢,常用的有RSA、Elgamal等。优选地,在初始化函数中进行加密运算。
[0066]S5:将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内;在加壳ELF共享库文件的数据段内开辟一定大小的数据空间,将密文ELF数据填充到该数据空间里。可选地,得到密文ELF数据后或密文ELF数据填充完后,即可释放步骤S2中的临时数据空间,即在加壳ELF共享库文件的数据段中删除目标ELF共享库文件,只留有密文ELF数据。
[0067]S6:调用方获取所述加壳ELF共享库文件;调用方调用加壳ELF共享库文件实现对目标ELF共享库文件的调用,所述加壳ELF共享库文件包括初始化函数、代理函数和密文ELF数据。下述步骤阐述调用方通过调用加壳ELF共享库文件实现对目标ELF共享库文件中的目标函数的调用。
[0068]S7:读取所述加壳ELF共享库文件内的密文ELF数据至内存。
[0069]S8:对所述密文ELF数据进行解密处理,在内存中得到所述目标ELF共享库文件;进行该步骤的解密运算与步骤S4中的加密运算相对应。优选地,在初始化函数中进行解密运笪并ο
[0070]S9:判断所述目标ELF共享库文件是否合法,若是,则执行步骤SlO,若否,则结束流程。该步骤的判断依据与步骤S3—致。
[0071 ] SlO:根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数的运行地址;目标函数的运行地址可根据目标ELF共享库文件的段头表和函数映射表获取。优选地,该步骤也在初始化函数中完成。
[0072]Sll:所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标函数。
[0073]S12:调用完毕后,释放上述步骤申请的所有内存空间。
[0074]在本实施例中,无论是共享库的发布、存储或加载运行过程,用户面向的对象都是加壳ELF共享库,其目标ELF共享库是加密隐藏不可见的,且整个过程是在内存中运行,程序运行完毕后内存空间即释放,使得目标共享库不会在实际存储器中留有任何的痕迹,该方法有效地防止了目标ELF共享库被反编译逆向分析出程序设计者的代码逻辑。
[0075]实施例二
[0076]请参照图4,本实施例为对应上述方法的一种ELF共享库保护系统,包括:
[0077]构建模块I,用于依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件;
[0078]第一读取模块2,用于读取目标ELF共享库文件至内存;
[0079]第一判断模块3,用于判断所述目标ELF共享库文件是否合法,得到第一判断结果;
[0080]加密模块4,用于若第一判断结果为是,则对所述目标ELF共享库文件进行加密处理,得到密文ELF数据;
[0081 ]填充模块5,用于将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内;
[0082]第二读取模块6,用于读取所述加壳ELF共享库文件内的密文ELF数据至内存;
[0083]解密模块7,用于对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件;
[0084]第二判断模块8,用于判断所述目标ELF共享库文件是否合法,得到第二判断结果;
[0085]获取模块9,用于若所述第二判断结果为是,则根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数。
[0086]所述获取模块9包括:
[0087]获取单元91,用于根据所述目标ELF共享库文件的段头表和函数映射表,获取所述目标ELF共享库文件的目标函数的运行地址;
[0088]调用单元92,用于所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标函数。
[0089]综上所述,本发明提供的一种ELF共享库保护方法及其系统,对目标ELF共享库文件进行了加密操作并将密文ELF数据填充至加壳ELF共享库文件中,实现了双重保护;对外发布的加壳ELF共享库文件中只包含目标ELF共享库文件的密文ELF数据,用户面向的对象都是加壳ELF共享库,其目标ELF共享库是加密隐藏不可见的,反编译逆向后也无法看到目标ELF共享库文件的实际代码流程,可防止动态共享库被反编译逆向分析后得到设计者的程序设计思路或代码执行细节,提高对软件的保护,避免软件开发企业的经济损失,保护消费者的利益;同时,整个过程都在内存中进行,目标函数调用完毕后即释放内存,使得目标ELF共享库文件不会在实际存储器中留有任何痕迹,进一步提高了软件的安全性;在加密前和解密后均对目标ELF共享库文件进行合法性的判断,保证了系统的安全性。
[0090]以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
【主权项】
1.一种ELF共享库保护方法,其特征在于,包括: 依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件; 读取目标ELF共享库文件至内存; 对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据; 将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。2.根据权利要求1所述的ELF共享库保护方法,其特征在于,所述“将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内”之后,进一步包括: 读取所述加壳ELF共享库文件内的密文ELF数据至内存; 对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件; 根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数。3.根据权利要求2所述的ELF共享库保护方法,其特征在于,所述加壳ELF共享库文件包括关联目标ELF共享库文件中的目标函数的代理函数。4.根据权利要求3所述的ELF共享库保护方法,其特征在于,所述“根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数”具体为: 根据所述目标ELF共享库文件的段头表和函数映射表,获取所述目标ELF共享库文件的目标函数的运行地址; 所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标函数。5.根据权利要求1所述的ELF共享库保护方法,其特征在于,所述“读取目标ELF共享库文件至内存”之后,进一步包括: 判断所述目标ELF共享库文件是否合法。6.根据权利要求2所述的ELF共享库保护方法,其特征在于,所述“对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件”之后,进一步包括: 判断所述目标ELF共享库文件是否合法。7.一种ELF共享库保护系统,其特征在于,包括: 构建模块,用于依据目标ELF共享库文件的目标函数列表构建加壳ELF共享库文件; 第一读取模块,用于读取目标ELF共享库文件至内存; 加密模块,用于对合法的目标ELF共享库文件进行加密处理,得到密文ELF数据; 填充模块,用于将所述密文ELF数据填充至所述加壳ELF共享库文件的数据段内。8.根据权利要求7所述的ELF共享库保护系统,其特征在于,还包括: 第二读取模块,用于读取所述加壳ELF共享库文件内的密文ELF数据至内存; 解密模块,用于对所述密文ELF数据进行解密处理,得到所述目标ELF共享库文件; 获取模块,用于根据所述目标ELF共享库文件的格式,获取所述目标ELF共享库文件的目标函数。9.根据权利要求8所述的ELF共享库保护系统,其特征在于,所述加壳ELF共享库文件包括关联目标ELF共享库文件中的目标函数的代理函数。10.根据权利要求9所述的ELF共享库保护系统,其特征在于,所述获取模块包括: 获取单元,用于根据所述目标ELF共享库文件的段头表和函数映射表,获取所述目标ELF共享库文件的目标函数的运行地址; 调用单元,用于所述加壳ELF共享库文件的代理函数根据所述运行地址,调用所述目标 bO Y>< (rFj
【文档编号】G06F21/14GK105825087SQ201610150057
【公开日】2016年8月3日
【申请日】2016年3月16日
【发明人】刘礼建, 吴卫东, 柯婷
【申请人】福建联迪商用设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1