JAVA语言是1995年5月由SUN公司发布的,由于其安全性高、代码优化、跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。
        不过,JAVA最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得JAVA的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。
    为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。

注:安装之前请关闭Eclipse。

1. 下载Jad.exe

地址:http://www.varaneckas.com/sites/default/files/jad/jad158g.win.zip

解压后把jad.exe放在jdk安装目录的bin目录下。比如:G:\Program Files\Java\jdk1.7.0_01\bin

2. 下载jadclipse的安装包

地址:http://nchc.dl.sourceforge.net/project/jadclipse/jadclipse3.3/3.3.0%20%28for%20Eclipse%20_%3D3.3M6%29/net.sf.jadclipse_3.3.0.jar

得到此jar包后,直接将此jar包复制到Eclipse的安装目录下的plugins文件夹中。

例如:G:\Program Files\Java\eclipse\plugins

3. 打开Eclipse,配置JadClipse:选择菜单栏的Window--preferences--左侧文本框出输入jad 回车 搜索定位到JadClipse选项,如下图:

注意配置右侧第一个参数 “Path to decompiler”,即jad.exe所在的绝对路径。注意这里是绝对路径,使用系统变量%JAVA_HOME%\bin\jad.exe 也是不行的哦(事先已经配置%JAVA_HOME%为jdk路径)。

至于第二个参数“Directory for temporary files” ,可以自由配置。顾名思义,这个路径是用来保存编译的临时文件的。

至于在preferences里面通过Java--JadClipse展开的情况,只需要配置JadClipse目录上的以上两个参数,此目录下的其他目录如Debug、Directives、Formatting、Misc上的参数可以不做配置。

如此配置后,现在打开*.class文件,看反编译后的源代码轻而易举。

注意,这样设置后,你双击某些 .class 文件仍不能反编译,这是因为这些class文件没有附加的源码,要想解析所有 class 文件,还需做如下设置:
在File Type 下选择 *.class without source,然后在 Associated Editors下单击add,添加JadClipse Class File Viewer,然后选择JadClipse Class File Viewer,并点击右侧的default按钮,将 JadClipse Class File Viewer 设置为 *.class without source 的默认编辑器。

上述方式不行试试下面的方式:

1。下载:

(1)jadclipse插件:
到SourceForge.net(http://sourceforge.net/projects/jadclipse/)下载插件:
下载jadclipse_3.1.0.jar版本,支持eclipse3.1M6以上
下载jadclipse_3.2.0.jar版本,支持eclipse3.2M3和eclipse3.2M4.
下载jadclipse_3.2.2.jar版本,支持eclipse3.2M5以上。

(2)jad1.5.8e编译程序
       下载地址http://www.kpdus.com/jad.html#download
       下载后解压。解压缩后将jad.exe拷贝到JRE的bin目录下,如\Java\jre1.5.0_06\bin

2。加载插件:
若插件包为:net.sf.jadclipse_3.2.4.jar
(1)直接放入eclipse\plugins\下;(2)插件统一管理:建立如下目录树:IDE\eclipsePlugin\jadclipse\eclipse\plugins,
然后将net.sf.jadclipse_3.2.4.jar放入这个路径的plugins下。
启动eclipse,在Help->About Eclipse SDK->Plug-in Details下就可以看到JadClipse插件信息了。

3。设置:

启动eclipse,打开:Window->Preferences->Java->JadClipse,假如没有找到JadClipse,检查插件安装的版本是否与你安装的eclipse版本

对应。
在这里可以很清楚地进行设置了。
可以在Eclipse的Windows—> Perference—>General->Editors->File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”,一般插件会自动关联。

(1)Path to decompiler,这里设置反编译工具jad的全路径名,比如:%JAVA_HOME%\bin\jad.exe. 
      若你在环境变量中设置了path指向Java安装路径的bin下就不用改了,默认是jad。
(2)Directory for temporary files,这里设置临时文件路径。

至于Window->Preferences->Java->JadClipse目录下的Debug,Directives,Formatting,Misc目录中的参数设置,默认就够了。

4.一切自动化 ,查看.class在eclipse中双击就OK了。

用上这个后jad那个程序好像就可以放兜里了,不过还是附上它的命令使用说明:

反编译单个JAVA语言的CLASS文件,在命令行输入:jad example.class回车.
让后在你当前目录会生成一个Example.jad的文件!把它的后缀改为java就可以阅读了!(你可以忽略.class后缀)
选项 -s<后缀>允许你更改输出文件的后缀.
        jad -sjava example.class
这条命令生成文件'example.java'.当你同时使用选项-o和-sjava时要小心了,因为Jad会意外的覆盖掉你的源文件.

jad使用JAVA的CLASS文件名作为默认的输出文件名.举个例子,如果CLASS文件'example.class'包含了JAVA的CLASS'test'那么jad会优先生

成'test.jad'.如果你想要指定一自己的输出文件名,请使用重定向:
        jad -p example.class >myexm.java

选项-d允许你指定输出文件到另外一个文件夹,这个文件夹将默认创建在当前目录.举个例子:
        jad -o -dtest -sjava *.class
        (或者jad -o -d test -s java *.class,两者是一样的)
这条命令反编译所有.class文件在当前目录并且放置所有输出文件在目录'test'以.java为后缀名.

如果你想反编译整个java类树,用如下命令:
        jad -o -r -sjava -dsrc tree/**/*.class
这条命令反编译所有.class文件位于'tree'以及子目录并且建立输出文件在'src'目录的相对子目录中依照类的包名.举个例子,如果文

件'tree/a/b/c.class'包含类'c'来自包'a.b',那么数车文件的名字是'src/a/b/c.java'.

万一你想要检查输出文件的精确度或者就是仅仅是好奇,这儿有个选项-a,它让jad使用JAVA虚拟机字节码作为注释添加在输出文件中.

jad支持内部类和匿名类,当jad把通配符搭配到输入的文件名时,它自动的跳过匹配的内部类.

下面介绍各种反编译器:

 

Java反编译器安装及各版本介绍的更多相关文章

  1. mysql学习之-三种安装方式与版本介绍

    MYSQL版本介绍 mysql分alpha,beta,rc,GA四个版本. alpha  暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性beta 以后的beta ...

  2. JAVA学习笔记系列1-Java版本介绍

    JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用(桌面应用).因为一般都是Windows系统,因此Java的这个发展并不好. JavaEE(Java Ent ...

  3. MAC OSX安装多个版本的JAVA(jdk jre通用)

    MAC自带的jdk1.6是苹果公司自己修改的jdk版本,被广泛应用于各种mac软件,具有不可替代性:同时,java1.7和1.8有时也需要用到.因此,在mac上安装.使用多个版本的java具有重要意义 ...

  4. 【Java 理论篇 1】Java2平台的三个版本介绍

    导读:关于java的三种分类J2SE.J2EE.J2ME,在网上有很多资料,然后自己写的,也大多是从各个网站上搜罗里的.算是自己的一种笔记,或者明白的说,就是把别人的东西抄一遍.但是,这对于我来说,也 ...

  5. 关于安装多个版本jdk之后java -version不正确的问题

    问题描述: 今天突然想写一个socket通信的小应用,分别采用BIO.NIO.AIO的方式来实现,来复习前面看的关于TCP/UDP通信的知识.于是乎在原来安装了jdk1.6的机子上重新安装了jdk1. ...

  6. CentOS6安装各种大数据软件 第一章:各个软件版本介绍

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  7. java 同时安装多版本问题

    java 同时安装多版本问题(转) http://www.cnblogs.com/SamuelSun/p/6022296.html http://blog.csdn.net/u013256622/ar ...

  8. (2)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Cloud是什么?Spring Cloud版本介绍

    ​ Spring Cloud 是一系列框架的有序集合.它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册.服务发现.配置中心.消息总线.负载均衡.断路器.数 ...

  9. 【转】推荐一款Java反编译器,比较好用

    转自:http://www.blogjava.net/xmatthew/archive/2008/10/28/237203.html 推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出 ...

随机推荐

  1. TSS 内核栈 用户栈的关系

    http://blog.sina.com.cn/s/blog_673ef8130100qaje.html 该博客不错,有不少有用的信息 中断程序的一开始我们执行一个PUSHALL,把这些积存器保存在核 ...

  2. UVALive - 3713 Astronauts

    给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄<ave的宇航员: A任务只能分配给年龄>=ave的宇航员: C任务可以任意分配. 给定m组互相憎恨的 ...

  3. ANDROID_MARS学习笔记_S02_006_APPWIDGET2_PendingIntent及RemoteViews实现widget绑定点击事件

    一.代码流程 1.ExampleAppWidgetProvider的onUpdate(Context context, AppWidgetManager appWidgetManager, int[] ...

  4. 如何用AndroidStudio导入github项目

    最近一直在研究AndroidStudio,但是总会有这样那样的问题,特别是在github上看到一个很好地开源项目,想clone下来用用,就会出现很多蛋疼的问题,今天摸索着,结合一些大牛们的建议,轻轻松 ...

  5. socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  6. matlab 画图

    先前讲解了简单绘图方法: http://www.cnblogs.com/youxin/p/3859923.html x = 0:pi/100:2*pi; y = sin(x); plot(x,y)下面 ...

  7. html5 spring demo

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  8. Moduli number system

    A number system with moduli is defined by a vector of k moduli, [m1,m2, ···,mk]. The moduli must be p ...

  9. hdu4714Tree2cycle

    链接 树上的一些操作还是不是太好想 直接dfs下去 不是最优的 一个节点最多保留两个度 如果它有两个以上的子节点 那么就与父节点断开 与k-2个子节点断开 再重新连 #pragma comment(l ...

  10. bzoj3697

    一开始又看错题,以为同样路径上不同的休息站是算不同路径,后来发现休息站只是路径合法的条件毫无疑问是树的分治,下面我们只要考虑计算能建休息站的路径我们把阳看作路径权值为1,阴作为路径权值-1点分治之后, ...