类文件到Java文件的转换

类文件到Java文件的转换,java,reverse-engineering,war,decompiling,.class-file,Java,Reverse Engineering,War,Decompiling,.class File,我有一个War文件(一个Java应用程序)由64个类文件和image/CSS/JS文件组成。我丢失了这个战争文件的来源。现在我想对代码做一些修改。我正在从社区寻求关于以下问题的专家建议 有没有最好的方法将.class文件转换为.java文件而不丢失任何代码段 此任务有哪些工具(如果有的话) 将.class文件转换为.java文件以重新创建war文件有哪些挑战/缺点 转换为Java字节码几乎是完全可逆的。正如@StephenC所说,在重新生成的源代码中,您将丢失注释、局部变量的名称等。它可能不会立

我有一个War文件(一个Java应用程序)由64个类文件和image/CSS/JS文件组成。我丢失了这个战争文件的来源。现在我想对代码做一些修改。我正在从社区寻求关于以下问题的专家建议

  • 有没有最好的方法将.class文件转换为.java文件而不丢失任何代码段
  • 此任务有哪些工具(如果有的话)
  • 将.class文件转换为.java文件以重新创建war文件有哪些挑战/缺点
  • 转换为Java字节码几乎是完全可逆的。正如@StephenC所说,在重新生成的源代码中,您将丢失注释、局部变量的名称等。它可能不会立即编译,但您应该能够让它重新编译,只需稍加修改

  • 您需要一个Java反编译器来完成这项工作。试试看

  • 如果您混淆了源代码,那么您恢复的源代码将不难理解并进行反向工程。否则,只要稍加修改,您就应该能够找回您的来源


  • 如果您不想在理解反编译字节码方面花费太多时间,请开始使用版本控制系统和远程存储库来处理任何超过两个类的项目。

    特别是,您可以将Git与GitHub一起使用,开源是免费托管的,而如果您想保护您的代码,您可以获得便宜的商业订阅

    此时,请使用java反编译器,如JD:

  • 使用java反编译器反编译字节码
  • 使用反编译的java类创建git存储库
  • 不断地将其与远程存储库同步

  • “在大多数情况下,转换成Java字节码几乎是完全可逆的。”-这显然是错误的。无法恢复注释、局部变量名和编译时常量表达式。事实上,在很多情况下,一个典型的Java反编译器甚至不能生成可编译的Java代码。。。更不用说与原始代码相似的代码了。我是根据经验说的。和
    局部变量名
    定义常量
    不可恢复是正确的,但这不会影响重新生成的源的“可编译性”。如果您认为我的语句不准确,请编辑我的答案。@StephenC真的吗?根据我的经验,JD做的是一份打包工作,除非代码被修改过obfuscated@StephenC公平地说,任何逆向工程过程都不会是完美的,但如果你什么都没有了,这会有很大帮助(有过数据库接口的高级开发人员去世,导致源代码混乱的经历。我们花了将近两年的时间才弄清楚生产中的内容——别问了。但我们必须对生产代码进行反编译以确保)。正如您正确指出的那样,任何这种性质的工具都应该被仔细对待,永远不应该取代良好的版本控制做法。JD非常好。甚至还有一个Eclipse插件。缺点通常是:*您会丢失所有注释。*根据类文件中的调试信息,您会丢失行号。*您可能会丢失f local variables.*有时生成的Java代码可能无法编译。反编译器可能会因复杂的构造而失败。我们想到了内部类。不过,它很容易手工修复。