如何将一个以base64编码的exe文件加载到内存中并执行,而不必将其写入磁盘?
这样做的目的是为了建立一种控制/密码/序列系统,并使用py2exe进行编译。然后,我可以在代码中随时执行该嵌入式文件。
如何将一个以base64编码的exe文件加载到内存中并执行,而不必将其写入磁盘?
这样做的目的是为了建立一种控制/密码/序列系统,并使用py2exe进行编译。然后,我可以在代码中随时执行该嵌入式文件。
CreateProcess
函数也需要一个文件名,因此即使降至该级别也没有简单的解决方法。ZwCreateProcess
/NtCreateProcess
来实现这一点。如果您知道如何使用低级 NT API,这篇文章 就足够让您理解了。如果您不知道……在 SO 回答中解释这些内容是过于繁琐的。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,但它完全没有经过测试,在至少一个平台上可能会有错误。
显然,如果你想多次执行它,请在完成后不要删除
它。或者只需使用一些适当的持久目录,仅在缺失或过期时才编写它。
编码exe:
import base64
#encode exe file in base64 data
with open("Sample.exe", 'rb') as f:
read_exe_to_basae64 = base64.b64encode(f.read())
#encoded data will be like (really big text, don't worry) for e.g.:
b'TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAA9AHveeWEVjXlhFY15YRWN+n0bjXhhFY0QfhyNfmEVjZB+GI14YRWNUmljaHlhFY0AAAAAAAAAAAAAAA'
#decode exe file:
with open("Sample2.exe", 'wb') as f:
f.write(base64.b64decode(read_exe_to_basae64))
exe文件将被创建在文件夹中。如果您不希望用户看到它,只需将其解码到任意随机文件夹中,并在使用后删除。