首页> 中国专利> 一种基于JNI运行Java加密jar包的方法及系统

一种基于JNI运行Java加密jar包的方法及系统

摘要

本发明提出了一种基于JNI运行Java加密jar包的方法及系统,涉及加密技术领域。包括:获取加密jar包;设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入解密模块;利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;利用加密工具加密jar包,而后进行再打包;最后按照预设参数传递加密jar包路径给启动引导程序。其能够在解密启动阶段,阻止对java语言的反编译,使得java语言编写的应用安全性得到提高。

著录项

  • 公开/公告号CN115114595A

    专利类型发明专利

  • 公开/公告日2022-09-27

    原文格式PDF

  • 申请/专利权人 北京中安星云软件技术有限公司;

    申请/专利号CN202211036548.2

  • 发明设计人 唐更新;罗宁;宋辉;赵卫国;

    申请日2022-08-29

  • 分类号G06F21/14(2013.01);G06F8/30(2018.01);G06F8/72(2018.01);G06F9/455(2006.01);G06F21/60(2013.01);

  • 代理机构成都鱼爪智云知识产权代理有限公司 51308;

  • 代理人刘爱平

  • 地址 100000 北京市海淀区创业路8号5号楼4层5-6-401

  • 入库时间 2023-06-19 17:09:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-07-21

    发明专利申请公布后的驳回 IPC(主分类):G06F21/14 专利申请号:2022110365482 申请公布日:20220927

    发明专利申请公布后的驳回

  • 2022-10-18

    实质审查的生效 IPC(主分类):G06F21/14 专利申请号:2022110365482 申请日:20220829

    实质审查的生效

  • 2022-09-27

    公开

    发明专利申请公布

说明书

技术领域

本发明涉及加密技术领域,具体而言,涉及一种基于JNI运行Java加密jar包的方法及系统。

背景技术

为了保护代码数据的安全,开发人员在完成一个jar包的开发后,通常需要对该jar包进行加密。目前,对jar包进行加密的方法主要是基于jar包内资源的加密以及通过拓展ClassLoader来实现,但现有技术中由于Java字节码的抽象级别较高,因此使用Java语言编写的应用可以被反编译,存在安全性差的问题;故而需要一种基于JNI运行Java加密jar包的方法及系统。

发明内容

本发明的目的在于提供一种基于JNI运行Java加密jar包的方法及系统,其能够在解密启动阶段,阻止对java语言的反编译,使得java语言编写的应用安全性得到提高。

本发明的实施例是这样实现的:

第一方面,本申请实施例提供一种基于JNI运行Java加密jar包的方法,其包括获取加密jar包;设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入解密模块;利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;利用加密工具加密jar包,而后进行再打包;最后按照预设参数传递加密jar包路径给启动引导程序。

在本发明的一些实施例中,加载Java解密模块到虚拟机中的步骤包括:将解密模块编译后每个class文件注册到虚拟机中。

在本发明的一些实施例中,并将加密jar包引导进入解密模块的步骤包括:将需运行的加密jar包路径等信息传递给解密模块,解密模块将加密jar包路径注册进类加载器。

在本发明的一些实施例中,设置启动引导程序对Java解密方法进行native修饰的步骤包括:将c语言编译的启动引导程序中解密加密后jar包的函数,与解密模块的Java代码关联。

在本发明的一些实施例中,利用加密工具加密jar包后的步骤还包括:创建一个空的MANIFEST.MF文件,而后对加密jar包进行再打包。

在本发明的一些实施例中,加密工具采用openssl加密工具。

在本发明的一些实施例中,类加载器采用URLClassloader类加载器。

第二方面,本申请实施例提供一种基于JNI运行Java加密jar包的系统,其包括读取模块,用于获取加密jar包;启动引导模块,用于设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入解密模块;解密模块,用于利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;加密再打包模块,用于利用加密工具加密jar包,而后进行再打包;运行模块,用于按照预设参数传递加密jar包路径给启动引导程序。

第三方面,本申请实施例提供一种电子设备,包括至少一个处理器、至少一个存储器和数据总线;其中:处理器与存储器通过数据总线完成相互间的通信;存储器存储有可被处理器执行的程序指令,处理器调用程序指令以执行一种基于JNI运行Java加密jar包的方法。

第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现一种基于JNI运行Java加密jar包的方法。

相对于现有技术,本发明的实施例至少具有如下优点或有益效果:

针对java语言编写的应用容易被反编译的问题,本设计替换传统使用java命令运行jar包的方式,采用C语言编写的JAR包启动引导程序,其中启动程序功能包括jar包解密以及jar包启动引导。由此使得在解密启动阶段,阻止对java语言的反编译,使得java语言编写的应用安全性得到提高。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明中一种基于JNI运行Java加密jar包的方法的时序图;

图2为本发明中一种基于JNI运行Java加密jar包的方法的流程图;

图3为本发明中一种基于JNI运行Java加密jar包的系统的结构示意图;

图4为本发明中一种电子设备的结构示意图。

图标:1、读取模块;2、启动引导模块;3、解密模块;4、加密再打包模块;5、运行模块;6、处理器;7、存储器;8、数据总线。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

需要说明的是,在本文中,术语“包括”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

在本申请的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本申请中的具体含义。

下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的各个实施例及实施例中的各个特征可以相互组合。

实施例1

请参阅图1和图2,为本申请实施例提供的一种基于JNI运行Java加密jar包的方法,针对java语言编写的应用容易被反编译的问题,本设计替换传统使用java命令运行jar包的方式,采用C语言编写的JAR包启动引导程序,其中启动程序功能包括jar包解密以及jar包启动引导。由此使得在解密启动阶段,阻止对java语言的反编译,使得java语言编写的应用安全性得到提高。

S1:获取加密jar包;即获取加密jar包路径的初始信息。

S2:设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入Java解密模块;

其中native修饰方法,是一个Java方法调用了一个非Java代码的接口。在定义navtive方法时,并不需要提供实现体,因为其实现体是用非Java语言在外面实现的。并且native可以和任何修饰符连用,abstract除外。其实现代码如下:

(*env)->RegisterNatives(env, clazz, gMethods, numMethods)

而加载Java解密模块到JVM(虚拟机)中,即将Java解密模块编译后每个class文件注册到JVM(虚拟机)中。其实现代码如下:

(*env)->DefineClass(env,"cn/datafort/boot/classloader/jar/FileHeader",NULL,(const jbyte*)__cn_datafort_boot_classloader_jar_FileHeader_class,(jsize)__cn_datafort_boot_classloader_jar_FileHeader_class_len);

S3:利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;

根据JVM native的定义,在Java解密模块中使用native关键字修饰Java解密方法。JVM native中的native关键字修饰的Java方法是一个原生方法,方法对应的实现Java作用范围达不到,而是在其他编程语言(如C和C++中实现)。其实现代码为:

public native byte[] desData(byte[] encData);

根据URLClassloader的定义,自定义URLClassloader实现加密后Jar包中类文件及资源文件的加载。其实现代码为:

public class LaunchedURLClassLoader extends URLClassLoader {}

S4:利用加密工具加密jar包,而后进行再打包;

使用openssl加密工具加密jar包,其实现代码为:

openssl des3 -nosalt -md md5 -k 111 -in test.jar -out tmp/test.jar

对加密后的jar包进行再打包,其实现代码为:

jar -cvf0m enc-test.jar ./META-INF/MANIFEST.MF test.jar

S5:最后按照预设参数传递加密jar包路径给启动引导程序。

在本发明的一些实施例中,加载Java解密模块到虚拟机中的步骤包括:将Java解密模块编译后每个class文件注册到虚拟机中。

在本发明的一些实施例中,并将加密jar包引导进入Java解密模块的步骤包括:将需运行的加密jar包路径等信息传递给Java解密模块,Java解密模块将加密jar包路径注册进类加载器。

在本发明的一些实施例中,设置启动引导程序对Java解密方法进行native修饰的步骤包括:将c语言编译的启动引导程序中解密加密后jar包的函数,与Java解密模块的Java代码关联。

关于启动引导程序,本实施例的解密数据以及对应的逻辑以GCC编译器进行编译,其实现代码为:

static jbyteArray getByteInfo(JNIEnv* env, jobject thiz, jbyteArrayencData) {return encData;}

#define JNIREG_CLASS "cn/datafort/boot/classloader/jar/Native"

static JNINativeMethod gMethods[] =

{{"desData", "([B)[B", (void*)getByteInfo}};

而关联java native方法到c语言的方法实在是利用java语言调用c语言程序,其属于现有技术,不做赘述。

在本发明的一些实施例中,利用加密工具加密jar包后的步骤还包括:创建一个空的MANIFEST.MF文件,而后对加密jar包进行再打包。MANIFEST.MF文件本身是一个定义了与扩展和包相关的数据的文件,其创建一个空白文件,便于后续操作的数据填入。

在本发明的一些实施例中,类加载器采用URLClassloader类加载器。

实施例2

请参阅图3,为本发明提供的一种基于JNI运行Java加密jar包的系统,包括读取模块1,用于获取加密jar包;启动引导模块2,用于设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入Java解密模块;解密模块3,用于利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;加密再打包模块4,用于利用加密工具加密jar包,而后进行再打包;运行模块5,用于按照预设参数传递加密jar包路径给启动引导程序。

实施例3

请参阅图4,为本发明提供的一种电子设备,包括至少一个处理器6、至少一个存储器7和数据总线8;其中:处理器6与存储器7通过数据总线8完成相互间的通信;存储器7存储有可被处理器6执行的程序指令,处理器6调用程序指令以执行一种基于JNI运行Java加密jar包的方法。例如实现:

获取加密jar包;设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入Java解密模块;利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;利用加密工具加密jar包,而后进行再打包;最后按照预设参数传递加密jar包路径给启动引导程序。

实施例4

本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器6执行时实现一种基于JNI运行Java加密jar包的方法。例如实现:

获取加密jar包;设置启动引导程序对Java解密方法进行native修饰,而后加载Java解密模块到虚拟机中;并将加密jar包引导进入Java解密模块;利用native关键字修饰Java解密方法,根据类加载器的定义,对加密后Jar包中类文件及资源文件进行加载;利用加密工具加密jar包,而后进行再打包;最后按照预设参数传递加密jar包路径给启动引导程序。

其中,存储器7可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。

处理器6可以是一种集成电路芯片,具有信号处理能力。该处理器6可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其它的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号