如何使用 jvmti、jni 或 jvm 函数监控类加载并跟踪原始 jar

问题描述 投票:0回答:1

我正在为java游戏制作一个反作弊程序。我想监控所有类的加载情况,找出是从哪个jar文件加载的,或者是动态生成的,这样我就可以计算hash,确认jar包是否合法。

无法通过验证jar包签名来确认合法性,因为大多数jar包都没有签名。我尝试使用jvmti的回调函数,但是找不到可以跟踪jar包的回调方法。

我也尝试从 URLClassloader 中查找 url,但我发现许多类是由自定义类加载器加载的。自定义类加载器太多,难以适应。

java c++ jvm java-native-interface jvmti
1个回答
0
投票

客户端反作弊很可能不是您应该做的,只是因为它们很容易被绕过或完全禁用,因为它们在客户端的电脑上运行 - 客户端可以完全控制。特别是像 java 这样的语言很容易进行逆向工程,虽然在 c++ 中使用检查器会使事情变得更难,但仍然可以且容易地规避这一点。

话虽如此,您可以挂钩定义类的本机方法 ClassLoader.defineClass0、.defineClass1 和 .defineClass2,并检查那里的数据。

© www.soinside.com 2019 - 2024. All rights reserved.