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

时间:2013-04-01 01:42:31

标签: java bytecode decompiler

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


更新

抱歉,让我更清楚地说明问题。

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

4 个答案:

答案 0 :(得分:6)

  

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

答案是否。

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

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

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

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

  • 即使它们生成了可编译的代码,也没有保证代码是正确的。

最重要的是,反编译器只能与其作者的智慧和勤奋能力一样好。我从来没有听说过一个完美的。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

是的(通常)这是可能的(存在多种工具)。 请参阅:How do I "decompile" Java class files?

但是,您可以尝试从此处保护文件,请参阅:How to lock compiled Java classes to prevent decompilation?

答案 3 :(得分:0)

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

我使用过这个工具。

java.decompiler.free.fr