我想知道以下哪种解决方案更好:我想修改一些 .class 文件,并且我意识到有两种方法可以做到这一点:
- 反编译.class文件,修改它,最后再次编译。-
- 直接用十六进制编辑器修改。
谢谢
我想知道以下哪种解决方案更好:我想修改一些 .class 文件,并且我意识到有两种方法可以做到这一点:
谢谢
在这两个不好的选择中,反编译、修改和重新编译更好。更改二进制中的任何内容都可能会更改其他内容的偏移量并且更容易出错。
据我所知,.class 文件没有任何校验和或错误检查,尽管字节码确实需要验证。即便如此,编译器的输出更安全。
选项#3 - 如果你要搞乱字节码,你至少可以使用一些为它设计的库,以避免重新发明轮子。例如见asm
事实证明,JSP 源代码可用于这些类。所以一种更好的方法是在 JSP 源代码中进行修改,然后使用 JSP 编译器(比如这个)。
如果您没有源代码,并且确定要修改.class
文件,我建议结合使用Javassist库(用于字节码修改)和Java Decompiler(检查源代码)。
我支持选项#1。使用 JAD 或其他一些反编译器来制作 .java、进行更改、编译并用新版本替换旧的 .class。
没有涉及到字节码文件的解决方案是一个好的解决方案。
好的解决方案是:
获取源代码并在源代码中进行所需的更改。然后重新编译、运行单元测试、构建 WAR、重新部署等等。
如果您无法获得源代码,请让编写源代码的人来解决问题。
如果您不能让他们免费解决问题,请付钱给他们。
如果即使你付钱他们也不会修复它......放弃产品,寻找替代品。
如果以上都不是可行的选择,则仅考虑反编译和/或字节码工程的不良解决方案。即便如此,你也需要开始计划一种方法,让自己摆脱目前所处的整体状态。因为糟糕的解决方案只会让事情变得更深。
老实说,我不能说哪个是最好的坏解决方案。这取决于:
我使用过 cavaj、JAD 和 JD-GUI,它们给出了完全相同的反编译结果。但是 JD-GUI 的结果比其他两个更好,因此对我来说是一个更好的选择。我想分享这个,以防有人正在寻找反编译器来选择。