CN113568680B - 应用程序的动态链接库保护方法、装置、设备及介质 - Google Patents
应用程序的动态链接库保护方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN113568680B CN113568680B CN202110836816.8A CN202110836816A CN113568680B CN 113568680 B CN113568680 B CN 113568680B CN 202110836816 A CN202110836816 A CN 202110836816A CN 113568680 B CN113568680 B CN 113568680B
- Authority
- CN
- China
- Prior art keywords
- dynamic link
- link library
- library file
- directory
- file
- 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
- 238000000034 method Methods 0.000 title claims abstract description 71
- 238000009434 installation Methods 0.000 claims abstract description 42
- 230000006870 function Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 4
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 12
- 230000004048 modification Effects 0.000 description 9
- 238000012986 modification Methods 0.000 description 9
- 230000001965 increasing effect Effects 0.000 description 7
- 230000003068 static effect Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 241001634817 Cydia Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本公开的实施例提供了一种应用程序的动态链接库保护方法、装置、设备及介质,涉及计算机技术领域。所述方法包括:将应用安装包中所有的原始动态链接库加密存储至预设目录下,应用程序运行时再从预设目录中进行解密,并将原始动态链接库的加载路径重定向为解密后的动态链接库所在路径,以使应用程序运行时加载解密后的动态链接库。可见,实施本公开实施例可以使得分析者无法直接对解密后的动态链接库进行分析得到原始动态链接库,提高了原始动态链接库的安全性,以及提高了动态链接库保护的兼容性。
Description
技术领域
本公开的实施方式涉及计算机技术领域,更具体地,本公开的实施方式涉及应用程序的动态链接库保护方法、应用程序的动态链接库保护装置、电子设备以及计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
动态链接库so(shared object,共享库)是Linux操作***中一种常见的可执行代码的二进制格式,相比静态链接库来说,有节省空间,运行时能够动态申请并调用等特点。
Android操作***本质上属于Linux操作***的一种。目前,Android操作***中的应用程序加载动态链接库时,需要预先将编译好的动态链接库存储在Android***指定目录下,使得应用程序运行时能够从该指定目录中加载动态链接库。由于动态链接库存在容易被逆向而暴露核心代码的安全隐患,因此,在开发动态链接库的过程中,可以对动态链接库进行保护。例如,可以对动态链接库进行加密和压缩处理以加固动态链接库,也可以将动态链接库源代码进行混淆,通过增加代码逻辑的复杂度,实现动态链接库的保护。但是,相关技术中对动态链接库进行保护后,仍然可以通过静态注入等方式进行破解,导致动态链接库的保护效果较差。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
基于上述问题,发明人进行了相应的思考,做出了有针对性的改进,提供了应用程序的动态链接库保护方法、应用程序的动态链接库保护装置、电子设备以及计算机可读存储介质,可以通过将应用安装包中所有的原始动态链接库加密存储至预设目录下,应用程序运行时再从预设目录中进行解密,并将原始动态链接库的加载路径重定向为解密后的动态链接库所在路径,以使应用程序运行时加载解密后的动态链接库,使得分析者无法直接对解密后的动态链接库进行分析得到原始动态链接库,提高了原始动态链接库的安全性。
根据本公开实施例的第一方面,公开了一种应用程序的动态链接库保护方法,包括:
加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;
所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;
将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
在一个实施例中,基于前述方案,所述应用程序运行前,上述方法还包括:
向所述应用安装包中添加预设的壳文件和壳动态链接库文件,所述壳文件用于加载所述壳动态链接库文件,所述壳动态链接库文件用于存储所述应用程序运行时所需的代码。
在一个实施例中,基于前述方案,所述第一动态链接库文件包括原始动态链接库文件和所述壳动态链接库文件;
所述加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中,包括:
将所述原始目录中的原始动态链接库文件和壳动态链接库文件进行加密处理;
将加密后的原始动态链接库文件和壳动态链接库文件存储至所述预设目录中。
在一个实施例中,基于前述方案,上述方法还包括:
反编译所述应用安装包中的应用配置清单文件,获取所述应用程序的运行入口点;
将所述预设的壳文件设置为所述应用程序的运行入口点。
在一个实施例中,基于前述方案,所述将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中,包括:
响应于对所述壳文件的执行操作,将所述第二动态链接库文件中的壳动态链接库文件从所述预设目录下解密;
加载解密后的壳动态链接库文件,并在所述解密后的壳动态链接库文件中将所述第二动态链接库文件中的原始动态链接库文件进行解密;
将所述解密后的原始动态链接库文件存储到所述目标目录中。
在一个实施例中,基于前述方案,加载所述解密后的壳动态链接库文件前,上述方法还包括:
将所述解密后的壳动态链接库文件存储到所述目标目录中;
获取所述原始目录中第一动态链接库文件的加载路径;
在所述加载路径中添加所述目标目录,以从所述目标目录中加载所述解密后的壳动态链接库文件。
在一个实施例中,基于前述方案,加密应用安装包原始目录中的第一动态链接库文件后,上述方法还包括:
删除所述原始目录中的第一动态链接库文件,并创建与所述原始动态链接库文件对应的伪动态链接库文件,所述伪动态链接库文件包括所述原始动态链接库文件的部分内容。
在一个实施例中,基于前述方案,所述将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,包括:
利用钩子函数拦截用于调用所述伪动态链接库文件的加载函数,并将所述伪动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以从所述目标目录中加载所述第一动态链接库文件。
在一个实施例中,基于前述方案,从所述目标目录中加载所述第一动态链接库文件前,上述方法还包括:
从所述目标目录中加载所述第一动态链接库文件依赖的动态链接库文件,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
根据本公开实施例的第二方面,公开了一种应用程序的动态链接库保护装置,包括:加密存储模块、解密存储模块以及路径重定向模块,其中:
加密存储模块,用于加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;
解密存储模块,用于所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;
路径重定向模块,用于将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
根据本公开实施例的第三方面,公开了一种电子设备,包括:处理器;以及存储器,存储器上存储有计算机可读指令,计算机可读指令被处理器执行时实现如第一方面公开的应用程序的动态链接库保护方法。
根据本公开实施例的第四方面,公开了一种计算机程序介质,其上存储有计算机可读指令,当计算机可读指令被计算机的处理器执行时,使计算机执行根据本公开第一方面公开的应用程序的动态链接库保护方法。
本公开实施例通过加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。一方面,通过将原始目录下的动态链接库文件加密并存储至预设目录中,使得无法对动态链接库文件直接进行分析,实现了动态链接库文件的保护;另一方面,在应用程序运行时将解密后的动态链接库文件存储至目标目录,可以防止目标目录下的动态链接库文件被其他进程修改,提高了动态链接库文件的安全性;再一方面,重定向解密后的动态链接库文件的加载路径,使得应用程序运行时可以从目标目录中正常加载动态链接库文件,在保护动态链接库文件的基础上,保证了应用程序的正常运行。另外,在动态链接库文件的保护过程中,没有对原始目录中的动态链接库文件进行任何修改,因此可以兼容所有动态链接库文件。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示出了可以应用本公开实施例的应用程序的动态链接库保护方法及装置的***架构的示意图;
图2示出的是根据本公开一示例实施方式的应用程序的动态链接库保护方法的流程示意图;
图3示出的是根据本公开一示例实施方式的修改应用程序的运行入口点的流程示意图;
图4示出的是根据本公开一示例实施方式的解密预设目录下的动态链接库文件的流程示意图;
图5示出的是根据本公开一示例实施方式的修改动态链接库的默认加载路径的流程示意图;
图6示出的是根据本公开另一示例实施方式的应用程序的动态链接库保护方法的流程示意图;
图7示出了根据本公开一示例实施方式的应用程序的动态链接库保护装置的结构框图;
图8示出的是根据本公开一示例实施方式的电子设备的计算机***的结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本公开的实施方式,提出了一种应用程序的动态链接库保护方法、应用程序的动态链接库保护装置、电子设备以及计算机可读存储介质。
在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
目前,相关技术对Android操作***中的动态链接库进行保护时通常可以对动态链接库进行加固。具体地,可以加密原始动态链接库,将加密后的原始动态链接库作为数据填充到另一个壳动态链接库中。在壳动态链接库运行时,先解密原始动态链接库,并通过自定义链接加载器加载该原始动态链接库,以将执行权还给原始动态链接库。
或者,也可以对动态链接库中的源代码进行混淆操作实现对于动态链接库的保护。具体地,可以对原始动态链接库中的代码进行虚假控制流、指令替换和控制流平坦化等操作。其中,虚假控制流可以在代码中增加不透明谓词和虚假块。例如,表达式为a*(a+1)%2==0的不透明谓词为真时,if(a*(a+1)%2!=0)相关的虚假块则不会被执行。可知,在代码中增加不透明谓词和虚假块既不会影响程序的正确性,同时还增加了代码复杂度。指令替换可以将二进制运算替换为运行结果相等,但运算更复杂的指令序列。例如,可以将a+b替换为a-(-b),重复类似的操作,使得程序运算复杂度不断增加,增加了代码分析难度。控制流平坦化可以将线性的代码执行流程拆分成一系列由条件判断语句控制的代码块,从而增加代码复杂度。可以看出,经过混淆操作后,可以增加代码逻辑复杂度,进而增大破解者的分析难度。
但是,在动态链接库的保护过程中,不管是加固动态链接库,还是对动态链接库中的代码进行混淆操作,二者均是基于原始动态链接库进行变形,分析者获取经过保护的动态链接库后,可以直接通过静态分析、模拟执行等方式实施破解行为。另外,可能无法保护应用安装包中的所有动态链接库,存在兼容性的问题。例如,对代码进行混淆操作时,需要获取动态链接库的源代码,导致无法对第三方动态链接库进行保护。因此,采用上述方法对动态链接库进行保护时,存在动态链接库安全性较低,以及无法兼容应用安装包中所有动态链接库的问题。
基于上述问题,本申请人想到可以在动态链接库保护的过程中,通过加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。一方面,通过将原始目录下的动态链接库文件加密并存储至预设目录中,使得无法对动态链接库文件直接进行分析,实现了动态链接库文件的保护;另一方面,在应用程序运行时将解密后的动态链接库文件存储至目标目录,可以防止目标目录下的动态链接库文件被其他进程修改,提高了动态链接库文件的安全性;再一方面,重定向解密后的动态链接库文件的加载路径,使得应用程序运行时可以从目标目录中正常加载动态链接库文件,在保护动态链接库文件的基础上,保证了应用程序的正常运行。另外,在动态链接库文件的保护过程中,没有对原始目录中的动态链接库文件进行任何修改,因此可以兼容所有动态链接库文件。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
需要注意的是,下述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
本公开的实施方式可以对Android操作***中的动态链接库进行保护,例如,可以将Android应用安装包中存储在原始目录下的所有动态链接库文件进行加密,将加密后的动态链接库文件存储至预设目录下。当Android应用程序运行时,可以将预设目录下的动态链接库文件进行解密,并将动态链接库的加载路径重定向至解密得到的动态链接库文件所在的路径,以使得Android应用程序运行时可以正常加载对应的动态链接库文件,避免Android应用程序运行出错。
示例性方法
本公开的示例性实施方式首先提供一种应用程序的动态链接库保护方法,图1示出了该方法运行环境的***架构图。如图1所示,***架构100可以包括终端设备101、102、103中的一个或多个,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。终端设备101、102、103可以是各种电子设备,包括但不限于台式计算机、便携式计算机、智能手机和平板电脑等。应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。比如服务器105可以是多个服务器组成的服务器集群等。
本公开的示例性实施方式所提供的应用程序的动态链接库保护方法一般由服务器105执行,相应地,应用程序的动态链接库保护装置一般设置于服务器105中,服务器执行完可以将经过保护的动态链接库发送至终端设备,并由终端设备向用户展示。但本领域技术人员容易理解的是,本公开的示例性实施方式所提供的动态链接库保护方法也可以由终端设备101、102、103中的一个或多个执行,相应的,应用程序的动态链接库保护装置也可以设置于终端设备101、102、103中,例如,由终端设备执行后可以将经过保护的动态链接库直接显示在终端设备的显示屏上以向用户展示,本示例性实施例中对此不做特殊限定。
下面对应用程序的动态链接库保护方法进行说明。
图2示出的是根据本公开一示例实施方式的应用程序的动态链接库保护方法的流程示意图。如图2所示,该应用程序的动态链接库保护方法,可以包括:
步骤S210:加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中。
步骤S220:所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中。
步骤S230:将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
实施图2所示的应用程序的动态链接库保护方法,一方面,将原始目录下的动态链接库文件加密并存储至预设目录中,使得无法对动态链接库文件直接进行分析,实现了动态链接库文件的保护;另一方面,在应用程序运行时将解密后的动态链接库文件存储至目标目录,可以防止目标目录下的动态链接库文件被其他进程修改,提高了动态链接库文件的安全性;再一方面,重定向解密后的动态链接库文件的加载路径,使得应用程序运行时可以从目标目录中正常加载动态链接库文件,在保护动态链接库文件的基础上,保证了应用程序的正常运行。另外,在动态链接库文件的保护过程中,没有对原始目录中的动态链接库文件进行任何修改,因此可以兼容所有动态链接库文件。
下面对这些步骤进行详细描述。
在步骤S210中,加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中。
一种示例实施方式中,可以以Android操作***的动态链接库文件为例进行说明。对应的,Android操作***中的应用安装包可以是APK(Android Package,Android安装包)文件,原始目录可以是lib目录,lib目录可以用于存储通过JNI(Java Native Interface,Java本地接口)机制使用的本地库文件,如可以存储当前应用程序依赖的动态链接库文件。其中,APK文件内可以包含被编译的DEX(Dalvik Executable,一种压缩格式)文件、assets目录(用于存放静态文件)、资源文件(如图片素材和布局文件)、应用配置清单文件等。需要说明的是,Android操作***可以将应用程序依赖的动态链接库文件存储在lib目录下,且lib目录下的动态链接库文件不可被修改。因此,应用程序运行时可以直接从lib目录下加载对应的动态链接库文件。
在应用程序运行前,可以向应用安装包中添加预设的壳文件和壳动态链接库文件,以对应用安装包中的动态链接库进行加固。其中,预设的壳文件可以是壳DEX文件,利用壳DEX文件可以获取应用程序运行的最早执行时机,以及可以由壳DEX文件加载壳动态链接库文件,以进入动态链接库文件的执行逻辑。预设的壳动态链接库文件可以用于存储应用程序运行时所需的代码。示例性的,预设的壳文件和壳动态链接库文件可以是自定义的壳文件和壳动态链接库文件,也即可以向APK文件中添加自定义的壳文件和壳动态链接库文件。
相关技术中,壳文件中可以用来存储APP(Application,应用程序)运行所需的Java语言代码,APP的运行入口点也需要是Java语言代码。但是Java语言代码的安全性较低,容易被反编译获取源码。因此,本公开的示例实施方式中,为了提高源码的安全性,可以将重要的代码逻辑存储在自定义的壳动态链接库文件中。示例性的,可以将后续用于解密动态链接库文件和重定向动态链接库文件加载路径的代码存储在自定义的壳动态链接库文件。然后,可以由自定义的壳文件加载壳动态链接库文件,以进入动态链接库文件的执行逻辑。
可以利用预设的壳文件获取应用程序运行的最早执行时机以执行解密等操作。示例性的,图3示出的是根据本公开一示例实施方式的修改应用程序的运行入口点的流程示意图,如图3所示,可以包括:
步骤S310:反编译所述应用安装包中的应用配置清单文件,获取所述应用程序的运行入口点。
APK文件中的应用配置清单文件是指AndroidManifest.xml文件,该文件中可以包括应用程序的包名、应用程序的运行入口点、应用程序的每一个组件及其属性、应用程序申请的权限、进程等信息。需要说明的是,AndroidManifest.xml文件的命名是固定的,不可以随意修改。
可以通过反编译AndroidManifest.xml文件获取该文件中的信息,如可以获取应用程序的运行入口点。举例而言,首先,可以解压APK文件,并在解压后的APK文件中找到AndroidManifest.xml文件。然后,可以将AndroidManifest.xml文件复制到AXMLPrinter2.jar(一种配置文件解析工具)文件所在目录,可以根据命令:
java-jar AXMLPrinter2.jar AndroidManifest.xml>AndroidManifest.txt
得到反编译后的AndroidManifest.xml文件。其中,AndroidManifest.txt文件即为反编译AndroidManifest.xml文件后得到的明文文件。其他示例中,也可以使用反编译工具apktool对AndroidManifest.xml文件进行反编译,本公开对此不做特殊限定。
步骤S320:将所述预设的壳文件设置为所述应用程序的运行入口点。
本示例实施方式中,可以对反编译后的AndroidManifest.xml文件进行修改。示例性的,为了获取应用程序运行的第一执行时机以便于后续执行解密等操作,可以修改通过反编译AndroidManifest.xml文件获取的应用程序的运行入口点。例如,可以将自定义的壳文件设置为应用程序的运行入口点,后续当应用程序运行时,就可以先执行自定义的壳文件中的代码,进而执行对应的解密操作等。
向应用安装包中添加壳动态链接库文件后,Android操作***也可以将壳动态链接库文件存储至原始目录下,如存储至lib目录下。然后,可以加密应用安装包原始目录中的第一动态链接库文件,以对原始目录中的动态链接库文件进行保护。示例性的,第一动态链接库文件可以包括APK文件的lib目录下的原始动态链接库文件和壳动态链接库文件。其中,原始动态链接库文件和壳动态链接库文件可以是以.so为后缀的文件。
一种示例实施方式中,可以将原始目录中的原始动态链接库文件和壳动态链接库文件进行加密处理,并将加密生成的第二动态链接库文件存储至预设目录中。可以理解的是,第二动态链接库文件中可以包括加密后的原始动态链接库文件和加密后的壳动态链接库文件。
具体地,可以对完整的原始动态链接库文件和壳动态链接库文件进行加密压缩。例如,可以将lib目录下的所有动态链接库文件进行加密,再压缩加密后的所有动态链接库文件。其中,用于加密动态链接库文件的加密方法可以是非对称加密方法,也可以是对称加密算法等。然后,可以将加密压缩后的所有动态链接库文件存储到assets目录下。其中,assets目录可以用来存储需要打包到应用程序的静态资源文件,如图片资源文件、JSON(JavaScript Object Notation,一种数据交换格式)配置文件、二进制数据文件等。可以理解的是,预设目录可以是APK文件中除lib目录外的任意一个目录,本公开对此不做具体限定。
通过将lib目录下的动态链接库文件加密并存储至assets目录中,当分析者没有获取APK文件时,使得分析者无法对assets目录中的动态链接库文件直接进行分析,实现了动态链接库文件的保护。而且,是将lib目录下的所有动态链接库文件进行加壳,后续在应用程序运行时,只需要对加密后的动态链接库文件进行一次脱壳操作,无需对每个动态链接库文件进行解密和解压缩,从而提升了动态链接库文件保护的执行效率。
在步骤S220中,所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中。
应用程序运行时,通过加载对应的第一动态链接库文件,可以避免应用程序运行出错。因此,可以先将预设目录中的第二动态链接库文件进行解密,以应用程序运行时运行时可以正常加载解密后的动态链接库文件。
一种示例中,参考图4所示,可以根据步骤S410至步骤S430解密预设目录下的动态链接库文件。
步骤S410:响应于对所述壳文件的执行操作,将所述第二动态链接库文件中的壳动态链接库文件从所述预设目录下解密。
对壳文件的执行操作可以是指应用程序的启动操作,壳文件作为应用程序的运行入口点,当应用程序开始启动时,可以先执行壳文件中的代码,同时,可以将预设目录下的第二动态链接库文件进行解密。示例性的,壳文件可以根据当前终端设备中处理器的架构在assets目录下查找与该处理器的架构相匹配的壳动态链接库文件,并将匹配到的壳动态链接库文件从assets目录下解密。例如,可以将匹配到的壳动态链接库文件进行解压和解密操作,以使应用程序可以加载解密后的壳动态链接库文件,进而保证该应用程序可以正常运行。
步骤S420:加载解密后的壳动态链接库文件,并在所述解密后的壳动态链接库文件中将所述第二动态链接库文件中的原始动态链接库文件进行解密。
将壳动态链接库文件从预设目录下解密后,为了正常加载解密后的壳动态链接库文件,可以对动态链接库的默认加载路径进行修改。参考图5所示,可以根据步骤S510至步骤S530修改动态链接库的默认加载路径,以使应用程序可以加载解密后的壳动态链接库文件。
步骤S510:将所述解密后的壳动态链接库文件存储到所述目标目录中。
可以将解密后的壳动态链接库文件存储到目标目录中,示例性的,目标目录可以是应用程序运行时应用内的/data/data/包名/files/templib目录。APK文件的lib目录在安装后无法再被修改,而/data/data/包名目录是应用程序运行时的私有目录,该目录下的文件无法被其他进程访问。因此,可以将解压目录也就是目标目录设置为/data/data/包名/files/templib,可以防止该目录下的文件被其他进程误删或者修改。
步骤S520:获取所述原始目录中第一动态链接库文件的加载路径。
示例性的,在Android操作***中,应用程序运行时默认都是从lib目录下加载对应的动态链接库文件。可以理解的是,***的动态链接库文件的默认加载路径即为lib目录下第一动态链接库文件的加载路径。因此,可以先获取该默认加载路径,并对该默认加载路径进行修改,以便于后续可以从目标目录中加载解密后的壳动态链接库文件。
步骤S530:在所述加载路径中添加所述目标目录,以从所述目标目录中加载所述解密后的壳动态链接库文件。
具体地,对默认加载路径进行修改时,可以向该默认加载路径中添加/data/data/包名/files/templib目录,以使常规的动态链接库文件加载时,可以优先从/data/data/包名/files/templib目录中加载动态链接库文件。
例如,可以通过壳文件优先从/data/data/包名/files/templib目录中加载解密后的壳动态链接库文件。由于壳动态链接库文件中可以存储用于解密动态链接库文件的代码,因此,可以在解密后的壳动态链接库文件中解密APK文件的其他动态链接库文件,如可以将assets目录中所有加密的原始动态链接库文件进行解压和解密操作,得到解密后的原始动态链接库文件。
步骤S430:将所述解密后的原始动态链接库文件存储到所述目标目录中。
为了使得动态链接库的加载路径保持一致,也可以将解密后的原始动态链接库文件存储到目标目录中,如同样可以存储至/data/data/包名/files/templib目录中。
应用程序运行时,通过将解密后的壳动态链接库文件和原始动态链接库文件存储至/data/data/包名/files/templib目录中,可以防止该目录下的动态链接库文件被其他进程修改,提高了动态链接库文件的安全性。
一种示例实施方式中,将应用安装包原始目录中的第一动态链接库文件进行加密保护后,可以删除原始目录中的第一动态链接库文件,并创建与原始动态链接库文件对应的伪动态链接库文件,其中,伪动态链接库文件可以包括原始动态链接库文件的部分内容。示例性的,将lib目录中的所有动态链接库文件进行加密并存储至assets目录后,可以删除lib目录中的所有动态链接库文件,如可以将原始动态链接库文件和壳动态链接库文件全部删除。同时,为了进一步提高动态链接库文件的保护强度,可以在原始动态链接库文件的加载路径处创建与lib目录中原始动态链接库文件名称相同的动态链接库文件,但是,新创建的动态链接库文件的内容为原动态链接库文件的部分内容,如可以仅存储原动态链接库文件的前300字节,本公开对此不作具体限定。
经过保护后,lib目录中的原始动态链接库文件被加密存储至assets目录中,而lib目录中存储的是伪造的动态链接库文件。因此,lib目录中的所有动态链接库文件经过保护后会变成一个无意义的文件,也就无法被实施静态注入等行为,当分析者没有获取APK文件时,使得分析者无法对assets目录中的动态链接库文件直接进行分析,实现了动态链接库文件的保护。
在步骤S230中,将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
经过步骤S210和步骤S220对动态链接库文件的保护,原始动态链接库文件已经被存储至目标目录中,如存储至/data/data/包名/files/templib目录中。而在Android操作***中,应用程序运行时默认都是从lib目录下加载对应的动态链接库文件。因此,应用程序会直接读取原始位置处的动态链接库文件,而原始位置处的动态链接库文件已经被修改为一个无意义的文件,会导致应用程序加载不到正确的动态链接库文件,从而导致应用程序运行崩溃。
一种示例实施方式中,需要对动态链接库文件的加载路径进行重定向。示例性的,可以利用钩子函数拦截用于调用伪动态链接库文件的加载函数,并将伪动态链接库文件的加载路径重定向为目标目录中第一动态链接库文件的加载路径,以从目标目录中加载第一动态链接库文件。
具体地,可以先获取伪造的动态链接库文件的加载路径和原始动态链接库文件的加载路径之间的对应关系。例如,伪造的动态链接库文件的加载路径可以为/data/data/包名/lib/libxx.so,原始动态链接库文件的加载路径可以为/data/data/包名/files/templib/libxx.so。然后,可以通过Cydia Substrate框架对原始动态链接库文件进行Hook(钩子函数,可以用于重定向)替换。例如,可以拦截APK文件中所有动态链接库文件的加载函数,并获取加载函数的符号地址。可以根据加载函数的符号地址,在伪造的动态链接库文件加载到内存中后,也可以将原始动态链接库文件加载到内存中,并利用构造的跳转指令,对伪造的动态链接库文件完成跳转替换,跳转到原始动态链接库文件的指令码处。执行完Hook以后,此时上层调用的时候,调用的是原始动态链接库文件的指令码,进而实现应用程序运行时可以从/data/data/包名/files/templib/libxx.so目录中加载原始动态链接库文件。
本示例实施方式中,为了避免原始目录下的动态链接库文件无法被修改而导致依赖的动态链接库文件加载出错的情况,从目标目录中加载第一动态链接库文件前,可以先从目标目录中加载第一动态链接库文件依赖的动态链接库文件,以使应用程序运行时可以正常加载目标目录中的第一动态链接库文件。示例性的,可以通过Ldd(List dynamicdependencies,可以用于列举当前可执行程序或者动态链接库文件所依赖的所有动态链接库文件)命令查询原始动态链接库文件的依赖关系,然后可以采用Hook加载原始动态链接库文件依赖的动态链接库文件,使得应用程序运行时可以加载正确的原始动态链接库文件和该原始动态链接库文件依赖的动态链接库文件,在保护动态链接库文件的基础上,保证了应用程序的正常运行。
需要说明的是,本公开示例实施方式中,通过直接将lib目录中的原始动态链接库文件加密后存储在assets目录中,在应用程序运行时再解密还原出来,在动态链接库文件的保护过程中,没有对原始目录中的动态链接库文件进行任何修改,因此可以兼容所有动态链接库文件。
图6示出的是本公开另一示例实施方式中基于APK加固的动态链接库加密保护方法的流程示意图。参考图6所示,该方法可以包括:
步骤S601.加密APK内lib目录中的SO文件。可以对APK进行预处理,例如,可以将APK内lib目录中的SO文件进行加密处理。
步骤S602.存储至APK内的assets目录中,也就是可以将lib目录中加密后的SO文件存储至assets目录中。
步骤S603.解密APK内assets目录中的SO文件。APP运行时,可以将APK内assets目录中加密的SO文件进行解压和解密处理。
步骤S604.存储至应用内目录的files目录中,也就是可以将assets目录中解密后的SO文件存储至APP私有目录的files目录中,该目录中的文件可被修改。但是,由于该目录是APP运行时的私有目录,导致该目录下的文件无法被其他进程访问,因此可以有效防止该目录下的文件被其他进程误删或修改。
步骤S605.获取SO文件的加载路径。例如,可以通过System.load获取SO文件的加载路径如/data/data/包名/files/templib目录,同时可以添加/data/data/包名/files/templib目录作为默认加载路径,并通过Hook重定向SO文件的加载路径。
步骤S606.安装APK内lib目录中的SO文件。安装APK后,Android操作***可以将APK内的lib目录中的SO文件解压到应用内目录的lib目录中,该目录中的文件不可被修改。
步骤S607.热更新SO文件。热更新应用内目录的lib目录中的SO文件后,可以根据libraryPath环境变量查询指定的SO文件的加载路径。
步骤S608.重定向SO文件的加载路口。例如,可以利用GOT表Hook将指定的SO文件的加载路径重定向为从/data/data/包名/files/templib目录中加载SO文件。
步骤S609.加载SO文件依赖。例如,加载SO文件之前,可以先通过调用dlopen、dlsym等函数加载该SO文件依赖的SO文件。
步骤S610.加载SO文件,可以从默认加载路径/data/data/包名/files/templib目录中加载SO文件,使得APP可以正常运行。
本示例中,通过Hook修改动态链接库文件的加载路径,可以避免由于lib目录下的动态链接库文件无法被修改而导致加密后的动态链接库文件无法进行还原的情况。而且,在加载动态链接库文件之前,通过先加载该动态链接库文件依赖的动态链接库文件,可以避免由于lib目录下的动态链接库文件无法被修改而导致依赖的动态链接库文件加载出错的情况。
实施本公开的实施例,一方面,将原始目录下的动态链接库文件加密并存储至预设目录中,使得无法对动态链接库文件直接进行分析,实现了动态链接库文件的保护;另一方面,在应用程序运行时将解密后的动态链接库文件存储至目标目录,可以防止目标目录下的动态链接库文件被其他进程修改,提高了动态链接库文件的安全性;再一方面,重定向解密后的动态链接库文件的加载路径,使得应用程序运行时可以从目标目录中正常加载动态链接库文件,在保护动态链接库文件的基础上,保证了应用程序的正常运行。另外,在动态链接库文件的保护过程中,没有对原始目录中的动态链接库文件进行任何修改,因此可以兼容所有动态链接库文件。
示例性装置
参考图7对本公开示例性实施方式的应用程序的动态链接库保护装置进行说明。
图7示出的是根据本公开一示例实施方式的应用程序的动态链接库保护装置的结构框图。如图7所示,本公开一示例实施方式的应用程序的动态链接库保护装置700包括:加密存储模块710、解密存储模块720以及路径重定向模块730,其中:
加密存储模块710,用于加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;
解密存储模块720,用于所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;
路径重定向模块730,用于将所述原始目录中第一动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
在一种可选的实施方式中,应用程序的动态链接库保护装置700还包括文件添加模块,所述文件添加模块被配置为:
用于向所述应用安装包中添加预设的壳文件和壳动态链接库文件,所述壳文件用于加载所述壳动态链接库文件,所述壳动态链接库文件用于存储所述应用程序运行时所需的代码。
在一种可选的实施方式中,所述第一动态链接库文件包括原始动态链接库文件和所述壳动态链接库文件;加密存储模块710包括:
文件加密单元,用于将所述原始目录中的原始动态链接库文件和壳动态链接库文件进行加密处理;
第一存储单元,用于将加密后的原始动态链接库文件和壳动态链接库文件存储至所述预设目录中。
在一种可选的实施方式中,应用程序的动态链接库保护装置700还包括运行入口点修改模块,所述运行入口点修改模块包括:
运行入口点获取单元,用于反编译所述应用安装包中的应用配置清单文件,获取所述应用程序的运行入口点;
运行入口点设置单元,用于将所述预设的壳文件设置为所述应用程序的运行入口点。
在一种可选的实施方式中,解密存储模块720包括:
第一解密单元,用于响应于对所述壳文件的执行操作,将所述第二动态链接库文件中的壳动态链接库文件从所述预设目录下解密;
第二解密单元,用于加载解密后的壳动态链接库文件,并在所述解密后的壳动态链接库文件中将所述第二动态链接库文件中的原始动态链接库文件进行解密;
第二存储单元,用于将所述解密后的原始动态链接库文件存储到所述目标目录中。
在一种可选的实施方式中,应用程序的动态链接库保护装置700还包括加载路径修改模块,所述加载路径修改模块包括:
第三存储单元,用于将所述解密后的壳动态链接库文件存储到所述目标目录中;
加载路径获取单元,用于获取所述原始目录中第一动态链接库文件的加载路径;
加载路径修改单元,用于在所述加载路径中添加所述目标目录,以从所述目标目录中加载所述解密后的壳动态链接库文件。
在一种可选的实施方式中,应用程序的动态链接库保护装置700还包括动态链接库创建模块,所述动态链接库创建模块被配置为:
删除所述原始目录中的第一动态链接库文件,并创建与所述原始动态链接库文件对应的伪动态链接库文件,所述伪动态链接库文件包括所述原始动态链接库文件的部分内容。
在一种可选的实施方式中,路径重定向模块730被配置为:
利用钩子函数拦截用于调用所述伪动态链接库文件的加载函数,并将所述伪动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以从所述目标目录中加载所述第一动态链接库文件。
在一种可选的实施方式中,应用程序的动态链接库保护装置700还包括动态链接库加载模块,所述动态链接库加载模块被配置为:
从所述目标目录中加载所述第一动态链接库文件依赖的动态链接库文件,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
应当注意,尽管在上文详细描述中提及了应用程序的动态链接库保护装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
示例性介质
在介绍了本公开示例性实施方式的方法之后,接下来,对本公开示例性实施方式的介质进行说明。
本示例性实施方式中,可以通过程序产品实现上述方法,如可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
该程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RE等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言-诸如Java、C++等,还包括常规的过程式程序设计语言-诸如"C"语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(FAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
示例性电子设备
在介绍了本公开示例性实施方式的方法、装置和介质之后,接下来,介绍根据本公开的一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为***、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
图8示出了适于用来实现本公开实施例的电子设备的计算机***的结构示意图。
需要说明的是,图8示出的电子设备的计算机***800仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,电子设备800以通用计算设备的形式表现。电子设备800的组件可以包括但不限于:至少一个处理单元810、至少一个存储单元820、连接不同***组件(包括存储单元820和处理单元810)的总线830、显示单元840。
其中,存储单元存储有程序代码,程序代码可以被处理单元810执行,使得处理单元810执行本说明书上述"示例性方法"部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元810可以执行如图1所示的方法步骤等。
存储单元820可以包括易失性存储单元,例如随机存取存储单元(RAM)821和/或高速缓存存储单元822,还可以进一步包括只读存储单元(ROM)823。
存储单元820还可以包括具有一组(至少一个)程序模块825的程序/实用工具824,这样的程序模块825包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线830可以包括数据总线、地址总线和控制总线。
电子设备800也可以与一个或多个外部设备900(例如键盘、指向设备、蓝牙设备等)通信,这种通信可以通过输入/输出(I/O)接口850进行。电子设备800还包括显示单元840,其连接到输入/输出(I/O)接口850,用于进行显示。并且,电子设备800还可以通过网络适配器860与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器860通过总线830与电子设备800的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备800使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种应用程序的动态链接库保护方法,其特征在于,包括:
加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;
删除所述原始目录中的第一动态链接库文件,并创建与所述第一动态链接库文件中原始动态链接库文件对应的伪动态链接库文件,所述伪动态链接库文件包括所述原始动态链接库文件的部分内容;
所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;
利用钩子函数拦截用于调用所述伪动态链接库文件的加载函数,并将所述伪动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
2.根据权利要求1所述的动态链接库保护方法,其特征在于,所述应用程序运行前,所述方法还包括:
向所述应用安装包中添加预设的壳文件和壳动态链接库文件,所述壳文件用于加载所述壳动态链接库文件,所述壳动态链接库文件用于存储所述应用程序运行时所需的代码。
3.根据权利要求2所述的动态链接库保护方法,其特征在于,所述第一动态链接库文件包括原始动态链接库文件和所述壳动态链接库文件;
所述加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中,包括:
将所述原始目录中的原始动态链接库文件和壳动态链接库文件进行加密处理;
将加密后的原始动态链接库文件和壳动态链接库文件存储至所述预设目录中。
4.根据权利要求2所述的动态链接库保护方法,其特征在于,所述方法还包括:
反编译所述应用安装包中的应用配置清单文件,获取所述应用程序的运行入口点;
将所述预设的壳文件设置为所述应用程序的运行入口点。
5.根据权利要求4所述的动态链接库保护方法,其特征在于,所述将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中,包括:
响应于对所述壳文件的执行操作,将所述第二动态链接库文件中的壳动态链接库文件从所述预设目录下解密;
加载解密后的壳动态链接库文件,并在所述解密后的壳动态链接库文件中将所述第二动态链接库文件中的原始动态链接库文件进行解密;
将所述解密后的原始动态链接库文件存储到所述目标目录中。
6.根据权利要求5所述的动态链接库保护方法,其特征在于,加载所述解密后的壳动态链接库文件前,所述方法还包括:
将所述解密后的壳动态链接库文件存储到所述目标目录中;
获取所述原始目录中第一动态链接库文件的加载路径;
在所述加载路径中添加所述目标目录,以从所述目标目录中加载所述解密后的壳动态链接库文件。
7.根据权利要求1所述的动态链接库保护方法,其特征在于,从所述目标目录中加载所述第一动态链接库文件前,所述方法还包括:
从所述目标目录中加载所述第一动态链接库文件依赖的动态链接库文件,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
8.一种应用程序的动态链接库保护装置,其特征在于,包括:
加密存储模块,用于加密应用安装包的原始目录中的第一动态链接库文件,并将加密生成的第二动态链接库文件存储至所述应用安装包的预设目录中;
动态链接库创建模块,用于删除所述原始目录中的第一动态链接库文件,并创建与所述第一动态链接库文件中原始动态链接库文件对应的伪动态链接库文件,所述伪动态链接库文件包括所述原始动态链接库文件的部分内容;
解密存储模块,用于所述应用程序运行时,将所述预设目录中的第二动态链接库文件进行解密处理,并将解密得到的第一动态链接库文件存储至目标目录中;
路径重定向模块,用于利用钩子函数拦截用于调用所述伪动态链接库文件的加载函数,并将所述伪动态链接库文件的加载路径重定向为所述目标目录中第一动态链接库文件的加载路径,以使所述应用程序运行时加载所述目标目录中的第一动态链接库文件。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器被配置为经由执行所述可执行指令来执行权利要求1-7中的任意一项所述的应用程序的动态链接库保护方法。
10.一种计算机可读存储介质,其上存储计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7中的任意一项所述的应用程序的动态链接库保护方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110836816.8A CN113568680B (zh) | 2021-07-23 | 2021-07-23 | 应用程序的动态链接库保护方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110836816.8A CN113568680B (zh) | 2021-07-23 | 2021-07-23 | 应用程序的动态链接库保护方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113568680A CN113568680A (zh) | 2021-10-29 |
CN113568680B true CN113568680B (zh) | 2023-08-11 |
Family
ID=78166827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110836816.8A Active CN113568680B (zh) | 2021-07-23 | 2021-07-23 | 应用程序的动态链接库保护方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113568680B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113961240B (zh) * | 2021-12-20 | 2022-04-08 | 杭州安恒信息技术股份有限公司 | 一种虚拟化加密程序逆向分析方法及相关组件 |
CN115904548A (zh) * | 2023-01-09 | 2023-04-04 | 北京六方云信息技术有限公司 | 应用识别算法模型动态加载方法、装置及*** |
CN117311853B (zh) * | 2023-11-28 | 2024-03-12 | 深圳市移卡科技有限公司 | Apk文件的处理方法、装置、计算机设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
CN106372465A (zh) * | 2016-08-30 | 2017-02-01 | 北京深思数盾科技股份有限公司 | 一种动态链接库安全管理方法、***和电子设备 |
CN106708550A (zh) * | 2015-11-17 | 2017-05-24 | 百度在线网络技术(北京)有限公司 | 一种共享对象库加载的方法及装置 |
CN109409038A (zh) * | 2018-09-30 | 2019-03-01 | 北京梆梆安全科技有限公司 | 一种动态链接库文件的破解风险检测方法及装置 |
CN109960902A (zh) * | 2019-04-08 | 2019-07-02 | 北京智游网安科技有限公司 | 一种动态链接库的安全防护方法、存储介质及终端设备 |
CN110378081A (zh) * | 2019-06-06 | 2019-10-25 | 厦门网宿有限公司 | 一种加壳动态链接库加载方法及装置 |
CN112613037A (zh) * | 2020-12-29 | 2021-04-06 | 北京永新视博数字电视技术有限公司 | 一种代码校验方法及装置 |
CN112989291A (zh) * | 2021-03-12 | 2021-06-18 | 维沃移动通信有限公司 | 动态链接库文件解密方法、加密方法、解密装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109814939B (zh) * | 2017-11-20 | 2021-10-15 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
-
2021
- 2021-07-23 CN CN202110836816.8A patent/CN113568680B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
CN106708550A (zh) * | 2015-11-17 | 2017-05-24 | 百度在线网络技术(北京)有限公司 | 一种共享对象库加载的方法及装置 |
CN106372465A (zh) * | 2016-08-30 | 2017-02-01 | 北京深思数盾科技股份有限公司 | 一种动态链接库安全管理方法、***和电子设备 |
CN109409038A (zh) * | 2018-09-30 | 2019-03-01 | 北京梆梆安全科技有限公司 | 一种动态链接库文件的破解风险检测方法及装置 |
CN109960902A (zh) * | 2019-04-08 | 2019-07-02 | 北京智游网安科技有限公司 | 一种动态链接库的安全防护方法、存储介质及终端设备 |
CN110378081A (zh) * | 2019-06-06 | 2019-10-25 | 厦门网宿有限公司 | 一种加壳动态链接库加载方法及装置 |
CN112613037A (zh) * | 2020-12-29 | 2021-04-06 | 北京永新视博数字电视技术有限公司 | 一种代码校验方法及装置 |
CN112989291A (zh) * | 2021-03-12 | 2021-06-18 | 维沃移动通信有限公司 | 动态链接库文件解密方法、加密方法、解密装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113568680A (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113568680B (zh) | 应用程序的动态链接库保护方法、装置、设备及介质 | |
JP6815385B2 (ja) | アプリケーションのコード難読化のためのシステムおよび方法 | |
US10255443B2 (en) | Method, apparatus, system and non-transitory computer readable medium for code protection | |
EP2962193B1 (en) | Compiler based obfuscation | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
US20140258717A1 (en) | Cloud application installed in client terminal connected to cloud server | |
CN109871704A (zh) | 基于Hook的Android资源文件防护方法、设备和存储介质 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN113761482A (zh) | 一种程序代码保护方法和装置 | |
JP2018527664A (ja) | アプリケーションのコードを保護するためのシステムおよび方法 | |
CN114547558B (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
CN106897587A (zh) | 加固应用、加载加固应用的方法和装置 | |
US10867017B2 (en) | Apparatus and method of providing security and apparatus and method of executing security for common intermediate language | |
JP6935617B2 (ja) | 中間言語ファイルのロード速度改善のための方法およびシステム | |
KR102272635B1 (ko) | 대용량 애플리케이션 변환 장치 및 방법 | |
CN112416395A (zh) | 一种热修复更新方法和装置 | |
CN117313046A (zh) | 一种代码加固方法、代码加载方法、设备及介质 | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
CN111610982B (zh) | 一种应用程序开发的方法、装置和相关*** | |
KR102471221B1 (ko) | 애플리케이션 변환 장치 및 방법 | |
CN113032741B (zh) | 类文件加密方法、类文件运行方法、装置、设备及介质 | |
CN115238249A (zh) | 应用程序代码混淆方法、装置、设备和介质 | |
US11061998B2 (en) | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object | |
CN114756833A (zh) | 代码混淆方法、装置、设备、介质以及程序产品 | |
CN114329535A (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 |