挂钩 BootClassLoader

逆向工程 C++ 爪哇 登录 函数挂钩
2021-06-24 15:22:06

根据维基百科,有 3 个类加载器。

Boot Class-Loader 加载 RT.jar 和 /../jre/lib 中的所有内容

然后是扩展类加载器和系统类加载器。

我只对 Boot 类加载器感兴趣,因为我想挂钩它并在 RT.jar 中重新定义一个类,而不会出现-Xbootclasspath:/p.

文档:http : //docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

注意:不应部署使用此选项覆盖 rt.jar 中的类的应用程序。这样做会违反 Java 2 Runtime Environment 二进制代码许可。

和这里的许可证:http : //www.oracle.com/technetwork/java/javase/downloads/jre-6u21-license-159054.txt

状态:

C. Java 技术限制。您不得创建、修改或更改以任何方式标识为“java”、“javax”、“ sun”或 Oracle 在任何命名约定指定中指定的类似约定。

所以我在想,如果我可以通过 C++ 从本机代码中挂钩引导类加载器,我可以通过挂钩JVM_DefineClass函数来替换一个类,JVM.dll而不会有任何法律问题。

该函数具有签名:

JNIEXPORT jclass JNICALL JVM_DefineClass(JNIEnv *env, const char *name, jobject _loader, const jbyte *buf, jsize len, jobject pd)

  • 1:这个函数真的在JVM启动时被调用吗?
  • 2:如果我上钩了,我仍然会违反许可证吗?
  • 3:我是挂钩了正确的功能还是应该做其他事情(也许是更好的方法?)?
0个回答
没有发现任何回复~