修改.class文件

时间:2013-02-24 06:55:53

标签: java

我想知道以下哪种解决方案更好: 我想修改一些.class文件,因为我已经意识到有两种方法可以做到这一点:

  • 伪装.class文件,修改它,最后再次编译。 -
  • 使用十六进制编辑器直接修改它。

由于

7 个答案:

答案 0 :(得分:1)

在这两个糟糕的选择中,反编译,修改和重新编译会更好。更改二进制文件中的任何内容都可能会改变其他内容的偏移量,而且更容易出错。

据我所知,

.class文件没有任何校验和或错误检查,尽管字节码确实需要验证。即便如此,编译器的输出也更安全。

答案 1 :(得分:1)

选项#3 - 如果你要乱用字节码,你可以做的最少的是使用一些为它设计的库,以避免重新发明轮子。例如,请参阅asm

答案 2 :(得分:1)

事实证明,这些类可以使用JSP源代码。所以更好的方法是 在JSP源代码中进行修改,然后使用JSP编译器(如this one)。

答案 3 :(得分:0)

如果您没有源代码,并且您确定要修改.class个文件,我建议使用Javassist库(用于字节码修改)与{{{ 3}}(检查来源)。

答案 4 :(得分:0)

我是选项#1。使用JAD或其他一些反编译器来制作.java,进行更改,编译并用新版本替换旧的.class。

答案 5 :(得分:0)

没有解决方案涉及到乱码字节码文件是一个很好的解决方案。

好的解决方案是:

  • 获取源代码并在源代码中进行所需的更改。然后重新编译,运行单元测试,构建WAR,重新部署等等。

  • 如果您无法获取源代码,请让编写源代码的人员解决问题。

  • 如果您无法让他们免费解决问题,请付款。

  • 如果他们付钱就不会修理它们......放弃产品,寻找替代品。

如果上述都不是可行选项,则只考虑反编译和/或字节码工程的不良解决方案。即使这样,你也需要开始计划一种方法,让自己脱离目前所处的整体状态。“只有糟糕的解决方案才能让你更深入。


我不能诚实地说哪个是最坏的解决方案。这取决于:

  • 代码的性质,
  • 您必须对代码进行的更改的性质,以及
  • 你在逆向工程字节码方面的技能。

答案 6 :(得分:0)

我使用过cavaj,JAD和JD-GUI,他们给出了相同的反编译结果。但是与其他两个相比,JD-GUI有更好的结果,因此对我来说是更好的选择。如果有人想要选择反编译器,我想分享这个。