我有编译为 .class 文件的 java 代码。有一个函数可以获取很少的参数并执行一些操作(例如获取 int x 和 int y 并执行 x+y)
我想添加到这个 .class 文件代码,检查是否 x=1 并调用另一个函数(例如调用 xy 并且不执行 x+y)
如何编辑已编译的 .class 文件并添加我自己的代码?
我有编译为 .class 文件的 java 代码。有一个函数可以获取很少的参数并执行一些操作(例如获取 int x 和 int y 并执行 x+y)
我想添加到这个 .class 文件代码,检查是否 x=1 并调用另一个函数(例如调用 xy 并且不执行 x+y)
如何编辑已编译的 .class 文件并添加我自己的代码?
有几种方法可以实现这一点:
将 .class 反编译为 .java 源(不一定是原始源,但等效),进行更改,再次编译。Java 反编译器有很多,我就不一一列举了。
将 .class 反汇编为“汇编”(通常是 Jasmin 语法),对其进行修改,然后重新组装。Krakatau是一个很好的工具,应该能够做到。
使用可以直接在 .class 文件中修改/修补字节码的工具。我还没有尝试过,但Recaf声称能够做到。
钩住 Java 运行时解释器以捕捉它开始执行目标函数的时刻,并使其执行其他内容。这在某种程度上是特定于实现的,但这是我知道的一个使用 Java 调试协议 (JWDP) 的示例:https : //github.com/CrowdStrike/pyspresso
您可以使用 JByteMod 来编辑您的类字节码。您还可以创建新方法、删除方法、字段和更改访问权限。
它非常易于使用,只需加载 jar 并选择要编辑的类。
JByteMod:https : //github.com/GraxCode/JByteMod-Beta/releases