执行Python脚本中嵌入的.exe文件
如何将存储为base64编码字符串的exe文件加载到内存中,并在不将其写入磁盘的情况下执行它执行Python脚本中嵌入的.exe文件,python,process,binary,exe,Python,Process,Binary,Exe,如何将存储为base64编码字符串的exe文件加载到内存中,并在不将其写入磁盘的情况下执行它 重点是,将某种控制/密码/串行系统放在适当的位置,并用py2exe编译它。然后,我可以在我的代码中随时执行嵌入的文件。Python用于执行子进程的所有机制都需要文件名 Win32 API中的底层函数也是如此,因此,降低到该级别并不是一个简单的解决方法 有一种方法可以通过下拉到ZwCreateProcess/。如果您知道如何使用低级NT API,那么您就只需要了解它。如果你不…用这么简单的答案解释太多了
重点是,将某种控制/密码/串行系统放在适当的位置,并用py2exe编译它。然后,我可以在我的代码中随时执行嵌入的文件。Python用于执行子进程的所有机制都需要文件名 Win32 API中的底层函数也是如此,因此,降低到该级别并不是一个简单的解决方法 有一种方法可以通过下拉到
ZwCreateProcess
/。如果您知道如何使用低级NT API,那么您就只需要了解它。如果你不…用这么简单的答案解释太多了
当然,您也可以创建或使用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上运行,但它完全未经测试,并且可能在至少一个平台上存在bug
显然,如果您想多次执行它,在完成之前不要删除它。或者只是使用一些适当的持久目录,只有当它丢失或过期时才写它。我想是Windows吧?为什么不在python中实现二进制文件的诞生呢?tMC:这是一个flash可执行文件。为什么要避免将其写入磁盘?abarnert:因为我不希望人们在不传递控件的情况下复制它,如果我将其写入磁盘,他们所要做的就是执行创建的文件或复制它。我太简单了。@leferreyra:大多数用户都会被把文件隐藏在临时目录中而蒙蔽。而那些不会…嗯,任何读过基本破解教程的人都会知道如何在内存中抓取图像并将其保存到磁盘和/或从源代码中解码,所以你最多只需要在破解软件所需的时间上增加几分钟。这值得你为此付出数小时的努力吗(最有可能的是,你的合法用户会遇到bug)?好吧,看来没有简单的方法可以做到这一点,而且我不想深入了解Windows API,所以。我想我得把它写进临时文件里。