簡體   English   中英

Python腳本中嵌入的Execute.exe文件

[英]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,但它完全未經測試,並且可能至少在一個平台上存在錯誤。

顯然,如果您想多次執行它,請在完成之前不要removeremove 或者只是使用一些適當的持久目錄,並且僅在它丟失或過時時才寫入它。

編碼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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM