前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

在Eclipse中反编译Class文件完全详解 - 菠萝大象 - BlogJava 菠萝大象 用心思考,用心写作 首页 新随笔 联系 管理 随笔-46 评论-412 文章-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中设置一下,选择&#8221;窗口&#8221;-&#8220;首选项&#8221;-&#8220;Java&#8221;-&#8220;JadClipse&#8221;,在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 菠萝大象 阅读(22146) 评论(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 | 菠萝大象 &#64;可笑 你可怜我?呵呵,我不需要你的可怜,这真像你的ID一样,可笑,我加水印碍你什么事了?我把自己的经验无偿拿出来分享,在自己的作品上加上自己的logo,也做错了?我看是不方便你吧! 回复 更多评论 # re: 在Eclipse中反编译Class文件完全详解 2011-05-25 14:04 | 路人钱 &#64;可笑&#64;可笑&#64;可笑对你有帮助就好啦,人家加水印关你什么事,不想看可以不看!找刺呢你!这个写的很好,对于初学的我有很大帮助,多谢啦! 回复 更多评论 # re: 在Eclipse中反编译Class文件完全详解 2012-12-06 11:42 | 聆听随风 请教LZ eclipse 4.2.0 安装后木有反应啊 why?? 回复 更多评论 # re: 在Eclipse中反编译Class文件完全详解 2012-12-11 08:47 | 菠萝大象 &#64;聆听随风eclipse 3.3以后的,都要用jadclispse_3.3.0.jar这个插件,我现在用的3.6版也是用的这个插件,我在3.7.2上也试过是可以的,4.2现在都说问题很多,没有试过。 回复 更多评论 新用户注册 刷新评论列表 阿里数据平台事业部诚聘web开发工程师 博客园 博问 IT新闻 Java程序员招聘 标题 请输入标题 姓名 请输入你的姓名 主页 内容(请不要发表任何与政治相关的内容) 请输入评论内容 登录后才能发表评论 Remember Me? 登录 使用高级评论 新用户注册 返回页首 恢复上次提交 --> [使用Ctrl+Enter键可以直接提交] --> 网站导航: 博客园 IT新闻 知识库 C++博客 程序员招聘 管理 相关文章: 一个很实用的Eclipse小工具——Easy Explore 在Eclipse中反编译Class文件完全详解 详解Eclipse+MyEclipse完全绿色版制作方法 <2008年9月> 日一二三四五六311234567891011121314151617181920212223242526272829301234567891011 随笔分类(46) Database(2) dom4j&jdom(3) Eclipse(3) Flex(4) Hibernate(2) Java(4) jBPM(1) jQuery(5) Spring(9) SSH2(7) 随笔(6) 随笔档案(46) 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) 搜索 积分与排名 积分 - 281377 排名 - 102 最新随笔 1.?使用jxl生成复杂报表的分析与设计(二) 2.?使用jxl生成复杂报表的分析与设计(一) 3.?使用dom4j和jdom解析与生成字符串型XML的代码示例 4.?基于Spring MVC框架JSR-303的自定义注解Validator验证实现 5.?基于Spring MVC框架的异常隐藏实现方法 6.?解决Spring MVC框架静态资源文件显示问题 7.?使用commons-httpclient发送请求的代码片断 8.?擦亮自己的眼睛 9.?苦逼的程序猿 10.?基于SSM3框架FreeMarker自定义指令(标签)实现 11.?使用Spring CommonsMultipartFile上传与Jquery Form Plugin版本问题 12.?关于上传文件类型验证的解决办法 13.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五) 14.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四) 15.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三) 最新评论 1.?re: 使用jxl生成复杂报表的分析与设计(二) huigongzuo.com丨51fsk.com | peixunt.com | luwuyou.com --000113 2.?re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 评论内容较长,点击标题查看 --菠萝大象 3.?re: Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五) 评论内容较长,点击标题查看 --sss 4.?re: 基于Spring MVC框架JSR-303的自定义注解validator验证实现 专家 人才 --鲤伴 5.?re: 基于Spring MVC框架JSR-303的自定义注解validator验证实现 @CoderDream多谢兄台指正,这个字段是多余的,我也不知道为什么就在里面,已经更新了下载包。 --菠萝大象 阅读排行榜 1.?学习JPA——Hibernate Annotation使用实例(23987) 2.?在Eclipse中反编译Class文件完全详解(22146) 3.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)(18605) 4.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)(17335) 5.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(16586) 评论排行榜 1.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(五)(61) 2.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(三)(44) 3.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)(33) 4.?Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)(27) 5.?Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)(24) 60天内阅读排行 1.?基于Spring MVC框架JSR-303的自定义注解Validator验证实现(1040) 2.?使用jxl生成复杂报表的分析与设计(一)(707) 3.?使用jxl生成复杂报表的分析与设计(二)(587) 4.?解决Spring MVC框架静态资源文件显示问题(266) 5.?基于Spring MVC框架的异常隐藏实现方法(161) Powered by: 博客园 模板提供:沪江博客 Copyright &copy;2014 菠萝大象