当前位置: 首页 > news >正文

Java反编译利器-Jad, Jode, Java Decompiler等及其IDE插件


2010-01-14
 
对于长年使用Java的程序员,大部分应该都会或多或少的使用到反编译软件。毕竟,不可能你所使用到的每一个包都会提供完善的javadoc,而且,有时候代码比javadoc更容易理解。这里将讲述笔者所了解的一些反编译软件以及它们各自的IDE插件版。
 
简介 
 
现在业内的反编译软件据说有几十种。其中有jad,以及基于jad而开发的其他反编译软件(Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的小颖JAVA源代码反编译专家);还有jode,以及以jode为核心开发的JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin);还有DAVA等,以及当前笔者最推崇的Java Decompiler。
 
在这些反编译软件中,笔者使用过jad,jode,Java Decompiler以及基于这些软件开发的其他软件如Cavaj,小颖等,还有这些软件的eclipse插件版。
 
其中,jad是一个使用VC++开发的著名反编译引擎,性能非常快;jode是一个使用java开发的开源的反编译引擎,而Java Decompiler似乎也是java开发的反编译软件,并且这三款软件都有相应的eclipse插件版。
 
使用效果对比 
 
笔者在eclipse中使用了以上三款软件。
使用环境为:eclipse Galileo,jad 1.5.8g + jadclipse 3.3.0,jodeEclipse 1.0.6,JD-Eclipse 0.1.3。
试用结果如下:
反编译性能: jad == jode > Java Decompiler
反编译品质:Java Decompiler > jode >= jad
 
从速度方面来看,你会明显的感觉到Java Decompiler比较的慢,总是以慢一拍的速度展示反编译后的代码;而jode和jad都表现的非常高速,接近于打开源代码的速度。
从反编译的品质来看,无疑是Java Decompiler最好。最根本的原因就是,jad和jode的最新版都是在JDK 5.0出来以前发布的,所以对JDK 5.0及以上版本的特性基本上不支持。之所以认为jode的反编译效果比jad好,是因为jad的eclipse插件不怎么好用,自己添加的jar包有时候不能反编译出来。
 
插件的使用 
 
插件的使用方面,需要稍微的注意一下。
jode和JD-Eclipse都是直接安装好就可以使用;而jad则需要另外指定jad.exe的路径,可以把jad.exe文件放到“%JAVA_HOME%/bin”目录下,然后在eclipse中按照以下顺序找到jad的设置窗口,Window -> Preferences, 打开Preferences窗口,然后依次选择 Java -> JadClipse,确保"Path to decompiler:"的值为"jad.exe"。
 
其中,jad和jode还有一些别的IDE的插件版,有需要的话,可以到sourceforge上去搜索。
 
总结
 
如果使用的是JDK 5.0及以上,请使用Java Decompiler,毕竟效果才是最重要的。如果使用的是JDK 1.4的话,还是建议使用jode,如果不在eclipse中使用的话,可以选择jad,加以复杂的命令,可以实现很多的功能。
 
本文主要是稍微介绍一下三款反编译软件的对比结果,所以具体的使用方法等可以见参考资料中的文章。
 
参考资料
 
Jad官网:http://www.kpdus.com/jad .html (好久没有更新了,下载请使用下面网址)
jad下载:http://www.varaneckas.com/jad
jadclipse:http://sourceforge.net/projects/jadclipse/
jode:http://sourceforge.net/projects/jode/
jodeeclipse:http://sourceforge.net/projects/jodeeclipse/
Java Decompiler: http://java.decompiler.free.fr/

相关文章:

  • 在阿里云创建子域名,配置nginx,使用pm2部署node项目到ubuntu服务器
  • 求数组中只出现一次的数字(算法)
  • 黄聪:公众号怎么用微信做出点击此处查看答案
  • 远程调用
  • Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)
  • 超强大的响应式图表工具 (Echarts)
  • 4-8Expect实现批量主机公钥推送
  • 纯PHP Codeigniter(CI) ThinkPHP效率测试
  • Spring Cloud-Honghu Cloud分布式微服务云系统—技术点
  • 在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
  • python中的json和pickle
  • 接口库设计总结
  • 庆祝一下开通了第一条博客!
  • 微软私有云
  • fileUpload(草稿)
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Angular6错误 Service: No provider for Renderer2
  • bootstrap创建登录注册页面
  • Django 博客开发教程 8 - 博客文章详情页
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 基本功--面试宝典
  • laravel with 查询列表限制条数
  • underscore源码剖析之整体架构
  • Vue 重置组件到初始状态
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Web标准制定过程
  • 复杂数据处理
  • 构建工具 - 收藏集 - 掘金
  • 关于Java中分层中遇到的一些问题
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 使用parted解决大于2T的磁盘分区
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 手写双向链表LinkedList的几个常用功能
  • 线性表及其算法(java实现)
  • 一些css基础学习笔记
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (生成器)yield与(迭代器)generator
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)winform之ListView
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Core 中的路径问题
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 服务 ServiceController
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .Net6 Api Swagger配置
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中GET与SET的用法
  • .NET中使用Redis (二)
  • ?php echo ?,?php echo Hello world!;?