Java反编译工具CFR,Procyon简介
Java反编译工具有很多,个人觉得使用最方便的是jd-gui,当然jad也不错,jd-gui主要提供了图形界面,操作起来很方便,但是jd-gui很久没有更新了,java 7出来很久了,jd-gui在反编译java 7的class文件时候会遇到部分语法不支持的问题,下面我举几个例子,我使用的是jd-gui035。

这是java7支持的在switch中使用String,下面可以看jd-gui反编译的结果:

反编译结果看起来有点绕,当然结果是一样的,只是代码意图不直接。
下面看下java 7的资源自动关闭:

jd-gui反编译的结果为:

我使用的这个jd-gui反编译报错,可能是我的版本不是最新的。
再看下java 7的语法糖功能:

jd-gui反编译结果:

反编译结果正确,综上,jd-gui对java 7的资源自动关闭语法不支持。
下面我介绍2个支持java 7语法的反编译工具,cfr和procyon,可能大家听说过,我会做个实际例子看下怎么用。
(一)cfr简介
cfr官网链接:
http://www.benf.org/other/cfr/
- CFR will decompile modern Java features - Java 8 lambdas (pre and post Java beta 103 changes), Java 7 String switches etc, but is written entirely in Java 6
这是官网的描述,Jar在附件提供下载。
语法:
反编译单个class文件:
- java -jar cfr_0_59.jar SwitchTest.class
反编译整个Jar包:
- java -jar cfr_0_61.jar java7_jar.jar --outputdir D:/Java/tmp
下面是具体使用,仍以上面的class为例,使用cfr进行反编译:

这个和jd-gui结果一样,可以看到java7的语法糖只是显示处理好看些,反编译出来还是原始的数据类型。

cfr对java 7的自动关闭语法反编译的结果是显式在finally里面添加close方法。

cfr反编译Switch String使用了Goto 语句,在Goto中使用equals字符串比较,比jd-gui反编译的结果稍微好看些。

可以看出cfr使用还是很方便的。
(二)procyon简介
procyon官网链接:
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
使用语法:
帮助
- java -jar decompiler.jar
反编译单个class文件
- java -jar procyon-decompiler-0.5.24.jar AutoCloseableExample.class
反编译整个Jar包
- java -jar procyon-decompiler.jar -jar myJar.jar -o out
提醒:
- Java 7 is required to run
procyon需要java 7环境。

下面仍以上面的class为例,看procyon反编译的结果

和cfr一样,procyon反编译显式的在finally中关闭资源。

procyon反编译java 7语法糖显示原始数据类型。

可以看出procyon对Switch String的反编译结果最直接。

procyon反编译Jar也是支持的。
反编译工具还有 Krakatau,使用了Python 2.7编译,个人电脑是Python 3.3,运行不了,就没测试了,感兴趣的朋友可以自己测试下。
链接地址:
- https://github.com/Storyyeller/Krakatau
如果需要反编译java 7的class,个人推荐使用procyon,其次是cfr。
文章为原创,转载请注明出处。写的不好的地方请指出。如果有需要但下载不了附件,请发邮件到1329186624@qq.com,我会把附件cfr和procyon发给你,谢谢。
全文完。
from: http://53873039oycg.iteye.com/blog/2015192
Java反编译工具CFR,Procyon简介的更多相关文章
- java反编译工具cfr
http://www.benf.org/other/cfr/ 下载反编译工具 @echo off SET home=%cd% rem 指定存放jar包的目录 SET jar_dir=%home%\ja ...
- 转:介绍几个著名的实用的Java反编译工具,提供下载
from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...
- Java 反编译工具哪家强?对比分析瞧一瞧
前言 Java 反编译,一听可能觉得高深莫测,其实反编译并不是什么特别高级的操作,Java 对于 Class 字节码文件的生成有着严格的要求,如果你非常熟悉 Java 虚拟机规范,了解 Class 字 ...
- java反编译工具JD-GUI
这款java反编译工具是由C++写的,是一款免费的非商业用途的软件,(Xjad也不错,但是不支持jar反编译) 一.支持众多.class反编译工具 二.支持反编译jar
- 7 款开源 Java 反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- java反编译工具
由于JAVA语言安全性高.代码优化.跨平台等特性,从1995年5月由SUN公司发布后,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位. 不过,JAVA最突出的跨平台优势使得它 ...
- java反编译工具(XJad)
java反编译工具(XJad) 2.2 绿色版 http://www.cr173.com/soft/35032.html Demo.class ---> Demo.java
- 7款开源Java反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- 推荐一款非常好用的java反编译工具(转)
源: 推荐一款非常好用的java反编译工具
随机推荐
- Amazon电商数据分析——数据获取
最近一段时间主要重心在Amazon电商数据分析上,这是一个偏数据分析和可视化的项目.具体来说就是先获取Amazon的商品数据,数据清洗和持久化存储后作为我们自己的数据源.分析模块和可视化模块基于数据进 ...
- 【AtCoder】AGC029(A-E)
A - Irreversible operation 题解 把每个B后面的W个数累加起来即可 代码 #include <bits/stdc++.h> #define fi first #d ...
- 用python实现一个无界面的2048
转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5519453.html 以前游戏2048火的时候,正好用其他的语言编写了一个,现在学习python,正好想起来,便决定 ...
- oracle SQL学习总结
1.候选键.主键和外键约束: create table Employee( id int primary key, name char(20), birthday Date, address varc ...
- 2019 CCPC wannfly winter camp Day 8
E - Souls-like Game 直接线段树合并矩阵会被卡T掉,因为修改的复杂度比询问的复杂度多一个log,所以我们考虑优化修改. 修改的瓶颈在于打lazy的时候, 所以我们预处理出每个修改矩阵 ...
- chrome书签(收藏栏)的导入导出
- 各jQuery选择器的用法(转)
这篇文章来介绍下jQuery的选择器. 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依 赖于选择器.因此,如果能熟练的使用选择器,不仅能简化代码,而且可以达到事 ...
- JavaScript的计时器的工作原理
最近都在看一些JavaScript原理层面的文章,恰巧看到了jQuery的作者的一篇关于JavaScript计时器原理的解析,于是诚惶诚恐地决定把原文翻译成中文,一来是为了和大家分享,二来是为了加深自 ...
- .net core下的dotnet全局工具
.net core 2.1后支持了一个全新的部署和扩展命令,可以自己注册全局命令行. dotnet install tool -g dotnetsaydotnetsay 也可以自己构建自己的命令行,一 ...
- POJ 1743 Musical Theme (字符串HASH+二分)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15900 Accepted: 5494 De ...