前往Shuct.Net首页

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

关于反编译的搜索

防止Java反编译的一些常用方法 - 51CTO.COM 首页技术频道51CTO旗下网站地图 社区:学院下载论坛博客更多 网络 安全 开发 数据库 服务器 系统 虚拟化 云计算 嵌入式 移动开发 51CTO.COM CIOage.com WatchStor.com HC3i.cn 灵客风LinkPhone 首页 | Java | .NET | Web | XML | 语言工具 | 测试 | 游戏 | 移动 | 架构 | 项目管理 | 全部文章 您所在的位置:开发 > Java > 防止Java反编译的一些常用方法 防止Java反编译的一些常用方法 2008-08-12 16:27 佚名 软件测试网 字号:T | T 由于Java字节码的抽象级别较高,因此它们较容易被反编译。下面介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。 AD: 由于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程序的重要技术。 【责任编辑:red7 TEL:(010)68476606】 原文:防止Java反编译的一些常用方法 返回开发首页 分享到: --> 收藏|打印|复制 给力 (0票) 动心 (0票) 废话 (0票) 专业 (0票) 标题党 (0票) 路过 (0票) 关于Java Java反编译 代码混淆 Java程序加密的更多文章 Java 线程转储Java 8是否还需要LINQ?还是已经比LINQ 更惊喜!Java为服务器端Web应用带来最高运行Java 中使用内存映射文件需要考虑的 10 个Java 8特性探究(二)深入解析默认方法 开发频道2013年10月第5周重点内容推荐:JavaScript就是一种垃圾语言 又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师[详细] 栏目热门 更多>> 二维码的生成细节和原理 Java长存!12个Java长久占居主要地位的原因 做个犀利的码农:如何持续培养/更新自己的 JVM性能优化,Java的伸缩性 JavaOne 2013:将REST与JSON相结合以创建AP 同期最新 更多>> Java与C#相似之处的对比 Java学习编程经验分享(二) Java学习编程经验分享(一) 基于Spring框架的WebSphere应用开发 剖析JSP与XML的交互编程技巧 开发 频道导航 Java Java开发|Java基础|Java EE开发|Java框架|设计模式 WEB开发 PHP开发|Python|Ruby|JSP|HTML 5|DIV+CSS 综合 .NET开发|嵌入式开发|项目管理|架构设计 热点推荐 Android开发应用详解 那些性感的让人尖叫的程序员 HTML5 下一代Web开发标准详解 高性能WEB开发应用指南 Ubuntu开源技术交流频道 热门标签: windows频道移动开发云计算objective-ctp-link路由器设置图解html5 头条 《开发月刊》2013年11月刊发布 设备和服务体验有了根本性的变革,才能改变行业对软件开发的处理方式。本期《开发月刊》… 《开发月刊》2013年10月刊发布《开发月刊》2013年8月刊发布 文章排行 本月本周24小时 编程趋势:十五大热门与十五大冷门 Eclipse插件大全 挑选最牛的TOP30 天猫程序猿高端算法找妹子 被高估人士的七个习惯 那些出现在电影中的程序代码 Java数组声明、创建、初始化 国外十大最流行PHP框架排名 Asm.js: Javascript的编译目标 详解Java解析XML的四种方法 Linux安装JDK详细步骤 编程趋势:十五大热门与十五大冷门 湖南最小“程序员”今年只有11岁 只有20行Javascript代码!手把手教你写 Visual Studio Online 2013 (VSO)–在 有趣的JavaScript原生数组函数 C++的未来和指针 技术项目走向失败的五条“捷径” Python趣文:Import Girlfriend 失物招领:量小、个性化强、定价高的产 整合富士通 重塑ICT价值 熊猫烧香作者的人生病毒 那些出现在电影中的程序代码 变身成功独立软件开发人的十五条秘诀 编程趋势:十五大热门与十五大冷门 2014年1月编程语言:Transact-SQL登年度 十步完全理解SQL 从编程语言排行看程序员信仰 怎样终结12306与民间公司的争斗? 我为12306 背书 Java开源日志框架大比拼 热点专题 更多>> 开发频道2013年9月第3 9月的工作日被法定假日拆的零零散散,不知道各位的工 Java之I/O基础应用回 总结一下Java I/O文件读写基本类相关知识和概念。对于 开发频道2013年9月第2 今天是被国际上众多科技公司和软件企业承认的业内人士 热点标签 编程语言排行榜 敏捷开发 Eclipse 3.6 PHP设计模式 NetBeans 7 Java7 Scala编程语言 Python编程世界 Ruby On Rails开发 LINQ ASP.NET视频教程 Visual Studio 智能手机 软件下载 点击这里查看样刊 全站热点 《开发月刊》2013年10月刊发布 路满荆棘 艰难挺进100G NumPy攻略: Python科学计算与数据分 曙光核高基中科院重庆绿色研究院案例 虚拟服务器存储趋势对管理的影响 Gartner:IBM、惠普领先全球服务器市 大数据有多高的信誉度 读书 鸟哥的Linux私房菜——服务器架设篇(第二版) 本书是对连续三年蝉联畅销书排行榜前10名的《Linux鸟哥私房菜——服务器架设篇》的升级版,新版本根据目前服务器与网络环境做了 Absolute C++中文版(原书第2版)   网管员必读——网络组建(第2版) 设计模式:可复用面向对象软件的基础(双语版) 程序设计实践双语版 博文推荐 更多>> 只有持续的变革和创新才是CRM成功的Discuz!NT中集成Memcached分布式缓存ISA防火墙之利用DHCP部署WPAD老方主机CPU升级系列三之痛并快乐着 最新热帖 更多>> 通用WAP网站生成系统(PowerDiamond) 八类大学毕业生求职时不受欢迎IT人为什么难以拿到高薪?【转帖】想去外企上班 51CTO旗下网站 领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone