CN111552931A - java代码的加壳方法与系统 - Google Patents
java代码的加壳方法与系统 Download PDFInfo
- Publication number
- CN111552931A CN111552931A CN202010360272.8A CN202010360272A CN111552931A CN 111552931 A CN111552931 A CN 111552931A CN 202010360272 A CN202010360272 A CN 202010360272A CN 111552931 A CN111552931 A CN 111552931A
- Authority
- CN
- China
- Prior art keywords
- code
- obfuscated
- java
- source
- type
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000004590 computer program Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 10
- 238000005516 engineering process Methods 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 abstract 1
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 238000005336 cracking Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012946 outsourcing Methods 0.000 description 1
- 238000012827 research and development Methods 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/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种java代码的加壳方法,包括:将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码;将所述待混淆代码通过编译工具进行编译,得到编译代码;根据混淆字典对所述编译代码进行字符替换,生成混淆代码;获取预先生成的密钥,通过加密规则将所述密钥加密所述混淆代码,得到加密代码;根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则;将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。本发明的有益效果在于:增加了代码的安全性。此外,本发明还涉及区块链技术,解密规则可存储于区块链节点中。
Description
技术领域
本发明实施例涉及通信加密技术领域,尤其涉及一种java代码的加壳方法与系统。
技术背景
目前,在互联网技术高速发展的今天,知识产权保护问题日益突出。软件公司针对内部源码安全往往具有很强的把控力,通过诸如制度、监控、审计等手段规范员工源码安全意识。然而针对银行类本地化部署项目以及给到外包公司二次开发的项目,如何防止使用方通过反编译获取源码,进而侵犯知识产权成为日益严重的课题。不仅如此,源码泄露还会增加企业研发成本,降低市场竞争优势,创新能力发展受限。
鉴于java应用程序代码的跨平台性特点,许多公司都是通过java语言开发应用软件。业界对java应用程序源码保护的通用做法是代码混淆,然而混淆后的代码仅仅是对关键字符的替换,内部代码逻辑仍然可以通过分析获得,导致代码安全性不高。
发明内容
有鉴于此,本发明实施例的目的是提供一种java代码的加壳方法与系统,加强了代码的安全性。
为实现上述目的,本发明实施例提供了一种java代码的加壳方法,包括:
接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码;
将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码;
将所述待混淆代码通过编译工具进行编译,得到编译代码;
根据混淆字典对所述编译代码进行字符替换,生成混淆代码;
获取预先生成的密钥,通过加密规则将所述密钥加密所述混淆代码,得到加密代码;
根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则;
将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
进一步地,所述将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码包括:
根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型;
将所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
进一步地,所述待混淆代码为java源程序代码,存储方式为第一文件格式;所述编译代码为java字节代码,存储方式为第二文件格式;
所述将所述待混淆代码通过编译工具进行编译得到编译代码包括:
将所述第一文件格式的所述待混淆代码通过编译工具进行编译,得到所述第二文件格式的所述编译代码,以供类加载器进行加载,所述类加载器为字节码类加载器。
进一步地,根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则包括:
生成用于解密所述加密代码对应的所述解密规则,其中,所述解密规则存储在区块链中;
在所述加载容器中,根据所述解密规则以及所述加密代码的类型定制类加载器。
进一步地,所述将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密之后,包括:
所述类加载器通过覆写loadClass方法继承所述加密代码的类型,以加载所述加密代码;
所述类加载器根据配置文件获取所述密钥,并根据所述解密规则以及所述密钥解密所述加密代码,得到编译代码。
进一步地,所述获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码之前,包括:
生成所述混淆代码的密钥,并将所述密钥写入至所述配置文件中;
将所述配置文件存储至所述加载容器中,以供所述类加载器在所述加载容器中,根据所述配置文件获取所述密钥对所述加密代码进行解密。
为实现上述目的,本发明实施例还提供了一种java代码的加壳系统,包括:
接收模块,用于接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码;
分层模块,用于将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码;
编译模块,用于将所述待混淆代码通过编译工具进行编译,得到编译代码;
混淆模块,用于根据混淆字典对所述编译代码进行字符替换,生成混淆代码;
加密模块,用于获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码;
定制模块,用于根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则;
生成模块,用于将所述加密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
进一步地,所述分层模块进一步用于:
根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型;
将所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
为实现上述目的,本发明实施例还提供了一种计算机设备,所述计算机设备包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的java代码的加壳方法的步骤。
为实现上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上所述的java代码的加壳方法的步骤。
本发明实施例提供的java代码的加壳方法与系统,通过对源代码进行混淆,降低了源代码被反编译破解的风险;且对混淆代码进行加密以对源代码进行二次加密,增加了加壳机制。并且运行加密代码时定制了类加载器ClassLoader,攻击者即使通过对定制ClassLoader本身进行破解,但是由于源代码本身已经做了混淆,增加了破解难度。该机制对代码侵入性极低,能够被广泛的应用到本地化部署和输出二次开发能力的场景中。
附图说明
图1为本发明java代码的加壳方法实施例一的流程图。
图2为本发明java代码的加壳方法实施例一的步骤S102的流程图。
图3为本发明java代码的加壳方法实施例一的步骤S109的流程图
图4为本发明java代码的加壳方法实施例一的步骤S110的流程图。
图5为本发明java代码的加壳方法实施例一的步骤S113的流程图。
图6为本发明java代码的加壳系统实施例二的程序模块示意图。
图7为本发明计算机设备实施例三的硬件结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参阅图1,示出了本发明实施例一之java代码的加壳方法的步骤流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以计算机设备2为执行主体进行示例性描述。具体如下。
步骤S100,接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码。
具体地,待处理源代码为java程序的源代码;待处理源代码的代码类型包括接口、实体类以及核心代码的类。
步骤S102,将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码。
具体地,预设规则为混淆规则,用户可自定义混淆规则,确定哪些源代码的类型可以进行混淆,将所述待处理源代码分成待混淆源代码和非混淆源代码,将核心代码进行抽离,针对接口、实体类保留源码输出。代码类型包括service的实现代码类型、接口类型、spi类型以及序列化类型,确定好哪些是核心代码,再通过预设规则确定哪些可以进行混淆。
示例性地,参阅图2,所述步骤S102进一步包括:
步骤S1021,根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型。
具体地,引入proguard插件,配置混淆策略,得到待混淆代码。混淆规则将待混淆代码分为主要混淆源代码:将该主要混淆源代码对应类型的名称、属性、方法名都进行混淆;次要混淆源代码:对次要混淆源代码对应类型的名称不混淆,其而对应类型的属性、方法名选择性混淆;非混淆对象:非混淆源代码,混淆后可能出现异常,不进行混淆。混淆规则包括但不限于:所有的本地native方法不被混淆;某些类的子类不能被混淆,因为这些子类,有可能被外部调用;枚举类不能被混淆;序列化的类不被混淆;资源类及其方法,都不能被混淆;回调方法不能被混淆;保留类和成员不被混淆;内嵌类不能被混淆;处理反射相关的类和方法不能被混淆。
步骤S1022,将所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
具体地,代码分层的目的是为了支持二次开发,同时保护核心代码不被泄露。代码分层的具体实现方法:将service的实现代码剥离层单独模块进行混淆,而接口、spi、序列化等非核心代码仍然源码输出,方便二次开发集成。
步骤S104,将所述待混淆代码通过编译工具进行编译,得到编译代码。
示例性地,所述待混淆代码为java源程序代码,存储方式为第一文件格式;所述编译代码为java字节代码,存储方式为第二文件格式;所述步骤S104进一步包括:
将所述第一文件格式的所述待混淆代码通过编译工具进行编译,得到所述第二文件格式的所述编译代码,以供所述类加载器进行加载,所述类加载器为字节码加载容器。
具体地,待混淆代码为java的源程序代码,待混淆代码存储方式的第一文件格式为.java文件,在经过java编译器编译之后就被转换成java字节代码,该存储方式的第二文件格式为.class文件,即编译代码。类加载器进行加载编译代码时,获取.class文件的字节码进行加载。
步骤S106,根据混淆字典对所述编译代码进行字符替换,生成混淆代码。
具体地,此时的混淆代码文件里包括可以进行编译运行的混淆代码,首先将编译代码根据混淆字典进行字符替换,得到混淆代码,将混淆代码存入至混淆代码文件中,混淆代码文件为.class文件。proguard是一个纯java编写的混淆工具,有客户端跟jar包两种使用方式。可以将程序打包为jar,然后用工具进行混淆,也可以在maven项目对象模型中导入proguard的插件,得到混淆代码文件,对源代码进行混淆。
示例性地,通过预先配置的混淆字典对编译代码做字符替换,即使反编译出来,也是混淆的特殊字符。混淆之前必须配置混淆字典,可在编译代码进行编译时读取混淆字典,对编译代码中的核心代码字符进行替换,替换后的字符来自于混淆字典。通过对混淆字典的设计,增强混淆后的可读性难度。
示例性地,混淆前,首先定义配置文件:proguard使用后缀为.pro的文件作为配置文件,在这个文件里配置需要混淆的jar文件(包括有待混淆代码),混淆后输出的jar文件,混淆需要引用的java类库等;混淆时:下载proguard,解压将lib目录里的proguard.jar文件和pro配置文件复制到java安装目录的bin下,如果设置了JAVA_HOME(父节点),也可以不用复制到该目录下,然后使用以下的命令来进行混淆,假设pro配置文件命名为myconfig.pro;最后进行验证:可以使用jd-gui反编译工具来验证一下混淆结果,把混淆前和混淆后的jar拖到jd-gui工具,然后再对比源代码,可以得到混淆后反编译得到的与源代码差别很大。
步骤S108,获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码。
具体地,通过java提供的KeyGenerator提供对称密钥生成器的功能,支持各种算法,生成密钥。得到密钥之后,还要有一个加密编译代码的独立加密程序,通过该独立加密程序将密钥加密至混淆代码进行加密,得到加密代码。采用3DES加密算法对混淆代码进行加密,3DES也叫Triple DES,它是DES加密算法的一种模式,使用3条56位的密钥对混淆代码进行三次加密。简单来说,由于计算机的运算能力的增强,原版DES密码的密钥容易被暴力破解,3DES即是用来提供一种相对简单的方法,通过增加DES的密钥长度来避免类似的破解。
示例性地,参阅图3,所述步骤S108之后还包括步骤S109:
步骤S109A,生成所述混淆代码的密钥,并将所述密钥写入至所述配置文件中。
具体地,将密钥写入到配置文件中,类加载器进行加载时,会根据配置文件寻找密钥位置进行解密。
步骤S109B,将所述配置文件存储至所述加载容器中,以供所述类加载器在所述加载容器中,根据所述配置文件获取所述密钥对所述加密代码进行解密。
具体地,配置文件放置于加载容器中,当接收解密指令时,加载类加载器,先根据配置文件获取密钥,类加载器再利用密钥对加密代码进行解密。
步骤S110,根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则。
具体地,在解密前,为Java虚拟机,可以为web容器(加载容器)创建一个定制ClassLoader类(类加载器)的实例,然后显式地要求它装入另外加密代码的类型。这就强制JVM(Java Virtual Machine,Java虚拟机)把加密代码的型类关联到定制的ClassLoader。即,在JVM中定制类加载器,类加载器包括加密代码的所有类型。
示例性地,参阅图4,所述步骤S110进一步包括:
步骤S110A,生成用于解密所述加密代码对应的所述解密规则,其中,所述解密规则存储在区块链中。
具体地,在对加密代码进行加密时,设置对应的加密规则,用于当类加载器加载加密代码时,通过解密规则对加密代码进行解密。
需要强调的是,为进一步保证上述解密规则的私密和安全性,上述解密规则还可以存储于一区块链的节点中。
步骤S110B,在所述加载容器中,根据所述解密规则以及所述加密代码的类型定制类加载器。
具体地,将解密规则装载至加载容器中的类加载器中,该类加载器可以进行解密处理。得到解密指令时,启动解密应用,使用类加载器加载class文件到内存生成字节数组,此时的二进制字节是加密过的,根据加密规则编写解密方法,对该字节数组进行解密;最后将字节数组再转成class对象实例返回。
步骤S112,将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
具体地,将加密规则与加密代码进行封装得到jar包,完成对java源程序代码的运行环境加密处理,防止应用的无限部署。
示例性地,参阅图5,所述步骤S112之后还包括步骤S113:
步骤S113A,所述类加载器通过覆写loadClass方法继承所述加密代码的类型,以加载所述加密代码。
具体地,类加载器加载加密代码时,先获取密钥对加密代码进行解密,再通过类加载器ClassLoader加载并分析编译代码。
覆写loadClass方法加载编译代码的名称(即jar包的包名)的二进制类型,loadClass方法是ClassLoader类(即类加载器)自己实现的,该覆写loadClass方法中的逻辑就是双亲委派模式的实现。也可手动地将调用.loadClass,以便让ClassLoader去加载混淆代码的类。从loadClass实现也可以知道如果不想重新定义加载类的规则,也没有复杂的逻辑,只想在运行时加载自己指定的类(混淆代码的所有类型),那么可以直接使用代码进行加载,代码为:this.getClass().getClassLoder.loadClass("className"),这样就可以直接调用ClassLoader的loadClass方法获取到混淆代码中的class对象。
步骤S113B,所述类加载器根据配置文件获取所述密钥,并根据所述解密规则以及所述密钥解密所述加密代码,得到编译代码。
具体地,解密规则为对加密代码的字节码的解密,要改写JVM中web容器(加载容器)中的类加载器,通过自定义类加载器来加载加密后的class字节码,得到编译代码。
实施例二
请继续参阅图6,示出了本发明java代码的加壳系统实施例二的程序模块示意图。在本实施例中,java代码的加壳系统20可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述java代码的加壳方法。本发明实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述java代码的加壳系统20在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
接收模块200,用于接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码。
具体地,待处理源代码为java程序的源代码;待处理源代码的代码类型包括接口、实体类以及核心代码的类。
分层模块202,用于将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码。
具体地,预设规则为混淆规则,用户可自定义混淆规则,确定哪些源代码的类型可以进行混淆,将所述待处理源代码分成待混淆源代码和非混淆源代码,将核心代码进行抽离,针对接口、实体类保留源码输出。代码类型包括service的实现代码类型、接口类型、spi类型以及序列化类型,确定好哪些是核心代码,再通过预设规则确定哪些可以进行混淆。
示例性地,所述分层模块202进一步用于:
根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型。
具体地,引入proguard插件,配置混淆策略,得到待混淆代码。混淆规则将待混淆代码分为主要混淆源代码:将该主要混淆源代码对应类型的名称、属性、方法名都进行混淆;次要混淆源代码:对次要混淆源代码对应类型的名称不混淆,其而对应类型的属性、方法名选择性混淆;非混淆对象:非混淆源代码,混淆后可能出现异常,不进行混淆。混淆规则包括但不限于:所有的本地native方法不被混淆;某些类的子类不能被混淆,因为这些子类,有可能被外部调用;枚举类不能被混淆;序列化的类不被混淆;资源类及其方法,都不能被混淆;回调方法不能被混淆;保留类和成员不被混淆;内嵌类不能被混淆;处理反射相关的类和方法不能被混淆。
所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
具体地,代码分层的目的是为了支持二次开发,同时保护核心代码不被泄露。代码分层的具体实现方法:将service的实现代码剥离层单独模块进行混淆,而接口、spi、序列化等非核心代码仍然源码输出,方便二次开发集成。
编译模块204,用于将所述待混淆代码通过编译工具进行编译,得到编译代码。
示例性地,所述待混淆代码为java源程序代码,存储方式为第一文件格式;所述编译代码为java字节代码,存储方式为第二文件格式;所述步骤S104进一步包括:
将所述第一文件格式的所述待混淆代码通过编译工具进行编译,得到所述第二文件格式的所述编译代码,以供所述类加载器进行加载,所述类加载器为字节码加载容器。
具体地,待混淆代码为java的源程序代码,待混淆代码存储方式的第一文件格式为.java文件,在经过java编译器编译之后就被转换成java字节代码,该存储方式的第二文件格式为.class文件,即编译代码。类加载器进行加载编译代码时,获取.class文件的字节码进行加载。
混淆模块206,用于根据混淆字典对所述编译代码进行字符替换,生成混淆代码。
具体地,此时的混淆代码文件里包括可以进行编译运行的混淆代码,首先将编译代码根据混淆字典进行字符替换,得到混淆代码,将混淆代码存入至混淆代码文件中,混淆代码文件为.class文件。proguard是一个纯java编写的混淆工具,有客户端跟jar包两种使用方式。可以将程序打包为jar,然后用工具进行混淆,也可以在maven项目对象模型中导入proguard的插件,得到混淆代码文件,对源代码进行混淆。
示例性地,通过预先配置的混淆字典对编译代码做字符替换,即使反编译出来,也是混淆的特殊字符。混淆之前必须配置混淆字典,可在编译代码进行编译时读取混淆字典,对编译代码中的核心代码字符进行替换,替换后的字符来自于混淆字典。通过对混淆字典的设计,增强混淆后的可读性难度。
示例性地,混淆前,首先定义配置文件:proguard使用后缀为.pro的文件作为配置文件,在这个文件里配置需要混淆的jar文件(包括有待混淆代码),混淆后输出的jar文件,混淆需要引用的java类库等;混淆时:下载proguard,解压将lib目录里的proguard.jar文件和pro配置文件复制到java安装目录的bin下,如果设置了JAVA_HOME(父节点),也可以不用复制到该目录下,然后使用以下的命令来进行混淆,假设pro配置文件命名为myconfig.pro;最后进行验证:可以使用jd-gui反编译工具来验证一下混淆结果,把混淆前和混淆后的jar拖到jd-gui工具,然后再对比源代码,可以得到混淆后反编译得到的与源代码差别很大。
加密模块208,用于获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码。
具体地,通过java提供的KeyGenerator提供对称密钥生成器的功能,支持各种算法,生成密钥。得到密钥之后,还要有一个加密编译代码的独立加密程序,通过该独立加密程序将密钥加密至混淆代码进行加密,得到加密代码。采用3DES加密算法对混淆代码进行加密,3DES也叫Triple DES,它是DES加密算法的一种模式,使用3条56位的密钥对混淆代码进行三次加密。简单来说,由于计算机的运算能力的增强,原版DES密码的密钥容易被暴力破解,3DES即是用来提供一种相对简单的方法,通过增加DES的密钥长度来避免类似的破解。
定制模块210,用于根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则。
具体地,在解密前,为Java虚拟机,可以为web容器(加载容器)创建一个定制ClassLoader类(类加载器)的实例,然后显式地要求它装入另外加密代码的类型。这就强制JVM(Java Virtual Machine,Java虚拟机)把加密代码的型类关联到定制的ClassLoader。即,在JVM中定制类加载器,类加载器包括加密代码的所有类型。
示例性地,所述定制模块210进一步用于:
生成用于解密所述加密代码对应的所述解密规则,其中,所述解密规则存储在区块链中。
具体地,在对加密代码进行加密时,设置对应的加密规则,用于当类加载器加载加密代码时,通过解密规则对加密代码进行解密。
在所述加载容器中,根据所述解密规则以及所述加密代码的类型定制类加载器。
具体地,将解密规则装载至加载容器中的类加载器中,该类加载器可以进行解密处理。得到解密指令时,启动解密应用,使用类加载器加载class文件到内存生成字节数组,此时的二进制字节是加密过的,根据加密规则编写解密方法,对该字节数组进行解密;最后将字节数组再转成class对象实例返回。
生成模块212,用于将所述加密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
具体地,将加密规则与加密代码进行封装得到jar包,完成对java源程序代码的运行环境加密处理,防止应用的无限部署。
实施例三
参阅图7,是本发明实施例三之计算机设备的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该计算机设备2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图7所示,所述计算机设备2至少包括,但不限于,可通过系统总线相互通信连接存储器21、处理器22、网络接口23、以及java代码的加壳系统20。其中:
本实施例中,存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备2的外部存储设备,例如该计算机设备2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备2的操作系统和各类应用软件,例如实施例二的java代码的加壳系统20的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备2的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行java代码的加壳系统20,以实现实施例一的java代码的加壳方法。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述服务器2与其他电子装置之间建立通信连接。例如,所述网络接口23用于通过网络将所述服务器2与外部终端相连,在所述服务器2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,GSM)、宽带码分多址(Wideband CodeDivision Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。需要指出的是,图7仅示出了具有部件20-23的计算机设备2,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器21中的所述java代码的加壳系统20还可以被分割为一个或者多个程序模块,所述一个或者多个程序模块被存储于存储器21中,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
例如,图6示出了所述实现java代码的加壳系统20实施例二的程序模块示意图,该实施例中,所述java代码的加壳系统20可以被划分为接收模块200、分层模块202、混淆模块204、编译模块206、加密模块208、定制模块210以及生成模块212。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述java代码的加壳系统20在所述计算机设备2中的执行过程。所述程序模块200-212的具体功能在实施例二中已有详细描述,在此不再赘述。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储java代码的加壳系统20,被处理器执行时实现实施例一的java代码的加壳方法。
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种java代码的加壳方法,其特征在于,包括:
接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码;
将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码;
将所述待混淆代码通过编译工具进行编译,得到编译代码;
根据混淆字典对所述编译代码进行字符替换,生成混淆代码;
获取预先生成的密钥,通过加密规则将所述密钥加密所述混淆代码,得到加密代码;
根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则;
将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
2.根据权利要求1所述的java代码的加壳方法,其特征在于,所述将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码包括:
根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型;
将所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
3.根据权利要求1所述的java代码的加壳方法,其特征在于,所述待混淆代码为java源程序代码,存储方式为第一文件格式;所述编译代码为java字节代码,存储方式为第二文件格式;
所述将所述待混淆代码通过编译工具进行编译得到编译代码包括:
将所述第一文件格式的所述待混淆代码通过编译工具进行编译,得到所述第二文件格式的所述编译代码,以供类加载器进行加载,所述类加载器为字节码类加载器。
4.根据权利要求2所述的java代码的加壳方法,其特征在于,所述根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则包括:
生成用于解密所述加密代码对应的所述解密规则,其中,所述解密规则存储在区块链中;
在所述加载容器中,根据所述解密规则以及所述加密代码的类型定制类加载器。
5.根据权利要求4所述的java代码的加壳方法,其特征在于,所述将所述解密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密之后,包括:
所述类加载器通过覆写loadClass方法继承所述加密代码的类型,以加载所述加密代码;
所述类加载器根据配置文件获取所述密钥,并根据所述解密规则以及所述密钥解密所述加密代码,得到编译代码。
6.根据权利要求5所述的java代码的加壳方法,其特征在于,所述获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码之前,包括:
生成所述混淆代码的密钥,并将所述密钥写入至所述配置文件中;
将所述配置文件存储至所述加载容器中,以供所述类加载器在所述加载容器中,根据所述配置文件获取所述密钥对所述加密代码进行解密。
7.一种java代码的加壳系统,其特征在于,包括:
接收模块,用于接收待处理源代码,获取所述待处理源代码的代码类型,所述待处理源代码为java源程序代码;
分层模块,用于将所述待处理源代码根据所述代码类型与预设规则进行代码分层,得到待混淆代码;
编译模块,用于将所述待混淆代码通过编译工具进行编译,得到编译代码;
混淆模块,用于根据混淆字典对所述编译代码进行字符替换,生成混淆代码;
加密模块,用于获取预先生成的密钥,通过所述密钥加密所述混淆代码,得到加密代码;
定制模块,用于根据所述加密代码的类型在加载容器中定制类加载器,所述类加载器包括所述加密代码的解密规则;
生成模块,用于将所述加密规则与所述加密代码生成jar包,以完成对所述java源程序代码的加密。
8.根据权利要求7所述的java代码的加壳系统,其特征在于,所述分层模块进一步用于:
根据预设规则将所述代码类型分为主要混淆源代码类型、次要混淆源代码类型以及非混淆源代码类型;
将所述混淆源代码类型与次要混淆源代码类型对应的待处理源代码作为所述待混淆代码进行混淆处理,其中,所述非混淆源代码类型对应的待处理源代码不进行混淆处理。
9.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1-6中任一项所述的java代码的加壳方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如权利要求1-6中任一项所述的java代码的加壳方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010360272.8A CN111552931A (zh) | 2020-04-30 | 2020-04-30 | java代码的加壳方法与系统 |
PCT/CN2020/111626 WO2021217980A1 (zh) | 2020-04-30 | 2020-08-27 | java代码的加壳方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010360272.8A CN111552931A (zh) | 2020-04-30 | 2020-04-30 | java代码的加壳方法与系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111552931A true CN111552931A (zh) | 2020-08-18 |
Family
ID=71999361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010360272.8A Withdrawn CN111552931A (zh) | 2020-04-30 | 2020-04-30 | java代码的加壳方法与系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111552931A (zh) |
WO (1) | WO2021217980A1 (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113238762A (zh) * | 2021-05-10 | 2021-08-10 | 深圳前海微众银行股份有限公司 | java应用远程部署方法、装置及设备 |
CN113282294A (zh) * | 2021-05-19 | 2021-08-20 | 武汉极意网络科技有限公司 | 基于安卓平台Java字符串混淆的方法和装置 |
CN113411384A (zh) * | 2021-06-10 | 2021-09-17 | 华中科技大学 | 针对物联网数据安全共享过程中隐私保护的系统及方法 |
CN113591041A (zh) * | 2021-09-28 | 2021-11-02 | 环球数科集团有限公司 | 一种防止代码注入或源码反编译的分布式编码系统 |
WO2021217980A1 (zh) * | 2020-04-30 | 2021-11-04 | 平安科技(深圳)有限公司 | java代码的加壳方法与系统 |
CN113656765A (zh) * | 2021-08-17 | 2021-11-16 | 平安国际智慧城市科技股份有限公司 | java程序安全处理方法、装置、计算机设备及存储介质 |
CN113836498A (zh) * | 2021-09-01 | 2021-12-24 | 浙江岩华文化科技有限公司 | 网页源代码混淆方法、装置、电子装置和存储介质 |
CN114035797A (zh) * | 2021-10-26 | 2022-02-11 | 乐视新生代(北京)文化传媒有限公司 | 前端代码加密方法、运行方法、装置、设备和存储介质 |
CN114090965A (zh) * | 2021-11-22 | 2022-02-25 | 全景智联(武汉)科技有限公司 | java代码混淆方法、系统、计算机设备及存储介质 |
CN114139117A (zh) * | 2021-12-06 | 2022-03-04 | 瀚云科技有限公司 | 应用程序加固方法、装置、电子设备及存储介质 |
CN114254373A (zh) * | 2022-03-01 | 2022-03-29 | 中国电力科学研究院有限公司 | 一种加密传输方法、装置和系统 |
CN114282181A (zh) * | 2021-12-01 | 2022-04-05 | 北京达佳互联信息技术有限公司 | 代码执行方法、装置、服务器及存储介质 |
CN115310115A (zh) * | 2022-10-11 | 2022-11-08 | 东方合智数据科技(广东)有限责任公司 | 私有化部署加密方法、装置、设备及存储介质 |
CN115473702A (zh) * | 2022-08-23 | 2022-12-13 | 广西电网有限责任公司电力科学研究院 | 一种基于在线交互式web动态防御的内容混淆方法 |
CN118152866A (zh) * | 2024-05-13 | 2024-06-07 | 国网江西省电力有限公司超高压分公司 | 基于多源数据融合的变压器故障诊断方法及系统 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114444028B (zh) * | 2022-01-05 | 2024-01-12 | 苏州浪潮智能科技有限公司 | 提升代码安全性的方法、装置、计算机设备和存储介质 |
CN114722359B (zh) * | 2022-04-08 | 2024-05-10 | 北京航天长城卫星导航科技有限公司 | 一种基于自定义类加载器的Java源码保护方法 |
CN117574334B (zh) * | 2023-08-17 | 2024-05-28 | 广东工业大学 | 一种结合md5与序列到序列模型的代码混淆方法及系统 |
CN117874721A (zh) * | 2023-12-12 | 2024-04-12 | 天翼云科技有限公司 | 一种jar包防反编译方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016139078A1 (en) * | 2015-03-02 | 2016-09-09 | Inventio Ag | Protecting a computer program against reverse engineering |
CN108664773B (zh) * | 2018-04-26 | 2021-07-30 | 北京三快在线科技有限公司 | Java源代码的保护方法及装置 |
CN111552931A (zh) * | 2020-04-30 | 2020-08-18 | 平安科技(深圳)有限公司 | java代码的加壳方法与系统 |
-
2020
- 2020-04-30 CN CN202010360272.8A patent/CN111552931A/zh not_active Withdrawn
- 2020-08-27 WO PCT/CN2020/111626 patent/WO2021217980A1/zh active Application Filing
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021217980A1 (zh) * | 2020-04-30 | 2021-11-04 | 平安科技(深圳)有限公司 | java代码的加壳方法与系统 |
CN113094665A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止java程序被反编译的系统 |
CN113238762A (zh) * | 2021-05-10 | 2021-08-10 | 深圳前海微众银行股份有限公司 | java应用远程部署方法、装置及设备 |
CN113282294A (zh) * | 2021-05-19 | 2021-08-20 | 武汉极意网络科技有限公司 | 基于安卓平台Java字符串混淆的方法和装置 |
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113221077B (zh) * | 2021-05-31 | 2023-11-14 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113411384A (zh) * | 2021-06-10 | 2021-09-17 | 华中科技大学 | 针对物联网数据安全共享过程中隐私保护的系统及方法 |
CN113411384B (zh) * | 2021-06-10 | 2022-09-27 | 华中科技大学 | 针对物联网数据安全共享过程中隐私保护的系统及方法 |
CN113656765A (zh) * | 2021-08-17 | 2021-11-16 | 平安国际智慧城市科技股份有限公司 | java程序安全处理方法、装置、计算机设备及存储介质 |
CN113836498A (zh) * | 2021-09-01 | 2021-12-24 | 浙江岩华文化科技有限公司 | 网页源代码混淆方法、装置、电子装置和存储介质 |
CN113591041B (zh) * | 2021-09-28 | 2021-12-31 | 环球数科集团有限公司 | 一种防止代码注入或源码反编译的分布式编码系统 |
CN113591041A (zh) * | 2021-09-28 | 2021-11-02 | 环球数科集团有限公司 | 一种防止代码注入或源码反编译的分布式编码系统 |
CN114035797A (zh) * | 2021-10-26 | 2022-02-11 | 乐视新生代(北京)文化传媒有限公司 | 前端代码加密方法、运行方法、装置、设备和存储介质 |
CN114090965A (zh) * | 2021-11-22 | 2022-02-25 | 全景智联(武汉)科技有限公司 | java代码混淆方法、系统、计算机设备及存储介质 |
CN114090965B (zh) * | 2021-11-22 | 2024-05-17 | 全景智联(武汉)科技有限公司 | java代码混淆方法、系统、计算机设备及存储介质 |
CN114282181A (zh) * | 2021-12-01 | 2022-04-05 | 北京达佳互联信息技术有限公司 | 代码执行方法、装置、服务器及存储介质 |
CN114139117A (zh) * | 2021-12-06 | 2022-03-04 | 瀚云科技有限公司 | 应用程序加固方法、装置、电子设备及存储介质 |
CN114254373B (zh) * | 2022-03-01 | 2022-07-08 | 中国电力科学研究院有限公司 | 一种加密传输方法、装置和系统 |
CN114254373A (zh) * | 2022-03-01 | 2022-03-29 | 中国电力科学研究院有限公司 | 一种加密传输方法、装置和系统 |
CN115473702A (zh) * | 2022-08-23 | 2022-12-13 | 广西电网有限责任公司电力科学研究院 | 一种基于在线交互式web动态防御的内容混淆方法 |
CN115310115A (zh) * | 2022-10-11 | 2022-11-08 | 东方合智数据科技(广东)有限责任公司 | 私有化部署加密方法、装置、设备及存储介质 |
CN115310115B (zh) * | 2022-10-11 | 2023-01-24 | 东方合智数据科技(广东)有限责任公司 | 私有化部署加密方法、装置、设备及存储介质 |
CN118152866A (zh) * | 2024-05-13 | 2024-06-07 | 国网江西省电力有限公司超高压分公司 | 基于多源数据融合的变压器故障诊断方法及系统 |
CN118152866B (zh) * | 2024-05-13 | 2024-07-23 | 国网江西省电力有限公司超高压分公司 | 基于多源数据融合的变压器故障诊断方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2021217980A1 (zh) | 2021-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111552931A (zh) | java代码的加壳方法与系统 | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
CN110826031B (zh) | 加密方法、装置、计算机设备及存储介质 | |
EP3038004A1 (en) | Method for providing security for common intermediate language-based program | |
CN112115429B (zh) | 一种Java类加密、解密方法及计算机可读存储介质 | |
US20030236986A1 (en) | Protecting software from unauthorized use by converting source code modules to byte codes | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
CN111159662A (zh) | 一种数据的处理方法和装置 | |
CN109614772B (zh) | 基于应用安装包文件的代码转换方法及装置 | |
US20180067777A1 (en) | Application protection method, server, and terminal | |
US7970133B2 (en) | System and method for secure and flexible key schedule generation | |
CN114547558B (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
WO2019062015A1 (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN111339558A (zh) | 一种数据加密方法、数据解密方法、计算机设备和介质 | |
CN110619224A (zh) | 一种数据处理方法和相关装置 | |
CN110119601B (zh) | 基于应用程序安装包的程序加固方法及装置 | |
CN108111622A (zh) | 一种下载白盒库文件的方法、装置及系统 | |
CN111737718A (zh) | 一种jar包的加解密方法、装置、终端设备和存储介质 | |
CN111259364B (zh) | 一种使用国密加密卡的方法、装置、设备及存储介质 | |
CN112363771B (zh) | 应用程序的处理方法及相关产品 | |
CN109598105B (zh) | 一种微控制器安全加载固件的方法、装置、计算机设备及存储介质 | |
CN114329535A (zh) | 文件加密方法、装置、电子设备和计算机可读介质 | |
CN110880965A (zh) | 一种外发电子文档加密方法、系统、终端及存储介质 | |
CN111209572B (zh) | 一种基于加解密的Linux系统安全启动方法及系统 | |
KR102039380B1 (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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20200818 |