Java jar文件中的字节码注入对策

Java jar文件中的字节码注入对策,java,security,bytecode,Java,Security,Bytecode,我有一个jnlp应用程序,它在用户计算机上加载和执行jar文件(客户机)。用户使用此jar与提供服务的服务器通信。我见过用户使用javassit和javasnoop来更改客户端的功能。是否有任何方法可以远程检测由前面提到的实用程序创建的更改?例如,我是否可以在本地对类进行校验和,并将结果发送到服务器(谁知道每个类的校验和是正确的)?例如,您可以创建java文件的校验和,让应用程序在运行时计算校验和,并将其发送到服务器进行验证。最简单的校验和是整个jar的哈希代码 唯一的问题是为什么?谁是获取ja

我有一个jnlp应用程序,它在用户计算机上加载和执行jar文件(客户机)。用户使用此jar与提供服务的服务器通信。我见过用户使用javassit和javasnoop来更改客户端的功能。是否有任何方法可以远程检测由前面提到的实用程序创建的更改?例如,我是否可以在本地对类进行校验和,并将结果发送到服务器(谁知道每个类的校验和是正确的)?

例如,您可以创建java文件的校验和,让应用程序在运行时计算校验和,并将其发送到服务器进行验证。最简单的校验和是整个jar的哈希代码


唯一的问题是为什么?谁是获取jar并对其执行检测的超级用户?他为什么要这么做?即使他有理由,谁在乎呢?如果您担心有人会入侵您的服务器,请确保其足够安全,而不要关心客户端(IMHO)

例如,您可以创建java文件的校验和,让应用程序在运行时计算校验和并将其发送给服务器进行验证。最简单的校验和是整个jar的哈希代码


唯一的问题是为什么?谁是获取jar并对其执行检测的超级用户?他为什么要这么做?即使他有理由,谁在乎呢?如果您担心有人会入侵您的服务器,请确保其足够安全,而不要关心客户端(IMHO)

一般来说,没有办法阻止客户机运行他们希望运行的任何代码。系统的安全性决不应依赖于假定客户端正在运行特定代码或不知道您发送给它们的jar中包含的特定信息


此外,实施DRM的尝试往往会给合法用户带来问题,疏远您的客户,同时几乎无法阻止真正想要入侵系统的人。

一般来说,没有办法阻止客户端运行他们想要的任何代码。系统的安全性决不应依赖于假定客户端正在运行特定代码或不知道您发送给它们的jar中包含的特定信息


此外,实施DRM的尝试往往会给合法用户带来问题,疏远您的客户,同时几乎无法阻止真正想入侵系统的人。

您可以使用Classloader.getResourceAsStream(
“/p1/p2/ClName.class”
)打开名为
p1.p2.ClName
的类文件,阅读,并计算其校验和


但是,当用户可以更改功能时,他也可以删除校验和检查。

您可以使用Classloader.getResourceAsStream(
“/p1/p2/ClName.class”
)打开名为
p1.p2.ClName
的类文件,读取并计算其校验和


但是,由于用户可以更改功能,他也可以删除校验和检查。

他们也可以为您的检查插入仪器。因此:没有。如果你让你的客户机防弹,人们就会开始攻击客户机和服务器之间的通信。或者只是使用另一个客户机……他们也可以为您的支票提供仪器。因此:没有。如果你让你的客户机防弹,人们就会开始攻击客户机和服务器之间的通信。或者只是使用另一个客户端…