菠萝大象
用心思考,用心写作
首页
新随笔
联系
管理
随笔-67 评论-522 文章-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
菠萝大象
阅读(43550)
评论(7)
编辑
收藏
所属分类:
Eclipse
评论:
#
re: 在Eclipse中反编译Class文件完全详解 2008-09-08 23:48 |
Java_do
不错学习一下
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解 2008-09-09 09:44 |
lvq810
一直都是用的jad
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解 2010-08-26 11:31 |
可笑
说是java都该开源,自己写这那点东西,也要加水印,文档不错,不鄙视你,但是可怜你
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解 2010-08-26 12:07 |
菠萝大象
@可笑
你可怜我?呵呵,我不需要你的可怜,这真像你的ID一样,可笑,我加水印碍你什么事了?我把自己的经验无偿拿出来分享,在自己的作品上加上自己的logo,也做错了?我看是不方便你吧!
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解 2011-05-25 14:04 |
路人钱
@可笑
@可笑
@可笑
对你有帮助就好啦,人家加水印关你什么事,不想看可以不看!找刺呢你!这个写的很好,对于初学的我有很大帮助,多谢啦!
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解 2012-12-06 11:42 |
聆听随风
请教LZ eclipse 4.2.0 安装后木有反应啊 why??
回复
更多评论
#
re: 在Eclipse中反编译Class文件完全详解
2012-12-11 08:47 |
菠萝大象
@聆听随风
eclipse 3.3以后的,都要用jadclispse_3.3.0.jar这个插件,我现在用的3.6版也是用的这个插件,我在3.7.2上也试过是可以的,4.2现在都说问题很多,没有试过。
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
一个很实用的Eclipse小工具——Easy Explore
在Eclipse中反编译Class文件完全详解
详解Eclipse+MyEclipse完全绿色版制作方法
<
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
随笔分类
(67)
Concurrency(3)
Database(4)
dom4j&jdom(3)
Eclipse(3)
Flex(4)
Hibernate(2)
Java(11)
jBPM(1)
jQuery(5)
Linux(1)
mybatis-generator(3)
Spring3(11)
Struts2(9)
随笔(7)
随笔档案
(67)
2015年9月 (1)
2015年8月 (1)
2015年7月 (1)
2015年5月 (1)
2015年4月 (1)
2015年3月 (3)
2015年2月 (1)
2015年1月 (2)
2014年8月 (1)
2014年6月 (2)
2014年5月 (2)
2014年4月 (3)
2014年3月 (1)
2014年2月 (1)
2014年1月 (2)
2013年12月 (3)
2013年11月 (2)
2013年10月 (2)
2013年9月 (2)
2012年5月 (1)
2012年4月 (2)
2011年8月 (1)
2011年6月 (1)
2011年5月 (3)
2010年9月 (1)
2010年8月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (2)
2010年4月 (4)
2010年3月 (2)
2010年2月 (7)
2008年9月 (2)
2008年8月 (6)
搜索
积分与排名
积分 - 779492
排名 - 54
最新随笔
1. 由Struts2Action代理和googlecode-jsonplugin产生的一个IllegalArgumentException异常问题
2. 在CentOS系统中同步时间
3. 全局唯一ID生成器浅析
4. 用Java实现MJD转UTC
5. 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(三)
6. 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(二)
7. 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
8. Quartz Spring与Spring Task总结
9. 常用的MySQL复杂查询语句写法
10. 常用的MySQL语句写法
11. 浅谈Java两种并发类型——计算密集型与IO密集型
12. 使用XStream注解实现Java对象与XML互相转换的代码示例
13. 浅谈volatile变量的理解
14. 浅谈Java共享变量
15. m2eclipse安装小贴士
最新评论
1. re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
评论内容较长,点击标题查看
--半湖思絮
2. re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
评论内容较长,点击标题查看
--菠萝大象
3. re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
评论内容较长,点击标题查看
--donghc
4. re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
@donghc
maven不是这样玩的呀,我的run是打包后用的,你仔细看了第三篇的内容么?在IDE里直接启动StartUp就行了,这个类是用来测试的
--菠萝大象
5. re: 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一)
评论内容较长,点击标题查看
--donghc
阅读排行榜
1. 使用jackson对Java对象与JSON字符串相互转换的一些总结(59321)
2. 在Eclipse中反编译Class文件完全详解(43550)
3. Quartz Spring与Spring Task总结(38539)
4. 使用XStream注解实现Java对象与XML互相转换的代码示例(33109)
5. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)(32438)
评论排行榜
1. Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)(69)
2. Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)(47)
3. Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(35)
4. Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)(27)
5. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)(26)