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

学习中,需要反编译Java的class文件。我的开发工具是windows xp+Eclipse3.2.2+MyEclipse。我找到了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/**/*.classorg是解压后的文件夹的名字,整个表示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,回车。可以看到如下结果:

 

 
反编译的内容基本结束。

posted on 2012-12-21 15:19 youngturk 阅读(314) 评论(0)  编辑  收藏 所属分类: 不明白纪录新认识笔记Java基础


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年12月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜