菠萝大象
首页
新随笔
联系
聚合
管理
随笔-8 评论-21 文章-0 trackbacks-0
在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
插件(版本自己选择)直接
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
元素中,
src
和
dest
这两个属性表示着路径。如果反编译后,
src
目录下,有多个不同的文件夹,这时使用
ant
来转换编码,请先想好要对哪些文件进行反编码;如果按上面的写法,将会把
src
目录下的所有文件夹中的所有文件进行反编码。假设,现在有
com
和
org
两个文件夹(其实是两个包),我只需要对
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
posted on 2008-09-06 23:05
菠萝大象
阅读(2374)
评论(2)
编辑
收藏
所属分类:
eclipse
评论:
#
re: 在Eclipse中反编译Class文件完全详解 2008-09-08 23:48 |
Java_do
不错学习一下
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解
2008-09-09 09:44 |
lvq810
一直都是用的jad
回复
更多评论
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
内容(请不要发表任何与政治相关的内容)
登录后才能发表评论
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-09-09 20:47 编辑过
推荐图书:
《
走出软件作坊
》、《
悟透JavaScript
》、《
Head First 设计模式
》
相关文章:
在Eclipse中反编译Class文件完全详解
[原创] 详解Eclipse+MyEclipse完全绿色版制作方法
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
最近工作较忙,更新不稳定,有时间肯定会写。(2008-9-6)
<
2008年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
ajax(1)
dom4j(2)
eclipse(2)
hibernate(1)
jBPM(1)
随笔(1)
随笔档案
2008年9月 (2)
2008年8月 (6)
搜索
积分与排名
积分 - 14462
排名 - 633
最新随笔
1. 学习JPA——Hibernate Annotation使用实例
2. 在Eclipse中反编译Class文件完全详解
3. 小谈Hibernate中的HQL与QBC查询
4. 关于我的博客
5. dom4j实战(二)——使用dom4j设计Openfire式导航菜单
6. dom4j实战(一)——使用dom4j从XML中读取数据源配置
7. [原创] 详解Eclipse+MyEclipse完全绿色版制作方法
8. [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解
最新评论
1. re: dom4j实战(一)——使用dom4j从XML中读取数据源配置
支持,谢谢搂主
--王维娜
2. re: [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解
评论内容较长,点击标题查看
--独上太行
3. re: [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解
评论内容较长,点击标题查看
--独上太行
4. re: [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解[未登录]
评论内容较长,点击标题查看
--zhangy
5. re: [原创] 详解Eclipse+MyEclipse完全绿色版制作方法
楼主,能放个制作好的ISO包,放到讯雷上或者哪个地方,让我们直接下载用不,谢了!!
--GreenTea
阅读排行榜
1. [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解(2614)
2. 在Eclipse中反编译Class文件完全详解(2374)
3. 学习JPA——Hibernate Annotation使用实例(2266)
4. [原创] 详解Eclipse+MyEclipse完全绿色版制作方法(2151)
5. dom4j实战(二)——使用dom4j设计Openfire式导航菜单(1678)
评论排行榜
1. [原创] 详解Eclipse+MyEclipse完全绿色版制作方法(8)
2. [原创] jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/SQL Server2000部署详解(6)
3. 小谈Hibernate中的HQL与QBC查询(2)
4. 在Eclipse中反编译Class文件完全详解(2)
5. dom4j实战(一)——使用dom4j从XML中读取数据源配置(2)