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,应
版权声明:本文标题:技术-Java防反编译技术 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1711043699a585594.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论