执行Python脚本中嵌入的.exe文件

时间:2013-05-06 19:52:10

标签: python process binary exe

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

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

1 个答案:

答案 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它,直到你完成它为止。或者只使用一些适当的持久性目录,只有在它丢失或过期时才写入。