4

如何将存储为 base64 编码字符串的 exe 文件加载到内存中并在不写入磁盘的情况下执行它?

关键是,放置某种控制/密码/串行系统并使用 py2exe 编译它。然后我可以在我的代码中随时执行该嵌入文件。

4

1 回答 1

5

Python 用于执行子进程的所有机制都需要文件名。

Win32 API中的底层CreateProcess函数也是如此,因此通过下降到该级别甚至没有简单的方法来解决它。

一种方法可以通过下拉到ZwCreateProcess/来做到这一点NtCreateProcess。如果你知道如何使用低级 NT API,这篇文章应该是你理解它的全部内容。如果您不这样做……在SO答案中解释太多了。

或者,当然,您可以创建或使用 RAM 驱动器,甚至模拟虚拟文件系统,但作为避免创建文件的尝试,这有点愚蠢。

所以,正确的答案是将exe写入文件,然后执行。例如,像这样:

fd, path = tempfile.mkstemp(suffix='.exe')
code = base64.b64decode(encoded_code)
os.write(fd, code)
os.fchmod(fd, 0o711)
os.close(fd)
try:
    result = subprocess.call(path)
finally:
    os.remove(path)

这应该适用于 Windows 和 *nix,但它完全未经测试,并且可能在至少一个平台上存在错误。

显然,如果你想多次执行它,remove在你完成之前不要这样做。或者只是使用一些适当的持久目录,并且仅在它丢失或过时时才写入。

于 2013-05-06T20:33:09.113 回答