Java防反编译技术
1 简介
   
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代码,具体的说,就是更换变量名,函数名,甚至类名等方法使其反编译出来的代码变得不可理解。它的目的是:让程序无法被自动反编译,就算被反编译成功,也不容易被程序员阅读理解
    其实这只是做到了视觉上的处理,其业务逻辑却依然不变,加以耐心,仍是可以攻破的,如果用在用户身份验证等目的上,完全可以到身份验证算法而加以突破限制。
1.3     采用ClassLoader加密
    JAVA虚拟机通过一个称为ClassLoader的对象装来载类文件的字节码,而ClassLoader是可以由JAVA程序自己来定制的。ClassLoader是如何装载类的呢?ClassLoader根据类名在jar包中到该类的文件,读取文件,并把它转换成一个Class对象。该方法的原理就是,对需加密的类文件我们先行采用一定的方法(可以是PGP, RSA, MD5等方法)进行加密处理,我们可以在读取文件之后,进行解密后,再转换成一个Class对象。
2 对性能及稳定性的影响
2.1 加密过的程序会遇到的问题
由于解密需要一定的时间,如果不加区分的全部进行加密处理,势必会影响到程序的速度和响应。所以应该在需要加密的地方才加密,比方说,用户密码验证,专利算法,或者是数据库密码等等,这样的才不会导致系统的性能下降。对于稳定性还没有看见有对稳定性影响的说明。
2.2 混淆过的程序会遇到的问题
通常效率会变差,更严重的情况是可能无法执行。对于稳定性还没有看见有对稳定性影响的说明。
3 工具介绍
3.1 大名鼎鼎的JODE
    业内比较牛、开放源代码的反编译工具(附带一个obfuscator的工具包)。其obfuscator的工具包只有使用命令行的方式。
下载地址:sourceforge/projects/jode/
    工作方式:将混淆作为一个批处理工程,建立一个文件来配置批处理的各个细节,工具附带的文档中有详细说明。我做了一个工程用来混淆NetSignServer API。见“netsignsvr.jos”文件
3.2 SUN开发的JADE
介绍:
JADE是能够解决上述问题和能满足用户在这方面需要的第一个工具。它由五部分组成:混淆器、加密器、封装器、类编辑器和输出工具。
混淆器
能够保护软件使之不被反编译。它通过混淆类文件使得反编译无效,并把敏感的名字指代变成另一个名字空间,这样可以使反编译的结果毫无疑义。混淆器有“完全”和“快速”两种选项,能处理任何Java产品包括API,应用程序和小程序。它遵从Java虚机规范。
加密器
隐藏和加密用户产品的主类,处理的结果是一个类文件。它为编码和反编码提供了提供了一个界面。JADE有一些类用DES完成这个界面。加密和解密的过程对于用户来说是透明的。用户感觉不到使用原始的主类和使用处理后的结果类有什么不同。当然,用户也可以不加密地处理这些主类和产品。
封装器
不仅仅处理类文件,它还隐藏和加密在产品根目录下的其它文件。它封装产品并只产生一个类。软件厂商把这个类销售给用户,用户将运行这个类文件,安装买来的软件。封装器使用和加密器相同的安全类。
类编辑器
对于高级Java开发人员,java源代码加密JADE还提供了一个叫做“类编辑器”的工具。它能够直接修改类的代码字节。类编辑器也是一个独立的应用程序,它将把所有的结果生成到jar格式的的文件里。
输出工具
输出工具把所有的结果生成到一个jar个是的文件中生成到一个jar格式的文件中,这个文件能够被其它的压缩工具如Unzip, WinzipJar处理。
专业厂商的混淆工具,命令行和图形界面两种使用方式均可。免费!
下载地址:cn.sun/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: lix/klassmaster
目前还不能下载(没有有效的URL),没有经过测试。
4 总结
    基本的混淆工具都通过命令行的方式,但混淆时有些规则是必须遵守的,很多网站上都有介绍。比如不要将你可能需要外部调用的方法进行混淆、不要将程序使用的资源(resource boundle)进行混淆。
    混淆器混淆分为很多的级别,比如:对包名、类名、成员变量/方法名,以及公有的、私有的等等。可以分为不同的级别。这些级别可以在使用混淆工具进行自定义,尽管不同的混淆工具有不同的操作方式,关于保护的选项(规定不能被混淆的包名、类名、成员变量
名/方法名,以及公有的、私有的声明)定义功能是它们都具备的。
5 附录:技术比较以及总结和方案
5.1 Java软件面临的挑战
目前,由于黑客的频繁活动,使得Java类文件面临着反编译的挑战。有一些工具能够对Java源代码进行反工程,其结果甚至以比普通Java文件更可读的方式, 尽管普通的Java文件(由于代码风格不同)有注释。许可证和软件过期对于用户们来说将变得无用 。因此,防止软件被反编译或使得反编译的结果变得无意义对于Java来说非常重要。
一个Java类文件不一定非要存储在一个真正的文件里;它可以存在存贮器缓冲区,或从一个网络流获得。尽管防火墙和网络协议如TCP/IP有安全策略,黑客仍能打破访问限制获取一些类。尽管这些类能被混淆,他们(黑客)能够一步一步地分析和猜出每个指令的目的。如果这些代码是关键技术部分,例如是大产品的许可证或时间期满部分,反编译和分析指令的努力似乎很值得。如果这些关键类被隐藏或被一个关键字加密,黑客的非法入侵就很困难了。而且,未认证的软件复制对智能产权是普遍的攻击。还没有一个较好的通用方案来解决这类问题。
5.2 现有的解决方案
JADE介绍:JADE是能够解决上述问题和能满足用户在这方面需要的第一个工具。它由五部分组成:混淆器、加密器、封装器、类编辑器和输出工具。
混淆器
能够保护软件使之不被反编译。它通过混淆类文件使得反编译无效,并把敏感的名字指代变成另一个名字空间,这样可以使反编译的结果毫无疑义。混淆器有“完全”和“快速”两种选项,能处理任何Java产品包括API,应用程序和小程序。它遵从Java虚机规范。
加密器
隐藏和加密用户产品的主类,处理的结果是一个类文件。它为编码和反编码提供了提供了一个界面。JADE有一些类用DES完成这个界面。加密和解密的过程对于用户来说是透明的。用户感觉不到使用原始的主类和使用处理后的结果类有什么不同。当然,用户也可以不加密地处理这些主类和产品。
封装器
不仅仅处理类文件,它还隐藏和加密在产品根目录下的其它文件。它封装产品并只产生一个类。软件厂商把这个类销售给用户,用户将运行这个类文件,安装买来的软件。封装器使用和加密器相同的安全类。
类编辑器
对于高级Java开发人员,JADE还提供了一个叫做“类编辑器”的工具。它能够直接修改类的代码字节。类编辑器也是一个独立的应用程序,它将把所有的结果生成到jar格式的的文件里。
输出工具
输出工具把所有的结果生成到一个jar个是的文件中生成到一个jar格式的文件中,这个文件能够被其它的压缩工具如Unzip, WinzipJar处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。