CN111984940A - So文件的加固方法、装置、电子设备和存储介质 - Google Patents
So文件的加固方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN111984940A CN111984940A CN201910429838.5A CN201910429838A CN111984940A CN 111984940 A CN111984940 A CN 111984940A CN 201910429838 A CN201910429838 A CN 201910429838A CN 111984940 A CN111984940 A CN 111984940A
- Authority
- CN
- China
- Prior art keywords
- file
- segment
- reinforced
- preset
- segments
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 230000003014 reinforcing effect Effects 0.000 title claims abstract description 16
- 230000004927 fusion Effects 0.000 claims abstract description 20
- 230000000694 effects Effects 0.000 abstract description 5
- 230000002787 reinforcement Effects 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 238000009434 installation Methods 0.000 description 4
- 230000003068 static effect Effects 0.000 description 3
- 230000006837 decompression Effects 0.000 description 2
- 238000005336 cracking Methods 0.000 description 1
- 238000007499 fusion processing Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了SO文件的加固方法、装置、电子设备和存储介质。所述方法包括:获取待加固的SO文件;基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,所述预置的SO文件包括防攻击逻辑。该技术方案的有益效果在于,对于众多待加固的SO文件,只需要预置一个或多个保护防攻击逻辑的SO文件,通过SO文件的融合实现加固,提供了一种可独立于开发过程外的SO文件保护手段,并且实现起来较为便捷,也能够起到不错的保护效果。
Description
技术领域
本发明涉及信息安全领域,具体涉及SO文件的加固方法、装置、电子设备和存储介质。
背景技术
SO文件是指.so格式的动态链接库文件,在安卓应用程序中得到了广泛的应用,也因此成为了安卓应用程序破解过程中的重点关注对象,因此如何对SO文件进行保护是需要解决的问题,如果开发者既需要关注SO文件所需要实现的功能,又需要考虑如何对其进行保护,无疑增加了开发成本,然而如果以独立的过程实现对SO文件的保护,如何给出一种保护效果好的保护方案又是新的挑战。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的SO文件的加固方法、装置、电子设备和存储介质。
依据本发明的一个方面,提供了一种动态链接库SO文件的加固方法,包括:
获取待加固的SO文件;
基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;
其中,所述预置的SO文件包括防攻击逻辑。
可选地,所述基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件包括:
对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
可选地,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
可选地,所述指定类型的段包括:PT_LOAD类型的段;
所述对指定类型的段进行合并包括:将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
可选地,所述指定类型的段包括:与动态链接相关的段。
可选地,所述与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;
所述对指定类型的段进行合并包括:去除重复的符号和字符串。
可选地,所述去除重复的符号和字符串包括:
若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使所述加固后的SO文件在被加载后,根据所述防攻击逻辑调用保存的该JNI_Onload的地址。
可选地,所述与动态链接相关的段包括:与重定位表对应的段;
所述对指定类型的段进行合并包括:对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;
所述防攻击逻辑用于在所述加固后的SO文件被加载后,对加密后的重定位表进行解密。
可选地,所述加密和所述解密的密钥是根据包含所述加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;
所述防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
可选地,所述将所述待加固的SO文件与预置的SO文件进行融合还包括:
根据合并后的段生成新的相关段;
将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。
可选地,所述将所述待加固的SO文件与预置的SO文件进行融合还包括:
抹去所述待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:
新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。
依据本发明的另一方面,提供了一种动态链接库SO文件的加固装置,包括:
获取单元,适于获取待加固的SO文件;
融合单元,适于基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,所述预置的SO文件包括防攻击逻辑。
可选地,所述融合单元,适于对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
可选地,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
可选地,所述指定类型的段包括:PT_LOAD类型的段;
所述融合单元,适于将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
可选地,所述指定类型的段包括:与动态链接相关的段。
可选地,所述与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;
所述融合单元,适于去除重复的符号和字符串。
可选地,所述融合单元,适于若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使所述加固后的SO文件在被加载后,根据所述防攻击逻辑调用保存的该JNI_Onload的地址。
可选地,所述与动态链接相关的段包括:与重定位表对应的段;
所述融合单元,适于对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;所述防攻击逻辑用于在所述加固后的SO文件被加载后,对加密后的重定位表进行解密。
可选地,所述加密和所述解密的密钥是根据包含所述加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;所述防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
可选地,所述融合单元,适于根据合并后的段生成新的相关段;将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。
可选地,所述融合单元,适于抹去所述待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。
依据本发明的又一方面,提供了一种电子设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述任一所述的方法。
依据本发明的再一方面,提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如上述任一所述的方法。
由上述可知,本发明的技术方案,在获取到待加固的SO文件后,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。该技术方案的有益效果在于,对于众多待加固的SO文件,只需要预置一个或多个保护防攻击逻辑的SO文件,通过SO文件的融合实现加固,提供了一种可独立于开发过程外的SO文件保护手段,并且实现起来较为便捷,也能够起到不错的保护效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种动态链接库SO文件的加固方法的流程示意图;
图2示出了根据本发明一个实施例的一种动态链接库SO文件的加固装置的结构示意图;
图3示出了根据本发明一个实施例的电子设备的结构示意图;
图4示出了根据本发明一个实施例的计算机可读存储介质的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种动态链接库SO文件的加固方法的流程示意图。如图1所示,该方法包括:
步骤S110,获取待加固的SO文件。其中SO文件可以是包含在安卓应用程序安装包(.apk格式)中,通过解压缩得到的。
步骤S120,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。
预置的SO文件可以有一个或多个,包含的防攻击逻辑以及其他功能可以有所区别,在具体实施时从中选择出一个符合需求的即可,最终基于SO文件的动态视图,将选择出的SO文件与待加固的SO文件进行融合,从而实现了对待加固的SO文件的保护。
SO文件具体是一种ELF文件格式,而ELF文件可以分为静态视图和动态视图。从静态视图看ELF文件,ELF文件由多个节区组成,不同的节区拥有不同的名称、权限等。从动态视图看ELF文件,ELF文件由多个段组成,每一个段都拥有不同的权限及名称。如下表所示,表1左边为ELF文件的静态视图,右边为ELF文件的动态视图,可以看出一个段是对多个具有相同权限的节区的集合。
表1
本发明中采用基于SO文件的动态视图的方式进行SO文件的融合,原因在于SO文件在被使用时是基于其动态链接库的属性,而被加固后,需要保证调用待加固的SO文件的应用程序仍可以成功调用到加固后的SO文件。由于在动态视图下可以获取SO文件的各段中的数据,而这些数据也与动态链接库有关,从而在保证融合效率的同时也能够准确保证数据不丢失,实现成功融合并完成对待加固SO文件的保护。
可见,图1所示的方法,在获取到待加固的SO文件后,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。该技术方案的有益效果在于,对于众多待加固的SO文件,只需要预置一个或多个保护防攻击逻辑的SO文件,通过SO文件的融合实现加固,提供了一种可独立于开发过程外的SO文件保护手段,并且实现起来较为便捷,也能够起到不错的保护效果。
在本发明的一个实施例中,上述方法中,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件包括:对待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
SO文件中有很多类型的段,这里对一些动态链接中用到的段,进行简单的说明:
.dynamic段:记录了和动态链接有关的段的类型、地址或数值。
.rel.plt段:是重定位表,记录符号表索引和重定位地址。
.rel.dyn段:与.rel.plt段类似,.rel.dyn对数据引用进行重定位。
.dynsym段:动态链接符号表,存放动态链接相关的符号。
.hash段:提高符号检索的效率。
.init/.init_array段:动态链接器在执行程序main函数之前会首先执行这两个段中的代码。
.fini/.fini_array段:类似的,动态链接器最后会执行这两个段中的代码。
本发明的实施例中,可以对上述的一个或多个段进行合并。在解析时,可以参考安卓Linker加载SO文件时的处理,来得到解析结果。具体地,在本发明的一个实施例中,上述方法中,解析结果包括如下的一种或多种信息:SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
上述解析结果可以保存在一个自定义的soinfo结构体中。
在本发明的一个实施例中,上述方法中,指定类型的段包括:PT_LOAD类型的段;对指定类型的段进行合并包括:将从预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从待加固的SO文件中解析出的段表信息中,得到新段表信息。
以安卓系统为例,在加载SO文件时,会将SO文件中所有类型为PT_LOAD的段加载到内存中,其他类型的段则不会加载。所以在融合两个SO文件时,主要将两个so中所有类型为PT_LOAD的段进行合并即可,然后还可以对动态链接有关的段进行合并,比如.dynamic、.dynsym等。即在本发明的一个实施例中,上述方法中,指定类型的段包括:与动态链接相关的段。
下面分别介绍本发明所给出的,对于不同的与动态链接相关的段的处理示例。
在本发明的一个实施例中,上述方法中,与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;对指定类型的段进行合并包括:去除重复的符号和字符串。具体相关的段包括.dynsym段。符号和字符串对应于应用程序在调用SO文件的过程中所使用的函数等。
在本发明的一个实施例中,上述方法中,去除重复的符号和字符串包括:若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使加固后的SO文件在被加载后,根据防攻击逻辑调用保存的该JNI_Onload的地址。
JNI_Onload是与SO文件加载相关的函数,对于一个SO文件而言应当仅有一个。应用程序需要调用待加固的SO文件,但实际上调用的是加固后的SO文件,这样不能直接使用到待加固的SO文件中的函数,因此,在融合过程中,先将待加固的SO文件中JNI_Onload名称进行替换并保存该JNI_Onload的地址,在应用程序需要待加固的SO文件时,由预置的SO文件中的防攻击逻辑调用保存的JNI_Onload的地址,这样就完成了加载。
在本发明的一个实施例中,上述方法中,与动态链接相关的段包括:与重定位表对应的段;对指定类型的段进行合并包括:对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;防攻击逻辑用于在加固后的SO文件被加载后,对加密后的重定位表进行解密。
具体可以涉及.rel.plt段和.rel.dyn段,这两个段中的内容重要,也是SO文件破解的重点关注对象,因此在本发明的实施例中还可以对其进行加密,而使用时,再进行解密以保证功能的正常实现。另外,由于预置的SO文件的起始虚拟地址被改变了,所以在合并重定位表时,还需要对重定位表的偏移量offset进行修正。
在本发明的一个实施例中,上述方法中,加密和解密的密钥是根据包含加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
采用包含加固后的SO文件的应用的包名和/或签名文件的MD5值生成的密钥可以保证加固后的SO文件的调用者必须是原应用,而非其他破解者,如果是非法应用调用SO文件,则会获取到错误的包名或签名文件,导致解密失败,应用崩溃。为了进一步加强防范,防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
这里还需要说明的是,上述实施例中介绍的防攻击逻辑的具体细节仅是对相关应用场景的一些介绍,容易理解在具体实施中可以根据需求添加更多的防攻击逻辑。
在本发明的一个实施例中,上述方法中,将待加固的SO文件与预置的SO文件进行融合还包括:根据合并后的段生成新的相关段;将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。这样也是保证在加固后的SO文件被加载时会将所需的这些信息全部加载到内存中。相关段可以包括.dynamic段、.hash段等。
另外,还可以提取合并依赖的SO文件,去除重复依赖的SO文件名称,合并两个SO文件所依赖的其他SO文件的名称。
在本发明的一个实施例中,上述方法中,将待加固的SO文件与预置的SO文件进行融合还包括:抹去待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。其中抹去原SO文件的ELF头信息和段表信息,并且在新文件中填充空字节,这样会导致在内存中的新SO文件没有ELF头信息,如果攻击者dump内存,会给攻击者的分析增加难度。
下面以一个具体示例进行介绍:
首先,通过前端页面等方式获取到安卓应用程序的安装包,对其进行解包得到待加固的SO文件。从库中选择出一个预置的SO文件,二者进行融合。
步骤a)解析SO文件:仿照Linker加载SO文件的流程,对SO文件进行解析,将解析的结果存在自定义的soinfo结构体中,该结构体里有SO文件的加载地址、SO文件的ELF头信息、段表信息、以及各个段的起始地址和大小。
步骤b)合并so文件,具体地:
i.复制ELF头信息和合并段表信息。复制A.so(待加固的SO文件)的ELF头和段表信息,并将B.so(预置的保护防攻击逻辑的SO文件)的类型为PT_LOAD的段表信息添加到复制后的段表信息中,即新增几个段表,用B里类型为PT_LOAD的段表来填充。
ii.提取合并符号表和字符串表。将两个SO文件中的符号表和字符串表进行合并,去除重复的符号和字符串,从而形成新的符号表和字符串表,如果A.so存在JNI_OnLoad,则将其换一个名称,如JNI_OnLaad,然后保存A.so的JNI_OnLoad的地址,目的是为了只保留B.so的JNI_OnLoad。
iii.提取合并重定位表。对两个SO文件中的重定位表进行合并,包括.rel.plt和.rel.dyn,由于第二个SO文件的起始虚拟地址被改变了,所以在合并重定位表时,还需要对重定位表的offset进行修正;
iv.提取合并.init/.init_array和.fini/.fini_array。
v.提取合并依赖的SO文件。去除重复依赖的SO文件的名称,合并两个SO文件所依赖的其他SO文件的名称。
步骤c)生成新so文件,具体地:
i.根据新的符号表和字符串表生成新的Hash表。
ii.生成新的.dynamic段。
iii.对A.so的.rel.plt进行加密。
iv.将新生成的.dynamic段、符号表、.hash段、.init/.init_array段、.fini/.fini_array段、重定位表合并在一个PT_LOAD段,该PT_LOAD段为新增加的段。
v.生成新节区头和节区;
vi.抹去原so的ELF头信息和段表信息,并修改复制后的ELF头信息和段表信息。
vii.写入文件。写入顺序为:新ELF头->新段表->(……填充空字节到4096字节)->A.so->B.so->新PT_LOAD段->新节区头和节区。
由于A.so和B.so的ELF头和段表均被抹去,所以就多出来了很多空间,可以用来保存A.so的JNI_OnLoad的地址。
图2示出了根据本发明一个实施例的一种动态链接库SO文件的加固装置的结构示意图。如图2所示,动态链接库SO文件的加固装置200包括:
获取单元210,适于获取待加固的SO文件。其中SO文件可以是包含在安卓应用程序安装包(.apk格式)中,通过解压缩得到的。
融合单元220,适于基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。预置的SO文件可以有一个或多个,包含的防攻击逻辑以及其他功能可以有所区别,在具体实施时从中选择出一个符合需求的即可,最终基于SO文件的动态视图,将选择出的SO文件与待加固的SO文件进行融合,从而实现了对待加固的SO文件的保护。
可见,图2所示的装置,通过各单元的相互配合,在获取到待加固的SO文件后,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。该技术方案的有益效果在于,对于众多待加固的SO文件,只需要预置一个或多个保护防攻击逻辑的SO文件,通过SO文件的融合实现加固,提供了一种可独立于开发过程外的SO文件保护手段,并且实现起来较为便捷,也能够起到不错的保护效果。
在本发明的一个实施例中,上述装置中,融合单元220,适于对待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
在本发明的一个实施例中,上述装置中,解析结果包括如下的一种或多种信息:SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
在本发明的一个实施例中,上述装置中,指定类型的段包括:PT_LOAD类型的段;融合单元220,适于将从预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从待加固的SO文件中解析出的段表信息中,得到新段表信息。
在本发明的一个实施例中,上述装置中,指定类型的段包括:与动态链接相关的段。
在本发明的一个实施例中,上述装置中,与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;融合单元220,适于去除重复的符号和字符串。
在本发明的一个实施例中,上述装置中,融合单元220,适于若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使加固后的SO文件在被加载后,根据防攻击逻辑调用保存的该JNI_Onload的地址。
在本发明的一个实施例中,上述装置中,与动态链接相关的段包括:与重定位表对应的段;融合单元220,适于对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;防攻击逻辑用于在加固后的SO文件被加载后,对加密后的重定位表进行解密。
在本发明的一个实施例中,上述装置中,加密和解密的密钥是根据包含加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
在本发明的一个实施例中,上述装置中,融合单元220,适于根据合并后的段生成新的相关段;将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。
在本发明的一个实施例中,上述装置中,融合单元220,适于抹去待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。
需要说明的是,上述各装置实施例的具体实施方式可以参照前述对应方法实施例的具体实施方式进行,在此不再赘述。
综上所述,本发明的技术方案,在获取到待加固的SO文件后,基于SO文件的动态视图,将待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,预置的SO文件包括防攻击逻辑。该技术方案的有益效果在于,对于众多待加固的SO文件,只需要预置一个或多个保护防攻击逻辑的SO文件,通过SO文件的融合实现加固,提供了一种可独立于开发过程外的SO文件保护手段,并且实现起来较为便捷,也能够起到不错的保护效果。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的动态链接库SO文件的加固装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图3示出了根据本发明一个实施例的电子设备的结构示意图。该电子设备300包括处理器310和被安排成存储计算机可执行指令(计算机可读程序代码)的存储器320。存储器320可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器320具有存储用于执行上述方法中的任何方法步骤的计算机可读程序代码331的存储空间330。例如,用于存储计算机可读程序代码的存储空间330可以包括分别用于实现上面的方法中的各种步骤的各个计算机可读程序代码331。计算机可读程序代码331可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图4所述的计算机可读存储介质。图4示出了根据本发明一个实施例的一种计算机可读存储介质的结构示意图。该计算机可读存储介质400存储有用于执行根据本发明的方法步骤的计算机可读程序代码331,可以被电子设备300的处理器310读取,当计算机可读程序代码331由电子设备300运行时,导致该电子设备300执行上面所描述的方法中的各个步骤,具体来说,该计算机可读存储介质存储的计算机可读程序代码331可以执行上述任一实施例中示出的方法。计算机可读程序代码331可以以适当形式进行压缩。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明的实施例公开了A1、一种动态链接库SO文件的加固方法,包括:
获取待加固的SO文件;
基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;
其中,所述预置的SO文件包括防攻击逻辑。
A2、如A1所述的方法,其中,所述基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件包括:
对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
A3、如A2所述的方法,其中,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
A4、如A2所述的方法,其中,所述指定类型的段包括:PT_LOAD类型的段;
所述对指定类型的段进行合并包括:将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
A5、如A2所述的方法,其中,所述指定类型的段包括:与动态链接相关的段。
A6、如A5所述的方法,其中,所述与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;
所述对指定类型的段进行合并包括:去除重复的符号和字符串。
A7、如A6所述的方法,其中,所述去除重复的符号和字符串包括:
若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使所述加固后的SO文件在被加载后,根据所述防攻击逻辑调用保存的该JNI_Onload的地址。
A8、如A5所述的方法,其中,所述与动态链接相关的段包括:与重定位表对应的段;
所述对指定类型的段进行合并包括:对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;
所述防攻击逻辑用于在所述加固后的SO文件被加载后,对加密后的重定位表进行解密。
A9、如A8所述的方法,其中,所述加密和所述解密的密钥是根据包含所述加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;
所述防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
A10、如A2所述的方法,其中,所述将所述待加固的SO文件与预置的SO文件进行融合还包括:
根据合并后的段生成新的相关段;
将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。
A11、如A1所述的方法,其中,所述将所述待加固的SO文件与预置的SO文件进行融合还包括:
抹去所述待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:
新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。
本发明的实施例还公开了B12、一种动态链接库SO文件的加固装置,包括:
获取单元,适于获取待加固的SO文件;
融合单元,适于基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,所述预置的SO文件包括防攻击逻辑。
B13、如B12所述的装置,其中,
所述融合单元,适于对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
B14、如B13所述的装置,其中,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
B15、如B13所述的装置,其中,所述指定类型的段包括:PT_LOAD类型的段;
所述融合单元,适于将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
B16、如B13所述的装置,其中,所述指定类型的段包括:与动态链接相关的段。
B17、如B16所述的装置,其中,所述与动态链接相关的段包括:与符号表对应的段以及与字符串表对应的段;
所述融合单元,适于去除重复的符号和字符串。
B18、如B17所述的装置,其中,
所述融合单元,适于若待加固的SO文件中存在JNI_Onload,则将其名称进行替换并保存该JNI_Onload的地址,以使所述加固后的SO文件在被加载后,根据所述防攻击逻辑调用保存的该JNI_Onload的地址。
B19、如B16所述的装置,其中,所述与动态链接相关的段包括:与重定位表对应的段;
所述融合单元,适于对重定位表的偏移量进行修正,以及对待加固的SO文件的重定位表进行加密;所述防攻击逻辑用于在所述加固后的SO文件被加载后,对加密后的重定位表进行解密。
B20、如B19所述的装置,其中,所述加密和所述解密的密钥是根据包含所述加固后的SO文件的应用的包名和/或签名文件的MD5值生成的;所述防攻击逻辑还用于防止获取应用包名和/或签名文件的接口被hook。
B21、如B14所述的装置,其中,
所述融合单元,适于根据合并后的段生成新的相关段;将生成新的相关段以及合并后的段,合并在一个新PT_LOAD段。
B22、如B13所述的装置,其中,
所述融合单元,适于抹去所述待加固的SO文件的ELF头信息和段表信息,以如下顺序将信息写入目标SO文件中,得到加固后的SO文件:新ELF头信息、新段表信息、空字节、待加固的SO文件以及预置的SO文件的全部内容、新PT_LOAD段、新节区头和节区。
本发明的实施例还公开了C23、一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如A1-A11中任一项所述的方法。
本发明的实施例还公开了D24、一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如A1-A11中任一项所述的方法。
Claims (10)
1.一种动态链接库SO文件的加固方法,包括:
获取待加固的SO文件;
基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;
其中,所述预置的SO文件包括防攻击逻辑。
2.如权利要求1所述的方法,其中,所述基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件包括:
对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
3.如权利要求2所述的方法,其中,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
4.如权利要求2所述的方法,其中,所述指定类型的段包括:PT_LOAD类型的段;
所述对指定类型的段进行合并包括:将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
5.一种动态链接库SO文件的加固装置,包括:
获取单元,适于获取待加固的SO文件;
融合单元,适于基于SO文件的动态视图,将所述待加固的SO文件与预置的SO文件进行融合,得到加固后的SO文件;其中,所述预置的SO文件包括防攻击逻辑。
6.如权利要求5所述的装置,其中,
所述融合单元,适于对所述待加固的SO文件和预置的SO文件分别进行解析,基于解析结果对指定类型的段进行合并。
7.如权利要求6所述的装置,其中,所述解析结果包括如下的一种或多种信息:
SO文件的加载地址、SO文件的ELF头信息、SO的段表信息、SO文件中各段的起始地址、SO文件中各段的大小。
8.如权利要求6所述的装置,其中,所述指定类型的段包括:PT_LOAD类型的段;
所述融合单元,适于将从所述预置的SO文件中解析出的类型为PT_LOAD的段表信息,添加到从所述待加固的SO文件中解析出的段表信息中,得到新段表信息。
9.一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如权利要求1-4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910429838.5A CN111984940A (zh) | 2019-05-22 | 2019-05-22 | So文件的加固方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910429838.5A CN111984940A (zh) | 2019-05-22 | 2019-05-22 | So文件的加固方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111984940A true CN111984940A (zh) | 2020-11-24 |
Family
ID=73436967
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910429838.5A Pending CN111984940A (zh) | 2019-05-22 | 2019-05-22 | So文件的加固方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111984940A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070234002A1 (en) * | 2006-04-04 | 2007-10-04 | Litke Adam G | Method and apparatus for temporary mapping of executable program segments |
CN105608391A (zh) * | 2015-12-17 | 2016-05-25 | 北京奇虎科技有限公司 | 多elf文件保护方法及系统 |
CN106203006A (zh) * | 2016-08-31 | 2016-12-07 | 北京鼎源科技有限公司 | 基于dex与so文件动态执行的Android应用加固方法 |
CN106355049A (zh) * | 2016-08-19 | 2017-01-25 | 北京奇虎科技有限公司 | 一种加固安卓安装包的动态链接库so文件的方法和装置 |
CN106874715A (zh) * | 2016-12-30 | 2017-06-20 | 上海掌门科技有限公司 | 一种防逆向破解的加密方法及系统 |
CN107291485A (zh) * | 2016-04-11 | 2017-10-24 | 北京京东尚科信息技术有限公司 | 动态链接库的加固方法、运行方法、加固装置和安全系统 |
-
2019
- 2019-05-22 CN CN201910429838.5A patent/CN111984940A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070234002A1 (en) * | 2006-04-04 | 2007-10-04 | Litke Adam G | Method and apparatus for temporary mapping of executable program segments |
CN105608391A (zh) * | 2015-12-17 | 2016-05-25 | 北京奇虎科技有限公司 | 多elf文件保护方法及系统 |
CN107291485A (zh) * | 2016-04-11 | 2017-10-24 | 北京京东尚科信息技术有限公司 | 动态链接库的加固方法、运行方法、加固装置和安全系统 |
CN106355049A (zh) * | 2016-08-19 | 2017-01-25 | 北京奇虎科技有限公司 | 一种加固安卓安装包的动态链接库so文件的方法和装置 |
CN106203006A (zh) * | 2016-08-31 | 2016-12-07 | 北京鼎源科技有限公司 | 基于dex与so文件动态执行的Android应用加固方法 |
CN106874715A (zh) * | 2016-12-30 | 2017-06-20 | 上海掌门科技有限公司 | 一种防逆向破解的加密方法及系统 |
Non-Patent Citations (1)
Title |
---|
孙侃: "移动应用APP全生命周期安全管理", 《运行与维护》, 15 September 2018 (2018-09-15), pages 140 - 143 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8844049B2 (en) | Method for generating a cryptographic key for a protected digital data object on the basis of current components of a computer | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
CN110096853B (zh) | 基于Mono的Unity安卓应用加固方法、存储介质 | |
CN107977552B (zh) | 一种安卓应用的加固方法和装置 | |
CN106599629B (zh) | 一种安卓应用程序加固方法及装置 | |
CN103530535A (zh) | 一种Android平台应用程序保护的加脱壳方法 | |
US20200192826A1 (en) | Flash Translation Layer with Hierarchical Security | |
US8983072B2 (en) | Portable data carrier featuring secure data processing | |
US20080282355A1 (en) | Document container data structure and methods thereof | |
US20110271350A1 (en) | method for protecting software | |
EP3522049A1 (en) | Data protection method for chip rewriting equipment, electronic equipment and storage medium | |
CN112035803B (zh) | 一种基于Windows平台软件的保护方法及装置 | |
CN110298175A (zh) | 一种dll文件的处理方法及相关装置 | |
CN111984940A (zh) | So文件的加固方法、装置、电子设备和存储介质 | |
CN108664796B (zh) | 一种so文件保护方法及装置 | |
CN111198692A (zh) | 一种安装包的生成方法和装置 | |
CN110764782B (zh) | 软件的保护方法及装置 | |
CN114329568A (zh) | 文件加密方法、装置、系统平台及文件解密方法 | |
US11061998B2 (en) | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object | |
US20200183675A1 (en) | Image file packaging method and image file packaging system | |
US9965621B2 (en) | Program protection device | |
CN113127810A (zh) | 数据资产的保护方法、装置、电子设备和存储介质 | |
CN109492353B (zh) | 应用加固方法、装置、电子设备和存储介质 | |
CN108897994B (zh) | 隐藏导入表的方法、装置、存储介质和计算机设备 | |
CN110321672B (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 |