Java程序的保护与运行方法、装置和终端与流程

文档序号:11199796阅读:843来源:国知局
Java程序的保护与运行方法、装置和终端与流程

本发明实施例涉及软件保护技术,尤其涉及一种java程序的保护与运行方法、装置和终端。



背景技术:

软件作为一种特殊的产品,由于其数字化的特征,从问世起就一直遭受盗版的困扰。盗版的存在不仅给软件开发者造成了巨大的损失,也极大的阻碍了整个软件行业的发展。java程序很容易被反编译,对于class类文件采用jdk(javadevelopmentkit,软件开发工具包)的javap命令行工具可以得到java虚拟机指令,另外采用反编译软件jd_gui可以直接得到java源码,因此软件很容易被反编译,进而被盗版,安全性很低。



技术实现要素:

本发明提供一种java程序的保护与运行方法、装置、终端和计算机存储介质,以实现增加反编译的难度,提高软件产品的安全性。

第一方面,本发明实施例提供了一种java程序的保护方法,包括:

获取java程序中待保护方法的java虚拟机指令、参数和返回值;

对所述java虚拟机指令进行加密;

将加密后的java虚拟机指令保存在指定的目录;

构造受保护方法,所述受保护方法中包括:用于查找所述加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及用于根据所述参数和返回值运行解密后的java虚拟机指令的代码;

使用所述受保护方法替换所述java程序中的所述待保护方法。

第二方面,本发明实施例还提供了一种java程序的运行方法,包括:

当java程序运行到受保护方法时,查找加密后的java虚拟机指令;其中,所述受保护方法是上述的受保护方法;

对所述加密后的java虚拟机指令进行解密;

根据所述参数和返回值运行解密后的java虚拟机指令。

第三方面,本发明实施例还提供了一种java程序的保护装置,包括:

获取模块,用于获取java程序中待保护方法的java虚拟机指令、参数和返回值;

加密模块,用于对所述java虚拟机指令进行加密;

保存模块,用于将加密后的java虚拟机指令保存在指定的目录;

构造模块,用于构造受保护方法,所述受保护方法中包括:用于查找所述加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及用于根据所述参数和返回值运行解密后的java虚拟机指令;

替换模块,用于使用所述受保护方法替换所述java程序中的所述待保护方法。

第四方面,本发明实施例还提供了一种java程序的运行装置,包括:

查找模块,用于当java程序运行到受保护方法时,查找加密后的java虚拟机指令;其中,所述受保护方法是上述的受保护方法;

解密模块,用于对所述加密后的java虚拟机指令进行解密;

运行模块,用于根据参数和返回值运行解密后的java虚拟机指令。

第五方面,本发明实施例还提供了一种终端,所述终端包括:

一个或多个处理器;

存储器,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的java程序的保护方法。

第六方面,本发明实施例还提供了一种终端,所述终端包括:

一个或多个处理器;

存储器,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述的java程序的运行方法。

第七方面,本发明实施例还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的java程序的保护方法。

第八方面,本发明实施例还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述的java程序的运行方法。

本发明实施例将java程序中待保护方法的java虚拟机指令加密,构造出没有记载未加密的虚拟机指令的受保护方法,该受保护方法运行时,会查找加密后的java虚拟机指令进行解密,运行解密后的虚拟机指令。这种方法级别的加密保护使得只有当执行到受保护方法时,才会在内存中对加密后的java虚拟机指令进行解密,而无法直接用反编译工具获取到java程序的源码,解决现有技术中软件易于被反编译和盗版,安全性很低的问题,实现增加反编译的难度,提高软件产品的安全性效果。

附图说明

图1是本发明实施例一提供的java程序的保护方法的流程图;

图2是本发明实施例二提供的java程序的保护方法的流程图;

图3是本发明实施例三提供的java程序的运行方法的流程图;

图4是本发明实施例四提供的java程序的保护装置的结构示意图;

图5是本发明实施例五提供的java程序的运行装置的结构示意图;

图6是本发明实施例六提供的终端的结构示意图;

图7是本发明实施例七提供的终端的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的java程序的保护方法的流程图,本实施例可适用于对java程序进行加密编译,以避免被反编译的情况,该方法可以由计算机终端来执行,具体包括如下步骤:

步骤110、获取java程序中待保护方法的java虚拟机指令、参数和返回值;

步骤120、对所述java虚拟机指令进行加密;

步骤130、将加密后的java虚拟机指令保存在指定的目录;

步骤140、构造受保护方法,所述受保护方法中包括:用于查找加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及用于根据所述参数和返回值运行解密后的java虚拟机指令的代码;

步骤150、使用所述受保护方法替换所述java程序中的所述待保护方法。

一般地,java程序中的方法记载在类文件(class文件)中,其包含用于读取java虚拟机指令的代码以及用于根据参数和返回值运行java虚拟机指令的代码。本实施例提供的java程序的保护方法,获取待编译的方法的java虚拟机指令、参数和返回值后,将java虚拟机指令加密并保存在指定的目录中,构造没有直接记载原来的java虚拟机指令的受保护方法,只有在受保护方法运行时,才会在内存中解密java虚拟机指令,根据原来的参数和返回值运行解密后的java虚拟机指令,实现运行待保护方法。从而不能直接反编译获得待保护方法的实际的运行过程,实现对java程序的保护。

具体地,所述指定的目录优选为所述java程序的压缩包的随机子目录,以避免该方法运行过程中出现调用错误的情况。

进一步地,在受保护方法中的用于根据所述参数和返回值运行解密后的java虚拟机指令的代码,在被处理器执行时,实现以下步骤:

根据解密后的java虚拟机指令创建自定义的classloader和临时类;

使用所述自定义的classloader加载所述临时类,并通过反射机制获取到所述临时类中的方法;

根据读取的所述参数和返回值,运行所述临时类中的方法。

由于将加密后的java虚拟机指令保存在压缩包的子目录中,java自带的classloader无法加载,本实施例通过自定义classloader,创建临时类,获取到临时类中的方法。结合获取到的参数和返回值,可以运行设计者实际要编译的方法。

本实施例的技术方案,将java程序中待保护方法的java虚拟机指令加密,构造出没有记载未加密的虚拟机指令的受保护方法,该受保护方法运行时,会查找加密后的java虚拟机指令进行解密,运行解密后的虚拟机指令。这种方法级别的加密保护使得只有当执行到受保护方法时,才会在内存中将加密后的java虚拟机指令进行解密,而无法直接用反编译工具获取到java程序的源码,解决现有技术中软件易于被反编译和盗版,安全性很低的问题,实现增加反编译的难度,提高软件的安全性效果。

实施例二

图2为本发明实施例二提供的java程序的保护方法的流程图,本实施例可适用于对java程序进行加密编译,以避免被反编译的情况,该方法可以由计算机终端来执行。本实施例与实施例一的区别点在于本实施例获取待保护方法的虚拟机指令、参数和返回值,是通过从待加密的java程序的类文件中分析得出类中的方法的虚拟机指令、参数和返回值;对所述虚拟机指令加密后,是通过采用jclasslib在该待加密的java程序的类文件中将待保护方法修改为受保护方法来实现使用受保护方法替代待保护方法。具体地,如图2所示,本实施例提供的包括如下步骤:

步骤210、从java程序的类文件中读取待保护方法的java虚拟机指令、参数和返回值;

步骤220、对所述java虚拟机指令进行加密;

步骤230、将加密后的java虚拟机指令保存在指定的目录;

步骤240、构造受保护方法,所述受保护方法中包括:用于查找加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及用于根据所述参数和返回值运行解密后的java虚拟机指令的代码;

步骤250、采用jclasslib在所述java程序的类文件中将所述待保护方法修改为所述受保护方法。

本实施例提供的java程序的保护方法可供专门负责对软件产品进行加密保护的开发者使用,实现对已有的java程序进行方法级别的保护。待保护方法,可以是由开发者选择指定,也可以是随机选择,或者是java程序中每一方法都作为待保护方法。

在上述技术方案的基础上,步骤220、对java虚拟机指令进行加密,可使用纯软件的算法来进行加密,例如,使用aes加密算法或rsa加密算法对所述方法的java虚拟机指令进行加密。对应地,方法的运行步骤是采用aes加密算法或rsa加密算法所对应的解密算法解密虚拟机指令。

为了进一步提高java程序被反编译的难度,本实施例优选使用存储在硬件加密锁中的加密算法来对java虚拟机指令进行加密。具体地,步骤220、对java虚拟机指令进行加密包括:

通过jni调用硬件加密锁中的加密算法;

使用该加密算法对所述待保护方法的java虚拟机指令进行加密。

硬件加密锁是一种可插拔连接在计算机终端,可与计算机终端进行数据交换的加密产品。硬件加密锁能存储加密算法,当它连接在计算机终端上,计算机终端上执行的程序可调用存储在加密锁内的加密算法,这些加密算法可通过使用加密函数对要加密的内容进行封装、混淆加密的内容的流程或者选取加密内容的片段存放于加密锁等方式实现。如果使用加密锁内的加密算法对本实施例要保护的java程序进行加密,则在方法运行过程中,也需要调用加密锁内的加密算法才能进行解密。使得在方法运行时,还会通过加密锁是否插拔来验证运行java程序的用户的合法性。且由于加密算法独立存储于硬件加密锁内,使得非法用户获得java程序后,由于缺失运行过程中的必要内容,使得对java程序进行反编译的难度更大。

下面以具体的例子来进一步说明本实施例技术方案的工作原理。该例子在微软windows764位系统上可实现。

假设java程序的源码如下:

采用eclipse可生成压缩包为helloworld.jar的java程序,记载上述源码对应的运行步骤。执行本实施例,可分析java程序中的类及类中的方法。对于该例子来说,压缩包(jar包)中有一个类为helloworld(对应类文件helloworld.class),类中有main方法,方法有一个字符串参数,返回值为空。main方法的java虚拟机指令为:

0:getstatic#16//fieldjava/lang/system.out:ljava/io/printstream;

3:ldc#22//stringhello,world!

5:invokevirtual#24//methodjava/io/printstream.println:(ljava/lang/string;)v

8:return

本实施例保护main方法,调用硬件加密锁内的加密算法对main方法的java虚拟机指令进行加密,例如使用市场上的深思精锐5加密锁中的slm_encrypt函数(该函数使用对称加密算法对加密内容进行加密)。将加密后的java虚拟机指令保存在和类文件helloworld.class同目录下的encrypt_main.hex文件中。

采用jclasslib在所述java程序的类文件(helloworld.class)中使用受保护方法替换待保护方法,对应的源码为:

受保护的main方法中,read_encrypt_data函数读取加密的java虚拟机指令,作为enc_code;decrypt_code函数是通过jni调用精锐5加密锁的slm_decrypt函数对enc_code进行解密,得到code。

自定义classloader后,mcl.df(code).getmethods()函数加载临时类,通过反射获取临时类的方法,调用am[0].invoke(args),即调用参数和返回值给java程序返回原来的结果。

综上,本实施例的技术方案,将java程序中待保护方法的java虚拟机指令采用硬件加密锁的加密算法进行加密保护,构造出没有记载未加密的虚拟机指令的受保护方法,该受保护方法运行时,会查找加密后的java虚拟机指令进行解密,运行解密后的虚拟机指令。这种方法级别的加密保护使得只有当执行到受保护方法时,才会在java程序中查找加密后的java虚拟机指令,并在内存中对加密后的java虚拟机指令进行解密,因此无法直接用反编译工具获取到java程序的源码,且需要调用硬件加密锁的加密算法,即要求运行该java程序的用户持有硬件加密锁,验证了用户的合法性,进一步提高了反编译的难度。

实施例三

图3为本发明实施例三提供的java程序的运行方法的流程图,本实施例可适用于运行使用上述实施例提供的保护方法加密编译的java程序,该方法可以由计算机终端来执行,具体包括如下步骤:

步骤310、当java程序运行到受保护方法时,查找加密后的java虚拟机指令;其中,所述受保护方法是在对java程序中待保护方法的java虚拟机指令加密并保存在指定的目录后构造的;所述受保护方法与所述待保护方法的参数与返回值相同;

步骤320、对所述加密后的java虚拟机指令进行解密;

步骤330、根据所述参数和返回值运行解密后的java虚拟机指令。

其中,受保护方法为实现上述实施例所构造的受保护方法,包括用于查找所述加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及用于根据所述参数和返回值运行解密后的java虚拟机指令的代码,对应实现步骤310至330。

在具体实施时,步骤330、根据所述参数和返回值,运行解密后的java虚拟机指令,具体包括:

根据解密后的java虚拟机指令创建自定义的classloader和临时类;

使用所述自定义的classloader加载所述临时类,并通过反射机制获取到所述临时类中的方法;

根据获取的所述参数和返回值,运行所述临时类中的方法。

由于受保护方法调用虚拟机指令的规则发生了更改,java自带的classloader无法加载,本实施例通过自定义classloader,创建临时类,获取到临时类中的方法。结合获取到的参数和返回值,可以运行设计者实际要编译的方法。

以实施例二提供的helloword程序为例,受保护方法对应的源码为:

对应的源码为:

main方法的运行步骤如下:

java程序正常运行,调用到main方法时,read_encrypt_data函数读取加密的java虚拟机指令,作为enc_code;decrypt_code函数是通过jni调用精锐5加密锁的slm_decrypt函数对enc_code进行解密,得到code。

自定义classloader后,mcl.df(code).getmethods()函数加载临时类,通过反射获取临时类的方法,调用am[0].invoke(args),即调用参数和返回值给java程序返回原来的结果。

本实施例的技术方案,运行上述实施例所构造的受保护方法,具备上述实施例相应的有益效果。

当然,本发明实施所提供的java程序的运行方法,其能运行的java程序方法不限于上述实施例所构造的受保护方法,还可以是本发明任意实施例所提供的java程序的保护方法所构造的受保护方法。

实施例四

图4为本发明实施例四提供的java程序的保护装置的结构示意图,本实施例可适用于对java程序进行加密编译,以避免被反编译的情况,该装置包括:

获取模块410,用于获取java程序中待保护方法的java虚拟机指令、参数和返回值;

加密模块420,用于对所述java虚拟机指令进行加密;

保存模块430,用于将加密后的java虚拟机指令保存在指定的目录;

构造模块440,用于构造受保护方法,所述受保护方法中包括:用于查找加密后的java虚拟机指令的代码、用于对所述加密后的java虚拟机指令进行解密的代码以及根据所述参数和返回值运行解密后的java虚拟机指令的代码;

替换模块450,用于使用所述受保护方法替换所述java程序中的所述待保护方法。

作为其中一种实施方式,所述加密模块420包括:

调用单元,用于通过jni调用硬件加密锁中的加密算法;

执行单元,用于使用该加密算法对所述待保护方法的java虚拟机指令进行加密。

作为另一种实施方式,所述加密模块420具体用于使用aes加密算法或rsa加密算法对所述待保护方法的java虚拟机指令进行加密。

作为其中一种实施方式,所述获取模块具体用于从java程序的类文件中读取待保护方法的java虚拟机指令、参数和返回值;

所述替换模块具体用于采用jclasslib在所述java程序的类文件中将所述待保护方法修改为所述受保护方法。

优选地,所述指定的目录为所述java程序的压缩包的随机子目录。

本发明实施例所提供的java程序的保护装置可执行本发明任意实施例所提供的java程序的保护方法,具备执行方法相应的功能模块和有益效果。

实施例五

图5为发明实施例五提供的java程序的运行装置的结构示意图,本实施例可适用于运行使用上述实施例提供的保护方法加密编译的java程序,该装置包括:

查找模块510,用于当java程序运行到受保护方法时,查找加密后的java虚拟机指令;其中,所述受保护方法是上述实施例所述的受保护方法;即所述受保护方法是在对java程序中待保护方法的java虚拟机指令加密并保存在指定的目录后构造的;所述受保护方法与所述待保护方法的参数与返回值相同;

解密模块520,用于对所述加密后的java虚拟机指令进行解密;

运行模块530,用于根据所述参数和返回值运行解密后的java虚拟机指令。

在具体实施时,运行模块530包括:

创建单元,用于根据解密后的java虚拟机指令创建自定义的classloader和临时类;

加载单元,用于使用所述自定义的classloader加载所述临时类,并通过反射机制获取到所述临时类中的方法;

执行单元,用于根据获取的所述参数和返回值,运行所述临时类中的方法。

本发明实施例所提供的java程序的运行装置可执行本发明任意实施例所提供的java程序的运行方法,具备执行方法相应的功能模块和有益效果。

实施例六

图6为本发明实施例六提供的一种终端的结构示意图,如图6所示,该终端包括处理器610、存储器620、输入装置630和输出装置640;终端中处理器610的数量可以是一个或多个,图6中以一个处理器610为例;终端中的处理器610、存储器620、输入装置630和输出装置640可以通过总线或其他方式连接,图6中以通过总线连接为例。

存储器620作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,本实施例提供的终端的存储器存储本发明实施例中的java程序的保护方法对应的程序指令/模块(即java程序的保护装置中的获取模块410、加密模块420、保存模块430、构造模块440和替换模块450)。处理器610通过运行存储在存储器620中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的java程序的保护方法。

存储器620可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器620可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器620可进一步包括相对于处理器610远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置630可用于接收输入的数字或字符信息,以及产生与终端的用户设置以及功能控制有关的键信号输入。输出装置640可包括显示屏等显示设备。

实施例七

图7为本发明实施例七提供的一种终端的结构示意图,如图7所示,该终端包括处理器710、存储器720、输入装置730和输出装置740;终端中处理器710的数量可以是一个或多个,图7中以一个处理器710为例;终端中的处理器710、存储器720、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线连接为例。

存储器720作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,本实施例提供的终端的存储器存储本发明实施例中的java程序的运行方法对应的程序指令/模块(即java程序的运行装置中的查找模块510、解密模块520和运行模块530)。处理器710通过运行存储在存储器720中的软件程序、指令以及模块,从而执行终端的各种功能应用以及数据处理,即实现上述的java程序的运行方法。

存储器720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器720可进一步包括相对于处理器710远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置730可用于接收输入的数字或字符信息,以及产生与终端的用户设置以及功能控制有关的键信号输入。输出装置740可包括显示屏等显示设备。

实施例八

本发明实施例八还提供一种存储有计算机程序的计算机存储介质,所述计算机程序被处理器执行时实现上述任一实施例提供的java程序的保护方法。

当然,本发明实施例所提供的一种包含计算机程序的存储介质,其计算机程序不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的java程序的保护方法中的相关操作。

实施例九

本发明实施例九还提供一种存储有计算机程序的计算机存储介质,所述计算机程序被处理器执行时实现上述任一实施例提供的java程序的运行方法。

当然,本发明实施例所提供的一种包含计算机程序的存储介质,其计算机程序不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的java程序的运行方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式记载出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

值得注意的是,上述java程序的保护装置和运行装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1