CN109784007B - 一种字节码加密的方法、字节码解密的方法及终端 - Google Patents
一种字节码加密的方法、字节码解密的方法及终端 Download PDFInfo
- Publication number
- CN109784007B CN109784007B CN201811475634.7A CN201811475634A CN109784007B CN 109784007 B CN109784007 B CN 109784007B CN 201811475634 A CN201811475634 A CN 201811475634A CN 109784007 B CN109784007 B CN 109784007B
- Authority
- CN
- China
- Prior art keywords
- target
- encryption
- bytecode
- environment
- jar
- 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
Images
Abstract
本发明适用于计算机技术领域,提供了一种字节码加密的方法、字节码解密的方法及终端,该方法包括:检测到项目对象模型POM存在加密插件包时,基于预设属性配置POM中的待加密的目标字节码所属的目标Java包的路径;获取目标Java包,并将目标Java包打包生成jar包;根据jar包的包信息确定目标字节码对应的加密环境;通过Java类库调用动态库,为目标字节码设置与加密环境对应的预设参数;采用预设参数对应的加密算法对完成设置的目标字节码加密,生成加密jar包。上述方案,在不同加密环境下采用不同的加密算法对字节码进行加密,不容易被agent破解,有效地保护字节码文件,防止反编译,从而有效的保护了源代码。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种字节码加密的方法、字节码解密的方法及终端。
背景技术
Java源代码经过编译,生成字节码文件(后缀名为.class的文件),所生成的字节码文件在Java虚拟机中解释运行。
由于字节码文件自描述性很强,保留了很多符号以及编译信息,导致字节码文件很容易被反编译成可读性很强的源代码,导致开发者的劳动成果被剽窃或者产品被篡改。现有技术中,通常通过对变量混淆或者打乱代码执行流程等方式对字节码文件加密,但是这样的加密方式很容易被agent破解,不能有效地保护字节码文件,不能有效地保护源代码。
发明内容
有鉴于此,本发明实施例提供了一种字节码加密的方法、字节码解密的方法及终端,以解决现用技术中通过传统的加密方式对字节码进行加密,导致字节码文件容易被破解,不能有效保护字节码文件,从而不能有效保护源代码的问题。
本发明实施例的第一方面提供了一种字节码加密的方法,包括:
当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径;
根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包;
根据所述jar包的包信息确定所述目标字节码对应的加密环境;
通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数;
采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
本发明实施例的第二方面提供了一种字节码解密的方法,包括:
在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
本发明实施例的第三方面提供了一种终端,该终端包括:
配置单元,用于当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径;
获取单元,用于根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包;
确定单元,用于根据所述jar包的包信息确定所述目标字节码对应的加密环境;
设置单元,用于通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数;
加密单元,用于采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
本发明实施例的第四方面提供了一种终端,该终端包括:
检测单元,用于在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
调用单元,用于根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
第一解密单元,用于调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
第二解密单元,用于当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
本发明实施例的第五方面提供了另一种终端,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储支持终端执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行以下步骤:
当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径;
根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包;
根据所述jar包的包信息确定所述目标字节码对应的加密环境;
通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数;
采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
本发明实施例的第六方面提供了另一种终端,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储支持终端执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行以下步骤:
在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
本发明实施例的第七方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径;
根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包;
根据所述jar包的包信息确定所述目标字节码对应的加密环境;
通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数;
采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
本发明实施例的第八方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
本发明实施例,通过当检测到项目对象模型POM存在加密插件包时,POM基于预设属性配置POM中的待加密的目标字节码所属的目标Java包的路径;根据路径获取目标Java包,并将目标Java包打包生成jar包;根据jar包的包信息确定目标字节码对应的加密环境;通过Java类库调用动态库,为目标字节码设置与所述加密环境对应的预设参数;采用预设参数对应的加密算法对完成设置的目标字节码加密,生成加密jar包。上述方式,在不同的加密环境下采用不同的加密算法对字节码进行加密,这样的加密方式不容易被agent代理破解,有效地保护了字节码文件,防止字节码文件被反编译,从而有效的保护了源代码。
另一方面,在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用用于解密Java类字节码且与所述加密环境对应的第一解密算法对所述目标jar包解密,得到第一解密jar包;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用用于解密所述spring加载类字节码且与所述加密环境对应的第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。上述方式,通过采用与加密算法相对应的解密算法对加密后的jar包进行解密,由于特殊的加密算法有效的保护了字节码文件,所以从另一方面来说,上述的解密方式也有效的保护了字节码文件,从而有效的保护了源代码。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种字节码加密的方法的实现流程图;
图2是本发明另一实施例提供的一种字节码解密的方法的实现流程图;
图3是本发明一实施例提供的一种终端的示意图;
图4是本发明另一实施例提供的一种终端的示意图;
图5是本发明再一实施例提供的一种终端的示意图;
图6是本发明又一实施例提供的一种终端的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
请参见图1,图1是本发明实施例提供的一种字节码加密的方法的示意流程图。本实施例中字节码加密的方法的执行主体为终端,终端包括但不限于智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等移动终端,还可以包括台式电脑等终端。如图1所示的字节码加密的方法可包括:
S101:当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径。
项目对象模型(Project Object Model,POM)用于管理:代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
字节码(Byte-code)是一种包含执行程序、由一序列op代码/数据对组成的二进制文件。字节码是一种中间码,它比机器码更抽象。它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型。字节码被这样叫是因为通常每个opcode是一字节长,但是指令码的长度是变化的。每个指令有从0到255(或十六进制的:00到FF)的字节操作码,被参数例如寄存器或内存地址跟随。
当检测到POM存在加密插件包时,基于预设属性配置POM中的待加密的目标字节码所属的目标Java包的路径。
具体地,终端检测POM中是否存在加密插件包,加密插件包通过Java编写并且符合Maven(Maven为项目管理和综合工具,提供了开发人员构建一个完整的生命周期框架)规范。当终端检测到POM中存在加密插件包时,根据预设属性配置POM中需要加密的字节码所属的Java包的路径。该Java包中包含需要加密的字节码。
例如,当终端检测到POM中存在加密插件包时,根据预设属性:encryptClassPrefix配置Java包的路径为:com.linkage.yninterface.util.paddword.des3。可以根据预设属性配置具体要加密的字节码所属的Java包的路径,预设属性可以为用户根据实际情况预先设置好的,例如在本实施例中预设属性可以为:encrypt Class Prefix,此处不做限定。
S102:根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包。
根据预设属性配置的路径找到目标Java包(即包含待加密的字节码的包),然后获取该目标Java包,并将该目标Java包通过终端上的应用程序将其打包生成jar包。
S103:根据所述jar包的包信息确定所述目标字节码对应的加密环境。
根据目标Java包打包生成jar包的包信息确定目标字节码(待加密的字节码)对应的加密环境。当jar包的包信息不同时,目标字节码对应的加密环境也就不同。
进一步地,所述包信息包括生成所述jar包的运行环境的标识以及所述jar包的属性信息。
jar包的包信息包括生成该jar包的运行环境的标识以及该jar包的属性信息。
生成该jar包的运行环境的标识是指可以标识该jar包是在哪种运行环境下生成的,即目标Java包是在哪种环境下打包生成jar包的。例如,当目标Java包在生产环境下打包生成jar包,该jar包带有生产环境的标识;当目标Java包在非生产环境下打包生成jar包,该jar包带有非生产环境的标识。非生产环境包括开发环境与测试环境。
jar包的属性信息是指可以标识该jar包属于哪种运行环境的标识信息,比如jar包的后缀名。当jar包的后缀名为.pro时,该jar包属于生产环境;当jar包的后缀名为.jar时,该jar包属于非生产环境。非生产环境包括开发环境与测试环境。
此处jar包的属性信息为后缀名仅仅是举例说明,对此不做限定。
进一步地,为了准确的确定待加密的字节码对应的加密环境,S103具体可以包括:根据所述包信息中的所述运行环境的标识或所述属性信息确定所述目标字节码对应的加密环境。
根据包信息中的运行环境的标识或属性信息确定目标字节码对应的加密环境。
例如,当jar包的运行环境的标识为生产环境时,目标字节码对应的加密环境为生产环境;当jar包的运行环境的标识为非生产环境时,目标字节码对应的加密环境为非生产环境;当jar包的后缀名为.pro时,目标字节码对应的加密环境为生产环境;当jar包的后缀名为.jar时,目标字节码对应的加密环境为非生产环境。
为了更方便、准确地对目标字节码进行加密,在S103之后还可以包括:使用预设方法读取jar包中的字节码。
例如,可以通过使用execute方法读取由目标Java包打包生成的jar包中的class文件字节码。预设方法为用户根据实际情况预先设置好的,例如在本实施例中预设方法可以为:execute方法,此处仅是示例性说明,对此不做限定。
S104:通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数。
通过Java类库调用动态库,为目标字节码设置与加密环境对应的预设参数。
Java类库是指提供了一组Java工具类用于在运行期间动态访问系统本地库,为了方便理解,本实施例中用JNA(Java Native Access)进行示例性说明。
动态库又称动态链接库(Dynamic Link Library,DLL),是一个包含可由多个程序同时使用的代码和数据的库。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个动态链接库文件中,该动态链接库文件包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
通过JNA调用动态库,为目标字节码设置不同加密环境对应的不同的预设参数。例如,当目标字节码对应的加密环境为生产环境时,此时为目标字节码设置与生产环境对应的预设参数;当目标字节码对应的加密环境为非生产环境时,此时为目标字节码设置与非生产环境对应的预设参数。预设参数标识此时目标字节码对应的加密环境,不同的加密环境对应不同的预设参数,即生产环境对应的预设参数与非生产环境对应的预设参数是不相同的。预设参数具体可以为数字或者符号,或者字母等等,用户可以根据实际情况具体设置,对此不做限定。
进一步地,S104具体可以包括:通过Java类库调用动态库,基于所述动态库调用预设函数在所述目标字节码后添加与所述加密环境对应的预设参数。
通过Java类库调用动态库,基于该动态库调用预设函数在目标字节码后添加与加密环境对应的预设参数。
例如,通过JNA调用动态库,基于该动态库调用预设函数,如基于该动态库调用zkencrypt(byte[]in,int len)函数,在待加密的字节码后添加与加密环境对应的预设参数。预设函数为用户根据实际情况预先设置好的,例如在本实施例中预设函数可以为:zkencrypt(byte[]in,int len),此处仅是示例性说明,对此不做限定。
假设用户设置数字0和9作为预设参数,当加密环境为生产环境时,与生产环境对应的预设参数为0;当加密环境为非生产环境时,与非生产环境对应的预设参数为9。具体地,当待加密的字节码对应的加密环境为生产环境时,通过JNA调用动态库,基于该动态库调用zk encrypt(byte[]in,int len)函数,此时在待加密的字节码后添加与生产环境对应的预设参数0;当待加密的字节码对应的加密环境为非生产环境时,通过JNA调用动态库,基于该动态库调用zk encrypt(byte[]in,int len)函数,此时在待加密的字节码后添加与非生产环境对应的预设参数9。
假设用户设置数字1和2作为预设参数,当加密环境为生产环境时,与生产环境对应的预设参数为1;当加密环境为非生产环境时,与非生产环境对应的预设参数为2。具体地,当待加密的字节码对应的加密环境为生产环境时,通过JNA调用动态库,基于该动态库调用zk encrypt(byte[]in,int len)函数,此时在待加密的字节码后添加与生产环境对应的预设参数1;当待加密的字节码对应的加密环境为非生产环境时,通过JNA调用动态库,基于该动态库调用zk encrypt(byte[]in,int len)函数,此时在待加密的字节码后添加与非生产环境对应的预设参数2。
S105:采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
采用预设参数对应的加密算法对完成设置的待加密的字节码进行加密,生成加密jar包。本方案中可以采用的加密算法是指所有可对字节码进行加密的算法,比如AES加密算法、DES加密算法、3DES加密算法、MD5加密算法。
为了方便理解,本实施例中用AES加密算法与DES加密算法进行示例性说明,具体实施本方案时,用户可根据实际情况选择合适的加密算法,此处不做限制。
预设参数的不同值对应了加密算法的不同加密规则,如不同的key值等。假设用户设置数字0和9作为预设参数,当加密环境为生产环境时,与生产环境对应的预设参数为0,采用AES加密算法中与预设参数0对应的key值对待加密的字节码(即目标字节码后添加了与生产环境对应的预设参数0的字节码)进行加密,生成加密后的jar包。
当加密环境为非生产环境时,与非生产环境对应的预设参数为9,采用AES加密算法中与预设参数9对应的key值对待加密的字节码(即目标字节码后添加了与非生产环境对应的预设参数9的字节码)进行加密,生成加密后的jar包。
假设用户设置数字1和2作为预设参数,当加密环境为生产环境时,与生产环境对应的预设参数为1,采用DES加密算法中与预设参数1对应的key值对待加密的字节码(即目标字节码后添加了与生产环境对应的预设参数1的字节码)进行加密,生成加密后的jar包。
当加密环境为非生产环境时,与非生产环境对应的预设参数为2,采用DES加密算法中与预设参数2对应的key值对待加密的字节码(即目标字节码后添加了与非生产环境对应的预设参数2的字节码)进行加密,生成加密后的jar包。
为了更方便的区分加密后的jar包是在哪种加密环境下进行加密的,可以对加密后的jar包进行不同的命名。例如,在对加密后的jar包进行命名时,加入与该加密环境对应的预设参数。具体地,在生产环境下进行加密生成的jar包,可以在命名时加入与生产环境对应的预设参数0;在非生产环境下进行加密生成的jar包,可以在命名时加入与非生产环境对应的预设参数9。此处仅为示例性说明,具体的命名方式,用户可根据实际情况设置。
本发明实施例,在不同的加密环境下采用不同的加密方式对字节码进行加密,这样的加密方式不容易被agent代理破解,有效地保护了字节码文件,防止字节码文件被反编译,从而有效的保护了源代码。
请参见图2,图2是本发明实施例提供的一种字节码解密的方法的示意流程图。本实施例字节码解密的方法的执行主体为终端,终端用于执行字节码解密的方法包含的各步骤。终端包括但不限于智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等移动终端,还可以包括台式电脑等终端。如图2所示的字节码解密的方法可包括:
S201:在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数。
终端在检测到用于启动已加密的目标jar包的启动指令时,获取目标jar包,根据目标jar包的包信息确定目标jar包的加密环境。
检测到用于启动已加密的目标jar包的启动指令可以是,用户通过点击终端的启动选项触发终端的启动指令,也可以是用户双击已加密的目标jar包触发启动指令。启动指令中包含启动参数,可以将用户信息,如开发人员的用户名、密码、使用时间等上传到启动参数中。
目标jar包是通过上述字节码加密方法加密后得到的jar包;目标jar包的包信息在这里具体指对加密后的jar包不同的命名信息,如:在生产环境下进行加密生成的jar包,在命名时加入了与生产环境对应的预设参数0;在非生产环境下进行加密生成的jar包,在命名时加入了与非生产环境对应的预设参数9。
具体地,当终端检测到用于启动已加密的目标jar包的启动指令时,获取目标jar包,根据该目标jar包的不同命名信息确定该目标jar包的加密环境。例如,当jar包的命名中有数值0时,因为生产环境对应的预设参数为0,那么此时该jar包的加密环境为生产环境;当jar包的命名中有数值9时,因为非生产环境对应的预设参数为9,那么此时该jar包的加密环境为非生产环境。
确定目标jar包的加密环境还可以是用户在对字节码进行加密时,记住加密过程所处的环境,加密完成后生成的加密jar包的加密环境即为加密过程所处的环境。例如,在生产环境下对字节码进行加密,那么得到的加密后的jar包的加密环境为生产环境;在非生产环境下对字节码进行加密,那么得到的加密后的jar包的加密环境为非生产环境。
S202:根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库。
根据目标jar包的加密环境,调用与该jar包的加密环境对应的专用动态库。比如,当目标jar包的加密环境为生产环境时,调用与生产环境对应的生产环境专用动态库;当目标jar包的加密环境为非生产环境时,调用与非生产环境对应的非生产环境专用动态库,如开发环境专用动态库。
进一步地,S202具体可以包括S2021~S2022,具体如下:
S2021:当所述目标jar包的加密环境为生产环境时,调用与所述生产环境对应的生产环境专用动态库。具体地,当目标jar包的加密环境为生产环境时,通过agent path加载与生产环境对应的生产环境专用动态库。
S2022:当所述目标jar包的加密环境为非生产环境时,将用户信息传入所述启动参数中,调用与所述非生产环境对应的非生产环境专用动态库;通过所述非生产环境专用动态库收集本端信息,对所述本端信息和所述用户信息进行校验;当所述校验结果为校验通过时,执行所述调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包。
当目标jar包的加密环境为非生产环境时,首先将用户信息如开发人员的用户名、密码、使用时间等上传到启动参数中,通过agent path加载与非生产环境对应的非生产环境专用动态库,如通过agent path加载开发环境专用动态库。
然后通过非生产环境专用动态库收集本地终端信息,对本地终端信息和用户信息进行校验。例如,非生产环境专用动态库收集本地终端信息和传入启动参数的用户信息,终端将本地终端信息和用户信息一起发送至服务器端,进行开发者校验。当校验结果为校验通过时,证明当前操作用户为开发者,可以执行下一步操作,即执行S203。
当校验结果为校验未通过时,证明当前操作用户不是开发者,不可以执行下一步操作,即不可以对获取的目标jar包进行解密操作,已加密的jar包启动失败,终端退出操作程序。
S203:调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码。
调用专用动态库访问虚拟机工具接口JVMTI,在JVMTI中采用第一解密算法对目标jar包解密;第一解密算法用于解密Java类字节码且与加密环境对应。由于专用动态库不同,表示目标jar包的加密环境不同,则采用的解密算法也不相同。
例如,当调用生产环境专用动态库访问JVMTI时,在JVMTI中采用用于解密Java类字节码且与生产环境对应解密算法对目标jar包解密,得到对应的解密jar包;当调用非生产环境专用动态库访问JVMTI时,在JVMTI中采用用于解密Java类字节码且与非生产环境对应解密算法对目标jar包解密,得到对应的解密jar包。
经过这次解密后得到的对应的解密jar包中包含解密后的Java类字节码以及未解密的spring加载类字节码。
需要注意的是,这里的解密算法还需与加密算法相对应,具体是指若采用了AES加密算法对字节码进行加密,在解密时采用AES解密算法对Java类字节码进行解密;若采用了DES加密算法对字节码进行加密,在解密时采用DES解密算法对Java类字节码进行解密。用户可根据实际情况选择合适的加密算法与对应的解密算法,此处仅为示例性说明,并不做限制。
可选地,为了更好地保护代码,防止代码被破解更改,S203之后还包括:当检测到所述第一解密jar包中的所述spring加载类字节码包含所述代理参数时,禁用代理并退出解密过程。
当检测到第一解密jar包中的spring加载类字节码包含代理参数时,禁用代理并退出解密过程。具体地,通过调用预设函数检测第一解密jar包中的spring加载类字节码是否包含agent代理参数,当检测到第一解密jar包中的spring加载类字节码包含代理参数时,禁用agent代理并退出解密过程,防止代理破解代码。预设函数用来检测spring加载类字节码是否包含代理参数,是用户根据实际情况预先设置好的,对此不做限定。
S204:当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
当检测到第一解密jar包中的spring加载类字节码未包含代理参数时,采用第二解密算法对spring加载类字节码进行解密,得到目标字节码;第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应。
具体地,通过调用预设函数检测第一解密jar包中的spring加载类字节码是否包含agent代理参数,当检测到第一解密jar包中的spring加载类字节码未包含代理参数时,采用第二解密算法对spring加载类字节码进行解密。第二加密算法是对目标jar包在第一次解密之后的基础上进行的第二次解密,由于目标jar包的加密环境不同,所以第二次解密算法也不相同。
例如,目标jar包属于生产环境(第一次解密采用用于解密Java类字节码且与生产环境对应解密算法对目标jar包解密),当检测到第一解密jar包中的spring加载类字节码未包含代理参数时,采用用于解密spring加载类字节码且与生产环境对应的解密算法对第一解密jar包(即spring加载类字节码)进行解密,得到目标字节码。
目标jar包属于非生产环境(第一次解密采用用于解密Java类字节码且与非生产环境对应解密算法对目标jar包解密),当检测到第一解密jar包中的spring加载类字节码未包含代理参数时,采用用于解密spring加载类字节码且与非生产环境对应的解密算法对第一解密jar包(即spring加载类字节码)进行解密,得到目标字节码。
此时的目标字节码是指对目标jar包进行两次解密操作后得到的字节码,目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。由于字节码加密过程只是在原字节码后添加了用于标识字节码所属环境的预设参数,终端在解密过程中会自动过滤该信息,所以该目标字节码也是未进行加密前的字节码。
需要注意的是,这里的解密算法也与加密算法相对应,具体是指若采用了AES加密算法对字节码进行加密,在解密时采用AES解密算法对spring加载类字节码进行解密;若采用了DES加密算法对字节码进行加密,在解密时采用DES解密算法对spring加载类字节码进行解密。用户可根据实际情况选择合适的加密算法与对应的解密算法,此处仅为示例性说明,并不做限制。
可选地,在S204之后还包括:将所述目标字节码打包生成jar包,并启动jar包。
具体地,终端将解密得到的目标字节码打包生成jar包,然后用户可以通过双击jar包启动jar包,或者使用CMD命令打开CMD命令行窗口,在此窗口执行java命令,用于启动jar包。
值得注意的是,在解密过程中对目标jar包中的Java类字节码以及spring加载类字节码分别采用了不同的解密方法进行解密,但在对字节码加密的过程中,并不区分字节码是属于Java类字节码还是spring加载类字节码,统一使用一种加密算法对其进行加密就可以。
本发明实施例,在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。上述方式,通过采用与加密算法相对应的解密算法对加密后的jar包进行解密,由于特殊的加密算法有效的保护了字节码文件,所以从另一方面来说,上述的解密方式也有效的保护了字节码文件,从而有效的保护了源代码。
请参见图3,图3是本发明一实施例提供的一种终端的示意图。终端包括的各单元用于执行图1对应的实施例中的各步骤。具体请参阅图1各自对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图3,终端3包括:
配置单元310,用于当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径。
获取单元320,用于根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包。
确定单元330,用于根据所述jar包的包信息确定所述目标字节码对应的加密环境。
设置单元340,用于通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数。
加密单元350,用于采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
进一步地,所述包信息包括生成所述jar包的运行环境的标识以及所述jar包的属性信息。确定单元330具体用于:
根据所述包信息中的所述运行环境的标识或所述属性信息确定所述目标字节码对应的加密环境。
进一步地,设置单元340具体用于:
通过Java类库调用动态库,基于所述动态库调用预设函数在所述目标字节码后添加与所述加密环境对应的预设参数。
请参见图4,图4是本发明另一实施例提供的一种终端的示意图。终端包括的各单元用于执行图2对应的实施例中的各步骤。具体请参阅图2各自对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图4,终端4包括:
检测单元410,用于在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
调用单元420,用于根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
第一解密单元430,用于调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
第二解密单元440,用于当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
进一步地,终端还包括:
禁用单元,用于当检测到所述第一解密jar包中的所述spring加载类字节码包含所述代理参数时,禁用代理并退出解密过程。
进一步地,调用单元420具体用于:
当所述目标jar包的加密环境为生产环境时,调用与所述生产环境对应的生产环境专用动态库;
当所述目标jar包的加密环境为非生产环境时,将用户信息传入所述启动参数中,调用与所述非生产环境对应的非生产环境专用动态库;通过所述非生产环境专用动态库收集本端信息,对所述本端信息和所述用户信息进行校验;
当所述校验结果为校验通过时,执行所述调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包。
请参见图5,图5是本发明再一实施例提供的一种终端的示意图。如图5所示,该实施例的终端5包括:处理器50、存储器51以及存储在所述存储器51中并可在所述处理器50上运行的计算机程序52。所述处理器50执行所述计算机程序52时实现上述各个终端的字节码加密的方法实施例中的步骤,例如图1所示的S101至S105。或者,所述处理器50执行所述计算机程序52时实现上述各装置实施例中各单元的功能,例如图3所示单元310至350功能。
示例性的,所述计算机程序52可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器51中,并由所述处理器50执行,以完成本发明。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序52在所述终端5中的执行过程。例如,所述计算机程序52可以被分割成配置单元、获取单元、确定单元、设置单元以及加密单元,各单元具体功能如上所述。
所述终端可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图5仅仅是终端5的示例,并不构成对终端5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端还可以包括输入输出终端、网络接入终端、总线等。
所称处理器50可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器51可以是所述终端5的内部存储单元,例如终端5的硬盘或内存。所述存储器51也可以是所述终端5的外部存储终端,例如所述终端5上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器51还可以既包括所述终端5的内部存储单元也包括外部存储终端。所述存储器51用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述存储器51还可以用于暂时地存储已经输出或者将要输出的数据。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方的精神和范围,均应包含在本发明的保护范围之内。
请参见图6,图6是本发明又一实施例提供的一种终端的示意图。如图6所示,该实施例的终端6包括:处理器60、存储器61以及存储在所述存储器61中并可在所述处理器60上运行的计算机程序62。所述处理60执行所述计算机程序62时实现上述各个终端的字节码解密的方法实施例中的步骤,例如图2所示的S201至S204。或者,所述处理器60执行所述计算机程序62时实现上述各装置实施例中各单元的功能,例如图4所示单元410至440功能。可以理解的是,执行如图1所示的S101~S105的终端与执行如图2所示的S201至S204的终端可以为同一终端。
示例性的,所述计算机程序62可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器61中,并由所述处理器60执行,以完成本发明。所述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序62在所述终端6中的执行过程。例如,所述计算机程序62可以被分割成检测单元、调用单元、第一解密单元以及第二解密单元,各单元具体功能如上所述。
所述终端可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图6仅仅是终端6的示例,并不构成对终端6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端还可以包括输入输出终端、网络接入终端、总线等。
所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器61可以是所述终端6的内部存储单元,例如终端6的硬盘或内存。所述存储器61也可以是所述终端6的外部存储终端,例如所述终端6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器61还可以既包括所述终端6的内部存储单元也包括外部存储终端。所述存储器61用于存储所述计算机程序以及所述终端所需的其他程序和数据。所述存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种字节码加密的方法,其特征在于,包括:
当检测到项目对象模型POM存在加密插件包时,基于预设属性配置所述POM中的待加密的目标字节码所属的目标Java包的路径;
根据所述路径获取所述目标Java包,并将所述目标Java包打包生成jar包;
根据所述jar包的包信息确定所述目标字节码对应的加密环境;
通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数;不同的加密环境对应不同的预设参数;
采用所述预设参数对应的加密算法对完成设置的所述目标字节码加密,生成加密jar包。
2.如权利要求1所述的方法,其特征在于,所述jar包的包信息包括生成所述jar包的运行环境的标识以及所述jar包的属性信息;所述根据所述jar包的包信息确定所述目标字节码对应的加密环境,包括:
根据所述jar包的包信息中的所述运行环境的标识或所述属性信息确定所述目标字节码对应的加密环境。
3.如权利要求1所述的方法,其特征在于,所述通过Java类库调用动态库,为所述目标字节码设置与所述加密环境对应的预设参数,包括:
通过Java类库调用动态库,基于所述动态库调用预设函数在所述目标字节码后添加与所述加密环境对应的预设参数。
4.一种字节码解密的方法,其特征在于,包括:
在检测到用于启动已加密的目标jar包的启动指令时,获取所述目标jar包,并基于所述目标jar包的包信息确定所述目标jar包的加密环境;所述启动指令包含启动参数;
根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库;
调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包;其中,所述第一解密算法用于解密Java类字节码且与所述加密环境对应;所述第一解密jar包含有解密后的Java类字节码以及spring加载类字节码;
当检测到所述第一解密jar包中的所述spring加载类字节码未包含代理参数时,采用第二解密算法对所述spring加载类字节码进行解密,得到目标字节码;其中,所述第二解密算法用于解密所述spring加载类字节码且与所述加密环境对应,所述目标字节码包含解密后的Java类字节码以及解密后的spring加载类字节码。
5.如权利要求4所述的方法,其特征在于,所述调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包之后,还包括:
当检测到所述第一解密jar包中的所述spring加载类字节码包含所述代理参数时,禁用代理并退出解密过程。
6.如权利要求4所述的方法,其特征在于,所述根据所述目标jar包的加密环境,调用与所述加密环境对应的专用动态库,包括:
当所述目标jar包的加密环境为生产环境时,调用与所述生产环境对应的生产环境专用动态库;
当所述目标jar包的加密环境为非生产环境时,将用户信息传入所述启动参数中,调用与所述非生产环境对应的非生产环境专用动态库;通过所述非生产环境专用动态库收集本端信息,对所述本端信息和所述用户信息进行校验;
当所述校验结果为校验通过时,执行所述调用所述专用动态库访问虚拟机工具接口JVMTI,在所述JVMTI中采用第一解密算法对所述目标jar包解密,得到第一解密jar包。
7.一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至3任一项所述方法的步骤。
8.一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求4至6任一项所述方法的步骤。
9.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求4至6任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811475634.7A CN109784007B (zh) | 2018-12-04 | 2018-12-04 | 一种字节码加密的方法、字节码解密的方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811475634.7A CN109784007B (zh) | 2018-12-04 | 2018-12-04 | 一种字节码加密的方法、字节码解密的方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109784007A CN109784007A (zh) | 2019-05-21 |
CN109784007B true CN109784007B (zh) | 2021-03-12 |
Family
ID=66496630
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811475634.7A Active CN109784007B (zh) | 2018-12-04 | 2018-12-04 | 一种字节码加密的方法、字节码解密的方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109784007B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110826031B (zh) * | 2019-10-31 | 2022-08-02 | 望海康信(北京)科技股份公司 | 加密方法、装置、计算机设备及存储介质 |
CN111159658B (zh) * | 2019-12-16 | 2022-04-01 | 广州三七互娱科技有限公司 | 字节码处理方法、系统、装置、计算机设备和存储介质 |
CN111177753B (zh) * | 2019-12-24 | 2021-03-23 | 广州极点三维信息科技有限公司 | 一种对Java内容仓库数据的加密处理方法、装置和设备 |
CN111625278B (zh) * | 2020-05-26 | 2023-12-19 | 深圳云之家网络有限公司 | 一种源代码文件的生成方法及相关设备 |
CN112395564A (zh) * | 2020-11-17 | 2021-02-23 | 平安普惠企业管理有限公司 | 类文件的保护与运行方法、装置、设备及存储介质 |
CN112600803B (zh) * | 2020-12-02 | 2022-07-19 | 上海哔哩哔哩科技有限公司 | Web端数据签名方法、装置及计算机设备 |
CN114338247B (zh) * | 2022-03-15 | 2022-05-27 | 中国信息通信研究院 | 数据传输方法和装置、电子设备、存储介质和程序产品 |
CN115129361B (zh) * | 2022-08-26 | 2022-12-30 | 北京亿赛通科技发展有限责任公司 | 一种Java应用程序的安全加固方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101000552A (zh) * | 2007-01-15 | 2007-07-18 | 华为技术有限公司 | Java类加载方法及加载器 |
CN101957903A (zh) * | 2010-09-13 | 2011-01-26 | 中兴通讯股份有限公司 | 一种保护类文件的方法和装置 |
CN102043932A (zh) * | 2010-12-31 | 2011-05-04 | 中国航空工业集团公司第六三一研究所 | 一种防止Java程序被反编译的方法 |
CN105022936A (zh) * | 2014-04-30 | 2015-11-04 | 北京畅游天下网络技术有限公司 | 一种类class文件加密解密方法和装置 |
CN106951767A (zh) * | 2017-04-28 | 2017-07-14 | 广东欧珀移动通信有限公司 | 解锁控制方法及相关产品 |
CN107992723A (zh) * | 2017-11-29 | 2018-05-04 | 南京莱斯信息技术股份有限公司 | 一种基于动态链接库的Java源码保护方法 |
-
2018
- 2018-12-04 CN CN201811475634.7A patent/CN109784007B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101000552A (zh) * | 2007-01-15 | 2007-07-18 | 华为技术有限公司 | Java类加载方法及加载器 |
CN101957903A (zh) * | 2010-09-13 | 2011-01-26 | 中兴通讯股份有限公司 | 一种保护类文件的方法和装置 |
CN102043932A (zh) * | 2010-12-31 | 2011-05-04 | 中国航空工业集团公司第六三一研究所 | 一种防止Java程序被反编译的方法 |
CN105022936A (zh) * | 2014-04-30 | 2015-11-04 | 北京畅游天下网络技术有限公司 | 一种类class文件加密解密方法和装置 |
CN106951767A (zh) * | 2017-04-28 | 2017-07-14 | 广东欧珀移动通信有限公司 | 解锁控制方法及相关产品 |
CN107992723A (zh) * | 2017-11-29 | 2018-05-04 | 南京莱斯信息技术股份有限公司 | 一种基于动态链接库的Java源码保护方法 |
Non-Patent Citations (1)
Title |
---|
java字节码混淆算法研究;何建军;《中国优秀硕士学位论文全文数据库》;20070331;I138-773 * |
Also Published As
Publication number | Publication date |
---|---|
CN109784007A (zh) | 2019-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
KR102217501B1 (ko) | 신뢰 실행 환경을 갖는 모바일 디바이스 | |
US9690498B2 (en) | Protected mode for securing computing devices | |
US9054865B2 (en) | Cryptographic system and methodology for securing software cryptography | |
US8572410B1 (en) | Virtualized protected storage | |
CN108229112B (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
CN112639778A (zh) | 指针认证及指针认证方案之间的动态切换 | |
CN110826031B (zh) | 加密方法、装置、计算机设备及存储介质 | |
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
WO2015149214A1 (en) | Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine | |
US9256756B2 (en) | Method of encryption and decryption for shared library in open operating system | |
Kim et al. | Design and performance evaluation of binary code packing for protecting embedded software against reverse engineering | |
CN111159658B (zh) | 字节码处理方法、系统、装置、计算机设备和存储介质 | |
CN114398598A (zh) | 一种库文件加密方法、解密方法以及加密装置 | |
CN111475168A (zh) | 一种代码编译方法及装置 | |
US11061998B2 (en) | Apparatus and method for providing security and apparatus and method for executing security to protect code of shared object | |
US11442738B2 (en) | Method for executing a machine code of a secure function | |
CN115906016A (zh) | 源码保护方法、装置、设备及存储介质 | |
CN117828555A (zh) | 一种低成本Java源代码保护方法及装置 | |
CN117874721A (zh) | 一种jar包防反编译方法 | |
KR20150055992A (ko) | 프로그램 보호 장치 | |
JP2014167718A (ja) | 不正使用防止機能付き共有ライブラリ | |
CN114297589A (zh) | 应用程序的资源保护方法、资源读取方法及装置 | |
KR20180100779A (ko) | 안드로이드용 어플리케이션의 멀티 실행 파일을 위한 암호화 방법 |
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 | ||
CB02 | Change of applicant information |
Address after: Room 1301, No.132, Fengqi Road, phase III, software park, Xiamen City, Fujian Province Applicant after: Xiamen Entropy Technology Co., Ltd Address before: 361000, Xiamen three software park, Fujian Province, 8 North Street, room 2001 Applicant before: XIAMEN ZKTECO BIOMETRIC IDENTIFICATION TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |