多elf文件保护方法及系统的制作方法_3

文档序号:9844332阅读:来源:国知局
ative C层、Linux Kernel层。如图2所示,正常情况下,第三方调用SO文件,必须通过Java层的LoadLibrary函数根据SO文件名进行相应的SO文件的加载。具体来说,LoadLibrary会调用I ibdvm.so里面的dlopen函数来最终加载SO文件。
[0081 ]现有技术中对SO文件的保护,一般都是针对每个SO文件分别进行加壳。如图3所示,当第三方调用SO文件时,通过Java层的LoadLibrary函数通过SO文件名来加载SO文件,由于每个SO文件都进行了加壳保护,所以具体实现时首先要进入外壳,然后外壳对SO文件进行加载。
[0082]在本发明的实施例中,通过对多个SO文件统一进行加壳,通过对系统库函数(libdvm.so)做了一个Hook(钩子),这样当Java层即APK调用SO时,会拦截dlopen函数,由所加的壳自己完成加载SO的工作。如图4所示,当java层调用SO的时候先进入外壳,不管加载哪个SO文件,都是进入统一的外壳,然后外壳根据SO的名字对相应的SO进行加载。
[0083]图5示出了根据本发明一个实施例的一种多ELF文件的保护系统的原理示意图。如图5所示,系统500包括:
[0084]合并写入单元510,用于将多个SO文件并入一个壳程序文件中;
[0085]本单元执行对多个SO文件进行统一加壳的过程,即将多个SO文件一并写入壳程序文件中的指定位置,壳程序文件会先于SO文件运行,取得优先权,保护SO文件不被非法修改或反编译。
[0086]保护处理单元520,用于对壳程序文件中的多个SO文件进行加保护处理。
[0087]本单元对加壳后的多个SO文件进一步加固。
[0088]请求对象确定单元530,用于接收至少一个SO文件的调用请求,确定所述调用请求所对应的待调用对象;
[0089]调用单元540,用于根据所确定的待调用对象,在所述壳程序文件处对所述至少一个SO文件进行调用。
[0090]本单元主要实现当第三方对SO文件进行调用时,要由所加的壳程序根据调用请求进行相应的加载,即由所加的壳程序文件帮助完成所请求的SO文件的加载。
[0091]在本发明的一个实施例中,图5所示的合并写入单元510,用于将多个SO文件转换成二进制流,写入一个壳程序文件中,所述壳程序文件中至少包含多个SO文件的头文件信息。
[0092]在本发明的一个实施例中,图5所示的保护处理单元520用于去掉多个SO文件的隐藏信息;和/或,用于对多个SO文件进行分段加密处理;和/或,用于对多个SO文件进行代码混淆处理;和/或,用于对多个SO文件进行反调试处理。
[0093]在上述实施例中,去掉多个SO文件的隐藏信息,会导致SO文件信息缺失,即使有人对SO文件进行恶意解密或反编译,也无法得到完整的SO文件,很难做到静态工具分析;
[0094]在上述实施例中,对多个SO文件进行分段加密处理可以是:对多个SO文件的数据节和代码节分别进行加密,增加解密难度。
[0095]在上述实施例中,对多个SO文件进行代码混淆处理是不改变代码逻辑的情况下,在多个SO文件的代码中增加无用代码,或者对多个SO文件的代码进行重命名,使反编译后的源代码难以看懂,增加反编译后代码分析的难度。
[0096]在上述实施例中,对多个SO文件进行反调试是一个重要的保护功能,图5所示系统的保护处理单元520的反调试处理可以是:将可用于反调试的点插入到多个SO文件进行代码混淆后的代码中;代码混淆后,反调试的点就不容易找到,这样能给破解者进行调试的时候造成很多困扰,增加破解难度。
[0097]在本发明的一个实施例中,图5所示请求对象确定单元530用于在所述壳程序文件外接收至少一个SO文件的调用请求,确定所述调用请求所对应的待调用对象;
[0098]所述调用单元540用于在所述壳程序文件处,接收所述待调用对象的确定结果,相应地对所述至少一个SO文件进行调用。
[0099]在本发明的一个实施例中,图5所示的请求对象确定单元为系统库文件中建立的钩子,利用所述钩子在第三方应用和所述壳程序文件之间接收第三方应用的调用请求,解析所述调用请求所对应的待调用对象。
[0100]以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种多ELF文件保护方法,其特征在于,包括: 将多个ELF文件并入一个壳程序文件中; 对所述壳程序文件中的多个ELF文件进行加保护处理; 接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象; 根据所确定的待调用对象,在所述壳程序文件处对所述至少一个ELF文件进行调用。2.根据权利要求1所述的方法,其特征在于,所述将多个ELF文件并入一个壳程序文件中包括: 将所述多个ELF文件转换成二进制流,写入一个壳程序文件中,所述壳程序文件中至少包含所述多个ELF文件的头文件信息。3.根据权利要求1所述的方法,其特征在于,所述对所述壳程序文件中的多个ELF文件进行加保护处理包括:去掉所述多个ELF文件的隐藏信息、对所述多个ELF文件进行分段加密处理、对所述多个ELF文件进行代码混淆处理、对所述多个ELF文件进行反调试处理中的至少一种。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象包括: 在所述壳程序文件外接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象; 所述根据所确定的待调用对象,在所述壳程序文件处对所述至少一个ELF文件进行调用包括: 在所述壳程序文件处,接收所述待调用对象的确定结果,相应地对所述至少一个ELF文件进行调用。5.根据权利要求4所述的方法,在所述壳程序文件外接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象包括: 在系统库文件中建立钩子; 利用所述钩子在第三方应用和所述壳程序文件之间接收第三方应用的调用请求,解析所述调用请求所对应的待调用对象。6.一种多ELF文件保护系统,该系统包括: 合并写入单元,用于将多个ELF文件并入一个壳程序文件中; 保护处理单元,用于对所述壳程序文件中的多个ELF文件进行加保护处理; 请求对象确定单元,用于接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象; 调用单元,用于根据所确定的待调用对象,在所述壳程序文件处对所述至少一个ELF文件进行调用。7.根据权利要求6所述的系统,其特征在于,所述合并写入单元,用于将所述多个ELF文件转换成二进制流,写入一个壳程序文件中,所述壳程序文件中至少包含所述多个ELF文件的头文件信息。8.根据权利要求6所述的系统,其特征在于,所述保护处理单元用于去掉所述多个ELF文件的隐藏信息;和/或,用于对所述多个ELF文件进行分段加密处理;和/或,用于对所述多个ELF文件进行代码混淆处理;和/或,用于对所述多个ELF文件进行反调试处理。9.根据权利要求6-8中任一项所述的系统,其特征在于,所述请求对象确定单元用于在所述壳程序文件外接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象; 所述调用单元用于在所述壳程序文件处,接收所述待调用对象的确定结果,相应地对所述至少一个ELF文件进行调用。10.根据权利要求9所述的系统,其特征在于,所述请求对象确定单元为系统库文件中建立的钩子,利用所述钩子在第三方应用和所述壳程序文件之间接收第三方应用的调用请求,解析所述调用请求所对应的待调用对象。
【专利摘要】本发明涉及数据安全领域,具体而言,本发明涉及多ELF文件保护方法及系统。其中,本发明的多ELF文件的保护方法,包括:将多个ELF文件并入一个壳程序文件中;对所述壳程序文件中的多个ELF文件进行加保护处理;接收至少一个ELF文件的调用请求,确定所述调用请求所对应的待调用对象;根据所确定的待调用对象,在所述壳程序文件处对所述至少一个ELF文件进行调用。本发明提供的多ELF文件的保护方法和系统,通过将多个Android动态链接库(*.SO)文件统一加壳保护,这样既实现了目标动态库隐藏的目的,防止第三方恶意调用,同时也有效降低了目标软件大小。
【IPC分类】G06F21/62
【公开号】CN105608391
【申请号】CN201510955012
【发明人】霍亮
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
【公开日】2016年5月25日
【申请日】2015年12月17日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1