买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种加固安装包的动态链接库DLL文件的方法和装置_北京奇虎科技有限公司;奇智软件(北京)有限公司_201610694899.0 

申请/专利权人:北京奇虎科技有限公司;奇智软件(北京)有限公司

申请日:2016-08-19

公开(公告)日:2020-02-28

公开(公告)号:CN106295370B

主分类号:G06F21/60(20130101)

分类号:G06F21/60(20130101);G06F21/62(20130101)

优先权:

专利状态码:有效-授权

法律状态:2020.02.28#授权;2017.02.01#实质审查的生效;2017.01.04#公开

摘要:本发明公开了一种加固安装包的动态链接库DLL文件的方法和装置,其中所述方法包括:对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;将加密后的DLL文件和解密程序打包到所述安装包中。该技术方案采用与DLL文件独立的解密程序来实现对DLL文件的加固,使用逆向分析的方法很难实现对DLL文件的破解,从而实现对DLL文件的有效保护,满足了开发者对于DLL文件进行保护的需求。

主权项:1.一种加固安装包的动态链接库DLL文件的方法,其中,该方法包括:对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;将加密后的DLL文件和解密程序打包到所述安装包中;当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件;所述由所述解密程序对所述加密后的DLL文件进行解密包括:由所述解密程序中的第一钩子程序监控libmono.so文件中的DLL加载函数是否被调用;当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。

全文数据:一种加固安装包的动态链接库DLL文件的方法和装置技术领域[0001]本发明涉及信息安全领域,特别涉及一种加固安装包的动态链接库DLL文件的方法和装置。背景技术[0002]应用往往通过安装包的形式下发到智能终端上,由用户进行安装。如果安装包未经加固处理,很容易被解包后经过处理,实现对安装包的修改,这是开发者所不希望见到的。[0003]以安装包中的动态链接库DLL文件为例,现有技术中,对DLL文件的加固很容易通过逆向分析进行解密,使得DLL文件得不到有效的保护。发明内容[0004]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的加固安装包的动态链接库DLL文件的方法和装置。[0005]依据本发明的一个方面,提供了一种加固安装包的动态链接库DLL文件的方法,包括:[0006] 对安装包的DLL文件进行加密,得到加密后的DLL文件;[0007]生成与加密后的DLL文件对应的解密程序;[0008]将加密后的DLL文件和解密程序打包到所述安装包中。[0009]可选地,该方法进一步包括:[0010]当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。[0011]可选地,所述由所述解密程序对所述加密后的DLL文件进行解密包括:[0012]由所述解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;[0013]当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;[0014]根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。[0015]可选地,该方法进一步包括:[0016]由所述解密程序中的第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;[0017]当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为libmon0.so文件;[0018]当调用的动态链接库文件为I ibmon0.so文件时,再由所述第一钩子程序监控Iibmon0.so文件中的DLL加载函数是否被调用。[0019]可选地,该方法进一步包括:[0020]由所述解密程序中的第三钩子程序监控1adlibrary函数是否被调用;[0021]当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;[0022]当调用的动态链接库文件为libmain.so文件时,再由所述第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。[0023]可选地,该方法进一步包括:[0024] 根据所述解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0025] 可选地,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:[0026]在所述安装包中声明,当所述安装包被安装后,每次启动对应的应用时,在该应用的Application类中调用所述解密程序。[0027] 可选地,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:[0028]对所述安装包增加外壳;[0029]将所述解密程序插入到所述外壳中。[0030]依据本发明的另一方面,提供了一种加固安装包的动态链接库DLL文件的装置,包括:[0031] 加密单元,适于对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;[0032]打包单元,适于将加密后的DLL文件和解密程序打包到所述安装包中。[0033]可选地,当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。[0034] 可选地,所述由所述解密程序对所述加密后的DLL文件进行解密包括:[0035]由所述解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;[0036]当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;[0037]根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。[0038] 可选地,该装置进一步包括:[0039]由所述解密程序中的第二钩子程序监控libmain.SO文件中的dlopen函数是否被调用;[°04°]当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为libmon0.so文件;[0041]当调用的动态链接库文件为libmon0.so文件时,再由所述第一钩子程序监控Iibmon0.so文件中的DLL加载函数是否被调用。[0042] 可选地,该装置进一步包括:[0043]由所述解密程序中的第三钩子程序监控1adlibrary函数是否被调用;[0044]当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;[0045]当调用的动态链接库文件为libmain.so文件时,再由所述第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。[0046] 可选地,该装置进一步包括:[0047] 根据所述解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0048]可选地,所述打包单元,适于在所述安装包中声明,当所述安装包被安装后,每次启动对应的应用时,在该应用的AppIication类中调用所述解密程序。[0049] 可选地,所述打包单元,适于对所述安装包增加外壳;将所述解密程序插入到所述外壳中。[0050]由上述可知,本发明的技术方案,对安装包的DLL文件进行加密,得到加密后的DLL文件,并生成与加密后的DLL对应的解密程序,将其与DLL文件打包到安装包中,从而实现了对安装包中DLL文件的加固。该技术方案采用与DLL文件独立的解密程序来实现对DLL文件的加固,使用逆向分析的方法很难实现对DLL文件的破解,从而实现对DLL文件的有效保护,满足了开发者对于DLL文件进行保护的需求。[0051]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明[0052]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:[0053]图1示出了根据本发明一个实施例的一种加固安装包的动态链接库DLL文件的方法的流程图;[0054]图2示出了根据本发明一个实施例的一种加固安装包的动态链接库DLL文件的装置的结构示意图。具体实施方式[0055]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。[0056]图1示出了根据本发明一个实施例的一种加固安装包的动态链接库DLL文件的方法的流程图,如图1所示,该方法包括:[0057] 步骤S110,对安装包的DLL文件进行加密,得到加密后的DLL文件。[0058] DLLDynamicLinkLibrary,动态链接库文件中存放的是各类应用的函数子过程实现过程,当应用需要调用函数时需要先载入DLL文件,然后取得函数的地址,最后进行调用。使用DLL文件的好处是应用不需要在运行之初加载所有代码,只有在应用需要某个函数的时候才从DLL中取出。另外,使用DLL文件还可以减小应用的体积。[0059] 步骤S120,生成与加密后的DLL文件对应的解密程序。[0060]步骤S130,将加密后的DLL文件和解密程序打包到安装包中。[0061]可见,图1所示的方法,通过对安装包的DLL文件进行加密,得到加密后的DLL文件,并生成与加密后的DLL对应的解密程序,将其与DLL文件打包到安装包中,从而实现了对安装包中DLL文件的加固。该技术方案采用与DLL文件独立的解密程序来实现对DLL文件的加固,使用逆向分析的方法很难实现对DLL文件的破解,从而实现对DLL文件的有效保护,满足了开发者对于DLL文件进行保护的需求。[0062]在本发明的一个实施例中,图1所示的方法进一步包括:当安装包被安装后,每次启动对应的应用时,由解密程序对加密后的DLL文件进行解密,得到解密后的DLL文件。[0063]在本实施例中由解密程序对DLL文件进行解密。DLL文件通常由CC++等语言进行实现,但是由于JAVA的跨平台特性,可以被JAVA进行调用,因此,许多安卓安装包中也加入了DLL文件,尤其是需要实现大量功能的游戏应用,其安装包体积较大,使用DLL文件可以显著减小应用安装包的体积。当然,这并不代表对本发明的限制,对于1S应用的安装包中的DLL文件也可以应用本发明的技术方案。[0064]例如随着技术的发展,许多安卓、1S游戏应用中广泛使用了Unity3D引擎。Unity3D是由UnityTechnologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。在使用Unity3D的应用中,许多DLL文件是实现游戏功能的核心内容,也就格外需要进行保护。[0065]下面的实施例应用于安卓安装包中,其中,安卓安装包使用Unity3D引擎。[0066]在使用Unity3D引擎的安卓安装包中,主要包含以下三个SO文件,这些文件是另一种格式的动态链接库文件:libmain.so,libmon0.so,libmon0.so。由于Unity3D并非是用JAVA编写的,因此需要通过JAVA的JNIJAVANativeInterface,JAVA本地接口机制来实现JAVA层与Native层的交互。通常对于Unity3D引擎所使用的DLL文件而言,需要通过Mono虚拟机来调用,并将其翻译为JAVANative层的代码,而实现Mono虚拟机就需要加载并调用上述三个SO文件,其中,Iibmon0.so包含了Mono虚拟机的主要逻辑。[0067]当使用Unity3D引擎的安卓安装包安装到智能终端后,对应的应用启动时,JAVA层会调用1adlibrary函数加载SO文件,需要使用Unity3D引擎的相应功能时,会通过dlopen函数打开libmain.so文件,libmain.so文件进一步打开Iibmon0.so文件,如果功能需要加载相应的DLL文件,libmon0.so文件会通过mono_image_open_from_data_with_name函数加载DLL文件,最后由libunity.so文件来调用DLL文件中的函数,实现相应的功能。这也就是在前述实施例中介绍过的,当应用需要调用函数时需要先载入DLL文件,然后取得函数的地址,最后进行调用。由于本发明中对DLL文件进行了加密,因此,在应用调用函数时,需要确保向其返回的函数地址应当是解密后的DLL文件中的函数地址。为保证对加密的DLL进行解密的解密逻辑不容易被破解者获取到,下面的实施例实现了在DLL加载过程中的动态解密。[0068]在本发明的一个实施例中,上述方法中,由解密程序对加密后的DLL文件进行解密包括:由解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;当监控到该DLL加载函数被调用时,获取该DLL加载函数将加密后的DLL文件加载到内存中的地址;根据加密后的DLL文件加载到内存中的地址,由解密程序自身包含的解密逻辑对加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用解密后的DLL文件在内存中的地址替换DLL加载函数返回的地址。[0069]当应用启动后,解密程序优先被启动,确保不会发生解密程序在DLL文件被调用之后才被启动的情况,避免了DLL文件无法被正确调用导致的应用崩溃。监控到Iibmon0.so文件中mono_image_open_from_data_with_name函数被调用后,第一钩子程序获取到加密后的DLL文件加载到内存中的地址,此时解密程序中的解密逻辑也已经加载到内存中,在这种情况下,由解密程序自身包含的解密逻辑对加密后的DLL文件进行解密,实现了加密后的DLL文件的动态解密,S卩,该解密过程中使用和产生的数据都是加载在内存中的,很难被第三方获取,也就确保了解密逻辑的安全,从而保证了DLL文件的安全。由于加载后的DLL文件会被libunity.so文件调用,因此,而加载函数默认返回的是加载的加密后的DLL文件在内存中的地址,因此需要将其替换为解密后的DLL文件在内存中的地址,这样libunity.so文件在调用DLL文件中的函数时,就可以从解密后的DLL文件在内存中的地址中获取相应函数的地址从而正常实现应用的功能。[0070]为了确保第一钩子程序快速、有效率地监控libmon0.so文件中的DLL加载函数是否被调用,根据前文描述的应用调用DLL文件的流程,在本发明的一个实施例中,上述方法进一步包括:由解密程序中的第三钩子程序监控1adlibrary函数是否被调用;当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;当调用的动态链接库文件为libmain.so文件时,由第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为libmon0.so文件;当调用的动态链接库文件为Iibmon0.so文件时,再由第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用。这样就形成了一套完整的监控体系,可以有效跟踪应用调用DLL文件的过程,及时且有效率地完成对加密后的DLL文件的加载和解密。[0071]如前文所述,DLL文件并非用JAVA代码编写,需要对其进行翻译,使得安卓系统可以应用。因此在本发明的一个实施例中,上述方法进一步包括:根据解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0072] 对于1S应用而言,可以适应性地替换上述实施例中的dlopen、1adlibrary等具体函数,对于基于Mono虚拟机使用Unity3D引擎的1S安装包同样可以实现上述效果,在此不再赘述。[0073]前文述及,如果DLL文件未经解密就被调用,会造成应用的功能无法正确实现,严重的情况下可能会造成应用崩溃,因此需要保证应用运行过程中调用的DLL文件是经过解密的DLL文件。下面给出了两种示例,这两种示例通过使得解密程序在应用运行时优先启动,从而确保上述情况不会发生。[0074]示例一:在安装包中声明,当安装包被安装后,每次启动对应的应用时,在该应用的Applicat1n类中调用资源解密程序。该方法适用于安卓安装包。[0075]示例二:对安装包增加外壳;将解密程序插入到外壳中。由于外壳程序早于应用本身的启动,确保了解密程序可以在应用调用DLL文件之前对DLL文件进行加载和解密。该方法既适用于安卓安装包,也适用于1S安装包。[0076]图2示出了根据本发明一个实施例的一种加固安装包的动态链接库DLL文件的装置的结构示意图,如图2所示,加固安装包的动态链接库DLL文件的装置200包括:[0077] 加密单元210,适于对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序。[0078] 打包单元220,适于将加密后的DLL文件和解密程序打包到安装包中。[0079]可见,图2所示的装置,通过各单元的相互配合,对安装包的DLL文件进行加密,得到加密后的DLL文件,并生成与加密后的DLL对应的解密程序,将其与DLL文件打包到安装包中,从而实现了对安装包中DLL文件的加固。该技术方案采用与DLL文件独立的解密程序来实现对DLL文件的加固,使用逆向分析的方法很难实现对DLL文件的破解,从而实现对DLL文件的有效保护,满足了开发者对于DLL文件进行保护的需求。[0080]在本发明的一个实施例中,上述装置中,当安装包被安装后,每次启动对应的应用时,由解密程序对加密后的DLL文件进行解密,得到解密后的DLL文件。[0081]在本发明的一个实施例中,上述装置中,由解密程序对加密后的DLL文件进行解密包括:由解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;当监控到该DLL加载函数被调用时,获取该DLL加载函数将加密后的DLL文件加载到内存中的地址;根据加密后的DLL文件加载到内存中的地址,由解密程序自身包含的解密逻辑对加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用解密后的DLL文件在内存中的地址替换DLL加载函数返回的地址。[0082]在本发明的一个实施例中,上述装置中,该装置进一步包括:由解密程序中的第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;[0083]当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为libmon0.so文件;当调用的动态链接库文件为Iibmon0.so文件时,再由第一钩子程序监控Iibmon0.so文件中的DLL加载函数是否被调用。[0084]在本发明的一个实施例中,上述装置中,该装置进一步包括:由解密程序中的第三钩子程序监控1adlibrary函数是否被调用;当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;当调用的动态链接库文件为libmain.so文件时,再由第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。[0085]在本发明的一个实施例中,上述装置中,该装置进一步包括:根据解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0086]在本发明的一个实施例中,上述装置中,打包单元220,适于在安装包中声明,当安装包被安装后,每次启动对应的应用时,在该应用的Applicat1n类中调用解密程序。[0087]在本发明的一个实施例中,上述装置中,打包单元220,适于对安装包增加外壳;将解密程序插入到外壳中。[0088]需要说明的是,上述各装置实施例的具体实施方式与前述对应方法实施例的具体实施方式,在此不再赘述。[0089]综上所述,本发明的技术方案,通过对安装包的DLL文件进行加密,得到加密后的DLL文件,并生成与加密后的DLL对应的解密程序,将其与DLL文件打包到安装包中,从而实现了对安装包中DLL文件的加固。其中解密程序可以插入到安装包的外壳中,或者在安装包被安装后,每次启动对应的应用时,在该应用的Application类中调用解密程序,确保了解密程序在应用启动过程中的优先运行,从而可以由解密程序在DLL文件被调用前可以被正确的加载和解密。使得应用可以正常调用解密后的DLL文件,确保了应用的稳定运行。该技术方案采用与DLL文件独立的解密程序来实现对DLL文件的加固,使用逆向分析的方法很难实现对DLL文件的破解,从而实现对DLL文件的有效保护,满足了开发者对于DLL文件进行保护的需求。并且该技术方案也可以由开发者之外的第三方独立实施,即使开发者已经采用了别的技术手段对安装包中的一些文件进行了加固,也不会影响本技术方案的实施,兼容性强。[0090]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。[0091]需要说明的是:[0092]在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。[0093]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。[0094]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。[0095]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书包括伴随的权利要求、摘要和附图中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书包括伴随的权利要求、摘要和附图中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。[0096]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。[0097] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器DSP来实现根据本发明实施例的加固安装包的动态链接库DLL文件的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序例如,计算机程序和计算机程序产品。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。[0098] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。[0099]本发明的实施例公开了 Al、一种加固安装包的动态链接库DLL文件的方法,其中,该方法包括:[0100] 对安装包的DLL文件进行加密,得到加密后的DLL文件;[0101]生成与加密后的DLL文件对应的解密程序;[0102]将加密后的DLL文件和解密程序打包到所述安装包中。[0103] A2、如Al所述的方法,其中,该方法进一步包括:[0104]当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。[0105] A3、如Al所述的方法,其中,所述由所述解密程序对所述加密后的DLL文件进行解密包括:[0106]由所述解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;[0107]当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;[0108]根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。[0109] A4、如A3所述的方法,其中,该方法进一步包括:[OiMO]由所述解密程序中的第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;[O111]当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为Iibmon0.so文件;[0112]当调用的动态链接库文件为libmon0.so文件时,再由所述第一钩子程序监控I ibmon0.so文件中的DLL加载函数是否被调用。[0113] A5、如A4所述的方法,其中,该方法进一步包括:[0114]由所述解密程序中的第三钩子程序监控1adlibrary函数是否被调用;[0115]当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;[0116]当调用的动态链接库文件为libmain.so文件时,再由所述第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。[0117] A6、如A3所述的方法,其中,该方法进一步包括:[0118] 根据所述解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0119] A7、如Al所述的方法,其中,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:[0120]在所述安装包中声明,当所述安装包被安装后,每次启动对应的应用时,在该应用的Application类中调用所述解密程序。[0121] A8、如Al所述的方法,其中,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:[0122]对所述安装包增加外壳;[0123]将所述解密程序插入到所述外壳中。[0124]本发明的实施例还公开了B9、一种加固安装包的动态链接库DLL文件的装置,其中,该装置包括:[0125] 加密单元,适于对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;[0126]打包单元,适于将加密后的DLL文件和解密程序打包到所述安装包中。[0127] B10、如B9所述的装置,其中,[0128]当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。[0129] B11、如B9所述的装置,其中,所述由所述解密程序对所述加密后的DLL文件进行解密包括:[0130]由所述解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;[0131]当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;[0132]根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。[0133] B12、如Bll所述的装置,其中,该装置进一步包括:[0134]由所述解密程序中的第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;[ΟΙ35]当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为libmon0.so文件;[0136]当调用的动态链接库文件为libmon0.so文件时,再由所述第一钩子程序监控Iibmon0.so文件中的DLL加载函数是否被调用。[0137] B13、如B12所述的装置,其中,该装置进一步包括:[0138]由所述解密程序中的第三钩子程序监控1adlibrary函数是否被调用;[0139]当监控到1adlibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;[0140]当调用的动态链接库文件为libmain.so文件时,再由所述第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。[0141]BHJnBlI所述的装置,其中,该装置进一步包括:[0142] 根据所述解密后的DLL文件在内存中的地址,由libmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。[0143] B15、如B9所述的装置,其中,[0144]所述打包单元,适于在所述安装包中声明,当所述安装包被安装后,每次启动对应的应用时,在该应用的AppIication类中调用所述解密程序。[0145] B16、如B9所述的装置,其中,[0146]所述打包单元,适于对所述安装包增加外壳;将所述解密程序插入到所述外壳中。

权利要求:1.一种加固安装包的动态链接库DLL文件的方法,其中,该方法包括:对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;将加密后的DLL文件和解密程序打包到所述安装包中。2.如权利要求1所述的方法,其中,该方法进一步包括:当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。3.如权利要求1所述的方法,其中,所述由所述解密程序对所述加密后的DLL文件进行解密包括:由所述解密程序中的第一钩子程序监控libmon0.so文件中的DLL加载函数是否被调用;当监控到该DLL加载函数被调用时,获取该DLL加载函数将所述加密后的DLL文件加载到内存中的地址;根据所述加密后的DLL文件加载到内存中的地址,由所述解密程序自身包含的解密逻辑对所述加密后的DLL文件进行解密,并将解密后的DLL文件保存到内存中,用所述解密后的DLL文件在内存中的地址替换所述DLL加载函数返回的地址。4.如权利要求3所述的方法,其中,该方法进一步包括:由所述解密程序中的第二钩子程序监控libmain.so文件中的dlopen函数是否被调用;当监控到dlopen函数被调用时,判断其打开的动态链接库文件是否为Iibmon0.so文件;当调用的动态链接库文件为Iibmon0.so文件时,再由所述第一钩子程序监控Iibmon0.so文件中的DLL加载函数是否被调用。5.如权利要求4所述的方法,其中,该方法进一步包括:由所述解密程序中的第三钩子程序监控1adlibrary函数是否被调用;当监控到IοadIibrary函数被调用时,判断其加载的动态链接库文件是否为libmain.so文件;当调用的动态链接库文件为libmain.so文件时,再由所述第二钩子程序监控libmain.so文件中的dlopen函数是否被调用。6.如权利要求3所述的方法,其中,该方法进一步包括:根据所述解密后的DLL文件在内存中的地址,由Iibmon0.so文件中的DLL翻译函数对解密后的DLL文件进行翻译。7.如权利要求1所述的方法,其中,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:在所述安装包中声明,当所述安装包被安装后,每次启动对应的应用时,在该应用的Application类中调用所述解密程序。8.如权利要求1所述的方法,其中,所述将加密后的DLL文件和解密程序打包到所述安装包中包括:对所述安装包增加外壳;将所述解密程序插入到所述外壳中。9.一种加固安装包的动态链接库DLL文件的装置,其中,该装置包括:加密单元,适于对安装包的DLL文件进行加密,得到加密后的DLL文件;生成与加密后的DLL文件对应的解密程序;打包单元,适于将加密后的DLL文件和解密程序打包到所述安装包中。10.如权利要求9所述的装置,其中,当所述安装包被安装后,每次启动对应的应用时,由所述解密程序对所述加密后的DLL文件进行解密,得到解密后的DLL文件。

百度查询: 北京奇虎科技有限公司;奇智软件(北京)有限公司 一种加固安装包的动态链接库DLL文件的方法和装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。