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

lef*_*yra 4 python binary exe process

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

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

aba*_*ert 5

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

CreateProcessWin32 API 中的基础功能也是如此,因此降低到该级别甚至没有简单的方法。

一种通过下降到做到这一点ZwCreateProcess/ NtCreateProcess。如果你知道如何使用低级别的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)
Run Code Online (Sandbox Code Playgroud)

这在Windows和* nix上都可以使用,但尚未经过完全测试,并且至少在一个平台上可能存在错误。

显然,如果您想多次执行它,请remove在完成后再执行。或者只是使用一些适当的持久性目录,并仅在缺少或过时时才写入。