0

我有这段代码将可执行文件复制到字节数组中。

    //winmine.exe
    Path path = Paths.get("winmine.exe");
    byte[] bin = Files.readAllBytes(path);

我想在不使用文件的情况下动态地执行数组。例如,我需要这样的东西:

    Runtime app = Runtime.getRuntime();
    String currentDir = new File(".").getAbsolutePath();
    Process p = app.exec_WRAP_BINARY(bin);   //Not exixts

这样做的目的是防止用户访问文件 winmine.exe

更新:我相信这一定是可能的。如果我们认为这是一个执行:首先,它读取一个文件,然后将它完全加载到内存中......我看不到,因为它不能单独执行此操作。

4

2 回答 2

1

通常,您想要的实际上是不可能的。系统链接器将需要链接二进制文件并在执行之前加载它,并且在大多数(几乎我认识的每个人,尤其是 Windows/Linux)上,这意味着您将需要文件系统上的文件。

当然——你总是可以把它写在那里,也许是一个临时目录,把它作为一个文件执行,然后再删除它。

即使您使用纯 C 语言编写,也不能轻易做到这一点。

(警告 - 在 Windows 上,理论上您 / 可以 / 使用 .com 格式的可执行文件来执行此操作。但对该格式的严格限制使其过时。)

在 Linux 上,您还可以尝试定位系统加载程序二进制文件,然后执行它,通过管道将整个二进制文件传递给它。这是有效的,因为它起到了一种“二进制解释器”的作用。但我不会推荐这种方法。

于 2015-05-04T19:55:18.710 回答
0

也许我以完全错误的方式理解您的要求,但是如果您要实现的目标是拥有一个“私有'.exe'文件”,也许您应该将其作为资源放在我的'.jar'中假设您要生成然后将其解压缩到为用户“隐藏”的临时文件夹中,并使用简单的进程调用从那里调用它,然后当您完成时,删除该文件而不释放对它的锁定,这样用户就不能访问它,但所有这些都是针对“懒惰”用户的,您必须了解,如果有人真的想访问该 exe,他们会的,这就是 Window 仍然如此容易被盗版的原因所有这一切都是为了创建一个仅适用于 Windows 的 java 应用程序,因此您需要在 *NIX 中添加另一个“库/应用程序”来为您执行此操作(如果您想添加对多个系统的支持)

于 2015-05-04T20:50:04.787 回答