虽然有很多Java反编译工具,但个人最容易使用的是jd-gui。 当然jad也很好。 jd-gui主要提供图形界面,便于操作,但jd-gui很久没有更新。 java 7出现很久了,jd-gui在反向编译java 7的class文件时会遇到一些语法不支持的问题。
这是在java7支持的交换机上使用字符串。 看看jd-gui反编译的结果吧。
反编译的结果看起来有点绕圈子。 当然结果是一样的,但代码的意图不是直接的。
让我们来看看java 7资源自动关闭的情况。
jd-gui反编译结果:
我使用的这个jd-gui反编译错误,我的版本可能不是最新的。
让我们来看看java 7的语法糖功能:
jd-gui反编译结果:
反编译的结果是正确的。 综上所述,jd-gui不支持java 7资源自动关闭语法。
介绍两个支持java 7语法的反编译工具。 是cfr和procyon。 你可能听说过,做个实例看看怎么用。
(一) cfr概述
cfr官方网站链接:
Java代码
cfrwilldecompilemodernjavafeatures-Java8lambdas (preandpostjavabeta 103 changes ),Java7Stringswitchesetc,butiswritenenetion
这是官方网站的说明,Jar在附件中提供下载。
语法:
反向编译单个class文件:
Java代码
Java-jar CFR _0_ 59.jarswitchtest.class
反向编译整个Jar包:
Java代码
Java-jar CFR _0_ 61.jar Java7_ jar.jar-- output dir d :/Java/tmp
以下是具体使用,以上class为例,使用cfr进行反编译:
这与jd-gui的结果一样,表明java7语法糖只是处理干净,即使反向编译也是原始数据类型。
通过cfr对java 7自动关闭语法进行反向编译的结果是,显式向finally添加了close方法。
如果在cfr反编译Switch String中使用Goto语句,在Goto中使用equals字符串进行比较,则比jd-gui反编译的结果要干净一些。
可见cfr还是很好用的。
(二) procyon介绍
procyon官网链接:
使用语法:
帮助
Java代码
java-jardecompiler.jar
反向编译单个class文件
Java代码
Java-jar procyon-decompiler-0.5.24.jarautocloseableexample.class
反编译整个Jar包
Java代码
Java-jar procyon-decompiler.jar-jarmyjar.jar-oout
提醒:
Java代码
Java7isrequiredtorun
procyon需要java 7环境。
以上面的class为例,看看procyon反编译的结果
与cfr一样,procyon通过反向编译显式地在finally中关闭资源。
procyon反向编译java 7语法糖以显示原始数据类型。
您可以看到,对procyon切换字符串进行反向编译的结果是最直接的。
它还支持procyon反编译Jar。
反编译工具还有Krakatau。 我用Python 2.7编译了。 电脑是Python 3.3,如果不能运行就不测试。 感兴趣的朋友请自己测试。
链接到:
Java代码
33559 github.com/story yeller/krakatau
如果需要反向编译java 7的class,我个人建议使用procyon,然后使用cfr。
文章是原创的,转载请注明出处。 请指出不好的地方。 如果需要也无法下载附件,请发邮件至1329186624@qq.com。 发送附件cfr和procyon。 谢谢你。
全文结束。