如何将存储为base64编码字符串的exe文件加载到内存中并执行它而不将其写入磁盘?
关键是,将某种控制/密码/串行系统放在适当的位置并使用py2exe进行编译。然后,我可以在我的代码中执行该嵌入式文件。
答案 0 :(得分:4)
Python用于执行子进程的所有机制都需要文件名。
Win32 API中的基础CreateProcess
函数也是如此,因此通过降低到该级别,它甚至都不是一个简单的方法。
通过下拉到ZwCreateProcess
/ NtCreateProcess
来实现此目的。如果您知道如何使用低级NT API,则应该只需this post即可了解它。如果你没有......在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
它,直到你完成它为止。或者只使用一些适当的持久性目录,只有在它丢失或过期时才写入。