当前位置:文档之家› 技术-Java防反编译技术

技术-Java防反编译技术

Java防反编译技术
1简介
1.1 Java软件面临的挑战
目前,由于黑客的频繁活动,使得Java类文件面临着反编译的挑战。

有一些工具能够对Java 源代码进行反工程,其结果甚至以比普通Java文件更可读的方式, 尽管普通的Java文件(由于代码风格不同)有注释。

许可证和软件过期对于用户们来说将变得无用。

因此,防止软件被反编译或使得反编译的结果变得无意义对于Java来说非常重要。

一个Java类文件不一定非要存储在一个真正的文件里;它可以存在存贮器缓冲区,或从一个网络流获得。

尽管防火墙和网络协议如TCP/IP有安全策略,黑客仍能打破访问限制获取一些类。

尽管这些类能被混淆,他们(黑客)能够一步一步地分析和猜出每个指令的目的。

如果这些代码是关键技术部分,例如是大产品的许可证或时间期满部分,反编译和分析指令的努力似乎很值得。

如果这些关键类被隐藏或被一个关键字加密,黑客的非法入侵就很困难了。

而且,未认证的软件复制对智能产权是普遍的攻击。

还没有一个较好的通用方案来解决这类问题。

目前关于JA V A程序的加密方式不外乎JA V A混淆处理(Obfuscator)和运用ClassLoader 方法进行加密处理这两种方式(其他的方式亦有,但大多是这两种的延伸和变异)。

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

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

混淆器,从其字面上,我们就可以知道它是通过混淆处理JA V A代码,具体的说,就是更换变量名,函数名,甚至类名等方法使其反编译出来的代码变得不可理解。

它的目的是:让程序无法被自动反编译,就算被反编译成功,也不容易被程序员阅读理解
其实这只是做到了视觉上的处理,其业务逻辑却依然不变,加以耐心,仍是可以攻破的,如果用在用户身份验证等目的上,完全可以找到身份验证算法而加以突破限制。

1.3 采用ClassLoader加密
JA V A虚拟机通过一个称为ClassLoader的对象装来载类文件的字节码,而ClassLoader 是可以由JA V A程序自己来定制的。

ClassLoader是如何装载类的呢?ClassLoader根据类名在jar包中找到该类的文件,读取文件,并把它转换成一个Class对象。

该方法的原理就是,
对需加密的类文件我们先行采用一定的方法(可以是PGP,RSA,MD5等方法)进行加密处理,我们可以在读取文件之后,进行解密后,再转换成一个Class对象。

2对性能及稳定性的影响
2.1 加密过的程序会遇到的问题
由于解密需要一定的时间,如果不加区分的全部进行加密处理,势必会影响到程序的速度和响应。

所以应该在需要加密的地方才加密,比方说,用户密码验证,专利算法,或者是数据库密码等等,这样的才不会导致系统的性能下降。

对于稳定性还没有看见有对稳定性影响的说明。

2.2 混淆过的程序会遇到的问题
通常效率会变差,更严重的情况是可能无法执行。

对于稳定性还没有看见有对稳定性影响的说明。

3工具介绍
3.1 大名鼎鼎的JODE
业内比较牛、开放源代码的反编译工具(附带一个obfuscator的工具包)。

其obfuscator 的工具包只有使用命令行的方式。

下载地址:/projects/jode/
工作方式:将混淆作为一个批处理工程,建立一个文件来配置批处理的各个细节,工具附带的文档中有详细说明。

我做了一个工程用来混淆NetSignServer API。

见“netsignsvr.jos”文件
3.2 SUN开发的JADE
介绍:
JADE是能够解决上述问题和能满足用户在这方面需要的第一个工具。

它由五部分组成:混淆器、加密器、封装器、类编辑器和输出工具。

专业厂商的混淆工具,命令行和图形界面两种使用方式均可。

免费!
下载地址:/tech-research/tdc/free-download.html
工作方式:(工具附带的文档中有详细说明)可以使用其图形界面的工具,pure java开发的。

似乎可以认为是官方的混淆工具。

3.3 金蝶JOC
Java混淆编译器,免费!支持JDK1.4,未使用过。

3.4 Jbuilder OpenTools
Id号:18982
The Zelix KlassMaster Wizard OpenTool is an add-on module for the Borland JBuilder IDE, which works as a front-end to the Zelix KlassMaster obfuscator. This wizard allows the obfuscation of JBuilder projects with the help of Zelix KlassMaster from inside the JBuilder IDE. PLEASE NOTE: That this wizard needs and calls the Zelix KlassMaster 2nd generation obfuscator, which must be available and installed on your computer, before you can use this wizard.
For general information's about Zelix KlassMaster please take a look at: /klassmaster
目前还不能下载(没有有效的URL),没有经过测试。

4总结
基本的混淆工具都通过命令行的方式,但混淆时有些规则是必须遵守的,很多网站上都有介绍。

比如不要将你可能需要外部调用的方法进行混淆、不要将程序使用的资源(resource boundle)进行混淆。

混淆器混淆分为很多的级别,比如:对包名、类名、成员变量/方法名,以及公有的、私有的等等。

可以分为不同的级别。

这些级别可以在使用混淆工具进行自定义,尽管不同的混淆工具有不同的操作方式,关于保护的选项(规定不能被混淆的包名、类名、成员变量名/方法名,以及公有的、私有的声明)定义功能是它们都具备的。

5附录:技术比较以及总结和方案
5.1 Java软件面临的挑战
▪目前,由于黑客的频繁活动,使得Java类文件面临着反编译的挑战。

有一些工具能够对Java源代码进行反工程,其结果甚至以比普通Java文件更可读的方式,
尽管普通的Java文件(由于代码风格不同)有注释。

许可证和软件过期对于用
户们来说将变得无用。

因此,防止软件被反编译或使得反编译的结果变得无意
义对于Java来说非常重要。

▪一个Java类文件不一定非要存储在一个真正的文件里;它可以存在存贮器缓冲区,或从一个网络流获得。

尽管防火墙和网络协议如TCP/IP有安全策略,黑客
仍能打破访问限制获取一些类。

尽管这些类能被混淆,他们(黑客)能够一步
一步地分析和猜出每个指令的目的。

如果这些代码是关键技术部分,例如是大
产品的许可证或时间期满部分,反编译和分析指令的努力似乎很值得。

如果这
些关键类被隐藏或被一个关键字加密,黑客的非法入侵就很困难了。

而且,未
认证的软件复制对智能产权是普遍的攻击。

还没有一个较好的通用方案来解决
这类问题。

5.2 现有的解决方案
JADE介绍:JADE是能够解决上述问题和能满足用户在这方面需要的第一个工具。

它由五部分组成:混淆器、加密器、封装器、类编辑器和输出工具。

相关主题