欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在eclipse中反编译并查看jar包中的class文件

程序员文章站 2022-04-30 21:45:07
...

第一种:直接用F3或者ctrl点击查看。
Eclipse反编译工具Jad及插件JadClipse配置:
Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的。不过因为是控制台运行,所以用起来不太方便。不过幸好有一个eclipse的插件JadClipse,二者结合可以方便的在eclipse中查看class文件的源代码。配置如下:
A.下载相应版本的JadClipse,
http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download。将net.sf.jadclipse_3.3.0.jar拷贝到Eclipse下的plugins目录(也可以用links安装)。如果是MyEclipse8.x,将net.sf.jadclipse_3.3.0.jar 拷贝到myeclipse安装目录\Genuitec\Common\plugins\下。在myeclipse安装目录下dropins/创建eclipse文件夹,然后在eclipse文件夹中分别创建features、plugins文件夹,将net.sf.jadclipse_3.3.0.jar 分别拷贝到features和plugins文件夹中。
B.下载相应版本的Jad,
http://www.varaneckas.com/jad。解压后将Jad.exe拷贝到JDK的bin目录下(方便,与java,javac等常用命令放在一起,可以直接在控制台使用jad命令)
C.重启Eclipse,在Eclipse->Window->Preferences->Java会多出一个JadClipse目录,单击,在Path to decompiler中输入jad.exe的位置(E:\JDK\jdk1.7.0_03\bin\jad.exe),在Directory for temporary files中可指定临时文件的路径。
D.在Eclipse->Window->Preferences->General->Editors->File Associations可以看到.class文件的默认打开方式有两个,JadClipse和Eclipse自带的Class File Viewer,而JadClipse是默认的。
E.配置完成,选择需要查看的类,按F3即可查看源码。
可以看到最上面的一行"/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.",说明是由jad反编译的。

第二种:批量反编译。将一个jar全部反编译,同时保留树类之间的关系等,还是使用jad工具(或小工具jd-gui.exe)。

因为之前我们已经将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,回车即可。