社区
Web 开发
帖子详情
java Web项目中 java Class 文件如何混淆或者防止反编译
doney_dongxiang
2009-07-13 08:59:36
如题
...全文
1021
2
打赏
收藏
java Web项目中 java Class 文件如何混淆或者防止反编译
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jinchun1234
2009-07-13
打赏
举报
回复
http://topic.csdn.net/t/20050610/12/4073220.html
lybjust
2009-07-13
打赏
举报
回复
由于Java字节码的抽象级别较高,因此它们较容易被反编译。下面介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。
1.隔离Java程序
最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。
2.对Class文件进行加密
为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。
在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。
3.转换成本地代码
将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。
4.代码混淆
代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术
尹成
JAVA
快速入门
编译的
Java
代码
中
的存储引用在运行时由
Java
解释程序决定实际存储地址。
Java
运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何
Java
语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是...
Java
内核原理入门到实战(大神必经之路)
Java
语言是体系结构
中
立的:
Java
程序(后缀为
java
的
文件
)在
Java
平台上被编译为体系结构
中
立的字节码格式(后缀为
class
的
文件
),然后可以在实现这个
Java
平台的任何系统
中
运行。这种途径适合于异构的...
Java
核心技术精讲
理解
Java
中
9大内置
Class
实例; 详细介绍包名、类名、接口、继承、修饰符等内容; 深入理解List、Map、Set的实现机制以及原理 深入理解泛型的原理以及在日常工作
中
应该如何使用 为什么需要学习这门课程? ...
使用maven构建
java
项目
本课程主要讲解了1.eclipse如何构建maven项目;2.构建Maven
web项目
;3.运行Maven命令等内容,希望学完之后对你有所收获。
Java
Agent基础篇
《
Java
Agent基础篇》是在一个运行JVM当
中
提供修改字节码的机会 《
Java
ASM系列》(免费课程)是一个操作字节码的类库 《
Java
8
Class
File》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程” &...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章