我看到一些java反编译器可以将字节码反编译成可读的java源,我想知道是否所有来自java(不是其他JVM语言)的字节码都可以再次反编译成java源?
更新
对不起,让我把问题说得更清楚。
只说JVM上正常的Java代码(无Android,无字节码增强,无AOP,无混淆),其实我希望字节码能被反编译。但我不知道是否有编译成字节码的java代码形式,永远无法被反编译成可读的java源代码。
我看到一些java反编译器可以将字节码反编译成可读的java源,我想知道是否所有来自java(不是其他JVM语言)的字节码都可以再次反编译成java源?
更新
对不起,让我把问题说得更清楚。
只说JVM上正常的Java代码(无Android,无字节码增强,无AOP,无混淆),其实我希望字节码能被反编译。但我不知道是否有编译成字节码的java代码形式,永远无法被反编译成可读的java源代码。
我想知道是否所有来自 java(不是其他 JVM 语言)的字节码都可以再次反编译为 java 源?
答案是不。
不保证反编译器适用于所有 Java 字节码:
一个好的混淆器会故意重新排列字节码,使常见的反编译器不会产生可读的源代码......并且可能不会产生有效的源代码。
许多反编译器在处理较新的 Java 结构时存在问题。
许多反编译器对从“复杂”源代码编译的字节码存在问题。
即使他们生成可编译的代码,也不能保证代码是正确的。
底线是,反编译器的好坏取决于作者的智慧和勤奋。我从来没有听说过一个完美的。
Java 字节码可以反编译回 Java 源代码。反编译的源代码通常看起来不完全相同,但具有相同的功能。如果您担心有人可能会反编译您的源代码,您可以使用混淆器(如ProGuard)来提供帮助。
是的,这(通常)是可能的(为此存在多种工具)。请参阅:如何“反编译”Java 类文件?
但是,您可以尝试保护您的文件,请参阅:如何锁定已编译的 Java 类以防止反编译?
我有机会反编译java多个代码,并且总是使用可用的工具进行管理,认为字节码是由编译器生成的,这个过程只需要反转就可以得到原始代码。我知道一种避免这种情况的方法。
我使用了这个工具。
java.decompiler.free.fr