CN114139215A - 一种动态库文件加载方法及装置 - Google Patents
一种动态库文件加载方法及装置 Download PDFInfo
- Publication number
- CN114139215A CN114139215A CN202111452842.7A CN202111452842A CN114139215A CN 114139215 A CN114139215 A CN 114139215A CN 202111452842 A CN202111452842 A CN 202111452842A CN 114139215 A CN114139215 A CN 114139215A
- Authority
- CN
- China
- Prior art keywords
- library file
- dynamic library
- key
- application
- dynamic
- 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
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
-
- 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/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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
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)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Abstract
一种动态库文件加载方法及装置,涉及计算机技术领域,该方法包括:在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。本申请技术方案中,在应用启动后要通过库密钥对动态库文件进行解密,以保证库文件的安全性,并且对库文件的解密和加载过程是在内存中进行的,避免了文件落地带来的安全风险,可以防止动态库文件的源码泄露或被篡改。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种动态库文件加载方法及装置。
背景技术
随着计算机软件生态的不断发展,C#语言在应用软件系统中得到了广泛的应用,由于C#语言自身的特点,其编写的代码通过MSBuild编译器生成的动态链接库(dynamiclink library,dll)文件或exe文件(executable file,exe file)很容易被一些反编译工具查看到动态库文件的源码或对源码进行修改,在软件发布到第三方或互联网后,造成动态库文件的源码泄漏。
为了防止代码被篡改或恶意利用,MSBuild和第三方软件服务商提供了一定的防范措施,例如通过代码混淆或设置防反编译属性等方式对动态库文件进行处理。但这些技术都具有一定的局限性,例如通过代码混淆工具对C#代码进行混淆后,增加了很多转换过程,会使得软件本身运行效率降低,甚至会出现报错的情况。并且一些第三方工具也可以绕过现有的保护机制获取到动态库文件的源码。
因此,目前亟需一种方案,用以防止动态库文件的源码泄露或被篡改。
发明内容
本申请提供一种动态库文件加载方法及装置,用以防止动态库文件的源码泄露或被篡改。
第一方面,本申请实施例提供一种动态库文件加载方法,该方法包括:在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。
上述技术方案中,在应用启动后要通过库密钥对动态库文件进行解密,以保证库文件的安全性,并且对库文件的解密和加载过程是在内存中进行的,避免了文件落地带来的安全风险。
在一种可能的设计中,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:通过主函数中预设的外部服务端的地址,向所述外部服务端发送密钥获取请求,所述密钥获取请求中包括所述至少一个动态库文件的标识;接收所述外部服务端反馈的所述至少一个动态库文件的库密钥。
在一种可能的设计中,所述通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:通过所述主函数中预设的解密算法,对所述库密钥进行解密,得到所述至少一个动态库文件的解密密钥;通过所述解密密钥,对已读入内存中的所述至少一个动态库文件进行解密。
上述技术方案中,通过对获取到的库密钥的二次解密,可以使动态库文件的解密和加载过程更加安全,他人无法通过反编译工具查看到动态库文件的源码,可以有效防止动态库文件源码泄露。
在一种可能的设计中,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:通过主函数从外部服务端获取所述应用中的加载器的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:通过所述加载器的库密钥,对已读入内存中的所述加载器对应的动态库文件进行解密;通过解密后的加载器,基于所述加载器的库密钥对其他动态库文件进行解密。
上述技术方案中,主函数先对加载器进行解密,再通过加载器对其它动态库文件进行解密,且通过加载器的库密钥对其它动态库文件进行解密,可以节约获取各动态库文件的库密钥的时间,使应用运行效率更高。
在一种可能的设计中,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:针对每个加密的动态库文件,通过主函数从外部服务端获取每个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:针对每个加密的动态库文件,通过所述动态库文件的库密钥对已读入内存中加密的所述动态库文件进行解密。
上述技术方案中,每个动态库文件都有自己的库密钥,通过动态库文件各自的库密钥对动态库文件进行解密,可以使动态库文件的解密和加载过程更加安全。
在一种可能的设计中,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥之前,还包括:通过所述主函数中预设的各动态库文件的校验信息,确定所述应用中的至少一个动态库文件通过完整性校验。
上述技术方案中,在获取库密钥之前对动态库文件进行完整性校验,可以在动态库文件加载前发现其是否被篡改,以便及时对存在问题的动态库文件进行处理。
在一种可能的设计中,所述动态库文件的标识为通过完整性校验的动态库文件的校验信息。
在一种可能的设计中,所述方法还包括:通过所述主函数中的调试器检测线程检测是否存在调试器;若存在,则停止所述应用,并删除所述至少一个动态库文件。
上述技术方案中,若主函数中的调试器检测线程检测到调试器的存在,则删除相关的动态库文件,应用进入自我保护模式,可以有效的避免了其它程序注入到本应用中。
在一种可能的设计中,所述主函数设置为仅依赖操作系统库。
上述设计方案中,主函数不依赖除了操作系统库之外的第三方库,防止其它程序通过动态加载的动态库文件获取到应用入口地址进行调试。
在一种可能的设计中,所述按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,包括:按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件至容器中。
上述设计方案中,将应用中实现业务功能的动态库文件运行在容器中,可以为应用运行提供统一的安全保护。
第二方面,本申请实施例提供一种动态库文件加载装置,包括:
解密模块,用于在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;
加载模块,用于按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。
在一种可能的设计中,所述解密模块,还用于通过主函数中预设的外部服务端的地址,向所述外部服务端发送密钥获取请求,所述密钥获取请求中包括所述至少一个动态库文件的标识;接收所述外部服务端反馈的所述至少一个动态库文件的库密钥。
在一种可能的设计中,所述解密模块,还用于通过所述主函数中预设的解密算法,对所述库密钥进行解密,得到所述至少一个动态库文件的解密密钥;通过所述解密密钥,对已读入内存中的所述至少一个动态库文件进行解密。
在一种可能的设计中,所述解密模块,还用于通过主函数从外部服务端获取所述应用中的加载器的库密钥;通过所述加载器的库密钥,对已读入内存中的所述加载器对应的动态库文件进行解密;通过解密后的加载器,基于所述加载器的库密钥对其他动态库文件进行解密。
在一种可能的设计中,所述解密模块,还用于针对每个加密的动态库文件,通过主函数从外部服务端获取每个动态库文件的库密钥;针对每个加密的动态库文件,通过所述动态库文件的库密钥对已读入内存中加密的所述动态库文件进行解密。
在一种可能的设计中,在所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥之前,所述解密模块,还用于通过所述主函数中预设的各动态库文件的校验信息,确定所述应用中的至少一个动态库文件通过完整性校验。
在一种可能的设计中,所述动态库文件的标识为通过完整性校验的动态库文件的校验信息。
在一种可能的设计中,所述装置还包括检测模块,用于通过所述主函数中的调试器检测线程检测是否存在调试器;若存在,则停止所述应用,并删除所述至少一个动态库文件。
在一种可能的设计中,所述主函数设置为仅依赖操作系统库。
在一种可能的设计中,所述加载模块,还用于按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件至容器中。
第三方面,本申请实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如第一方面的各种可能的设计中所述的方法。
第四方面,本申请实施例还提供一种计算机可读存储介质,其中存储有计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得上述第一方面或第一方面的任一种可能的设计中所述的方法实现。
第五方面,本申请实施例还提供一种计算机程序产品,包括计算机可读指令,当计算机可读指令被处理器执行时,使得上述第一方面或第一方面的任一种可能的设计中所述的方法实现。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种动态库文件加载方法的流程示意图;
图2为本申请实施例提供的一种动态库文件加载装置的示意图;
图3为本申请实施例提供的一种计算机设备的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在本申请的实施例中,多个是指两个或两个以上。“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
图1示例性地示出了本申请实施例提供的一种动态库文件加载方法。如图1所示,该方法包括以下步骤:
步骤101、在接收到应用启动指令后,通过主函数从外部服务端获取该应用中的至少一个动态库文件的库密钥。
本申请实施例中,应用的软件包中包括主函数和至少一个动态库文件,其中,主函数是应用程序开始运行的地方,并且将主函数设置为仅依赖操作系统库,不依赖除了操作系统库之外的第三方库,以防止通过动态加载的库文件获取到应用入口地址进行调试。各个动态库文件可以分别实现应用中的不同业务功能,当执行应用中的某一个程序时,相应的动态库文件由系统动态加载到内存中供应用程序调用。针对软件包中的各动态库文件,可以按照业务功能的需求,仅对部分的动态库文件进行加密,也可以是对所有的动态库文件均加密。具体的加密方式,可以是不同的动态库文件采用不同加密方式,也可以是采用相同的加密方式。
外部服务端一般为应用提供者提供的服务端。应用提供者在开发该应用时,预先在主函数中设定了外部服务端的访问地址,同时在外部服务端中存储了应用中各动态库文件的库密钥。
主函数中也可以设置针对外部服务端具体的访问方式,如携带某些设定信息进行双方认证等,从而使得外部服务端仅对特定访问方式才反馈库密钥,进一步增强安全性。
步骤102、通过库密钥,对已读入内存中的至少一个动态库文件进行解密。
应用中涉及的各文件,在应用启动时会读入内存中,但由于各文件中包括加密的动态库文件,因而需要在内存中对动态库文件进行解密。解密方式有多种,可预先设置在主函数中。
为了确保库密钥传输的安全性,本方案中的库密钥是对加密密钥进行加密后的结果。主函数可以通过主函数中预设的解密算法,对库密钥进行解密,得到至少一个动态库文件的解密密钥,并过该解密密钥,对已读入内存中的至少一个动态库文件进行解密。
步骤103、按照各动态库文件的依赖关系,依次加载解密后的至少一个动态库文件,从而运行该应用。
由于应用中的多个动态库文件之间可能存在依赖关系,例如,动态库文件B依赖于动态库文件A,即动态库文件B需要动态库文件A才能正常运行。因此,需要先加载解密后的库文件A再加载解密后的库文件B,从而使该应用正常运行。
针对从外部服务端获取库密钥,本实施方案中具体是通过主函数中预设的外部服务端的地址,向外部服务端发送密钥获取请求,密钥获取请求中包括至少一个动态库文件的标识。外部服务器根据密钥获取请求中的动态库文件的标识,将该动态库文件对应的库密钥发送给主函数。主函数接收外部服务端反馈的至少一个动态库文件的库密钥。
具体的,可以通过超文本传输协议(hyper text transfer protocol,HTTP)、超文本传输安全协议(hyper text transfer protocol over securesocket layer,HTTPS)以及套接字(socket)等方式,向外部服务端发送密钥获取请求。密钥获取请求报文可以采用全加密的方式。
动态库文件的标识可以是每个动态库文件的文件名,也可以是预先设定的各动态库文件的索引或编码,还可以是动态库文件的校验信息。此处的校验信息是指能唯一指向某个动态库文件的信息,如对加密后的动态库文件进行摘要算法,得到的MD5信息摘要算法(MD5 message-digest algorithm)值。
针对步骤102对动态库文件进行解密,可通过如下几种方式进行:
方式一、应用在启动后,先对应用的加载器进行解密和加载。具体的,通过主函数从外部服务端获取应用中的加载器的库密钥,通过加载器的库密钥,对已读入内存中的加载器对应的动态库文件进行解密。通过解密后的加载器,基于加载器的库密钥对其他动态库文件进行解密。
通常,软件包中会包括加载器AppLoader.dll库文件。此方案中,加载器和其他动态库文件是通过同样的加密密钥及加密算法进行加密的。因而,在获取到加载器的库密钥之后,便可通过加载器对其他动态库文件进行解密了。具体来说,在应用接收到启动指令后,基于主函数启动应用的运行环境,如启动.net的代码执行环境CLR,之后通过主函数先对AppLoader.dll库文件进行解密加载,从而运行加载器。加载器在运行之后,便可以对其他动态库文件进行解密和加载,从而也分担了主函数的任务量。
方式二、应用在启动后,先对应用的加载器进行解密和加载。之后通过加载器从外部服务端获取其他动态库文件对应的库密钥,并通过加载器对其他动态库文件进行解密和加载。
此种方式和方式一类似,只是加载器和其他动态库文件的加密密钥不同,因而需要分别从外部服务端获取。
方式三、针对每个加密的动态库文件,通过主函数从外部服务端获取每个动态库文件的库密钥,通过每个动态库文件的库密钥对对应的已读入内存中加密的动态库文件进行解密。
此种方式中,每个动态库文件的加密密钥可以均不同,甚至加密算法也可以均不同。各动态库文件的解密均通过主函数来实现。
进一步的,为了给应用的运行提供统一的安全保护,可以按照各动态库文件的依赖关系,依次加载解密后的至少一个动态库文件至容器中。
需要说明的是,解密后的动态库文件和其数据只存在于内存中,以避免文件落地带来的安全风险。
在一种可能的实施方式中,在步骤101通过主函数从外部服务端获取应用中的至少一个动态库文件的库密钥之前,可以通过主函数中预设的各动态库文件的校验信息,对应用中的至少一个动态库文件进行完整性校验。具体的,可以通过MD5等方式对各动态库文件进行完整性校验。若计算出的某个动态库文件的校验信息与主函数中预设的各动态库文件的校验信息不一致时,说明该动态库文件可能被篡改,需要从后端重新下载更新该动态库文件,或者从本地备份文件中恢复该动态库文件。若计算出的某个动态库文件的校验信息与主函数中预设的各动态库文件的校验信息一致时,则该动态库文件通过完整性校验。
进一步的,可以将通过完整性校验的动态库文件的校验信息作为该动态库文件的标识,向外部服务端发送密钥获取请求。
在一种可能的实施方式中,主函数还包括调试器检测线程,通过主函数中的调试器检测线程检测是否存在调试器,若存在,则停止运行该应用,并删除相关的至少一个动态库文件。在进行应用侵入时,通常是通过调试器对应用进行注入,因而需要主函数对应用的运行环境时刻进行检测,在确定存在调试器时,应用进入自我保护模式。
需要说明的是,本申请实施例通过与应用的解密算法对应的加密工具实现应用软件包的加密及发布,动态库文件可以被加密为ecb格式的加密包。加密算法根据安全级别和实际不同场景可以是三重数据加密算法(triple data encryption algorithm,3DES),SM4分组密码算法等。
需要说明的是,本申请提供的动态库文件加载方法不仅适用于C#,也可以适用于C,Java、Python等各种语言。
为了更好的解释本申请实施例,下面在具体实施场景下来描述动态库文件加载方法的一个具体工作流程。
步骤一、应用开始运行,主函数根据主函数中预设的各动态库文件的校验信息,对应用中的至少一个动态库文件进行完整性校验。若完整性校验不通过,则执行步骤二;若完整性校验通过,则执行步骤三。
步骤二、主函数从后端重新下载更新该动态库文件,或者从本地备份文件中恢复该动态库文件。
步骤三、主函数从外部服务端获取应用中的加载器的库密钥,通过加载器的库密钥,对已读入内存中的加载器对应的动态库文件进行解密。
步骤四、通过解密后的加载器,基于加载器的库密钥,对动态库文件进行解密。
步骤五、按照动态库文件的依赖关系依次加载解密后的动态库文件至容器中。
基于相同的技术构思,图2示例性地示出了本申请实施例提供的一种动态库文件加载装置,该装置用于实现上述实施例中的动态库文件加载方法。如图2所示,该装置200包括:
解密模块201,用于在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;
加载模块202,用于按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。
在一种可能的设计中,所述解密模块201,还用于通过主函数中预设的外部服务端的地址,向所述外部服务端发送密钥获取请求,所述密钥获取请求中包括所述至少一个动态库文件的标识;接收所述外部服务端反馈的所述至少一个动态库文件的库密钥。
在一种可能的设计中,所述解密模块201,还用于通过所述主函数中预设的解密算法,对所述库密钥进行解密,得到所述至少一个动态库文件的解密密钥;通过所述解密密钥,对已读入内存中的所述至少一个动态库文件进行解密。
在一种可能的设计中,所述解密模块201,还用于通过主函数从外部服务端获取所述应用中的加载器的库密钥;通过所述加载器的库密钥,对已读入内存中的所述加载器对应的动态库文件进行解密;通过解密后的加载器,基于所述加载器的库密钥对其他动态库文件进行解密。
在一种可能的设计中,所述解密模块201,还用于针对每个加密的动态库文件,通过主函数从外部服务端获取每个动态库文件的库密钥;针对每个加密的动态库文件,通过所述动态库文件的库密钥对已读入内存中加密的所述动态库文件进行解密。
在一种可能的设计中,在所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥之前,所述解密模块201,还用于通过所述主函数中预设的各动态库文件的校验信息,确定所述应用中的至少一个动态库文件通过完整性校验。
在一种可能的设计中,所述动态库文件的标识为通过完整性校验的动态库文件的校验信息。
在一种可能的设计中,所述装置还包括检测模块203,用于通过所述主函数中的调试器检测线程检测是否存在调试器;若存在,则停止所述应用,并删除所述至少一个动态库文件。
在一种可能的设计中,所述主函数设置为仅依赖操作系统库。
在一种可能的设计中,所述加载模块202,还用于按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件至容器中。
基于相同的技术构思,本申请实施例提供了一种计算机设备,如图3所示,包括至少一个处理器301,以及与至少一个处理器连接的存储器302,本申请实施例中不限定处理器301与存储器302之间的具体连接介质,图3中处理器301和存储器302之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本申请实施例中,存储器302存储有可被至少一个处理器301执行的指令,该至少一个处理器301通过执行存储器302存储的指令,可以实现上述动态库文件加载方法的步骤。
其中,处理器301是计算机设备的控制中心,可以利用各种接口和线路连接计算机设备的各个部分,通过运行或执行存储在存储器302内的指令以及调用存储在存储器302内的数据,从而进行资源设置。可选的,处理器301可包括一个或多个处理单元,处理器301可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器301中。在一些实施例中,处理器301和存储器302可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器301可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器302作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器302可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器302是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器302还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于相同的技术构思,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得上述任一方式所列的动态库文件加载方法实现。
基于相同的技术构思,本申请实施例还提供一种计算机程序产品,包括计算机可读指令,当计算机可读指令被处理器执行时,使得上述任一方式所列的动态库文件加载方法实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1.一种动态库文件加载方法,其特征在于,所述方法包括:
在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;
通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;
按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。
2.根据权利要求1所述的方法,其特征在于,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:
通过主函数中预设的外部服务端的地址,向所述外部服务端发送密钥获取请求,所述密钥获取请求中包括所述至少一个动态库文件的标识;
接收所述外部服务端反馈的所述至少一个动态库文件的库密钥。
3.根据权利要求1所述的方法,其特征在于,所述通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:
通过所述主函数中预设的解密算法,对所述库密钥进行解密,得到所述至少一个动态库文件的解密密钥;
通过所述解密密钥,对已读入内存中的所述至少一个动态库文件进行解密。
4.根据权利要求1所述的方法,其特征在于,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:
通过主函数从外部服务端获取所述应用中的加载器的库密钥;
通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:
通过所述加载器的库密钥,对已读入内存中的所述加载器对应的动态库文件进行解密;
通过解密后的加载器,基于所述加载器的库密钥对其他动态库文件进行解密。
5.根据权利要求1所述的方法,其特征在于,所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥,包括:
针对每个加密的动态库文件,通过主函数从外部服务端获取每个动态库文件的库密钥;
通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密,包括:
针对每个加密的动态库文件,通过所述动态库文件的库密钥对已读入内存中加密的所述动态库文件进行解密。
6.根据权利要求1-5任一项所述的方法,其特征在于,在所述通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥之前,还包括:
通过所述主函数中预设的各动态库文件的校验信息,确定所述应用中的至少一个动态库文件通过完整性校验。
7.根据权利要求6所述的方法,其特征在于,所述动态库文件的标识为通过完整性校验的动态库文件的校验信息。
8.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
通过所述主函数中的调试器检测线程检测是否存在调试器;
若存在,则停止所述应用,并删除所述至少一个动态库文件。
9.根据权利要求1-5任一项所述的方法,其特征在于,所述主函数设置为仅依赖操作系统库。
10.根据权利要求1-5任一项所述的方法,其特征在于,所述按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,包括:
按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件至容器中。
11.一种动态库文件加载装置,其特征在于,包括:
解密模块,用于在接收到应用启动指令后,通过主函数从外部服务端获取所述应用中的至少一个动态库文件的库密钥;通过所述库密钥,对已读入内存中的所述至少一个动态库文件进行解密;
加载模块,用于按照各动态库文件的依赖关系,依次加载解密后的所述至少一个动态库文件,从而运行所述应用。
12.一种计算机设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如权利要求1至10中任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得如权利要求1至10中任一项所述的方法实现。
14.一种计算机程序产品,其特征在于,包括计算机可读指令,当计算机可读指令被处理器执行时,使得如权利要求1至10中任一项所述的方法实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111452842.7A CN114139215A (zh) | 2021-12-01 | 2021-12-01 | 一种动态库文件加载方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111452842.7A CN114139215A (zh) | 2021-12-01 | 2021-12-01 | 一种动态库文件加载方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114139215A true CN114139215A (zh) | 2022-03-04 |
Family
ID=80387057
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111452842.7A Pending CN114139215A (zh) | 2021-12-01 | 2021-12-01 | 一种动态库文件加载方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114139215A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116881869A (zh) * | 2023-09-07 | 2023-10-13 | 麒麟软件有限公司 | 一种Linux系统上可执行程序的加密保护方法及系统 |
-
2021
- 2021-12-01 CN CN202111452842.7A patent/CN114139215A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116881869A (zh) * | 2023-09-07 | 2023-10-13 | 麒麟软件有限公司 | 一种Linux系统上可执行程序的加密保护方法及系统 |
CN116881869B (zh) * | 2023-09-07 | 2023-12-26 | 麒麟软件有限公司 | 一种Linux系统上可执行程序的加密保护方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109214168B (zh) | 固件升级方法及装置 | |
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
CN107977553B (zh) | 移动应用程序的安全加固的方法及装置 | |
CN106778103B (zh) | 一种安卓应用程序防逆向破解的加固方法、系统及解密方法 | |
US7930743B2 (en) | Information processing system, information processing method, information processing program, computer readable medium and computer data signal | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
US20160275019A1 (en) | Method and apparatus for protecting dynamic libraries | |
US20220019425A1 (en) | Hot updating method of script file package and hot updating device of script file package | |
EP2854070A1 (en) | Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package | |
CN109684789B (zh) | 嵌入式产品中软件安全保护的方法、装置及计算机设备 | |
CN112764827B (zh) | 一种具有安全验证的Java类热加载方法 | |
CN111737718A (zh) | 一种jar包的加解密方法、装置、终端设备和存储介质 | |
KR20160020294A (ko) | 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템 | |
CN111159658B (zh) | 字节码处理方法、系统、装置、计算机设备和存储介质 | |
CN114139215A (zh) | 一种动态库文件加载方法及装置 | |
CN112134905B (zh) | 基于安卓系统的签名方法、装置以及设备 | |
CN112115430A (zh) | 一种apk的加固方法、电子设备及存储介质 | |
CN112817615B (zh) | 文件处理方法、设备、系统和存储介质 | |
CN111522555B (zh) | apk文件的加固方法、解密方法及相关装置 | |
CN114238940A (zh) | 软件安装包的处理方法、装置及可读存储介质 | |
CN108259490B (zh) | 一种客户端校验方法及装置 | |
CN112685697B (zh) | 一种防止安卓应用被破解篡改的方法及终端 | |
CN114816549B (zh) | 一种保护bootloader及其环境变量的方法及系统 | |
KR20190060181A (ko) | 공유 오브젝트의 코드 보호를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 | |
US20140245456A1 (en) | Non-transitory computer-readable recording medium and information processing apparatus including shared library that prevents unauthorized use |
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 |