一种类class文件加密解密方法和装置的制造方法

文档序号:9304741阅读:339来源:国知局
一种类class文件加密解密方法和装置的制造方法
【技术领域】
[0001]本发明涉及软件保护技术领域,特别是涉及一种类class文件加密的方法,一种类class文件解密的方法,一种类class文件加密的装置和一种类class文件解密的装置。
【背景技术】
[0002]Java是一种跨平台的程序设计语言,用Java语言编写的程序称为小应用程序Applet,用编译器将Applet的Java源代码编译成类class文件后,用户端只要装上Java的客户软件就可以在网上直接运行Applet。Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。
[0003]用Java编写的应用程序需要通过公开渠道让其他第三方可以使用,但是开发者又不希望其中的一些核心代码或者算法被第三方易于获取,造成技术外泄等问题。Java源代码经过编译生成类class文件后在Java虚拟机JVM中解释执行,这种解释执行的运行机制导致Java源代码很容易被反编译。例如,通过重载Java虚拟机中的类加载器1adClass类,以达到运行时解密其他类class文件的目的。由于解密的方法必然写在类加载器1adClass类中,而这个类势必不能加密。这样其他人只要反编译类加载器1adClass类就可以得到其中的解密算法,那么类class文件的加密操作就没有任何意义了。
[0004]因此,目前需要本领域技术人员迫切解决的一个技术问题就是:提出一种类class文件加密解密的方法,提高类class文件加密及解密效率,不容易被反编译,并且能应用于多种场景中。

【发明内容】

[0005]本发明实施例所要解决的技术问题是提供一种类class文件加密的方法和一种类class文件解密的方法,提高类class文件加密及解密效率,不容易被反编译,并且能应用于多种场景中。
[0006]相应的,本发明实施例还提供了一种类class文件加密的装置和一种类class文件解密的装置,用以保证上述方法的实现及应用。
[0007]为了解决上述问题,本发明公开了一种类class文件加密的方法,其特征在于,包括:
[0008]预置密钥数据库;所述密钥数据库中包括一个或多个密钥及对应的一个或多个加密规则;
[0009]调用所述密钥数据库中的密钥及对应的加密规则对类class文件进行加密,获得加密类class文件;
[0010]对所述加密类class文件添加所述密钥对应的密钥标识。
[0011]优选地,所述密钥包括普通加密密钥,所述普通加密密钥具有对应的普通加密规贝U,所述调用所述密钥数据库中的密钥及对应的加密规则对类class文件进行加密,获得加密类class文件的步骤为:
[0012]调用所述密钥数据库中的普通加密密钥及普通加密规则对类class文件进行加密获得普通加密类class文件。
[0013]优选地,所述双向加密密钥具有对应的双向加密规则,所述密钥包括双向加密密钥,所述调用所述密钥数据库中的密钥及对应的加密规则对类class文件进行加密,获得加密类class文件的步骤为:
[0014]调用所述密钥数据库中的双向加密密钥及双向加密规则对类class文件进行加密获得双向加密类class文件。
[0015]本发明实施例还公开了一种类class文件解密的方法,包括:
[0016]当类class文件启动时,将所述类class文件及预置的密钥数据库加载到内存中;
[0017]判断所述类class文件是否存在密钥标识;
[0018]若所述类class文件存在密钥标识,则在所述密钥数据库调用所述密钥标识对应的密钥及解密规则,采用所述密钥及解密规则对所述类class文件进行解密获得解密类class文件;
[0019]执行所述解密类class文件。
[0020]优选地,所述判断所述类class文件是否存在密钥标识的步骤之后,还包括:
[0021]若所述类class文件不存在密钥标识,则执行所述类class文件。
[0022]优选地,所述方法还包括:
[0023]若所述类class文件及预置的密钥数据库加载到Java虚拟机中,则调用所述Java虚拟机的cbClassFileLoadHook回调函数获得类class文件的内存地址;
[0024]若所述类class文件及预置的密钥数据库加载到Tomcat或Javassist中,则采用所述Tomcat或Javassist的JNI接口获得类class文件的内存地址。
[0025]优选地,所述密钥数据库中包括密钥,所述密钥包括普通加密密钥,所述普通加密密钥具有对应的普通解密规则,所述在密钥数据库调用所述密钥标识对应的密钥对所述类class文件进行解密获得解密类class文件的步骤包括:
[0026]调用所述密钥数据库中的普通加密密钥及对应的普通解密规则对内存地址中指定长度的类class文件进行解密,获得普通解密类class文件。
[0027]优选地,所述密钥包括双向加密密钥,所述双向加密密钥具有对应的双向解密规贝1J,所述在密钥数据库调用所述密钥标识对应的密钥对所述类class文件进行解密获得解密类class文件的步骤包括:
[0028]调用所述密钥数据库中的双向加密密钥及对应的双向解密规则对内存地址中指定长度的类class文件进行解密,获得双向解密类class文件。
[0029]本发明实施例还公开了一种类class文件加密的装置,包括:
[0030]预置模块,用于预置密钥数据库;所述密钥数据库中包括一个或多个密钥及对应的一个或多个加密规则;
[0031]调用模块,用于调用所述密钥数据库中的密钥及对应的加密规则对类class文件进行加密,获得加密类class文件;
[0032]添加模块,用于对所述加密类class文件添加所述密钥对应的密钥标识。
[0033]本发明实施例还公开了一种类class文件解密的装置,包括:
[0034]加载模块,用于当类class文件启动时,将所述类class文件及预置的密钥数据库加载到内存中;
[0035]判断模块,用于判断所述类class文件是否存在密钥标识;若所述类class文件存在密钥标识,则调用解密模块;
[0036]解密模块,用于在所述密钥数据库调用所述密钥标识对应的密钥及解密规则,采用所述密钥及解密规则对所述类class文件进行解密获得解密类class文件;
[0037]执行模块,用于执行所述解密类class文件。
[0038]与现有技术相比,本发明实施例包括以下优点:
[0039]在本发明实施例中预置密钥数据库,当Java应用程序或者服务启动的时候加载到内存中,只需要调用密钥数据库即可以实现在Java应用程序运行时对类class文件的加密及解密。其中,密钥数据库可以是一个采用C++语言开发的动态库文件,由于C++的编译器对程序员写的代码做了大量的优化,反编译出来的结构已经完全不是程序员设计的流程了。而且C++代码只能反编译成为汇编代码,在没有符号表的情况下,基本不能看清原有的语义,因此执行效率高并且本身不容易被反编译。加密后的类class文件不但能够在Java虚拟机直接执行,还能够放到Tomcat容器和Javassist框架等多种场景中执行。
【附图说明】
[0040]图1是本发明的一种类class文件加密的方法实施例的步骤流程图;
[0041]图2是本发明的一种类class文件解密的方法实施例的步骤流程图;
[0042]图3是本发明的一种在Tomcat容器和Javassist框架下的解密流程图;
[0043]图4是本发明的一种类class文件加密解密的模块示意图;
[0044]图5是本发明的一种类class文件基于⑶I的窗口程序加密解密的示意图
[0045]图6是本发明的一种类class文件加密的装置实施例的结构框图;
[0046]图7是本发明的一种类class文件解密的装置实施例的结构框图。
【具体实施方式】
[0047]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0048]为了使本领域技术人员更好地理解本发明实施例,以下对本发明实施例的应用场景进行简单介绍。
[0049]Java 虚拟机:
[0050]Java虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得只需正确解析Java应用程序的类class文件,生成在Java虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。
[0051]Tomcat 容器:
[0052]Tomcat容器是一个免费的开源Serlvet应用程序的容器,在网络游戏项目中经常用来搭建WEB应用服务器。与传统的桌面应用程序不同,Tomcat容器中的应用程序是一个WAR(Web Archive file,网络应用程序文件),是Sun提出的一种WEB应用程序格式,与JARQava Archive file
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1