我可以使用什么程序来反编译类文件?我真的会得到Java代码,还是仅仅是JVM汇编代码?

关于这个网站上的Java性能问题,我经常看到一些人的回答,他们“反编译”了Java类文件,以了解编译器如何优化某些东西。


当前回答

Soot是较新的Java代码的一个选项。至少它的优点是最近还在维护……

此外,Java反编译器是一个具有独立GUI和Eclipse集成的反编译器。

最后,还没有提到Jdec,尽管它没有其他选项那么完善。

其他回答

我尝试了几种,Procyon似乎最适合我。它正在积极开发中,支持最新版本Java的许多特性。

以下是我尝试过的其他方法:

CFR Promising, but often failed method decompilation. I'll be keeping my eye on this one. Also actively developed with support for the latest Java features. Krakatau Takes a different approach in that it tries to output equivalent Java code instead of trying to reconstruct the original source, which has the potential of making it better for obfuscated code. From my testing it was roughly on par with Procyon, but still nice to have something different. I did have to use the -skip command-line flag so it wouldn't stop on errors. Actively developed, and interestingly enough it's written in Python. JD-GUI Worked, but Procyon's output was much better. Here's a page comparing Procyon output to the original and JD-GUI. JD-GUI is also available as an Eclipse plugin, which didn't work for me at all. Doesn't seem to be open source and development seems sporadic. JAD Worked, but only supports Java 1.4 and below. Also available as an Eclipse plugin. No longer under development.

大多数Java反编译器都是基于JAD的。这是一个很棒的工具,但不幸的是,它已经有一段时间没有更新了,并且不能很好地处理Java 1.5+类。我还没有看到任何能够正确处理1.5+类的工具。

这里有一些反编译器…快速搜索会得到:

Procyon:开源(Apache 2),积极开发 Krakatau:开源(GPLv3),并积极开发 CFR:开源(MIT)并积极开发 联合应用开发 DJ Java反编译器 摩卡

还有更多。

它们生成Java代码。Java自带一些功能,可以让您看到JVM字节代码(javap)。

如果你想知道Java编译器是如何做某些事情的,你不想要反编译,你想要的是反汇编。反编译涉及到将字节码转换为Java源代码,这意味着会丢失大量低级信息,如果您想了解编译器优化,那么这可能正是您感兴趣的信息。

不管怎样,我碰巧写了一个开源Java反汇编程序。与Javap不同的是,这甚至适用于高度病态的类,因此您可以看到混淆工具对您的类做了什么。它还可以进行反编译,尽管我不推荐这样做。

JD-GUI真的很好。您只需打开一个JAR文件,然后浏览代码 你正在开发一个IDE。好东西。