我正在研究一个分析JAR文件的封闭源Java应用程序.
由于java可以很容易地反编译,并且混淆真的不是什么大不了的事,
我想提供一个在我的服务器上执行应用程序的在线服务
返回它的结果很像fernflower:www.reversed-java.com/fernflower/.
问题是,我担心这会让我的应用程序加载任何潜在的灾难
即使我从未运行过罐子,服务器上的有害罐子也是如此.
我正在做的就是使用URLClassLoader和JarInputStream加载它们.
我正在加载的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?
我认为它不能轻易覆盖你的课程,但是有许多其他方法可以让不受信任的代码“搞乱”你的世界;往上看. (如果不受信任的代码可以执行反射代码,那么它可能会通过搞乱类加载器的私有数据结构来覆盖您的类.)