我正在开发一个分析 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/