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文件已经对我们完全公开,想怎么看就怎么看,呵呵~~~~写这些,是觉得对开发工作可能会有一定的帮助,如果看后能够对你工作或是学习起到哪怕一点点的作用,大象就感到很满足了;如果你早就了解这些,或是认为写得不好,还请不要扔砖头,扔蕃茄,更不要对大象口诛笔伐,人身攻击,就当看了一篇白话文好了。大家如果有什么好的建议或是意见,欢迎提出来一起讨论,一起学习。

在Eclipse中反编译Class文件完全详解相关推荐

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

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

  2. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  3. python setting.py_python基础教程:Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  4. Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  5. python基础教程:Django框架的中的setting.py文件说明详解

    这篇文章主要介绍了Django框架的中的setting.py文件说明详解,这个文件包含了所有有关这个Django项目的配置信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.加载数据库,数据库 ...

  6. 如何在MyEclipse中反编译class文件

    反编译class文件,以前都是用的jd-gui.exe这个绿色软件.最近学到了如何在Myeclipse中直接查看class文件,这里记录一下. 1.下载net.sf.jadclipse_3.3.0.j ...

  7. apktool 反编译 java_APK文件使用ApkTool解包反编译和重新打包及签名

    前段使用一直使用一个手机APK软件,不过最近软件更新,出现了一个很讨厌的语音提示,于是想通过重新编译把语音提示去掉. [准备工作] 配置JAVA环境,到http://www.java.com/下载并进 ...

  8. 在eclipse中反编译并查看jar包的class文件,批量反编译

    第一种:很方便,直接用F3或者ctrl点击查看. Eclipse反编译工具Jad及插件JadClipse配置  超傻瓜的教程: Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的 ...

  9. 关于APK文件反编译方法(图文详解)

    今天晚上利用个把小时,终于把apk反编译彻底弄明白了,现在详细讲解一下apk反编译的具体过程. 1.下载三个工具 APK Multi-Tool    作用:获取apk的配置资源文件 dex2jar-0 ...

最新文章

  1. java实现https请求
  2. php过滤数据库就报错,php过滤掉emoji等无法存入MySQL数据库的字符简单示例
  3. 数字内置方法详解(int/long/float/complex)
  4. vue click事件_vue指令用法
  5. html统计表合并单元格的快捷键,word怎样设置合并单元格快捷键
  6. 云端之战:Google Cloud 的多云战略和甲骨文的数据库云
  7. 本体学习的概念及目标
  8. attention机制的几种方法
  9. 如何理解图像的概率分布?为什么N(0,1)的向量可以Gen图片?
  10. Python 之 turtle 库
  11. D盘根目录出现msdia80.dll
  12. python计算均方误差_python 计算平均平方误差(MSE)的实例
  13. 不做律师,玩起了电子合同,这家入选微软加速器第十期的电子合同企业究竟是什么来头?
  14. 【Ruby on Rails全栈课程】4.3 评论功能实现(二)--创建帖子详情页面
  15. java epics_Visual Paradigm敏捷开发教程(7):如何管理Epics
  16. 圣诞节快要来了,可我就是_我的圣诞节愿望清单
  17. 追风逐日,Wi-SUN助推新能源数字化
  18. 第七章第三十六题(游戏:八皇后问题)(Game: Eight Queens)
  19. DDOS为什么是黑客通俗的攻击手段呢?
  20. echarts地图海南省地图问题

热门文章

  1. vivo 应用商店中的断点续传技术剖析
  2. 【数字图像处理matlab】(边界跟踪-光栅扫描法)
  3. Android so文件保护——使用upx加壳
  4. 大王币说 | “IPFS中国区教父”周欢:散户怎样才能在IPFS中获利
  5. 114284.鼹鼠隧道NEERC2016
  6. 无法安装vcredist_x86.exe, 提示无法访问Windows Installer服务
  7. 仿小米商城和登录的静态页面
  8. 小米手机安装 Charles 证书
  9. 手机抓包-手机安装证书问题
  10. 可视化工具Visdom的使用