修改rt.jar可以吗?

时间:2011-02-04 19:31:50

标签: java jar java-native-interface

我正在创建一个启动JVM的应用程序(使用JRE的副本)。如果我编辑rt.jar,例如删除用户不应该访问的功能,它会以某种方式破坏JRE吗?

编辑:该应用程序涉及将代码下载到用户的计算机上,因此它将限制代码而不是用户。我可能应该澄清一下。

5 个答案:

答案 0 :(得分:8)

很有可能打破在运行时才会注意到的东西。

但也许更重要的是许可问题:您的应用程序正在运送您自己允许的JRE版本,除非您无法根据the J2SE license修改您正在分发的JRE:

  

[...]   (a)您只分发完整且未经修改的软件       捆绑为您的applet和应用程序(“程序”)的一部分,

“删除用户无权访问的功能”的含义也值得怀疑。您的应用程序正在用户帐户的上下文中执行,以及您从JRE中删除的任何功能:

  • 如果操作系统允许在该用户会话的上下文中执行该特定操作,那么还有另一种方法可以执行此操作 - 因此在处理 rt.jar <之前,您处于相同的位置/ em>的。您的用户只需拨打电话。

  • 如果操作系统不允许在用户会话的上下文中执行该操作,那么JVM也无法执行此操作,无论是否存在类,因此整个问题没有实际意义

答案 1 :(得分:5)

通常,删除功能的最佳方法是使用SecurityManager。这允许您控制可以访问的内容或可以执行的操作。

答案 2 :(得分:1)

完全取决于你“删除”的内容。但它可能。只要你不破坏任何东西,删除依赖等...

如果你想做一些安全明智的事情。您如何确保只有您完全控制用户JRE?

如果是这样的话。你在做什么样的好处,做你在申请中不能做的事情?

但由于某些原因,这是可能和有效的思想。但它们主要是基准测试,开发和调试。例如,转储未加密的字节码

还要注意许可问题。您可能无法在法律上出售或运送此货物。

答案 3 :(得分:1)

为什么你会问,你可能会破坏一些协议/许可,除了它没关系。

我不这样做但是改变引导加载程序的类路径以在rt.jar等之前加载我的类。这是合法的:)

最后:无论你怎么看,NoClassDefFoundError都很酷。

答案 4 :(得分:0)

如果你问它是否合法,我不知道,但可能不是。 (如果您打算出售您的产品,那就是。对于研究或娱乐用途,它可能是。)

技术上可以吗?如果你知道自己在做什么,那就可以了。

虽然有意义吗?客户端安装另一个虚拟机有多难,或者只是用一个未被攻击的虚拟机替换被黑客攻击的rt.jar?

在更抽象的层面上:将您的客户视为潜在的罪犯是一个好主意吗?假设他们要尝试的第一件事是破解你的系统。 (请注意,我不了解您的客户,所以您可能也是对的,但问题仍值得提出。)