如果所有从java源代码编译的字节码都可以反编译成java源代码?

如果所有从java源代码编译的字节码都可以反编译成java源代码?,java,bytecode,decompiler,Java,Bytecode,Decompiler,我看到一些java反编译器可以将字节码反编译成可读的java源代码,我想知道是否所有来自java(而不是其他JVM语言)的字节码都可以再次反编译成java源代码 更新 对不起,让我把问题说清楚一点 只要谈谈JVM上的普通Java代码(没有Android,没有字节码增强,没有AOP,没有混淆),我实际上希望字节码可以反编译。但我不知道是否有编译成字节码的java代码形式,永远无法反编译成可读的java源代码。java字节码可以反编译回java源代码。反编译的源代码通常看起来不完全相同,但具有相同

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


更新

对不起,让我把问题说清楚一点


只要谈谈JVM上的普通Java代码(没有Android,没有字节码增强,没有AOP,没有混淆),我实际上希望字节码可以反编译。但我不知道是否有编译成字节码的java代码形式,永远无法反编译成可读的java源代码。

java字节码可以反编译回java源代码。反编译的源代码通常看起来不完全相同,但具有相同的功能。如果您担心有人可能会反编译您的源代码,您可以使用模糊处理程序(如)来提供帮助。

是的,这(通常)是可能的(有多种工具可用于此)。 见:


但是,您可以尝试从中保护您的文件,请参见:

我有机会对java多个代码进行反编译,并始终使用可用的工具进行管理,认为字节代码是由编译器生成的。此过程只需颠倒即可获得原始代码。我知道一种避免这种情况的方法

我用过这个工具

java.decompiler.free.fr

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

答案是否定的

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

  • 一个好的混淆器会故意重新排列字节码,这样普通的反编译器就不会产生可读的源代码。。。而且可能无法生成有效的源代码

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

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

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


归根结底,反编译器只有在其作者的智慧和勤奋下才能发挥作用。我从来没有听说过完美的版本。

大多数java代码都是用本地语言编写的。。。所以你可以用“c”来表示方法声明,但不是它的主体。。。此外,例如android会混淆来源。。即使你反编译它,也会让你读起来更困难。理论上,任何未混淆的类都可以很好地反编译。在实践中,所有现有的反编译器都会因特别奇怪和复杂的类而失败。许多人也不能很好地处理狭隘灵长类动物的类型转换。ProGuard不是一个很好的混淆者,尽管它总比没有好,而且最重要的是它是免费的。但顺便说一句,ProGuard不做任何流混淆。它只重命名所有内容并剥离属性,这使得反编译的源代码更难理解,但实际上并没有停止反编译器。