2013-07-26 62 views
1

我试图从一个URL从一个jar文件加载类到内存然后运行其中一个类加载。我不希望用户可以访问类文件或jar。我见过一些类似的问题,但他们没有回答。从一个jar文件从一个jar文件加载到内存,然后运行所有类中的主类

我知道它可能会使用URLClassLoader和ByteArrayInputStream/ByteArrayOutputStream。

在此先感谢您的帮助。

类似的悬而未决的问题:

How to load a jar from an URL without downloading it?

Load jar from URL

+0

另一个相关的问题:http://stackoverflow.com/questions/9964076/how-to-load-classes-from-jar-file-in-memory-stream ...虽然它不回答你的“如何至”。 –

回答

1

您是在正确的轨道(我认为)上。步骤如下:

  1. 使用URLConnection打开流到JAR文件的流。
  2. 读取流并将其写入ByteArrayOutputStream,并提取字节数组。
  3. 在字节数组上打开ByteArrayInputStream,然后将其包装在JarInputStream中。
  4. 迭代JAR文件条目的成员,保存条目信息并缓存条目文件内容。
  5. 编写一个使用JAR文件条目和内容的内存中缓存的自定义类加载器。

我不能指出你在示例代码,因为我找不到任何。由于JarFile API需要RandomAccessFile,这意味着数据在文件系统中,在某些系统上,您可以创建一个临时文件,在其上打开一个RAF,取消链接,然后取和写入的网址进入英国皇家空军,但是,这并不是便携式...)


我要指出的是,如果你这样做是因为一些许可的一部分或“知识产权管理“计划,你可能正在浪费你的时间。在客户端代码(即在用户机器上运行的代码)中执行的任何实际方案都可能被破坏......除非机器完全锁定。

+0

这非常有帮助,谢谢。在回应你的最后一条评论时,是否添加了只有在服务器端的授权码和IP匹配才能改变任何东西或者仍然易破的情况下才能访问jar的问题?另外什么是你建议的最好的方法?因为即使专业程序被破解,也不需要100%的防呆。 ---在附注中,仅允许用户暂时但直接从jar中加载混淆的类文件会容易得多吗? – Lee

+0

它仍然很容易破碎。认真。我建议你完全放弃在用户机器上保密的想法。如果你不得不......让老板高兴......就不要把你的时间浪费在更复杂的计划上。如果你有“秘密酱油”的东西,那么做吧/保存在一个安全的服务器上。 –

+0

对我来说,我使用类似的方法。我通过SSL加载并混淆。它至少可以防止对游戏中检查文件哈希的部分进行简单的逆向工程。磁盘上的其余部分是混淆而不是混淆。有助于让内部人员和网络重建变得混乱。除了时间敏感的游戏数据外,我还为所有游戏保留SSL连接。代理人仍然检查作弊和完整性。 – Underbalanced

相关问题