java - JAD反编译问题

标签 java

我有一个要反编译的 .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/

相关文章:

java - Spring boot服务API启动时出现异常(值为 'ServletContext resource [/dbo]'的属性spring.datasource.schema无效)

java - 防止过多的注册请求

java - 如何更新 SQLite 数据库(登录和注册系统)中的密码?

java - 如何在不为每个资源定义默认处理程序的情况下覆盖所有 404 页面?

Java 字符串数组最大最小唯一出现

java - 关闭应用程序时数组不会从内存中清除

java - 从头部移除链表

java - 将 JCheckBox 的状态获取到 Java 中的另一个类?

java - 如何使用 Google Drive API v3 Java 的服务帐户访问 Team Drive

java - 使用按钮标签,我可以自定义按钮吗?