gpt4 book ai didi

带有反射的 java.lang.SecurityException

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:43 24 4
gpt4 key购买 nike

在你重复这个问题之前,我会向你解释我所知道的、我读过的其他问题,以及为什么这对我不起作用。

我的目标是实现一个基于 java 的游戏的反射,我有 .jar 文件。我将它作为外部库附加到我的 eclipse 项目中。

我遇到了错误

java.lang.SecurityException: class "Client"'s signer information does not match signer information of other classes in the same package

在线

Class clazz = Client.class;

现在如其他问题中所述。出现此错误的原因是我有两个引用的库签名不同? (也许意味着它们是用不同版本的 java 编译的?)。

我引用的唯一两个库是 JRE 系统(我的项目是基于 1.7 构建的)和游戏的 .jar。

如果 .jar 是在 1.6 上编译的,是否会发生此错误?我应该使用 JRE 1.6 重新制作我的项目吗?我如何知道客户端是使用哪个 JRE 版本编译的?

谢谢!

编辑:我的另一个想法是游戏本身的 .jar 文件可能包含具有不同签名的类(可能是为了停止反射)。这可能吗?

最佳答案

我假设如下。

您在(已签名的)游戏 jar 中有以下内容

the/game/Client.class

在你的(可能未签名的)反射代码中你有

the/game/ReflectionStuff.class

这会导致上述异常。

编辑

在下面找到一个小的 PoC 来演示问题。从特定包调用的第一个类定义签名 key ,该 key 对于同一包中的所有类必须相同。

public class Client {
}

public class ReflectionStuff {
public static void main(String[] args) {
Class clazz = Client.class;
}
}

编译代码

javac -d bin/ Client.java ReflectionStuff.java

创建jar文件

mkdir bin
jar cf Game.jar -C bin/ Client.class
jar cf Reflection.jar -C bin/ ReflectionStuff.class

生成签名 key

keytool -genkey -alias signGame -keystore gamestore.jks -storepass passStore -keypass passGame -dname "CN=John Doe"

只对游戏jar签名

jarsigner -keystore gamestore.jks -storepass passStore -keypass passGame -signedjar SignedGame.jar Game.jar signGame

从同一个包(默认包)中调用未签名的类

java -cp SignedGame.jar;Reflection.jar ReflectionStuff

为了解决这个问题,将这些类移动到不同的 Java 包中。

关于带有反射的 java.lang.SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com