我正在创建一个启动JVM的应用程序(使用JRE的副本)。如果我编辑rt.jar,例如删除用户不应该访问的功能,它会以某种方式破坏JRE吗?
编辑:该应用程序涉及将代码下载到用户的计算机上,因此它将限制代码而不是用户。我可能应该澄清一下。
答案 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?
在更抽象的层面上:将您的客户视为潜在的罪犯是一个好主意吗?假设他们要尝试的第一件事是破解你的系统。 (请注意,我不了解您的客户,所以您可能也是对的,但问题仍值得提出。)