Java - 如何利用动态 jar 加载?

标签 java dynamic jar loading exploit

我正在开发一个分析 JAR 文件的闭源 Java 应用程序。 由于 java 可以很容易地反编译,而且混淆真的没什么大不了的, 我想提供一个在线服务,该服务将在我的服务器上执行该应用程序,并且 返回它的结果很像这里的 fernflower:www.reversed-java.com/fernflower/。

问题是,我担心这会导致我的应用加载任何潜在的灾难 服务器上的有害 jar ,即使我从不运行 jar 。 我所做的就是使用 URLClassLoader 加载它们和 JarInputStream .

我正在加载的 jar 可以覆盖我原始应用程序中的类以执行恶意代码吗? 或者搞乱我的程序?

动态加载jar有什么风险?

最佳答案

What are the risks in dynamically loading jars?

本身 没有动态加载的风险。风险实际上是运行不受信任代码的风险。如果您在没有采取适当的预防措施的情况下这样做,您的机器就有可能完全受损。

如果你打算做这种事情,至少你应该在沙箱中运行不受信任的代码,以阻止它做任何可能有害的事情。例如,您需要阻止读写本地文件、运行外部进程、使用反射、访问系统属性等。您可能希望阻止它创建线程、创建套接字和其他消耗系统资源的事情。

最后,你需要考虑一些不受信任的 JAR 有一个无限循环的方法的情况。这是使用安全沙箱无法解决的问题。事实上,摆脱循环线程的唯一安全方法是退出 JVM 并重新启动它。

Can a jar im loading override classes in my original app in order to execute malicious code, or mess up my program?

我不认为它可以轻易地覆盖您的类,但不受信任的代码还有许多其他方式可以“搞乱”您的世界;往上看。 (如果不受信任的代码可以执行反射代码,那么它可能通过乱用类加载器的私有(private)数据结构来覆盖您的类。)

关于Java - 如何利用动态 jar 加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307167/

相关文章:

c# - 如何在 C# 中将 Button 的类型设置为 "Button"(与默认的 "Submit"相对)?

c - 带有结构体数组的 Malloc

java - 将 Java-1.7 项目库导入 Android 时出错

java - 从 Apache 的 POI 工作簿获取 InputStream

java - equals() 方法?

java - 我的 Java PID Controller 无法正常运行

c++获取动态泛型指针类型?

java - 使用 java 代码创建 .jar 的快捷方式

java - 执行由 Jasmin 生成的文件 .classes 时出错

java - 使用 ojalgo : Create Matrix from Array