background image

Java 防反编译技术

简介

1.1 Java 软件面临的挑战

目前,由于黑客的频繁活动,使得 Java 类文件面临着反编译的挑战。有一些工具能够

对 Java 源代码进行反工程,其结果甚至以比普通 Java 文件更可读的方式, 尽管普通的
Java

 

文件(由于代码风格不同)有注释。许可证和软件过期对于用户们来说将变得无用 。

因此,防止软件被反编译或使得反编译的结果变得无意义对于 Java

 

来说非常重要。

一个 Java 类文件不一定非要存储在一个真正的文件里;它可以存在存贮器缓冲区,

或从一个网络流获得。尽管防火墙和网络协议如 TCP/IP 有安全策略,黑客仍能打破访问
限制获取一些类。尽管这些类能被混淆,他们(黑客)能够一步一步地分析和猜出每个
指令的目的。如果这些代码是关键技术部分,例如是大产品的许可证或时间期满部分,
反编译和分析指令的努力似乎很值得。如果这些关键类被隐藏或被一个关键字加密,黑
客的非法入侵就很困难了。而且,未认证的软件复制对智能产权是普遍的攻击。还没有一
个较好的通用方案来解决这类问题。

目 前 关 于 JAVA 程 序 的 加 密 方 式 不 外 乎 JAVA 混 淆 处 理 ( Obfuscator ) 和 运 用

ClassLoader 方法进行加密处理这两种方式(其他的方式亦有,但大多是这两种的延伸和
变异)。

1.2

混淆处理

关于 JAVA 程序的加密方式,一直以来都是以 JAVA 混淆处理(Obfuscator)为主。这

方面的研究结果也颇多,既有混淆器(如现在大名鼎鼎的 JODE,SUN 开发的 JADE),
也有针对反编译器的"炸弹"(如针对反编译工具 Mocha

 

的 "炸弹" Crema 和 HoseMocha)。

混淆器,从其字面上,我们就可以知道它是通过混淆处理 JAVA 代码,具体的说,就是更
换变量名,函数名,甚至类名等方法使其反编译出来的代码变得不可理解。它的目的是:
让程序无法被自动反编译,就算被反编译成功,也不容易被程序员阅读理解

其实这只是做到了视觉上的处理,其业务逻辑却依然不变,加以耐心,仍是可以攻

破的,如果用在用户身份验证等目的上,完全可以找到身份验证算法而加以突破限制。