使用CreateProcess 執行記憶體中的EXE
簡介:
簡介:記憶體緩衝區提出了一個獨特的挑戰。本文探討了一種允許您執行此操作的方法,無需在執行前將可執行檔寫入檔案。
背景:在遊戲產業,散佈未加密的可執行檔可能會導致 DRM 規避。為了解決這個問題,遊戲開發者經常將加密的 EXE 發送給發行商,發行商在將其發布給玩家之前使用專有的 DRM 對其進行包裝。
建立修補解決方案:當崩潰發生在 EXE 中,可能需要幾天或幾週的時間才能透過 DRM 管道分發修補程式。為了加快修補過程,開發人員可以將原始 EXE 嵌入加密的資料檔案中。這樣可以在不影響 DRM 的情況下輕鬆修補。
實作:
解決方案涉及使用帶有 CREATE_SUSPENDED 的 CreateProcess 從記憶體中的 EXE 建立進程 旗幟。此標誌允許在執行之前有時間修改掛起的進程。
檢索進程資訊:透過取得掛起進程的執行緒上下文,可以存取進程環境塊(PBE)結構。 PBE 包含影像的基址,這對於進一步操作至關重要。
載入記憶體中 EXE:一旦取得基址,您就可以使用WriteProcessMemory將記憶體中的EXE載入到掛起程序的記憶體空間。但是,可能需要根據大小和對齊差異調整對齊或分配額外的記憶體。
修補和執行:要完成這個過程,請修補基礎將記憶體中EXE 的位址寫入掛起進程的PBE 中,並使用新的入口點更新線程上下文。最後,使用 ResumeThread 從記憶體中的 EXE 恢復執行修改後的進程。以上是如何使用 CreateProcess 執行記憶體中 EXE?的詳細內容。更多資訊請關注PHP中文網其他相關文章!