前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

防止java反编译的一些常用方法-Java频道-中国IT实验室 首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式 | 存储世界服务器 | 华为 | 网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 活动沙龙 | 论坛 首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题 您现在的位置: 中国IT实验室 >> Java >> 核心技术 >> 高级编程 >> 正文 防止java反编译的一些常用方法 天极网 佚名 2008-7-29 10:59:41 保存本文 推荐给好友 收藏本页 欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入   由于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程序的重要技术。 [1] [2] [3] 下一页 【责编:Chuan】 相关文章 没有相关文章 编辑推荐 · [基础入门]利用字符串连接巧妙解决问题· [高级编程]实现Java调用.net DLL的方法· [网络编程]Java设置与读取Cookie属性· [基础入门]和我共同了解Java是什么· [基础入门]Java语言与C++语言在作用域上的差异· [基础入门]Java源代码的折行规则· [基础入门]Java中的静态数组与动态数组· [基础入门]Java版简易俄罗斯方块· [基础入门]随机数组合,随机号码产生器· [网络编程]Java访问WebService返回xml数据 相关产品和培训 文章评论  友情推荐链接 ·Asp源码 PHP源码·CGI源码 JSP源码·建站书籍教程·服务器软件 .net源码·建站工具软件 ·IDC资讯大全·机房品质万里行·IDC托管必备知识·网站推广优化·全国IDC报价  认证培训  专题推荐  ·Java EE 6规范中文版 ·Oracle 10g OCP考证秘笈 ·算法分析与设计之五大常用算法 ·开发必备 漫谈Java加密保护 ·嵌入式开发--ARM技术专题 ·C/C++指针,认真了解,灵活运用 ·.NET开发:C#实用基础教程 ·软件测试工具QTP学习专题 ·嵌入式开发单片机解决方案专题 ·Java开发环境 Greenfoot 程序员手册  今日更新 · Java 8整装待发 图谋云计算· Java开源工具:网站开发工具清单· 选用Ibatis和Hibernate的区别· 让Eclipse使用Vibrant Ink等配色方案· Servlet初始化:随服务器启动而运行· JRuby和Java 7 我们可以期待什么?· IBatis一对一,一对多,多对多· JAVA基础之Applet· java认证:Servlet四种过滤器工作方式· 反映射调用set和get方法  社区讨论  博客论点  频道精选 · 新版CCNA考试大纲 07年8月1日生效 · 新手学习宝典:Linux常用命令全集 · 知已知彼,深入了解系统安全知识 · 从入门到精通 java初学者实践系列教程 · 共同学习——Oracle入门基础专题 · ADO.net与PowerBuilder的综合比较 · 评论:中国互联网“钱”途何在? · 中科院:龙芯要成"中国奔腾" 能卖1亿颗  Java 频道导航 新手入门: 安装配置 | 开发工具 | JDK | oop面向对象核心技术: SwingAwtApplet | 高级编程 | 网络编程Jvm技术 | JavaMedia高级技术: 设计模式 | UML/OO | p2p/Jxta | 多线程 | JavaSecurityJ2EE: J2ee核心 | Servlet/Jsp | EJB| JDBC/JDO | Rmi/Corba/Jini | Mvcwea | 应用服务器J2ME: 核心技术 | 嵌入式 | 无线开发Java&XML: XMLBeans | WebServices开源技术: ANT | Struts | Hibernate | SpringEclipse | JBoss | Tomcat | JUnit其他技术