[英]Execute .exe file embedded in Python script
如何將一個 exe 文件(存儲為 base64 編碼字符串)加載到 memory 中並在不寫入磁盤的情況下執行它?
關鍵是,放置某種控制/密碼/串行系統並用 py2exe 編譯它。 然后我可以在我的代碼中隨時執行該嵌入式文件。
Python 用於執行子進程的所有機制都需要一個文件名。
Win32 API 中的底層CreateProcess
函數也是如此,因此通過下降到該級別甚至沒有簡單的方法來解決它。
有一個辦法由下降到做到這一點ZwCreateProcess
/ NtCreateProcess
。 如果您知道如何使用低級 NT 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)
這應該適用於 Windows 和 *nix,但它完全未經測試,並且可能至少在一個平台上存在錯誤。
顯然,如果您想多次執行它,請在完成之前不要remove
其remove
。 或者只是使用一些適當的持久目錄,並且僅在它丟失或過時時才寫入它。
編碼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文件將在文件夾中創建。 如果您不想讓用戶看到它,只需將它解碼到任何隨機文件夾中,並在使用后將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.