8

我看到一些java反编译器可以将字节码反编译成可读的java源,我想知道是否所有来自java(不是其他JVM语言)的字节码都可以再次反编译成java源?


更新

对不起,让我把问题说得更清楚。

只说JVM上正常的Java代码(无Android,无字节码增强,无AOP,无混淆),其实我希望字节码能被反编译。但我不知道是否有编译成字节码的java代码形式,永远无法被反编译成可读的java源代码。

4

4 回答 4

7

我想知道是否所有来自 java(不是其他 JVM 语言)的字节码都可以再次反编译为 java 源?

答案是不。

不保证反编译器适用于所有 Java 字节码:

  • 一个好的混淆器会故意重新排列字节码,使常见的反编译器不会产生可读的源代码......并且可能不会产生有效的源代码。

  • 许多反编译器在处理较新的 Java 结构时存在问题。

  • 许多反编译器对从“复杂”源代码编译的字节码存在问题。

  • 即使他们生成可编译的代码,也不能保证代码是正确的。

底线是,反编译器的好坏取决于作者的智慧和勤奋。我从来没有听说过一个完美的。

于 2013-04-01T01:55:03.803 回答
4

Java 字节码可以反编译回 Java 源代码。反编译的源代码通常看起来不完全相同,但具有相同的功能。如果您担心有人可能会反编译您的源代码,您可以使用混淆器(如ProGuard)来提供帮助。

于 2013-04-01T01:45:56.893 回答
0

是的,这(通常)是可能的(为此存在多种工具)。请参阅:如何“反编译”Java 类文件?

但是,您可以尝试保护您的文件,请参阅:如何锁定已编译的 Java 类以防止反编译?

于 2013-04-01T01:46:51.633 回答
0

我有机会反编译java多个代码,并且总是使用可用的工具进行管理,认为字节码是由编译器生成的,这个过程只需要反转就可以得到原始代码。我知道一种避免这种情况的方法。

我使用了这个工具。

java.decompiler.free.fr

于 2013-04-01T01:52:02.960 回答