CN114461992A - 一种java程序代码保护方法、装置、设备及存储介质 - Google Patents
一种java程序代码保护方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114461992A CN114461992A CN202111674597.4A CN202111674597A CN114461992A CN 114461992 A CN114461992 A CN 114461992A CN 202111674597 A CN202111674597 A CN 202111674597A CN 114461992 A CN114461992 A CN 114461992A
- Authority
- CN
- China
- Prior art keywords
- encrypted
- java program
- program code
- java
- jar packet
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000004048 modification Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
-
- 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
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2107—File encryption
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种java程序代码保护方法、装置、设备及存储介质,其包括建立加密jar包,并将所述加密jar包存储至待调用文件夹;根据所述待调用文件夹中的加密jar包,对java程序加载器进行修改;根据修改后的所述java程序加载器,将待加密的java程序代码进行加密;修改JVM的class解密组件,对加密后的java程序代码进行解密。本发明提供的一种java程序代码保护方法、装置、设备及存储介质,通过建立加密jar包,基于加密jar包对程序加载器进行修改,再根据修改后的程序加载器对待加密的java程序代码进行加密,并修改class解密组件,对加密后的java程序代码进行解密,提高了导出字节码的难度,减小了程序报错的概率。
Description
技术领域
本发明涉及信息安全技术领域,尤其涉及一种java程序代码保护方法、装置、设备及存储介质。
背景技术
由于java程序是由编译生成的字节码在虚拟机上执行,代码非常容易被反编译,常用的代码保护手段有代码混淆、class加密等。代码混淆是将程序源码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。java程序代码混淆常用的手段是将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字,使得阅读的人无法根据名字猜测其用途。
class文件由于可以进行反编译,对信息系统核心关键的模块来说,可能会造成技术的泄漏。目前常用的class文件加密的方式是使用加密算法(DES、AES、RSA等)加密编译后的字节码文件,然后在程序加载前进行解密。
class加密常用的技术手段自定义一个类加载器Classloader,在这个类加载器中解密class文件。这种方案问题很明显,类加载器是整个加密环节的薄弱点,一旦类加载器文件被反编译,class加密就形同虚设。好点的方案是把类加载器也进行加密,然后使用jvmti技术,c++编写Agent.dll或so组件去解密类加载器class,即使是这样,但也完全可以从java层的Classloader在Agent后拿到解密后的class,根本不安全。甚至改一下本地jre的Classloader的jar源码,也能直接dump到解密后的class,或者从java进程中直接读所有的class,运行时候的class是完全没有加密的,所以也不存在任何安全性。
发明内容
有鉴于此,有必要提供一种java程序代码保护方法、装置、设备及存储介质,用以解决现有技术中代码混淆难以理解以及单一的class加密易被破解的问题。
为达到上述技术目的,本发明采取了以下技术方案:
第一方面,本发明提供了一种java程序代码保护方法,包括:
建立加密jar包,并将加密jar包存储至待调用文件夹;
根据待调用文件夹中的加密jar包,对java程序加载器进行修改;
根据修改后的java程序加载器,将待加密的java程序代码进行加密;
修改JVM的class解密组件,对加密后的java程序代码进行解密。
优选的,建立加密jar包,包括:建立认证加密的java工程,并将认证加密的java工程编译打包成加密jar包。
优选的,根据待调用文件夹中的加密jar包,对java程序加载器进行修改,包括:将加密jar包覆盖原有的程序加载器,对原有的程序加载器进行修改。
优选的,根据待调用文件夹中的加密jar包,对java程序加载器进行修改之后,包括:通过自定义的预设算法以及加密jar包,将JVM的class解密组件进行修改。
优选的,通过自定义的预设算法以及加密jar包,将JVM的class解密组件进行修改之前,还包括:将加密jar包加载至预设内存区域。
优选的,根据修改后的java程序加载器,将待加密的java程序代码进行加密,包括:通过修改后的程序加载器,将待加密的java程序代码进行加密。
优选的,修改JVM的class解密组件,对加密后的java程序代码进行解密,包括:根据修改后JVM的class解密组件,将java程序加载器加密的文件进行解密。
第二方面,本发明还提供了一种java程序代码保护装置,包括:
建立模块,用于建立加密jar包,并将加密jar包存储至待调用文件夹;
修改模块,用于根据待调用文件夹中的加密jar包,对java程序加载器进行修改;
加密模块,用于根据修改后的java程序加载器,将待加密的java程序代码进行加密;
解密模块,用于修改JVM的class解密组件,对加密后的java程序代码进行解密。
第三方面,本发明还提供了一种电子设备,包括存储器和处理器,其中,
存储器,用于存储程序;
处理器,与存储器耦合,用于执行存储器中存储的程序,以实现上述任一种实现方式中的java程序代码保护方法中的步骤。
第四方面,本发明还提供了一种计算机可读存储介质,用于存储计算机可读取的程序或指令,程序或指令被处理器执行时,能够实现上述任一种实现方式中的java程序代码保护方法中的步骤。
采用上述实施例的有益效果是:本发明提供的一种java程序代码保护方法、装置、设备及存储介质,通过建立加密jar包,基于加密jar包对程序加载器进行修改,再根据修改后的程序加载器对待加密的java程序代码进行加密,并修改class解密组件,对加密后的java程序代码进行解密,提高了导出字节码的难度,减小了程序报错的概率。
附图说明
图1为本发明提供的java程序代码保护方法的一实施例的流程示意图;
图2为本发明提供的java程序代码保护装置的一实施例的结构示意图;
图3为本发明实施例提供的java程序代码保护电子设备的结构示意图。
具体实施方式
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
本发明提供了一种java程序代码保护方法、装置、设备及存储介质,以下分别进行说明。
请参阅图1,图1为本发明提供的java程序代码保护方法的一实施例的流程示意图,本发明的一个具体实施例,公开了一种java程序代码保护方法,包括:
S101、建立加密jar包,并将加密jar包存储至待调用文件夹;
S102、根据待调用文件夹中的加密jar包,对java程序加载器进行修改;
S103、根据修改后的java程序加载器,将待加密的java程序代码进行加密;
S104、修改JVM的class解密组件,对加密后的java程序代码进行解密。
在本发明的具体的实施例中,步骤S101编写加密代码工程,再将编写的加密代码工程编译打包成加密jar包,再将该加密jar包放入需要加密的工程宝lib的文件夹中。
在本发明的具体的实施例中,步骤S102根据加密的jar包的加密逻辑,对java的程序加载器进行修改,以便转换成机器语言的时候能够识别加密程序。
在本发明的具体的实施例中,步骤S103将java的程序加载器修改,使得java的加载器能够识别加密程序,通过加密程序对要保护的资源进行加密。
在本发明的具体的实施例中,步骤S104根据加密的逻辑,对class的解密组件进行修改,使得解密组件能够对加密的资源进行解密,从而对加密后的java程序代码进行解密。
与现有技术相比,本实施例提供的一种java程序代码保护方法,通过建立加密jar包,基于加密jar包对程序加载器进行修改,再根据修改后的程序加载器对待加密的java程序代码进行加密,并修改class解密组件,对加密后的java程序代码进行解密,提高了导出字节码的难度,减小了程序报错的概率。
在本发明的一些实施例中,建立加密jar包,包括:建立认证加密的java工程,并将认证加密的java工程编译打包成加密jar包。
在上述实施例中,先编写加密的java代码工程,通过这个java代码工程可以实现加密认证算法,将该java代码工程进行编译打包成jar包,jar是一种与平台无关的文件格式,可将多个文件合成一个文件,jar文件是跨平台的,所以不必关心涉及具体平台的问题。除了可以包括声音和图像文件以外,也可以在其中包括类文件。
在本发明的一些实施例中,根据待调用文件夹中的加密jar包,对java程序加载器进行修改,包括:将加密jar包覆盖原有的程序加载器,对原有的程序加载器进行修改。
在上述实施例中,原java程序加载器虽然至能实现对一般java语言的识别,但是对编写的java加密代码工程不具备识别能力,通过对原java程序加载器进行修改,使得修改后的java程序加载器能够识别编写的加密逻辑。
可以理解的是,由于是整个jar包的加密,对除java代码以外的其他资源同样有保护能力。
在本发明的一些实施例中,根据待调用文件夹中的加密jar包,对java程序加载器进行修改之后,包括:通过自定义的预设算法以及加密jar包,将JVM的class解密组件进行修改。
在上述实施例中,自定义的预设算法为编写的解密算法,是基于加密jar包进行解密的逻辑,根据加密jar包以及该自定义的预设算法对JVM的class解密组件进行了修改,实现class解密组件能够对加密的资源文件进行解密。
在本发明的一些实施例中,通过自定义的预设算法以及加密jar包,将JVM的class解密组件进行修改之前,还包括:将加密jar包加载至预设内存区域。
在上述实施例中,对JVM的class解密组件进行修改时,需要先将加密jar包加载到特定的内存区域,可以避免原来在磁盘上操作jar容易被一些特定的解密程序捕获解密。
在本发明的一些实施例中,根据修改后的java程序加载器,将待加密的java程序代码进行加密,包括:通过修改后的程序加载器,将待加密的java程序代码进行加密。
在上述实施例中,将java的程序加载器进行修改,能够识别加密代码的逻辑,从而实现对java程序代码进行加密。可以理解的是,本发明除了对java程序代码进行加密以外,还可以实现对java代码以外的其他资源同样有保护能力。
在本发明的一些实施例中,修改JVM的class解密组件,对加密后的java程序代码进行解密,包括:根据修改后JVM的class解密组件,将java程序加载器加密的文件进行解密。
在上述实施例中,通过对JVM的class解密组件进行修改,从而使得解密组件可以对加密资源进行解密。把解密组件覆盖更新到JVM中后,就有了一套不同于一般java程序运行的加密解密的启动前逻辑步骤。
需要说明的是,通过定制jre程序启动器,将事先加密后的jar包解密并加载到特定内存区域,再通过自定义协议由Classloader类加载器加载这块内存区域里的jar包完成程序的加载。为了防止Classloader文件被反编译而暴露解密后的jar包,需要对Classloader字节码文件单独加密,加密和解密可以使用javaTI技术创建加解密组件(dll或so文件)然后加入类路径,在程序启动的时候加入启动参数,即实现了程序的整个启动过程。
为了更好实施本发明实施例中的java程序代码保护方法,在java程序代码保护方法基础之上,对应的,请参阅图2,图2为本发明提供的java程序代码保护装置的一实施例的结构示意图,本发明实施例提供了一种java程序代码保护装置200,包括:
建立模块201,用于建立加密jar包,并将加密jar包存储至待调用文件夹;
修改模块202,用于根据待调用文件夹中的加密jar包,对java程序加载器进行修改;
加密模块203,用于根据修改后的java程序加载器,将待加密的java程序代码进行加密;
解密模块204,用于修改JVM的class解密组件,对加密后的java程序代码进行解密。
这里需要说明的是:上述实施例提供的装置200可实现上述各方法实施例中描述的技术方案,上述各模块或单元具体实现的原理可参见上述方法实施例中的相应内容,此处不再赘述。
请参阅图3,图3为本发明实施例提供的java程序代码保护电子设备的结构示意图。基于上述java程序代码保护方法,本发明还相应提供了一种java程序代码保护设备,java程序代码保护设备可以是移动终端、桌上型计算机、笔记本、掌上电脑及服务器等计算设备。该java程序代码保护设备包括处理器310、存储器320及显示器330。图3仅示出了电子设备的部分组件,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
存储器320在一些实施例中可以是java程序代码保护设备的内部存储单元,例如java程序代码保护设备的硬盘或内存。存储器320在另一些实施例中也可以是java程序代码保护设备的外部存储设备,例如java程序代码保护设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器320还可以既包括java程序代码保护设备的内部存储单元也包括外部存储设备。存储器320用于存储安装于java程序代码保护设备的应用软件及各类数据,例如安装java程序代码保护设备的程序代码等。存储器320还可以用于暂时地存储已经输出或者将要输出的数据。在一实施例中,存储器320上存储有java程序代码保护程序340,该java程序代码保护程序340可被处理器310所执行,从而实现本申请各实施例的java程序代码保护方法。
处理器310在一些实施例中可以是一中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,用于运行存储器320中存储的程序代码或处理数据,例如执行java程序代码保护方法等。
显示器330在一些实施例中可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。显示器330用于显示在java程序代码保护设备的信息以及用于显示可视化的用户界面。java程序代码保护设备的部件310-330通过系统总线相互通信。
在一实施例中,当处理器310执行存储器320中java程序代码保护程序340时实现如上的java程序代码保护方法中的步骤。
本实施例还提供了一种计算机可读存储介质,其上存储有java程序代码保护程序,该java程序代码保护程序被处理器执行时实现以下步骤:
建立加密jar包,并将加密jar包存储至待调用文件夹;
根据待调用文件夹中的加密jar包,对java程序加载器进行修改;
根据修改后的java程序加载器,将待加密的java程序代码进行加密;
修改JVM的class解密组件,对加密后的java程序代码进行解密。
综上,本实施例提供的一种java程序代码保护方法、装置、设备及存储介质,通过建立加密jar包,基于加密jar包对程序加载器进行修改,再根据修改后的程序加载器对待加密的java程序代码进行加密,并修改class解密组件,对加密后的java程序代码进行解密,提高了导出字节码的难度,减小了程序报错的概率。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种java程序代码保护方法,其特征在于,包括:
建立加密jar包,并将所述加密jar包存储至待调用文件夹;
根据所述待调用文件夹中的加密jar包,对java程序加载器进行修改;
根据修改后的所述java程序加载器,将待加密的java程序代码进行加密;
修改JVM的class解密组件,对加密后的java程序代码进行解密。
2.根据权利要求1所述的java程序代码保护方法,其特征在于,所述建立加密jar包,包括:建立认证加密的java工程,并将所述认证加密的java工程编译打包成所述加密jar包。
3.根据权利要求1所述的java程序代码保护方法,其特征在于,所述根据所述待调用文件夹中的加密jar包,对java程序加载器进行修改,包括:将所述加密jar包覆盖原有的程序加载器,对原有的程序加载器进行修改。
4.根据权利要求1所述的java程序代码保护方法,其特征在于,所述根据所述待调用文件夹中的加密jar包,对java程序加载器进行修改之后,包括:通过自定义的预设算法以及所述加密jar包,将所述JVM的class解密组件进行修改。
5.根据权利要求4所述的java程序代码保护方法,其特征在于,所述通过自定义的预设算法以及所述加密jar包,将所述JVM的class解密组件进行修改之前,还包括:将所述加密jar包加载至预设内存区域。
6.根据权利要求3所述的java程序代码保护方法,其特征在于,所述根据修改后的所述java程序加载器,将待加密的java程序代码进行加密,包括:通过修改后的程序加载器,将所述待加密的java程序代码进行加密。
7.根据权利要求5所述的java程序代码保护方法,其特征在于,所述修改JVM的class解密组件,对加密后的java程序代码进行解密,包括:根据修改后JVM的所述class解密组件,将java程序加载器加密的文件进行解密。
8.一种java程序代码保护装置,其特征在于,包括:
建立模块,用于建立加密jar包,并将所述加密jar包存储至待调用文件夹;
修改模块,用于根据所述待调用文件夹中的加密jar包,对java程序加载器进行修改;
加密模块,用于根据修改后的所述java程序加载器,将待加密的java程序代码进行加密;
解密模块,用于修改JVM的class解密组件,对加密后的java程序代码进行解密。
9.一种电子设备,其特征在于,包括存储器和处理器,其中,
所述存储器,用于存储程序;
所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以实现上述权利要求1-7中任一项所述java程序代码保护方法的步骤。
10.一种计算机可读存储介质,其特征在于,用于存储计算机可读取的程序或指令,所述程序或指令被处理器执行时,能够实现上述权利要求1-7中任一项所述java程序代码保护方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111674597.4A CN114461992A (zh) | 2021-12-31 | 2021-12-31 | 一种java程序代码保护方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111674597.4A CN114461992A (zh) | 2021-12-31 | 2021-12-31 | 一种java程序代码保护方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114461992A true CN114461992A (zh) | 2022-05-10 |
Family
ID=81407292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111674597.4A Pending CN114461992A (zh) | 2021-12-31 | 2021-12-31 | 一种java程序代码保护方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114461992A (zh) |
-
2021
- 2021-12-31 CN CN202111674597.4A patent/CN114461992A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10853270B2 (en) | Cryptographic pointer address encoding | |
US9443064B2 (en) | Protecting method and system of java source code | |
US11748468B2 (en) | Dynamic switching between pointer authentication regimes | |
CN107851162B (zh) | 用于对安全i/o的密码引擎进行安全编程的技术 | |
KR100946042B1 (ko) | 탬퍼-레지스턴트 애플리케이션 구동 방법 및 시스템과 컴퓨터 판독 가능 저장 매체 | |
EP2831790B1 (en) | Secured execution of a web application | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
US20120260250A1 (en) | Information processing device, virtual machine creation method, and application distribution system | |
CN104866739A (zh) | 安卓系统中应用程序加密方法及系统 | |
JP2007233426A (ja) | アプリケーション実行装置 | |
JP2007310688A (ja) | マイクロコンピュータおよびそのソフトウェア改竄防止方法 | |
CN113032741B (zh) | 类文件加密方法、类文件运行方法、装置、设备及介质 | |
CN117150515B (zh) | Eda二次开发源代码的安全保护方法、电子设备及存储介质 | |
CN117313046A (zh) | 一种代码加固方法、代码加载方法、设备及介质 | |
JP2013041598A (ja) | プログラムコードの生成方法、プログラム開発システム、携帯用データキャリア、及びプログラム | |
CN114461992A (zh) | 一种java程序代码保护方法、装置、设备及存储介质 | |
CN114943062B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN117828555B (zh) | 一种低成本Java源代码保护方法及装置 | |
CN118101201B (zh) | 一种基于DICE和pKVM的隐私数据保护系统和方法 | |
CN117910005A (zh) | 一种Java字节码的加载方法、装置、设备及存储介质 | |
De Win et al. | Security Middleware for Mobile Applications | |
CN115361132A (zh) | 密钥生成方法、装置、片上系统、设备及存储介质 | |
CN115587370A (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 |