Java代码保密技术分析

一、背景

1.1 Java语言的特点

Java是解释型语言(实事上是编译型与解释型混合),在生成软件产品时源代码被编译成有规范可循的二进制字节码.class文件进行打包,然后由JVM将.class解释给CPU执行,所以我们拿到Java的软件产品后,对照相应的编译规范,很容易将.class文件内容还原成源代码。

1.2 加密的必要性 

1. 知识产权:

源码加密最主要的原因就是为了保护知识产权,不论是个人还是公司、单位,软件都是劳动的成果,而源码就是成果的核心,加密就是为了保护劳动成果不被窃取。

2. 系统安全:

软件交付部署后,尤其是web应用,如果被还原成源码,很容易发现潜在漏洞,被非法利用操作,对系统数据产生破坏,因此安全也是源码加密的重要因素。

3. 商业方面:

如果被还原成源码,很容易理清内部业务关系,从而加以分析获取商业秘密。

二、如何进行加密

2.1 加密的目标

加密的目的是增加和提高破解(反编译)的难度和时间成本,从而降低或减少源码泄露的几率。

加密的目标是生成人读不懂但是机器明白的东西。

2.2 加密的手段

套壳、混淆、代码隐藏、字节码转换、提前编译

三、各种加密技术分析对比

技术

套壳

混淆

代码隐藏

字节转换

提前编译

原理

使用安装包形式包裹,不对外直接展示Java相关的信息

利用花指令和代码非等价变形等技术,将程序的代码,转换成一种功能上等价,但是难于阅读和理解的代码,可充分干扰静态分析(替换类名,变量名,方法名,参数名等)

使用关键技术,将部分配置文件以及代码中的方法体隐藏(比如使用aes加密后保存到别的地方,启动的时候再进行注入填充)

使用加密算法对编译后的class文件加密,加载的时候使用特定的类加载器(包含解密方法)再对class文件解密

提前转成对应平台的机器码

优点

可以快速将jar包装成可执行文件,并且可以不需要安装Java运行环境等依赖

操作简单,加密效率高

操作简单,加密效率高

加密等级高,破解难度大

能够非常有效地保护java代码,且程序启动比通用JVM快

缺点

这些包装成exe的程序运行时都会将jar文件释放到临时目录,没有保护java代码,很容易获取

一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆,容易暴露关键信息

不在维护了,加解密算法可以被截获,隐藏的数据区域有可能被恢复

可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码

加解密算法可以被截获

不支持反射和动态代理的框架,破坏了Java跨平台的特性,需要针对不同的平台和环境编译

典型代表

exe4j、jsmooth、

proguard

classfinal

xjar,allatori

graalVM

使用成本

中等

中等

维护成本

中等

四、总结

  通过以上几个方面的对比,结合我们的实际需求,以及目前所拥有的技术能力,在能保证高度安全的情况下,选择一个使用成本低,易于系统维护的加密技术是比较合理的,所以建议使用字节码转换技术进行加密。

众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款防止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值