我有一个要反编译的 .class 文件。我尝试了 JAD,但它导致了通常的 break、goto 和 return 语句,这导致 JAD 在生成的源代码中出现编译错误。我很难尝试解决这些编译错误,每次我尝试用 return 语句修复 goto 语句时,它都会引入其他编译错误。
然后我不得不在 odesk 上雇用一名自由职业者,工作就完成了。我想知道用于反编译以下 .class 文件的确切过程,这些文件可以帮助我和其他人将来处理 JAD 添加的这些困惑的 goto、return 和 break 语句。
https://drive.google.com/file/d/0ByGLlk1Fq3QIYzVaMGZ4MEVzcjg/edit?usp=sharing
最佳答案
原则上,有效的类文件可以由比 java 更多的语言生成,但只有标准 java 编译器生成的类文件可以反编译成有效的 java .
雪上加霜的是,即使是从 Java 源代码编译的类文件也可能无法正确反编译,如果代码流没有被正确识别,那就是反编译器(这可能是由于原始代码非常富有想象力 或该类已使用生成反编译器无法理解的字节码的编译器进行编译)。我曾遇到过,在一种情况下,我使用 sun javac 6 编译的自己的代码无法正确反编译,其中嵌套的 while 循环带有标签和中断。
类文件也可能被精确地混淆以防止反编译。
简而言之,不能保证一个类文件可以被反编译成有效的 java 代码,它通常是反编译器的错误,因为可以用字节码表达代码流,而使用普通代码是不可能表达的java.
(某种程度上)反编译此类类的通用方法是使用 javap(或任何其他可以显示字节码的工具)并通过自己理解字节码来提取逻辑,然后用纯 java 表达逻辑。
关于java - JAD反编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20367168/