jvm如何确保java核心库的安全?

时间:2014-01-04 07:17:10

标签: java jvm classloader

最近我研究了JVM。我知道ClassLoader何时加载Class java.lang.ObjectClassLoader将委托给引导程序ClassLoader。如果我更改rt.jar中的java.lang.Object文件怎么办? JVM是否有办法确保Java核心库是安全的?

3 个答案:

答案 0 :(得分:2)

  

JVM是否有办法确保Java核心库是安全的?

如果你打算“安全”来表示“没有受到干扰”,那么认为答案是否定的。

此外,它将是徒劳的 * 。如果某人有足够的权限干扰(即更改)“rt.jar”文件,他们可能干扰java可执行文件,以便击败它可能执行的任何检查检测到“rt.jar”文件已被更改。如果用户(或黑客)有效控制机器,则所有投注均已关闭。

* - 更糟糕的是。通过使用公共/私人对的私钥进行签名来实现防篡改。如果Oracle为“rt.jar”做了这个,那么除了Oracle之外没有人能够构建一个正确签名的“rt.jar”文件。那会破坏Java开源的目的,而且确实让很多人烦恼!!

(相比之下,当JAR文件下载并在Web浏览器中运行或使用web-start时,JVM /类加载器会在让它们运行之前检查它们是否已正确签名。但是,您正在检查第三方的干扰 - party ... etcetera ...不受具有本地管理员权限的人的干扰。)


还有另一种“安全”的含义;即库不包含将导致运行时类型安全性被违反的Java字节码。那个案子的答案是肯定的。

JVM验证加载的字节码,以检查是否会违反运行时类型安全性,并可能导致JVM崩溃。如果代码不正确,则抛出VerifyError异常,类加载操作失败。

参考:

答案 1 :(得分:1)

当JVM加载类时,它将执行以下步骤: 1.从jar文件或类路径加载类文件(depand在类加载器上),java.lang.Object在rt.jar中,JVM将找到它并将其加载到JVM的方法区域。

  1. 在步骤1加载时验证类文件。类文件有自己的格式(在JVM版本上为depand),例如,私有的4个字节是0XCAFEBABE。当格式类文件不正确时,JVM将抛出错误。如果您修改的java.lang.Object的格式不正确。 JVM不会加载它。

  2. JVM将为您分配内存。

  3. JVM会将符号链接解析为直接链接。
  4. 初始化您的班级。
  5. 希望能帮到你。抱歉我的英语不好。

答案 2 :(得分:0)

如果您更改了j ava.lang.Objec t并且如果它没有ByteCode verification process,那么它可能会抛出错误。另外明智的是jvm没有检查它是否安全