如何将存储为 base64 编码字符串的 exe 文件加载到内存中并在不写入磁盘的情况下执行它?
关键是,放置某种控制/密码/串行系统并使用 py2exe 编译它。然后我可以在我的代码中随时执行该嵌入文件。
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
在你完成之前不要这样做。或者只是使用一些适当的持久目录,并且仅在它丢失或过时时才写入。