在Eclipse中反编译Class文件完全详解

Java 是开源的,是免费的,我们强烈鄙视所有不公开源代码的东东。比如,对class 文件进行加密混淆的类文件,一般情况下,我们是看不到其源代码的。本文将对此进行详细阐述,说明如何随心所欲的反编译看源码,体验一下其中的乐趣。(本文最后面有相关资源下载)
    目前在Java 开发工具中,Eclipse 可谓是占据着绝对的优势,在平常使用中,大家都会有意无意的查看一下所调用JAR 包的源代码,这时如果没有引入源文件的话,将会看不到结果。大象以dom4j-1.6.1.jar 为例来进行说明,打开demo 项目(请在dom4j 分类中查找),找到 com.demo.database.DataBaseConnect 类,按住 Ctrl 键,再用鼠标点击 Element 如图:

    
    dom4j 是开源的,可以在sourceforge.net 下载到它的完整版,里面当然包含源代码。大象想说的是,在做开发的时候,需要用到大量的JAR 包,你不可能每个都去down 一个源码下来,而且我们用不到这么多的源码,只是在需要的时候,看下其中的代码,解决一时的问题。
    大象通过查看网上其他人的研究成果再结合自己的分析,总结了一些经验,现在整合起来和大家分享一下。
    1、安装jadclipse 插件
       选择插件时,本人曾经使用过网上评论非常好的Jode 开发的Eclipse 插件,不过效果不是很好,对有些加密的类不能反编译,后来发现很多人用jadclipse ,结果试验了一下,很不错的说。
       使用jadclipse 插件一定要注意Eclipse 版本。jadclipse_3.2.4 ,它对应的是Eclipse3.2 版,jadclipse_3.3.0 可以用于Eclipse3.3M6 以上版。大家千万不要把jadclipse_3.3.0放到Eclipse3.2 中,也不要把jadclipse_3.2.4 放到Eclipse3.3 中, 这样做是没什么任何效果滴!大象全部都测试过!
       下面来说下安装过程,其实很简单,网上也有相关的资料。将jadclipse 插件(版本自己选择)直接copyEclipse 目录中的plugins 文件夹下,然后打开Eclipse ,选择"窗口"-" 首选项"-" 常规"-" 编辑器"-" 文件关联",点击文件关联中的*.class ,下面就会看到"JadClipse Class File Viewer" ,选中它,点击缺省值,点击OK ,将它设置为默认的类查看器。如图:

    
       另外在用jadclipse 的时候,一定要加入jad.exe 这个程序,如果只有插件而没有jad ,那么还是不能反编译成功,会显示如下所示的错误,因此我们还要安装jad

    2、安装 jad
       可以在 http://www.kpdus.com/jad.html#download   这个地址下载到最新的jad ,而且有不同平台的版本,本文后面也有相关下载。将下载的压缩包解压后复制jad.exe 至你的%JAVA_HOME%/bin 目录下,这样做的好处是使用方便。然后在Eclipse 中设置一下,选择 窗口”-“ 首选项”-“Java”-“JadClipse” ,在path to decompiler 中输入jad.exe 的绝对路径。这样做是为了保证反编译的效果。大象做过测试,只要将jad.exe 放入%JAVA_HOME%/bin 目录下,就没问题了,这个地方不设置也没关系,不过本人还是建议大家设置一下,其它地方不用管。其实大象也不知道该怎么弄,就让它保持默认值好了。^_^
    
       到这里,我们的工作就做完了,现在再来按住Ctrl ,用鼠标点击Element ,怎么样?看到源代码了吗?贴上部分反编译代码,如图:
    
       使用jad 对绝大部分的加密混淆class 文件都能很好的做到反编译,目前大象还没遇到失败的情况,大家也可以多测试一下。jadclipse插件体积很小(只有40几K),和jad完美结合。大象强烈推荐!
       现在有人会说了,这样一个一个的看太麻烦了,我需要一次把一个JAR 包下的所有class 文件反编译成java 源文件。这样的想法是可行的,还是使用jad 工具。

    3、批量反编译
       因为之前我们已经将jad 加入到了%JAVA_HOME%/bin 中,只要配置了环境变量,我们就可以在命令行中方便的使用。在这里,大象还是以dom4j-1.6.1.jar 为例来说明具体的操作步骤。
       解压dom4j-1.6.1.jarjaxen-1.1-beta-7.jar。为了方便,我将JAR 包解压放到F 盘根目录,在cmd 中,进入到F 盘根路径下,输入命令:jad -o -r -s java -d src org/**/*.class
       我解释一下这些参数的含义:
       -o :覆盖旧文件,而且不用提示确认。
       -r :重新加载生成包结构。
       -s :定义输出文件的扩展名。jad 为默认扩展名,我们反编译后当然是要.java 源文件了。
       -d :输出文件的目录。src 表示反编译后的所有文件都放在src 目录下。
       org/**/*.class org 是解压后的文件夹的名字,整个表示org 目录下的所有class 文件。你也可以写成这样**/*.class ,这表示当前目录及其子目录下所有的class 文件(包含所有的子目录)。
       反编译dom4j-1.6.1.jar 必须得有jaxen-1.1-beta-7.jar ,因为dom4j 里面有对xpath 的调用,而这些东西都是引用jaxen 里的API ,如果不加则会有这样的错误:

    
    到此,关于反编译的内容全部说完了,不过我还想补充一点,有可能JAR 包中的class 文件不是老外的,而是我们自己写的,里面可能会有中文的情况,这时,虽然反编译通过了,但里面却是gb2312 形式的unicode 编码,因此我们还得做一个工作,将这些编码转换成中文。
    大象使用ant 脚本来完成这个工作,内容比较简单,加了注释,应该很好明白,脚本文件名为build.xml ,它放在src 目录下,和反编译所得的包处在同一层。

<? xml version="1.0" encoding="GBK" ?>
< project  name ="decompile"  basedir ="."  default ="native2ascii" >
    
<!--  定义输出目录  -->
    
< property  name ="build"  value ="build" />
    
<!--  清除输出目录  -->
    
< target  name ="clean" >
        
< delete  dir ="${build}" />
    
</ target >
    
<!--  创建输出目录  -->
    
< target  name ="init"  depends ="clean" >
        
< mkdir  dir ="${build}" />
    
</ target >
    
<!--  编码转换 reverse="true"为反向转换  -->         
    
< target  name ="native2ascii"  depends ="init" >
        
< native2ascii  reverse ="true"  src ="${basedir}"  encoding ="gb2312"  dest ="${basedir}/${build}"   />
    
</ target >
</ project >
    有一个地方需要补充一下,在 native2ascii 元素中, src dest 这两个属性表示着路径。如果反编译后, src 目录下,有多个不同的文件夹,这时使用 ant 来转换编码,请先想好要对哪些文件进行反编码;如果按上面的写法,将会把 src 目录下的所有文件夹中的所有文件进行反编码。假设,现在有 com org 两个文件夹(其实是两个包),我只需要对 com 中的文件进行反编码,那么可以这样改写: src = "${basedir}/com" dest = "${basedir}/${build}/com"
    其它的都不变。在 cmd 中进入到 src 路径下,输入 ant ,回车。可以看到如下结果:
    
    通过上面这些 操作,class文件已经对我们完全公开,想怎么看就怎么看,呵呵~~~~写这些,是觉得对开发工作可能会有一定的帮助,如果看后能够对你工作或是学习起 到哪怕一点点的作用,大象就感到很满足了;如果你早就了解这些,或是认为写得不好,还请不要扔砖头,扔蕃茄,更不要对大象口诛笔伐,人身攻击,就当看了一 篇白话文好了。大家如果有什么好的建议或是意见,欢迎提出来一起讨论,一起学习。
    本文为菠萝大象原创,http://www.blogjava.net/bolo/archive/2008/09/06/227442.html
    点击下载:dom4j-1.6.1.jar   jaxen-1.1-beta-7.jar
    点击下载:jadclipse_3.2.4.jar   jadclipse_3.3.0.jar
    点击下载:jad.exe   build.xml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值