类文件到Java文件的转换
我有一个War文件(一个Java应用程序)由64个类文件和image/CSS/JS文件组成。我丢失了这个战争文件的来源。现在我想对代码做一些修改。我正在从社区寻求关于以下问题的专家建议类文件到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所说,在重新生成的源代码中,您将丢失注释、局部变量的名称等。它可能不会立
如果您不想在理解反编译字节码方面花费太多时间,请开始使用版本控制系统和远程存储库来处理任何超过两个类的项目。 特别是,您可以将Git与GitHub一起使用,开源是免费托管的,而如果您想保护您的代码,您可以获得便宜的商业订阅 此时,请使用java反编译器,如JD:
“在大多数情况下,转换成Java字节码几乎是完全可逆的。”-这显然是错误的。无法恢复注释、局部变量名和编译时常量表达式。事实上,在很多情况下,一个典型的Java反编译器甚至不能生成可编译的Java代码。。。更不用说与原始代码相似的代码了。我是根据经验说的。和
局部变量名
和定义常量
不可恢复是正确的,但这不会影响重新生成的源的“可编译性”。如果您认为我的语句不准确,请编辑我的答案。@StephenC真的吗?根据我的经验,JD做的是一份打包工作,除非代码被修改过obfuscated@StephenC公平地说,任何逆向工程过程都不会是完美的,但如果你什么都没有了,这会有很大帮助(有过数据库接口的高级开发人员去世,导致源代码混乱的经历。我们花了将近两年的时间才弄清楚生产中的内容——别问了。但我们必须对生产代码进行反编译以确保)。正如您正确指出的那样,任何这种性质的工具都应该被仔细对待,永远不应该取代良好的版本控制做法。JD非常好。甚至还有一个Eclipse插件。缺点通常是:*您会丢失所有注释。*根据类文件中的调试信息,您会丢失行号。*您可能会丢失f local variables.*有时生成的Java代码可能无法编译。反编译器可能会因复杂的构造而失败。我们想到了内部类。不过,它很容易手工修复。