CN108664796B - 一种so文件保护方法及装置 - Google Patents
一种so文件保护方法及装置 Download PDFInfo
- Publication number
- CN108664796B CN108664796B CN201710197849.6A CN201710197849A CN108664796B CN 108664796 B CN108664796 B CN 108664796B CN 201710197849 A CN201710197849 A CN 201710197849A CN 108664796 B CN108664796 B CN 108664796B
- Authority
- CN
- China
- Prior art keywords
- file
- loaded
- specified
- protected
- soinfo
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Abstract
本申请涉及互联网技术领域,尤其涉及一种so文件保护方法及装置,用以解决现有的so文件保护方法存在着so文件易被破解的问题;本申请实施例提供的so文件保护方法包括:获取待保护so文件;基于待保护so文件、指定形式的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件;将指定格式的so文件追加至壳文件尾部;壳文件中包含有用于将指定格式的so文件解析到指定形式的soinfo结构体中的链接器程序;将壳文件以待保护so文件的命名进行保存,这样,在终端侧加载壳文件后得到的是指定格式的so文件,即使攻击者将so文件进行了转存,也无法获知指定格式下的文件结构,因此很难对指定格式的so文件进行破解。
Description
技术领域
本申请涉及互联网技术领域,尤其涉及一种so文件保护方法及装置。
背景技术
随着安卓Android技术的快速发展,在Android系统下开发的应用程序也越来越多,如何对Android应用程序中的共享动态链接库(shared object,so)文件进行保护来防止反编译成为一个重要的问题。
目前,对so文件进行保护的方法主要是加壳。具体地,在服务器侧将so文件进行加密处理,并编译壳文件,然后将加密后的so文件追加到壳文件尾部。在终端侧运行so文件时,先从壳文件中解密出so文件,再对so文件进行动态加载。此时,在终端侧需要系统linker来执行so文件的加载操作,而系统linker会将so文件进行内存映射,攻击者就可以从内存中把整个so文件转存下来,而so文件符合可执行连接格式(Executable andLinking Format,ELF),攻击者根据ELF下的文件结构,就可以很容易地破解应用程序,进而对应用程序进行反编译。
可见,现有技术中的so文件保护方法存在着so文件易被破解的问题。
发明内容
本申请实施例提供一种so文件保护方法及装置,用以解决现有技术中的so文件保护方法存在着so文件易被破解的问题。
本申请实施例提供的一种so文件保护方法,包括:
获取待保护的so文件;
基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体,生成指定格式的so文件;
将指定格式的so文件追加至壳文件尾部;其中,壳文件中包含链接器程序;链接器程序用于将指定格式的so文件解析到指定形式的soinfo结构体中;
将壳文件以待保护的so文件的命名进行保存。
本申请实施例提供的一种so文件加载方法,包括:
加载壳文件;所述壳文件中包含有待加载的so文件和链接器程序,待加载的so文件是基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体生成的;
从壳文件中获取待加载的so文件;并
执行链接器程序,将待加载的so文件解析到指定形式的soinfo结构体中;
基于解析出的指定形式的soinfo结构体和反射机制,加载待加载的so文件。
本申请实施例提供的一种so文件保护装置,包括:
获取模块,用于获取待保护的so文件;
生成模块,用于基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体,生成指定格式的so文件;
追加模块,用于将指定格式的so文件追加至壳文件尾部;其中,壳文件中包含链接器程序;链接器程序用于将指定格式的so文件解析到指定形式的soinfo结构体中;
保存模块,用于将壳文件以待保护的so文件的命名进行保存。
本申请实施例提供的一种so文件加载装置,包括:
第一加载模块,用于加载壳文件;壳文件中包含有待加载的so文件和链接器程序,待加载的so文件是基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体生成的;
获取模块,用于从壳文件中获取待加载的so文件;
解析模块,用于执行链接器程序,将待加载的so文件解析到指定形式的soinfo结构体中;
第二加载模块,用于基于解析出的指定形式的soinfo结构体和反射机制,加载待加载的so文件。
本申请实施例中,在获取待保护so文件后,可以基于指定形式的soinfo结构体和指定形式的节头结构体,将待保护so文件的文件格式改变为指定格式,然后将指定格式的so文件追加至壳文件尾部,并将该壳文件以待保护so文件的命名进行保存,这样,在终端侧加载包含待保护so文件的壳文件后,得到的其实是指定格式的so文件,该指定格式的so文件不再符合可执行连接格式,即使攻击者将整个so文件进行了转存,也无法获知指定格式下的文件结构,从而很难对so文件进行破解,因此,本申请实施例提供的方法可以很好地对so文件进行保护、降低安卓应用程序被反编译的概率。
附图说明
图1为本申请实施例提供的so文件保护方法流程图;
图2为本申请实施例提供的改变ELF header的数据结构之前,so文件的数据示意图;
图3为本申请实施例提供的改变ELF header的数据结构之后,so文件的数据示意图;
图4为本申请实施例提供的将待保护的so文件改变为指定格式的so文件的流程图;
图5为本申请实施例提供的一种指定格式的so文件的示意图;
图6为本申请实施例提供的so文件加载方法流程图;
图7为本申请实施例提供的so文件保护装置结构图;
图8为本申请实施例提供的so文件加载装置结构图。
具体实施方式
本申请实施例中,在获取待保护so文件后,可以基于指定形式的soinfo结构体和指定形式的节头结构体,将待保护so文件的文件格式改变为指定格式,然后将指定格式的so文件追加至壳文件尾部,并将该壳文件以待保护so文件的命名进行保存,这样,在终端侧加载包含待保护so文件的壳文件后,得到的其实是指定格式的so文件,该指定格式的so文件不再符合可执行连接格式,即使攻击者将整个so文件进行了转存,也无法获知指定格式下的文件结构,从而很难对so文件进行破解,因此,本申请实施例提供的方法可以很好地对so文件进行保护、降低安卓应用程序被反编译的概率。
下面结合说明书附图对本申请实施例作进一步详细描述。
实施例一
如图1所示,为本申请实施例提供的so文件保护方法流程图,包括以下步骤:
S101:获取待保护的so文件。
在具体实施过程中,可以对安卓应用程序进行解压缩来获取待保护的so文件。
S102:基于待保护的so文件、指定形式的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件。
其中,指定形式的soinfo结构体和指定形式的节头结构体可以由开发人员自行定义。显然地,指定形式的节头结构体不再与待保护的so文件原先对应的节头结构体相同;指定形式的soinfo结构体也不再与待保护的so文件原先对应的soinfo结构体相同。
以开发人员定义ELF节头结构体为例,在定义ELF节头结构体时,可以保留原ELF节头结构体的必要格式,而对与链接器程序不相关的字段则可以随意修改。
例如,待保护so文件ELF header的数据结构如下:
进一步假设保留ELF节头结构体的必要格式后,ELF header的数据结构(即自定义的节头结构体的数据结构)如下:
假设图2为改变ELF header的数据结构之前,so文件的数据示意图,其中线框内的数据为与ELF header对应的数据,则改变ELF header的数据结构后,与ELF header对应的数据如图3中线框内的数据所示。可见,改变ELF节头结构体后,ELF header中的数据和ELFheader的长度大小都发生了变化。
进一步地,在开发人员确定了指定形式的soinfo结构体和指定形式的节头结构体以后,在具体实施过程中,可以根据图4所示的流程将待保护的so文件改变为指定格式的so文件:
S401a:基于待保护的so文件对指定形式的soinfo结构体进行初始化。
可选地,可以将待保护的so文件映射到内存,然后从内存中加载待保护的so文件,再读取待保护的so文件在节头结构体中的动态链接信息表信息,进一步地,基于读取的动态链接信息表信息,对指定形式的soinfo结构体进行初始化,如对soinfo结构体中的成员变量进行赋值,增加依赖库索引信息等。
S402a:根据初始化结果,对待保护的so文件依赖的函数在依赖库中的地址进行重定位。
可选地,在对指定形式的soinfo结构体进行初始化后,可以根据soinfo结构体中的依赖库索引,加载与待保护的so文件对应的依赖库,因为依赖库加载后库中函数的地址会发生变化,因此,还可以根据待保护的so文件中的重定位表,对待保护的so文件依赖的函数在依赖库中的地址进行重定位,以保证待保护的so文件中的每个程序段都可以正确调用其依赖的函数。
S403a:基于重定位后的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件。
可选地,为了减小指定格式的so文件的大小,还可以先对重定位后soinfo结构体中的系统导出符进行过滤,再基于过滤后的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件。
本申请实施例中,在获取待保护so文件后,可以基于指定形式的soinfo结构体和指定形式的节头结构体,将待保护so文件的文件格式改变为指定格式,然后将指定格式的so文件追加至壳文件尾部,并将该壳文件以待保护so文件的命名进行保存,这样,在终端侧加载包含待保护so文件的壳文件后,得到的其实是指定格式的so文件,该指定格式的so文件不再符合可执行连接格式,即使攻击者将整个so文件进行了转存,也无法获知指定格式下的文件结构,从而很难对so文件进行破解,因此,本申请实施例提供的方法可以很好地对so文件进行保护、降低安卓应用程序被反编译的概率。
如图5所示,为一种指定格式的so文件的示意图,其中,ELF heade为指定形式的节头结构体,其它数据与重定位后的soinfo结构体相对应。
S103:将指定格式的so文件追加至壳文件尾部;其中,壳文件中包含用于将指定格式的so文件解析到指定形式的soinfo结构体中的链接器程序。
在具体实施过程中,可以对指定格式的so文件进行加密、压缩处理,然后将进行加密、压缩处理后的文件追加至壳文件尾部,该壳文件中包含有可以对指定格式的so文件进行解密的解密程序。
S104:将壳文件以待保护的so文件的命名进行保存。
可选地,在将壳文件以待保护的so文件的命名进行保存之前,还可以确定壳文件的Hmac,并将确定的Hmac追加至壳文件的尾部。如果有攻击者改动了指定格式的so文件,so文件的大小就有可能会发生变化,这样壳文件的Hmac就会发生变化,此时,根据壳文件的Hmac就可以获知指定格式的so文件是否被篡改。
上述过程,在服务器侧完成了对待保护的so文件的文件格式的改变,并在待保护的so文件的壳文件中添加了可以加载指定格式的so文件的链接器程序。下面,对终端侧加载壳文件的过程进行详细地说明。
如图6所示,为本申请实施例提供的so文件加载方法流程图,包括以下步骤:
S601:加载壳文件。
其中,壳文件中包含有待加载的so文件和链接器程序,并且待加载的so文件是基于待保护的so文件、指定形式的soinfo结构体和指定形式的节头结构体生成的。
S602:从壳文件中获取待加载的so文件。
可选地,壳文件中还包含有解密程序。在确定终端侧用户为合法用户后,则可以成功加载壳文件,进而得到进行压缩处理后的so文件,再对该so文件进行解压缩处理得到加密后的so文件,进一步地,执行壳文件中的解密程序,对该so文件进行解密得到待加载的so文件,并且该so文件为指定格式的so文件。
S603:执行链接器程序将待加载的so文件解析到指定形式的soinfo结构体中。
在具体实施过程中,链接器程序用于:
1)基于待加载的so文件对指定形式的soinfo结构体进行初始化。
具体地,将待加载的so文件映射到内存,再从内存中加载待加载的so文件,然后读取待加载so文件在指定形式的节头结构体中的动态链接信息表信息,进一步地,基于读取的动态链接信息表信息,对指定格式的soinfo结构体进行初始化,如增加依赖库索引信息等。
2)根据指定形式的soinfo结构体的初始化结果,对待加载的so文件依赖的函数在依赖库中的地址进行重定位。
具体地,根据初始化后soinfo结构体中的依赖库索引,加载与待加载的so文件对应的依赖库,进而根据待加载的so文件中的重定位表信息,对待加载的so文件依赖的函数在所述依赖库中的地址进行重定位,以保证待加载的so文件中的每个程序段可以正确调用其依赖的函数。
S604:基于解析出的指定形式的soinfo结构体和反射机制,加载待加载的so文件。
在具体实施过程中,可以对JNI_onload方法进行反射调用,完成对待加载的so文件的加载和注册。
本申请实施例中,在验证用户为合法用户后,加载壳文件得到待加载的so文件,进而执行壳文件中的链接器程序,将待加载的so文件解析到指定形式的soinfo结构体中,然后基于解析出的指定形式的soinfo结构体和反射机制,对待加载的so文件进行加载、注册。其中,待加载的so文件为指定格式的so文件,该so文件无法由系统linker进行加载(系统linker加载的so文件需要符合可执行连接格式),需要由壳文件中的链接器程序进行加载,这样即使攻击者获取了待加载的so文件,也无法使用系统linker进行加载调试,可以进一步提升安卓应用程序的破解难度。
实施例二
在具体实施过程中,本申请实施例提供的so文件保护方法可以按照以下步骤执行:
1、将Android应用程序进行解压,获取待保护的so文件。
2、将待保护的so映射到内存,开辟匿名内存空间。
3、加载待保护的so文件,mmap(将一个文件或其它对象映射进内存)获取该so文件在内存空间中的首地址,根据该首地址遍历so文件的程序头表找到可加载程序段,并将找到的程序段加载到内存中。
4、根据指定形式的soinfo结构体,对待保护的so文件进行解析,校验程序头是否在内存中。
其中,校验程序头是否在内存中是为了判断待保护的so文件是否是标准的so文件,即可执行连接格式下的文件结构。
5、在确定待保护的so文件是标准的so文件后,将各程序段的虚拟地址、程序段个数和动态链接信息表的虚拟地址加载到指定形式的soinfo结构体中。
6、初始化指定形式的soinfo结构体,并对动态链接信息节区(dynamic section)进行解析处理,链接哈希Hash表、字符串表、符号表、初始化方法偏移等。
上述步骤1~6,在服务器侧对待保护的so文件完成了内存映射和重定位处理,为下一步对待保护so文件的文件格式进行变动做好了内存分析基础。
7、重复上述步骤2-6,加载与待保护so文件对应的依赖库。
8、将指定形式的soinfo结构体中的符号表逐个进行过滤(比如对以“_”为开始的符号进行过滤),并将系统导出符号进行过滤。
9、根据自定义的重定位表结构体改变待保护so文件的文件结构,如,将重定位表导入符中的信息合并到过程链接信息表中,或更改某个表项的偏移值顺序等。
10、根据指定格式的so文件中的重定位表进行重定位操作,查找与待保护so文件对应的函数在依赖库的地址,根据这些函数在依赖库的地址更新Hash表,并在上述指定形式的soinfo结构体的基地址上计算符号表虚地址、字符串表虚地址、Hash表虚地址、重定位虚地址、过程链接表偏移值等。
11、修正指定形式的节头结构体的节头信息,包括指定格式的so文件的尺寸、在内存中的映射大小、动态信息表地址、动态信息表在内存中字节数等。
12、将上述指定形式的soinfo结构体和指定形式的节头结构体,写入指定格式的so文件中。
以上步骤8~12,将待保护so文件由可执行连接格式改变成了指定格式,攻击者在不了解指定格式的so文件的文件规范情况下,很难解析出so文件中内容,这样可以更好地对so文件进行保护、增加安卓程序的破解难度。
13、编译待保护so文件的壳文件,包括解密程序和链接器程序。
14、将指定格式的so文件进行压缩、加密处理后,追加至壳文件的尾部。
15、将壳文件以待保护so文件的命名进行保存。
上述步骤1~15在服务器侧对待保护的so文件进行保护,下述过程在终端侧对保护后的so文件进行加载。
16、将壳文件映射到内存。
其中,壳文件中包含有待加载的so文件、解密程序和链接器程序;待加载的so文件是基于待保护的so文件、指定形式的soinfo结构体和指定形式的节头结构体生成的。
17、校验ELF头是否为自定义魔术字,即判断加载的so文件是否是指定格式的so文件。
18、在确定ELF头为自定义魔术字后,开辟匿名内存空间。
19、解析指定格式的so文件,获取头节区中的动态链接信息表信息。
20、根据动态链接信息表信息填充指定形式的soinfo结构体中的Hash表相关信息,字符表偏移、符号表偏移、过程链接表、字符串表大小、初始化函数偏移、依赖库名字在字符串表中的索引等信息。
21、根据指定形式的soinfo结构体中的依赖库索引,将待加载so文件所需的依赖库添加到sopool池中。
22、对待加载so文件重定位表中所指的符号进行重定位,并修正初始化方法的虚地址。
23、调用soinfo初始化方法。
24、对JNI_onload方法进行反射调用,完成对待加载so文件的加载和注册。
基于同一发明构思,本申请实施例中还提供了一种与so文件保护方法对应的so文件保护装置、以及一种与so文件加载方法对应的so文件加载装置,由于这些装置解决问题的原理与本申请实施例so文件保护、so文件加载方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,为本申请实施例提供的so文件保护装置70结构图,包括:
获取模块701,用于获取待保护的so文件;
生成模块702,用于基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体,生成指定格式的so文件;
追加模块703,用于将指定格式的so文件追加至壳文件尾部;其中,壳文件中包含链接器程序;链接器程序用于将指定格式的so文件解析到指定形式的soinfo结构体中;
保存模块704,用于将壳文件以待保护的so文件的命名进行保存。
可选地,生成模块702,具体包括:
初始化单元,用于基于待保护的so文件对指定形式的soinfo结构体进行初始化;
重定位单元,用于根据初始化单元的初始化结果,对待保护的so文件依赖的函数在依赖库中的地址进行重定位;
生成单元,用于基于重定位后的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件。
可选地,初始化单元,包括:
映射子单元,用于将待保护的so文件映射到内存;
第一加载子单元,用于从内存中加载待保护的so文件;
读取子单元,用于读取待保护的so文件在节头结构体中的动态链接信息表信息;
初始化子单元,用于基于读取子单元读取的动态链接信息表信息,对指定形式的soinfo结构体进行初始化。
可选地,重定位单元,包括:
第二加载子单元,用于根据初始化后soinfo结构体中的依赖库索引,加载与待保护的so文件对应的依赖库;
重定位子单元,用于根据待保护的so文件中的重定位表,对该so文件依赖的函数在依赖库中的地址进行重定位。
可选地,生成单元,包括:
过滤子单元,用于对重定位后soinfo结构体中的系统导出符进行过滤;
生成子模块,用于基于过滤后的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件。
可选地,追加模块703,包括:
处理单元,用于对指定格式的so文件进行加密、压缩处理;
追加单元,用于将进行加密、压缩处理后的文件追加至壳文件尾部;壳文件中包含对指定格式的so文件进行解密的解密程序。
可选地,所述装置还包括:
确定模块705,用于确定壳文件的哈希消息认证码Hmac;
追加模块703,还用于将确定模块确定出的Hmac追加至壳文件的尾部。
如图8所示,为本申请实施例提供的so文件加载装置80结构图,包括:
第一加载模块801,用于加载壳文件;壳文件中包含有待加载的so文件和链接器程序,待加载的so文件是基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体生成的;
获取模块802,用于从壳文件中获取待加载的so文件;
解析模块803,用于执行链接器程序,将待加载的so文件解析到指定形式的soinfo结构体中;
第二加载模块804,用于基于解析出的指定形式的soinfo结构体和反射机制,加载待加载的so文件。
可选地,获取模块802,包括:
加载单元,用于在确定用户为合法用户后,加载壳文件得到进行压缩处理后的so文件;
解压缩单元,用于对so文件进行解压缩处理;
执行单元,用于执行解密程序,对解压缩处理后的so文件进行解密得到待加载的so文件。
可选地,链接器程序用于基于待加载的so文件对指定形式的soinfo结构体进行初始化;根据初始化结果,对待加载的so文件依赖的函数在依赖库中的地址进行重定位。
可选地,链接器程序用于将待加载的so文件映射到内存;从内存中加载待加载的so文件;读取待加载so文件在指定形式的节头结构体中的动态链接信息表信息;基于读取的动态链接信息表信息,对指定格式的soinfo结构体进行初始化。
可选地,链接器程序用于根据初始化后soinfo结构体中的依赖库索引,加载与待加载的so文件对应的依赖库;根据待加载的so文件中的重定位表,对该so文件依赖的函数在依赖库中的地址进行重定位。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (24)
1.一种共享动态链接库so文件保护方法,其特征在于,该方法包括:
获取待保护的so文件;
基于所述待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体,生成指定格式的so文件,所述指定格式的so文件不符合可执行连接格式;
将所述指定格式的so文件追加至壳文件尾部;其中,所述壳文件中包含链接器程序;所述链接器程序用于将所述指定格式的so文件解析到所述指定形式的soinfo结构体中;
将所述壳文件以所述待保护的so文件的命名进行保存。
2.如权利要求1所述的方法,其特征在于,基于所述待保护的so文件、指定形式的soinfo结构体和指定形式的节头结构体,生成指定格式的so文件,包括:
基于所述待保护的so文件对所述指定形式的soinfo结构体进行初始化;
根据初始化结果,对所述待保护的so文件依赖的函数在依赖库中的地址进行重定位;
基于重定位后的soinfo结构体和指定形式的节头结构体,生成所述指定格式的so文件。
3.如权利要求2所述的方法,其特征在于,基于所述待保护的so文件对所述指定形式的soinfo结构体进行初始化,包括:
将所述待保护的so文件映射到内存;
从内存中加载所述待保护的so文件;
读取所述待保护的so文件在节头结构体中的动态链接信息表信息;
基于读取的所述动态链接信息表信息,对所述指定形式的soinfo结构体进行初始化。
4.如权利要求2所述的方法,其特征在于,根据初始化结果,对所述待保护的so文件依赖的函数在依赖库中的地址进行重定位,包括:
根据初始化后soinfo结构体中的依赖库索引,加载与所述待保护的so文件对应的依赖库;
根据所述待保护的so文件中的重定位表,对该so文件依赖的函数在所述依赖库中的地址进行重定位。
5.如权利要求2所述的方法,其特征在于,基于重定位后的soinfo结构体和指定形式的节头结构体,生成所述指定格式的so文件:包括:
对重定位后所述soinfo结构体中的系统导出符进行过滤;
基于过滤后的soinfo结构体和指定形式的节头结构体,生成所述指定格式的so文件。
6.如权利要求1所述的方法,其特征在于,将所述指定格式的so文件追加至壳文件尾部,包括:
对所述指定格式的so文件进行加密、压缩处理;
将进行加密、压缩处理后的文件追加至所述壳文件尾部;所述壳文件中包含对所述指定格式的so文件进行解密的解密程序。
7.如权利要求1所述的方法,其特征在于,将所述壳文件以所述待保护的so文件的命名进行保存之前,所述方法还包括:
确定所述壳文件的哈希消息认证码Hmac;
将确定的所述Hmac追加至所述壳文件的尾部。
8.一种共享动态链接库so文件加载方法,其特征在于,该方法包括:
加载壳文件;所述壳文件中包含有待加载的so文件和链接器程序,所述待加载的so文件是基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体生成的,所述待加载的so文件不符合可执行连接格式;
从所述壳文件中获取待加载的so文件;并
执行所述链接器程序,将所述待加载的so文件解析到指定形式的soinfo结构体中;
基于解析出的指定形式的soinfo结构体和反射机制,加载所述待加载的so文件。
9.如权利要求8所述的方法,其特征在于,所述壳文件中包含有解密程序;从加载的所述壳文件中获取待加载的so文件,包括:
在确定用户为合法用户后,加载所述壳文件得到进行压缩处理后的so文件;
对所述so文件进行解压缩处理;
执行所述解密程序,对解压缩处理后的so文件进行解密得到所述待加载的so文件。
10.如权利要求8所述的方法,其特征在于,所述链接器程序用于:
基于所述待加载的so文件对所述指定形式的soinfo结构体进行初始化;
根据初始化结果,对所述待加载的so文件依赖的函数在依赖库中的地址进行重定位。
11.如权利要求10所述的方法,其特征在于,基于所述待加载的so文件对所述指定形式的soinfo结构体进行初始化,包括:
将所述待加载的so文件映射到内存;
从内存中加载所述待加载的so文件;
读取所述待加载so文件在指定形式的节头结构体中的动态链接信息表信息;
基于读取的所述动态链接信息表信息,对所述指定形式的soinfo结构体进行初始化。
12.如权利要求10所述的方法,其特征在于,根据初始化结果,对所述待加载的so文件依赖的函数在依赖库中的地址进行重定位,包括:
根据初始化后soinfo结构体中的依赖库索引,加载与所述待加载的so文件对应的依赖库;
根据所述待加载的so文件中的重定位表,对该so文件依赖的函数在所述依赖库中的地址进行重定位。
13.一种共享动态链接库so文件保护装置,其特征在于,该装置包括:
获取模块,用于获取待保护的so文件;
生成模块,用于基于所述待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体,生成指定格式的so文件,所述指定格式的so文件不符合可执行连接格式;
追加模块,用于将所述指定格式的so文件追加至壳文件尾部;其中,所述壳文件中包含链接器程序;所述链接器程序用于将所述指定格式的so文件解析到所述指定形式的soinfo结构体中;
保存模块,用于将所述壳文件以所述待保护的so文件的命名进行保存。
14.如权利要求13所述的装置,其特征在于,所述生成模块,具体包括:
初始化单元,用于基于所述待保护的so文件对所述指定形式的soinfo结构体进行初始化;
重定位单元,用于根据所述初始化单元的初始化结果,对所述待保护的so文件依赖的函数在依赖库中的地址进行重定位;
生成单元,用于基于重定位后的soinfo结构体和指定形式的节头结构体,生成所述指定格式的so文件。
15.如权利要求14所述的装置,其特征在于,所述初始化单元,包括:
映射子单元,用于将所述待保护的so文件映射到内存;
第一加载子单元,用于从内存中加载所述待保护的so文件;
读取子单元,用于读取所述待保护的so文件在节头结构体中的动态链接信息表信息;
初始化子单元,用于基于所述读取子单元读取的所述动态链接信息表信息,对所述指定形式的soinfo结构体进行初始化。
16.如权利要求14所述的装置,其特征在于,所述重定位单元,包括:
第二加载子单元,用于根据初始化后soinfo结构体中的依赖库索引,加载与所述待保护的so文件对应的依赖库;
重定位子单元,用于根据所述待保护的so文件中的重定位表,对该so文件依赖的函数在所述依赖库中的地址进行重定位。
17.如权利要求14所述的装置,其特征在于,所述生成单元,包括:
过滤子单元,用于对重定位后所述soinfo结构体中的系统导出符进行过滤;
生成子模块,用于基于过滤后的soinfo结构体和指定形式的节头结构体,生成所述指定格式的so文件。
18.如权利要求13所述的装置,其特征在于,所述追加模块,包括:
处理单元,用于对所述指定格式的so文件进行加密、压缩处理;
追加单元,用于将进行加密、压缩处理后的文件追加至所述壳文件尾部;所述壳文件中包含对所述指定格式的so文件进行解密的解密程序。
19.如权利要求13所述的装置,其特征在于,还包括确定模块,其中:
所述确定模块,用于确定所述壳文件的哈希消息认证码Hmac;
所述追加模块,还用于将所述确定模块确定出的所述Hmac追加至所述壳文件的尾部。
20.一种共享动态链接库so文件加载装置,其特征在于,该装置包括:
第一加载模块,用于加载壳文件;所述壳文件中包含有待加载的so文件和链接器程序,所述待加载的so文件是基于待保护的so文件、指定形式的共享动态链接库信息soinfo结构体和指定形式的节头结构体生成的,所述待加载的so文件不符合可执行连接格式;
获取模块,用于从所述壳文件中获取待加载的so文件;
解析模块,用于执行所述链接器程序,将所述待加载的so文件解析到指定形式的soinfo结构体中;
第二加载模块,用于基于解析出的指定形式的soinfo结构体和反射机制,加载所述待加载的so文件。
21.如权利要求20所述的装置,其特征在于,所述壳文件中包含有解密程序;所述获取模块,包括:
加载单元,用于在确定用户为合法用户后,加载所述壳文件得到进行压缩处理后的so文件;
解压缩单元,用于对所述so文件进行解压缩处理;
执行单元,用于执行所述解密程序,对解压缩处理后的so文件进行解密得到所述待加载的so文件。
22.如权利要求20所述的装置,其特征在于,所述链接器程序用于基于所述待加载的so文件对所述指定形式的soinfo结构体进行初始化;根据初始化结果,对所述待加载的so文件依赖的函数在依赖库中的地址进行重定位。
23.如权利要求22所述的装置,其特征在于,所述链接器程序用于将所述待加载的so文件映射到内存;从内存中加载所述待加载的so文件;读取所述待加载so文件在指定形式的节头结构体中的动态链接信息表信息;基于读取的所述动态链接信息表信息,对所述指定形式的soinfo结构体进行初始化。
24.如权利要求22所述的装置,其特征在于,所述链接器程序用于根据初始化后soinfo结构体中的依赖库索引,加载与所述待加载的so文件对应的依赖库;根据所述待加载的so文件中的重定位表,对该so文件依赖的函数在所述依赖库中的地址进行重定位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710197849.6A CN108664796B (zh) | 2017-03-29 | 2017-03-29 | 一种so文件保护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710197849.6A CN108664796B (zh) | 2017-03-29 | 2017-03-29 | 一种so文件保护方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108664796A CN108664796A (zh) | 2018-10-16 |
CN108664796B true CN108664796B (zh) | 2020-06-05 |
Family
ID=63786131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710197849.6A Active CN108664796B (zh) | 2017-03-29 | 2017-03-29 | 一种so文件保护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108664796B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109960902B (zh) * | 2019-04-08 | 2021-04-06 | 北京智游网安科技有限公司 | 一种动态链接库的安全防护方法、存储介质及终端设备 |
CN110046504B (zh) * | 2019-04-22 | 2021-04-06 | 北京智游网安科技有限公司 | 基于Linker的SO文件隐藏方法、储存介质及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102725730A (zh) * | 2009-12-18 | 2012-10-10 | 赛丹思科大学 | 用于静态键入的基于类的面向对象的软件的非阻挡动态更新的方法、计算机程序产品和系统 |
CN106203006A (zh) * | 2016-08-31 | 2016-12-07 | 北京鼎源科技有限公司 | 基于dex与so文件动态执行的Android应用加固方法 |
-
2017
- 2017-03-29 CN CN201710197849.6A patent/CN108664796B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108664796A (zh) | 2018-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9858072B2 (en) | Portable executable file analysis | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
CN104462959B (zh) | 一种安卓应用的加固保护方法、服务器和系统 | |
US10586026B2 (en) | Simple obfuscation of text data in binary files | |
CN104239757B (zh) | 应用程序防止逆向的方法及装置、运行方法及终端 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN103530535A (zh) | 一种Android平台应用程序保护的加脱壳方法 | |
WO2016078130A1 (zh) | 一种防逆向apk文件的动态加载方法 | |
CN108399319B (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN107291485B (zh) | 动态链接库的加固方法、运行方法、加固装置和安全系统 | |
CN104317625A (zh) | 一种apk文件的动态加载方法 | |
US20150095653A1 (en) | Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package | |
CN107077540B (zh) | 用于提供基于云的应用安全服务的方法和系统 | |
US20110271350A1 (en) | method for protecting software | |
CN108664796B (zh) | 一种so文件保护方法及装置 | |
CN110633073B (zh) | 基于Il2cpp编译的Unity代码混淆的方法 | |
CN116522368A (zh) | 一种物联网设备固件解密解析方法、电子设备、介质 | |
CN109165512A (zh) | 一种应用程序的意图协议url漏洞检测方法及装置 | |
CN114139117A (zh) | 应用程序加固方法、装置、电子设备及存储介质 | |
CN110764782B (zh) | 软件的保护方法及装置 | |
US11061998B2 (en) | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
US20200183675A1 (en) | Image file packaging method and image file packaging system | |
US9965621B2 (en) | Program protection device | |
CN109492353B (zh) | 应用加固方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |