admin 管理员组

文章数量: 1086019


2024年3月22日发(作者:下载java有什么用)

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

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

下载地址:/projects/jode/

工作方式:将混淆作为一个批处理工程,建立一个文件来配置批处理的各个细节,工具

附带的文档中有详细说明。我做了一个工程用来混淆NetSignServer API。见“”

文件

3.2 SUN开发的JADE

介绍:

JADE是能够解决上述问题和能满足用户在这方面需要的第一个工具。它由五部分组成:

混淆器、加密器、封装器、类编辑器和输出工具。

混淆器

能够保护软件使之不被反编译。它通过混淆类文件使得反编译无效,并把敏

感的名字指代变成另一个名字空间,这样可以使反编译的结果毫无疑义。混

淆器有“完全”和“快速”两种选项,能处理任何Java产品包括API,应


本文标签: 反编译 文件 加密