CN109543433A - 软件开发工具包加密方法、装置、计算机和存储介质 - Google Patents
软件开发工具包加密方法、装置、计算机和存储介质 Download PDFInfo
- Publication number
- CN109543433A CN109543433A CN201811424766.7A CN201811424766A CN109543433A CN 109543433 A CN109543433 A CN 109543433A CN 201811424766 A CN201811424766 A CN 201811424766A CN 109543433 A CN109543433 A CN 109543433A
- Authority
- CN
- China
- Prior art keywords
- packet
- function
- interface
- shell
- original
- 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.)
- Granted
Links
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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
本发明的实施方式提供了一种软件开发工具包加密方法、装置、计算机和存储介质,涉及信息安全领域,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,该方法包括:对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;其中,加密解密策略与功能函数加密算法相关。本发明能够在保证外部接口一致,不改变用户体验的基础上,极大提高软件开发工具包的保护强度。
Description
技术领域
本发明的实施方式涉及信息安全领域,更具体地,本发明的实施方式涉及软件开发工具包加密方法、装置、计算机和存储介质。
背景技术
由于软件开发工具包(Software Development Kit,SDK)基于Java语言开发,很容易被反编译后得到源码,为了防止攻击者对SDK包进行源码分析,需要对SDK包进行保护。
现有技术中,技术开发者一般会在打包的时候通过ProGuard工具来对程序代码进行混淆,再结合防篡改、防调试等手段得到被保护的SDK。在被保护的SDK被使用时,也就是动态运行时,再解密被保护的SDK。
但是混淆后的SDK依然具有一定的可读性,一旦通过逆向分析等手段绕过防篡改、防调试等手段的保护,在加载SDK包的关键函数处仍然可以释放出混淆后的SDK包,然后通过阅读混淆后的SDK包,可以破解和逆向分析获得程序代码的主要逻辑,因此现有技术中对SDK的保护效果并不理想。
发明内容
本发明实施例提供了一种软件开发工具包加密方法和装置。旨在解决现有技术中对软件开发工具包保护效果差的问题。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。
根据本发明实施例的第一方面,提供了一种软件开发工具包加密方法,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,方法包括:
对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,加密解密策略与功能函数加密算法相关。
可选的,对接口包、加密后的功能包和外壳包进行编译合并,获取交付包,包括:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,对外壳包进行动态编译,获取编译后的外壳包,还包括:
对外壳包进行动态加密。
可选的,外壳包还包括保护策略和安全策略。
可选的,原始包包括的功能函数,包括第一组功能函数和第二组功能函数,功能包包括第一组功能函数,接口包还包括第二组功能函数。
可选的,原始包包括混淆后的原始包,方法还包括:
获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
对原始包进行拆分,获取接口包和功能包,包括:
对待保护的原始包进行拆分,获取接口包和功能包。
可选的,原始包包括AAR包和JAR包中的至少一种。
根据本发明实施例的第二方面,提供了一种软件开发工具包加密装置,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,装置包括:
拆分单元,用于对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
加密单元,用于通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
编译单元,用于对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,加密解密策略与功能函数加密算法相关。
可选的,编译单元还用于:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,编译单元还用于:
对外壳包进行动态加密。
可选的,外壳包还包括保护策略和安全策略。
可选的,原始包包括的功能函数,包括第一组功能函数和第二组功能函数,拆分单元还用于:
对原始包进行拆分,获取接口包和功能包,功能包包括第一组功能函数,接口包还包括第二组功能函数。
可选的,原始包包括混淆后的原始包,加密装置还包括:
处理单元,用于获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
拆分单元,还用于对待保护的原始包进行拆分,获取接口包和功能包。
可选的,原始包包括AAR包和JAR包中的至少一种。
根据本发明实施例的第三方面,提供了一种计算机,包括处理器和存储器,处理器用于执行存储器中保存的程序,存储器中保存的程序用于执行:
对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,加密解密策略与功能函数加密算法相关。
可选的,程序还用于执行:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,程序还用于执行:
对外壳包进行动态编译的过程中,对外壳包进行动态加密。
可选的,外壳包还包括保护策略和安全策略。
可选的,原始包包括的功能函数,包括第一组功能函数和第二组功能函数,功能包包括第一组功能函数,接口包还包括第二组功能函数。
可选的,原始包包括混淆后的原始包,程序还用于执行:
获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
对原始包进行拆分,获取接口包和功能包,包括:
对待保护的原始包进行拆分,获取接口包和功能包。
可选的,原始包包括AAR包和JAR包中的至少一种。
根据本发明实施例的第四方面,提供了一种存储介质,用于存储程序代码,程序代码用于执行:
对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,加密解密策略与功能函数加密算法相关。
可选的,程序代码还用于执行:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,程序代码还用于执行:
对外壳包进行动态编译的过程中,对外壳包进行动态加密。
可选的,外壳包还包括保护策略和安全策略。
可选的,原始包包括的功能函数,包括第一组功能函数和第二组功能函数,功能包包括第一组功能函数,接口包还包括第二组功能函数。
可选的,原始包包括混淆后的原始包,程序还用于执行:
获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
对原始包进行拆分,获取接口包和功能包,包括:
对待保护的原始包进行拆分,获取接口包和功能包。
可选的,原始包包括AAR包和JAR包中的至少一种。
本发明实施例公开的技术方案,可以对SDK中包括的原始包进行拆分,拆分后的接口包能够保证接口被正确引用,对功能函数进行加密,能够有效降低功能函数被破解并获取的可能性,极大增强了对SDK的保护效果,且适用场景广泛。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了一种软件开发工具包加密方法的流程图;
图2示意性地示出了另一种软件开发工具包加密方法的流程图;
图3示意性地示出了另一种软件开发工具包加密方法的流程图;
图4示意性地示出了一种软件开发工具包加密装置的示意图;
图5示意性地示出了另一种软件开发工具包加密装置的示意图;
图6示意性地示出了一种计算机的示意图;
图7示意性地示出了一种存储介质的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。实施例仅代表本发明公开的技术方案的可能的变化形式,本发明请求保护的内容并不仅限于此。除非明确要求,否则单独的部件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,各实施方案可以被单独地或总地用术语″发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。本文中,诸如第一和第二等之类的关系术语仅仅用于将一个实体或者操作与另一个实体或操作区分开来,而不要求或者暗示这些实体或操作之间存在任何实际的关系或者顺序。而且,术语″包括”、″包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素。本文中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的结构、产品等而言,由于其与实施例公开的部分相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本发明实施例公开了一种软件开发工具包加密方法,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,如图1所示,加密方法包括:
S101、对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
S102、通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
S103、对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,加密解密策略与功能函数加密算法相关。
本发明实施例公开的技术方案,可以对SDK中包括的原始包进行拆分,拆分后的接口包能够保证接口被正确引用,对功能函数进行加密,能够有效降低功能函数被破解并获取的可能性,极大增强了对SDK的保护效果。
SDK可以包括AAR(Android Archive)包和JAR(Java Archive)包中的至少一种,即SDK可以包括至少一个AAR包,或至少一个JAR包,或至少一个AAR包和至少一个JAR包的组合。进一步的,AAR包可以包括JAR包。
在S101中,原始包可以包括AAR包和JAR包的至少一种,即,原始包可以为SDK包括的AAR包和JAR包。
一般的,SDK一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台或操作系统等创建应用软件的开发工具的集合。示例性的,SDK可以包括AAR包或JAR包。
AAR包是一个安卓库项目的二进制归档文件,AAR包可以包括JAR包。
JAR包是与平台无关的文件格式,允许将多个文件组合成为一个压缩文件。
示例性的,当AAR包包括JAR包时,可选的,还可以将JAR包作为原始包,即在S101之前,还可以包括:根据AAR包,获取JAR包。之后即可对JAR包进行上述提到的拆分等操作。
示例性的,对原始包进行拆分,可以通过AsmTools工具进行操作,拆分出接口包和功能包,接口包包括接口,功能包包括功能函数。本领域技术人员应知,对原始包进行拆分,是对接口和功能函数的分离,并非对文件进行分段或分片处理。
接口包包括的接口只用于声明接口形式,保证接入者在开发阶段对接口的正确引用,并不具有实际的逻辑运行功能,不能用于分析和破解。经过拆分后获取的接口包,不包含全部功能函数的代码,即使通过反编译工具、逆向工具等,也无法获取完整的功能函数的代码,进一步的,经过拆分后获取的功能包,是残缺和离散包,无法直接使用。因此,采用对原始包进行拆分,获取残缺和离散的功能包的方式,能够为功能函数提供足够的保护强度,进而达到防止SDK被破解或被分析的目的。
在S102中对功能函数进行加密,在S101中将功能函数拆分至功能包后,加密操作可以进一步提升保护强度。特别的,对加密后的功能包还可以进行隐藏操作,示例性的,未加密的功能包可以为JAR文件或DEX文件,加密后的功能包可以为PNG文件或其他格式和名称的文件,即能够起到隐藏功能包的目的,本发明实施例对加密后的功能包的格式和名称不做限定。
在S103中,对接口包、加密后的功能包和外壳包进行编译合并,获取的交付包可以用于交付用户使用。特别的,接口包虽然不包括完整的功能函数,但接口包包括的对外声明的接口与未进行拆分时的原始包包括的接口一致,能够保证用户使用体验的一致性。
功能函数加密算法用于对功能函数进行加密,外壳包包括的加密解密策略与功能函数加密算法相关,方便用户在具体使用过程中,通过加密解密策略完成对功能函数的解密,保证功能函数的准确运行。
示例性的,加密解密策略可以包括加密因子,加密因子与功能函数加密算法相关。
可选的,当外壳包使用防篡改保护、防调试和防DUMP保护或混淆技术等进一步增强安全性的技术方案时,外壳包还可以包括保护策略和安全策略,具体的,保护策略和安全策略能够保证用户正常使用经过拆分处理后的SDK。进一步的,外壳包还可以包括接口与功能函数的映射说明等,用于保证功能函数的准确运行。
可选的,如图2所示,S103还可以包括:
S1031、对外壳包进行动态编译,获取编译后的外壳包;
S1032、对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
在S1031中,对外壳包进行动态编译的过程中,还可以对外壳包进行动态加密,即,每一次对外壳包进行编译时可以使用不同的加密算法,亦即,对不同外壳包进行编译时,以及对同一外壳包进行多次编译时使用的加密算法均不相同,可以进一步增强保护强度。
应知,当对外壳包进行编译过程中同时使用加密算法对外壳包进行加密,则可以获取经过动态加密的编译后的外壳包。
在S1032中,将编译后的外壳包、接口包和加密后的功能包进行合并编译,最终生成一个提供给用户使用的交付包。
由于动态编译后的外壳包,每次编译生成的结果并不相同,因此每次最终生成的SDK也不相同,增加了破解SDK的难度,保证了SDK的安全性。
在一些特别的情况下,如原始包中包括了较多的功能函数,但并不需要对全部功能函数进行加密时,可以仅对部分功能函数进行加密。
示例性的,功能函数可以包括第一组功能函数和第二组功能函数,可选的,S101可以包括:
S1011、对原始包进行拆分,获取接口包和功能包,接口包包括接口和第二组功能函数,功能包包括第一组功能函数。
其中,第一组功能函数,可以包括核心功能函数等需要保密的功能函数,第二组功能函数,可以包括非核心功能函数等不需要进行特别保密的功能函数。此种情况下,在S102中仅对功能包中包括的第一组功能函数进行加密,而对接口包包括的接口和第二组功能函数不进行加密。
虽然第二组功能函数未进行加密,但由于其并不涉及核心功能函数,因此也不会存在安全性问题。仅对核心功能函数进行加密,可以在保证安全性的同时,节约系统的计算资源,减少加密和解密操作所需的时间,提升用户体验。
本领域技术人员在具体实施过程中,可以结合S1011,根据具体实施条件对功能函数进行分组,并仅对分组后的部分功能函数进行加密,分组的标准可以包括是否为核心功能函数,也可以包括其他标准,示例性的,本着解决计算量的原则,可以只将原创的功能函数拆分至功能包,并进行加密等,本发明对需要加密的功能函数的数量和选择标准并不限定。
此外,在具体实施过程中,原始包可能包括混淆后的原始包,示例性的,技术人员在技术开发过程中,对原始包进行过代码混淆,如ProGuard混淆等,可选的,如图3所示,在S101之前,还可以包括:
S104、获取映射文件;
S105、根据映射文件和混淆后的原始包,获取待保护的原始包。
S101可以包括:
S1012、对待保护的原始包进行拆分,获取接口包和功能包。
经过混淆的原始包,程序代码中包括的类名等可能发生改变,可以通过映射文件和指定的原始类名映射出混淆后的类名,以确定待保护的原始包的类名。基于此,在本发明实施例中,当原始包为经过混淆的原始包时,可以先根据映射文件获取待保护的原始包,并对获取到的待保护的原始包进行拆分,并进一步进行安全加密等处理。
本发明实施例公开的技术方案,能够在保证外部接口一致,不影响用户体验的基础上,极大提高SDK的保护强度,且能够同时适用于JAR包和AAR包,适用场景广泛。
更进一步的,本领域技术人员在本发明实施例公开的技术方案的基础上,还可以结合ProGuard混淆等操作,更加提升SDK的安全性,本发明实施例对此并不限定。
本发明实施例还公开了一种软件开发工具包加密装置40,如图4所示,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,装置40包括:
拆分单元401,用于对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
加密单元402,用于通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
编译单元403,用于对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,加密解密策略与功能函数加密算法相关。
特别的,拆分单元401对原始包进行拆分,是对接口和功能函数的分离,并非对文件进行分段或分片处理。
功能函数加密算法用于对功能函数进行加密,外壳包包括的加密解密策略与功能函数加密算法相关,方便用户在具体使用过程中,通过加密解密策略完成对功能函数的解密,保证功能函数的准确运行。
本发明实施例公开的技术方案,可以通过拆分单元对SDK中包括的原始包进行拆分,拆分后的接口包能够保证接口被正确引用,加密单元对功能函数进行加密,能够有效降低功能函数被破解并获取的可能性,因此,能够在对接口的使用者透明的情况下,增加功能函数的保密强度,极大增强了对SDK的保护效果。
可选的,编译单元403还可以用于:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,编译单元403还可以用于:
对外壳包进行动态加密。
编译单元403在对外壳包进行动态编译的过程中,还可以对外壳包进行动态加密,即,每一次对外壳包进行编译时可以使用不同的加密算法,亦即,对不同外壳包进行编译时,以及对同一外壳包进行多次编译时使用的加密算法均不相同,可以进一步增强保护强度。
当对外壳包进行编译过程中同时使用加密算法对外壳包进行加密,则可以获取经过动态加密的编译后的外壳包。
接口包包括的接口只用于声明接口形式,保证接入者在开发阶段对接口的正确引用,并不具有实际的逻辑运行功能,不能用于分析和破解。经过拆分后获取的接口包,不包含全部功能函数的代码,即使通过反编译工具、逆向工具等,也无法获取完整的功能函数的代码,进一步的,经过拆分后获取的功能包,是残缺和离散包,无法直接使用。因此,采用对原始包进行拆分,获取残缺和离散的功能包的方式,能够为功能函数提供足够的保护强度,进而达到防止SDK被破解或被分析的目的。
可选的,外壳包还包括保护策略和安全策略。
保护策略和安全策略能够保证用户正常使用经过拆分处理后的SDK。进一步的,外壳包还可以包括接口与功能函数的映射说明等,用于保证功能函数的准确运行。
可选的,原始包包括的功能函数,包括第一组功能函数和第二组功能函数,拆分单元401还可以用于:
对原始包进行拆分,获取接口包和功能包,功能包包括第一组功能函数,接口包还包括第二组功能函数。
其中,第一组功能函数,可以包括核心功能函数等需要保密的功能函数,第二组功能函数,可以包括非核心功能函数等不需要进行特别保密的功能函数。此种情况下,拆分单元401可以将第一组功能函数拆分至功能包,将第二组功能函数拆分至接口包,加密单元402可以仅对功能包中包括的第一组功能函数进行加密,而对接口包包括的接口和第二组功能函数不进行加密。
虽然第二组功能函数未进行加密,但由于其并不涉及核心功能函数,因此也不会存在安全性问题。仅对核心功能函数进行加密,可以在保证安全性的同时,节约系统的计算资源,减少加密和解密操作所需的时间,提升用户体验。
可选的,加密装置40还可以包括处理单元404,如图5所示,其中:
处理单元404,用于获取映射文件;根据映射文件和混淆后的原始包,获取待保护的原始包。
拆分单元401,还用于对待保护的原始包进行拆分,获取接口包和功能包。
经过混淆的原始包,程序代码中包括的类名等可能发生改变,可以通过映射文件和指定的原始类名映射出混淆后的类名,以确定待保护的原始包的类名。基于此,在本发明实施例中,当需要对经过混淆的原始包进行加密保护时,可以先根据映射文件获取待保护的原始包,并对获取到的待保护的原始包进行拆分,并进一步进行安全加密等处理。
可选的,原始包包括AAR包和JAR包中的至少一种。
原始包可以包括AAR包和JAR包中的至少一种,即原始包可以包括至少一个AAR包,或至少一个JAR包,或至少一个AAR包和至少一个JAR包的组合,进一步的,AAR包可以包括JAR包。
本发明实施例公开的技术方案,能够在保证外部接口一致,不影响用户体验的基础上,极大提高SDK的保护强度,且能够同时适用于JAR包和AAR包,适用场景广泛。
本发明实施例还公开了一种计算机60,如图6所示,包括处理器601和存储器602,处理器601用于执行存储器602中保存的程序,存储器602中保存的程序用于执行:
对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,加密解密策略与功能函数加密算法相关。
特别的,对原始包进行拆分,是对接口和功能函数的分离,并非对文件进行分段或分片处理。
功能函数加密算法用于对功能函数进行加密,外壳包包括的加密解密策略与功能函数加密算法相关,方便用户在具体使用过程中,通过加密解密策略完成对功能函数的解密,保证功能函数的准确运行。
本发明实施例公开的技术方案,可以通过对SDK中包括的原始包进行拆分,拆分后的接口包能够保证接口被正确引用,对功能函数进行加密,能够有效降低功能函数被破解并获取的可能性,因此,能够在对接口的使用者透明的情况下,增加功能函数的保密强度,极大增强了对SDK的保护效果。
可选的,程序还可以用于执行:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,程序还可以用于执行:
对外壳包进行动态编译的过程中,对外壳包进行动态加密。
在对外壳包进行动态编译的过程中,还可以对外壳包进行动态加密,即,每一次对外壳包进行编译时可以使用不同的加密算法,亦即,对不同外壳包进行编译时,以及对同一外壳包进行多次编译时使用的加密算法均不相同,可以进一步增强保护强度。
当对外壳包进行编译过程中同时使用加密算法对外壳包进行加密,则可以获取经过动态加密的编译后的外壳包。
接口包包括的接口只用于声明接口形式,保证接入者在开发阶段对接口的正确引用,并不具有实际的逻辑运行功能,不能用于分析和破解。经过拆分后获取的接口包,不包含全部功能函数的代码,即使通过反编译工具、逆向工具等,也无法获取完整的功能函数的代码,进一步的,经过拆分后获取的功能包,是残缺和离散包,无法直接使用。因此,采用对原始包进行拆分,获取残缺和离散的功能包的方式,能够为功能函数提供足够的保护强度,进而达到防止SDK被破解或被分析的目的。
可选的,外壳包还可以包括保护策略和安全策略。
保护策略和安全策略能够保证用户正常使用经过拆分处理后的SDK。进一步的,外壳包还可以包括接口与功能函数的映射说明等,用于保证功能函数的准确运行。
可选的,原始包包括的功能函数,可以包括第一组功能函数和第二组功能函数,功能包包括第一组功能函数,接口包还包括第二组功能函数。
其中,第一组功能函数,可以包括核心功能函数等需要保密的功能函数,第二组功能函数,可以包括非核心功能函数等不需要进行特别保密的功能函数。此种情况下,可以将第一组功能函数拆分至功能包,将第二组功能函数拆分至接口包,仅对功能包中包括的第一组功能函数进行加密,而对接口包包括的接口和第二组功能函数不进行加密。
虽然第二组功能函数未进行加密,但由于其并不涉及核心功能函数,因此也不会存在安全性问题。仅对核心功能函数进行加密,可以在保证安全性的同时,节约系统的计算资源,减少加密和解密操作所需的时间,提升用户体验。
可选的,原始包可以包括混淆后的原始包,程序还可以用于执行:
获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
对原始包进行拆分,获取接口包和功能包,包括:
对待保护的原始包进行拆分,获取接口包和功能包。
经过混淆的原始包,程序代码中包括的类名等可能发生改变,可以通过映射文件和指定的原始类名映射出混淆后的类名,以确定待保护的原始包的类名。基于此,在本发明实施例中,当需要对经过混淆的原始包进行加密保护时,可以先根据映射文件获取待保护的原始包,并对获取到的待保护的原始包进行拆分,并进一步进行安全加密等处理。
可选的,原始包可以包括AAR包和JAR包中的至少一种。
原始包可以包括AAR包和JAR包中的至少一种,即原始包可以包括至少一个AAR包,或至少一个JAR包,或至少一个AAR包和至少一个JAR包的组合,进一步的,AAR包可以包括JAR包。
本发明实施例公开的技术方案,能够在保证外部接口一致,不影响用户体验的基础上,极大提高SDK的保护强度,且能够同时适用于JAR包和AAR包,适用场景广泛。
本领域技术人员应知,本发明实施例公开的计算机60,还可以包括内存储器、总线、输入输出装置和显示装置等其他相关组件,计算机60可以用于执行如图1至3所示的任一种加密方法,此处不再赘述。
本发明实施例还公开来了一种存储介质70,如图7所示,用于存储程序代码,程序代码用于执行:
对原始包进行拆分,获取接口包和功能包,接口包包括接口,功能包包括功能函数;
通过功能函数加密算法对功能包包括的功能函数进行加密,获取加密后的功能包;
对接口包、加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括原始包和外壳包,原始包包括接口和功能函数,外壳包包括加密解密策略,加密解密策略与功能函数加密算法相关。
特别的,对原始包进行拆分,是对接口和功能函数的分离,并非对文件进行分段或分片处理。
功能函数加密算法用于对功能函数进行加密,外壳包包括的加密解密策略与功能函数加密算法相关,方便用户在具体使用过程中,通过加密解密策略完成对功能函数的解密,保证功能函数的准确运行。
本发明实施例公开的技术方案,可以通过对SDK中包括的原始包进行拆分,拆分后的接口包能够保证接口被正确引用,对功能函数进行加密,能够有效降低功能函数被破解并获取的可能性,因此,能够在对接口的使用者透明的情况下,增加功能函数的保密强度,极大增强了对SDK的保护效果。
可选的,程序代码还可以用于执行:
对外壳包进行动态编译,获取编译后的外壳包;
对接口包、加密后的功能包和编译后的外壳包进行编译合并,获取交付包。
可选的,程序代码还可以用于执行:
对外壳包进行动态编译的过程中,对外壳包进行动态加密。
在对外壳包进行动态编译的过程中,还可以对外壳包进行动态加密,即,每一次对外壳包进行编译时可以使用不同的加密算法,亦即,对不同外壳包进行编译时,以及对同一外壳包进行多次编译时使用的加密算法均不相同,可以进一步增强保护强度。
当对外壳包进行编译过程中同时使用加密算法对外壳包进行加密,则可以获取经过动态加密的编译后的外壳包。
接口包包括的接口只用于声明接口形式,保证接入者在开发阶段对接口的正确引用,并不具有实际的逻辑运行功能,不能用于分析和破解。经过拆分后获取的接口包,不包含全部功能函数的代码,即使通过反编译工具、逆向工具等,也无法获取完整的功能函数的代码,进一步的,经过拆分后获取的功能包,是残缺和离散包,无法直接使用。因此,采用对原始包进行拆分,获取残缺和离散的功能包的方式,能够为功能函数提供足够的保护强度,进而达到防止SDK被破解或被分析的目的。
可选的,外壳包还可以包括保护策略和安全策略。
保护策略和安全策略能够保证用户正常使用经过拆分处理后的SDK。进一步的,外壳包还可以包括接口与功能函数的映射说明等,用于保证功能函数的准确运行。
可选的,原始包包括的功能函数,可以包括第一组功能函数和第二组功能函数,功能包包括第一组功能函数,接口包还包括第二组功能函数。
其中,第一组功能函数,可以包括核心功能函数等需要保密的功能函数,第二组功能函数,可以包括非核心功能函数等不需要进行特别保密的功能函数。此种情况下,可以将第一组功能函数拆分至功能包,将第二组功能函数拆分至接口包,仅对功能包中包括的第一组功能函数进行加密,而对接口包包括的接口和第二组功能函数不进行加密。
虽然第二组功能函数未进行加密,但由于其并不涉及核心功能函数,因此也不会存在安全性问题。仅对核心功能函数进行加密,可以在保证安全性的同时,节约系统的计算资源,减少加密和解密操作所需的时间,提升用户体验。
可选的,原始包可以包括混淆后的原始包,程序代码还可以用于执行:
获取映射文件;
根据映射文件和混淆后的原始包,获取待保护的原始包;
对原始包进行拆分,获取接口包和功能包,包括:
对待保护的原始包进行拆分,获取接口包和功能包。
经过混淆的原始包,程序代码代码中包括的类名等可能发生改变,可以通过映射文件和指定的原始类名映射出混淆后的类名,以确定待保护的原始包的类名。基于此,在本发明实施例中,当需要对经过混淆的原始包进行加密保护时,可以先根据映射文件获取待保护的原始包,并对获取到的待保护的原始包进行拆分,并进一步进行安全加密等处理。
可选的,原始包可以包括AAR包和JAR包中的至少一种。
原始包可以包括AAR包和JAR包中的至少一种,即原始包可以包括至少一个AAR包,或至少一个JAR包,或至少一个AAR包和至少一个JAR包的组合,进一步的,AAR包可以包括JAR包。
本发明实施例公开的技术方案,能够在保证外部接口一致,不影响用户体验的基础上,极大提高SDK的保护强度,且能够同时适用于JAR包和AAR包,适用场景广泛。
存储介质70可以包括磁带、软盘、光盘、硬盘和闪存盘等各类能够用于数据存储的介质,存储介质70所存储的程序可以用于执行如图1至3所示的任一种加密方法,本发明实施例对存储介质70的具体形态并不限定。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种软件开发工具包加密方法,所述软件开发工具包包括原始包和外壳包,所述原始包包括接口和功能函数,所述外壳包包括加密解密策略,所述方法包括:
对所述原始包进行拆分,获取接口包和功能包,所述接口包包括接口,所述功能包包括功能函数;
通过功能函数加密算法对所述功能包包括的功能函数进行加密,获取加密后的功能包;
对所述接口包、所述加密后的功能包和所述外壳包进行编译合并,获取交付包;
其中,所述加密解密策略与所述功能函数加密算法相关。
2.如权利要求1所述的加密方法,其特征在于,对所述接口包、所述加密后的功能包和所述外壳包进行编译合并,获取所述交付包,包括:
对所述外壳包进行动态编译,获取编译后的外壳包;
对所述接口包、所述加密后的功能包和所述编译后的外壳包进行编译合并,获取交付包。
3.如权利要求2所述的加密方法,其特征在于,对所述外壳包进行动态编译,获取所述编译后的外壳包,还包括:
对所述外壳包进行动态加密。
4.如权利要求1所述加密方法,其特征在于,所述外壳包还包括保护策略和安全策略。
5.如权利要求1所述的加密方法,其特征在于,所述原始包包括的功能函数,包括第一组功能函数和第二组功能函数,所述功能包包括所述第一组功能函数,所述接口包还包括所述第二组功能函数。
6.如权利要求1所述的加密方法,其特征在于,所述原始包包括混淆后的原始包,所述方法还包括:
获取映射文件;
根据所述映射文件和所述混淆后的原始包,获取待保护的原始包;
对所述原始包进行拆分,获取所述接口包和所述功能包,包括:
对所述待保护的原始包进行拆分,获取所述接口包和所述功能包。
7.如权利要求1所述的加密方法,其特征在于,所述原始包包括AAR包和JAR包中的至少一种。
8.一种软件开发工具包加密装置,所述软件开发工具包包括原始包和外壳包,所述原始包包括接口和功能函数,所述外壳包包括加密解密策略,所述装置包括:
拆分单元,用于对所述原始包进行拆分,获取接口包和功能包,所述接口包包括接口,所述功能包包括功能函数;
加密单元,用于通过功能函数加密算法对所述功能包包括的功能函数进行加密,获取加密后的功能包;
编译单元,用于对所述接口包、所述加密后的功能包和所述外壳包进行编译合并,获取交付包;
其中,所述加密解密策略与所述功能函数加密算法相关。
9.一种计算机,包括处理器和存储器,所述处理器用于执行所述存储器中保存的程序,所述存储器中保存的所述程序用于执行:
对原始包进行拆分,获取接口包和功能包,所述接口包包括接口,所述功能包包括功能函数;
通过功能函数加密算法对所述功能包包括的功能函数进行加密,获取加密后的功能包;
对所述接口包、所述加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括所述原始包和所述外壳包,所述原始包包括接口和功能函数,所述外壳包包括加密解密策略,所述加密解密策略与所述功能函数加密算法相关。
10.一种存储介质,用于存储程序代码,所述程序代码用于执行:
对原始包进行拆分,获取接口包和功能包,所述接口包包括接口,所述功能包包括功能函数;
通过功能函数加密算法对所述功能包包括的功能函数进行加密,获取加密后的功能包;
对所述接口包、所述加密后的功能包和外壳包进行编译合并,获取交付包;
其中,软件开发工具包包括所述原始包和所述外壳包,所述原始包包括接口和功能函数,所述外壳包包括加密解密策略,所述加密解密策略与所述功能函数加密算法相关。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811424766.7A CN109543433B (zh) | 2018-11-27 | 2018-11-27 | 软件开发工具包加密方法、装置、计算机和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811424766.7A CN109543433B (zh) | 2018-11-27 | 2018-11-27 | 软件开发工具包加密方法、装置、计算机和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109543433A true CN109543433A (zh) | 2019-03-29 |
CN109543433B CN109543433B (zh) | 2022-06-24 |
Family
ID=65851117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811424766.7A Active CN109543433B (zh) | 2018-11-27 | 2018-11-27 | 软件开发工具包加密方法、装置、计算机和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109543433B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457045A (zh) * | 2019-08-16 | 2019-11-15 | 百度在线网络技术(北京)有限公司 | 组件化合并编译方法、装置、设备和存储介质 |
CN112800393A (zh) * | 2021-01-29 | 2021-05-14 | 深圳市商汤科技有限公司 | 授权认证、软件开发工具包生成方法、装置及电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103136458A (zh) * | 2013-01-21 | 2013-06-05 | 中标软件有限公司 | 一种Linux操作系统的代码保护方法及其模块 |
CN103713896A (zh) * | 2013-12-17 | 2014-04-09 | 北京京东尚科信息技术有限公司 | 用于访问服务器的软件开发工具包生成方法及装置 |
CN103902858A (zh) * | 2013-12-25 | 2014-07-02 | 武汉安天信息技术有限责任公司 | 一种apk应用加固的方法及系统 |
CN105930695A (zh) * | 2016-04-11 | 2016-09-07 | 江苏通付盾科技有限公司 | 一种软件开发工具包的保护方法及装置 |
CN107103211A (zh) * | 2016-02-19 | 2017-08-29 | 腾讯科技(深圳)有限公司 | Sdk发送、应用发布、应用运行方法及装置 |
US20170325286A1 (en) * | 2015-04-20 | 2017-11-09 | Shoelace Wireless, Inc. | Systems for Improved Multi-Channel Network Connectivity Performance and Security |
CN107908392A (zh) * | 2017-11-13 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据采集工具包定制方法、装置、终端和存储介质 |
CN108768649A (zh) * | 2018-06-26 | 2018-11-06 | 苏州蜗牛数字科技股份有限公司 | 一种动态加密网络数据的方法及存储介质 |
-
2018
- 2018-11-27 CN CN201811424766.7A patent/CN109543433B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103136458A (zh) * | 2013-01-21 | 2013-06-05 | 中标软件有限公司 | 一种Linux操作系统的代码保护方法及其模块 |
CN103713896A (zh) * | 2013-12-17 | 2014-04-09 | 北京京东尚科信息技术有限公司 | 用于访问服务器的软件开发工具包生成方法及装置 |
CN103902858A (zh) * | 2013-12-25 | 2014-07-02 | 武汉安天信息技术有限责任公司 | 一种apk应用加固的方法及系统 |
US20170325286A1 (en) * | 2015-04-20 | 2017-11-09 | Shoelace Wireless, Inc. | Systems for Improved Multi-Channel Network Connectivity Performance and Security |
CN107103211A (zh) * | 2016-02-19 | 2017-08-29 | 腾讯科技(深圳)有限公司 | Sdk发送、应用发布、应用运行方法及装置 |
CN105930695A (zh) * | 2016-04-11 | 2016-09-07 | 江苏通付盾科技有限公司 | 一种软件开发工具包的保护方法及装置 |
CN107908392A (zh) * | 2017-11-13 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据采集工具包定制方法、装置、终端和存储介质 |
CN108768649A (zh) * | 2018-06-26 | 2018-11-06 | 苏州蜗牛数字科技股份有限公司 | 一种动态加密网络数据的方法及存储介质 |
Non-Patent Citations (1)
Title |
---|
吴成允: "《计算机硬件实用技术》", 31 August 2007, 中国矿业大学出版社 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457045A (zh) * | 2019-08-16 | 2019-11-15 | 百度在线网络技术(北京)有限公司 | 组件化合并编译方法、装置、设备和存储介质 |
CN112800393A (zh) * | 2021-01-29 | 2021-05-14 | 深圳市商汤科技有限公司 | 授权认证、软件开发工具包生成方法、装置及电子设备 |
CN112800393B (zh) * | 2021-01-29 | 2022-08-26 | 深圳市商汤科技有限公司 | 授权认证、软件开发工具包生成方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109543433B (zh) | 2022-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7383443B2 (en) | System and method for obfuscating code using instruction replacement scheme | |
CN103250163B (zh) | 用于加密和解密虚拟盘的计算机可读存储介质 | |
CN102760219B (zh) | 一种Android平台软件保护系统、方法及设备 | |
CN100465982C (zh) | 应用执行装置及应用执行装置的应用执行方法 | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
CN104932902B (zh) | 一种生成apk文件的方法及终端 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
EP3188063A1 (en) | A build system | |
CN108229112A (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
CN104573416A (zh) | 一种生成应用安装包、执行应用的方法及装置 | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
CN103413076A (zh) | 一种Android应用程序分块保护的方法 | |
CN104408337A (zh) | 一种apk文件防逆向的加固方法 | |
EP3552093B1 (en) | Application piracy prevention with secure enclave protection of automatically modularized functions | |
CN106599629A (zh) | 一种安卓应用程序加固方法及装置 | |
CN111159757A (zh) | 文件加密方法、解密方法及相应装置 | |
CN109543433A (zh) | 软件开发工具包加密方法、装置、计算机和存储介质 | |
CN107871066B (zh) | 基于安卓系统的代码编译方法及装置 | |
CN102799815A (zh) | 一种安全加载程序库的方法和装置 | |
JP4727366B2 (ja) | 情報処理装置、情報処理システム、プログラムおよび記録媒体 | |
JP2002132364A (ja) | プログラムを内部解析から保護する方法、コンピュータ読み取り可能な記録媒体及びプログラムの配布方法 | |
WO2016188134A1 (zh) | 一种实现应用加固的方法及装置 | |
CN102915424A (zh) | 处理电子文档内的规定区域的方法和系统 | |
JP6698775B2 (ja) | 共有オブジェクトのコード保護のための保安提供装置と方法、及び保安実行装置と方法 | |
CN109992974A (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210926 Address after: 310000 Room 408, building 3, No. 399, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Hangzhou Netease Zhiqi Technology Co.,Ltd. Address before: 310052 Building No. 599, Changhe Street Network Business Road, Binjiang District, Hangzhou City, Zhejiang Province, 4, 7 stories Applicant before: NETEASE (HANGZHOU) NETWORK Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |