在Eclipse中反编译Class文件的方法

来源:互联网 发布:知止而有得 编辑:程序博客网 时间:2024/06/05 02:34

学习中,需要反编译Java的class文件。我的开发工具是Eclipse3.6。我找到了jad反编译工具,在互联网上找到了一些很有用的安装步骤。下面记录了我的安装过程。

  一、下载

  1。下载 jad 工具,在官方网站没有下载到,在CSDN上可以下载。

  2。下载插件 net.sf.jadclipse_3.3.0.jar。

  二、安装

  1。安装jad工具。下载后解压,然后将解压后的jad.exe文件复制到%JAVA_HOME%\bin目录下面(可以将jad.exe放到任意位置,只要记住其存放路径就好,下面要用到)。

  2。安装插件。Eclipse中的插件安装可以参考:Eclipse使用技巧(三)Eclipse中插件的安装。

  我用复制的方法:直接把net.sf.jadclipse_3.3.0.jar拷贝到%ECLIPSE_HOME%\plugins目录下。

  把使用link的方法拷贝到下面:建立D:\Myplugins\net.sf.jadclipse_3.3.0\eclipse\plugins的目录结构,将jadclipse_3.2.4.jar放到plugins目录下面(注:其中D:\Myplugins为你自己定义的一个专门放置插件的目录)。再在%ECLIPSE_HOME%\links目录下面建立一个net.sf.jadclipse_3.3.0.link文件(该文件名随便取)。文件里面内容为:path=D:/Myplugins/net.sf.jadclipse_3.3.0。

  三、配置

  1。启动Eclipse,打开Window->Preferences->Java->JadClipse,如果找到了JadClipse,即JadClipse插件被激活了。设置jad路径:

  

  2。在Eclipse的Windows—> Perference—>General->Editors->File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”。

  四、使用jad反编译

  1。在DOS窗口中,到class所在目录,直接运行 >jad DB.class,将在该目录中生成DB.jad文件。运行 >jad -sjava DB.class,将在该目录中生成DB.java文件

  

  2。在Eclipse 工作台使用:

  1)把class目录加入项目:(这一步许多文档都没有写到,花了我很多时间)

  1.1)项目--〉属性--〉Java buildpath--〉add class folder (如 a)--〉OK

  1.2)a--〉import--〉General-->File system-->Browse-->OK

  2)双击class 文件,出现可爱的java文件,编译成功

  

  五、批量反编译

  以下部分转载 菠萝大象的文章:

  现在有人会说了,这样一个一个的看太麻烦了,我需要一次把一个JAR包下的所有class文件反编译成java源文件。这样的想法是可行的,还是使用jad工具。

  3、批量反编译

  因为之前我们已经将jad加入到了%JAVA_HOME%\bin中,只要配置了环境变量,我们就可以在命令行中方便的使用。在这里,大象还是以dom4j-1.6.1.jar为例来说明具体的操作步骤。

  解压dom4j-1.6.1.jar和jaxen-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,回车。可以看到如下结果:

  

  反编译的内容基本结束。

------------------------------------------------------------------------------------------------------------------------

 

Eclipse中反编译Class文件详解核心提示:Java 是开源的,是免费的,我们强烈鄙视所有不公开源代码的东东。比如,对 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插件(版本自己选择)直接copy到Eclipse目录中的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.jar和jaxen-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元素中,srcdest这两个属性表示着路径。如果反编译后,src目录下,有多个不同的文件夹,这时使用ant来转换编码,请先想好要对哪些文件进行反编码;如果按上面的写法,将会把src目录下的所有文件夹中的所有文件进行反编码。假设,现在有comorg两个文件夹(其实是两个包),我只需要对com中的文件进行反编码,那么可以这样改写:src="${basedir}/com" dest="${basedir}/${build}/com"
     其它的都不变。在cmd中进入到src路径下,输入ant,回车。可以看到如下结果:

     通过上面这些操作,class文件已经对我们完全公开,想怎么看就怎么看,呵呵~~~~写这些,是觉得对开发工作可能会有一定的帮助,如果看后能够对你工作或是学习起到哪怕一点点的作用,大象就感到很满足了;如果你早就了解这些,或是认为写得不好,还请不要扔砖头,扔蕃茄,更不要对大象口诛笔伐,人身攻击,就当看了一篇白话文好了。大家如果有什么好的建议或是意见,欢迎提出来一起讨论,一起学习。
     本文为菠萝大象原创,如要转载请注明出处。
     点击下载: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕了痔疮犯了怎么办 痔疮手术后肛裂怎么办 痔疮引起的肛裂怎么办 痔疮手术后伤口不愈合怎么办 痔疮手术后伤口痒怎么办 肛瘘手术十五天后伤口疼怎么办 leep刀后hpv还是阳性怎么办 结肠息肉钳除后怎么办 痔疮手术后排便困难怎么办 住院未结账跑了怎么办 来月经痔疮犯了怎么办 安保压不下宫缩怎么办 肛周脓肿术后假性愈合怎么办 肛门的皱褶肿了怎么办 1月婴儿排便困难怎么办 吃完辣的痔疮肿了怎么办 肛裂怎么办兰州来医博.相信 胎儿脐带绕颈一周怎么办 郑大一附院怎么办合作医疗 痔疮包不消怎么办很疼 痔疮内扎手术后直肠窄小怎么办 2个月大的宝宝鼻塞怎么办 宝宝鼻屎比较深怎么办 来例假痔疮犯了怎么办 微医爽约过一次怎么办 炸完的薯条软了怎么办 学信网号码换了怎么办 学信网注册换手机了怎么办 学信网手机号码已被注册怎么办 学信网手机号码被注册了怎么办 去英国留学不会做饭怎么办 小米陶瓷刀钝了怎么办 橱柜的缝擦不到怎么办 悠悠球上油早了怎么办 买了没有esp的车怎么办 饥荒海难狗来了怎么办 饥荒海难拖网掉水里了怎么办 饥荒遇到了猪人怎么办 饥荒龙蝇赖在家不走怎么办 饥荒海难崩档了怎么办 gta5全是rpf文件怎么办