首頁 >後端開發 >C++ >如何在沒有檔案儲存的情況下直接從記憶體緩衝區建立進程?

如何在沒有檔案儲存的情況下直接從記憶體緩衝區建立進程?

DDD
DDD原創
2024-11-02 00:12:02739瀏覽

How Can Processes Be Created Directly From Memory Buffers Without File Storage?

從記憶體緩衝區建立進程

在這篇文章中,我們將探索一種直接從記憶體緩衝區產生進程的技術,而不需要文件儲存。這可能是涉及程式碼注入或安全修補的有用場景,例如在提供的背景故事中。

技術分解

Windows 為 CreateProcess API 提供了 CREATE_SUSPENDED 標誌,允許進程保持掛起狀態,直到呼叫 ResumeThread 函數。此視窗提供了在執行之前操作進程記憶體和上下文的機會。

  1. 掛起並檢查進程:使用CreateProcess(CREATE_SUSPENDED) 掛起進程並使用以下命令檢索掛起線程的上下文GetThreadContext.
  2. 識別基址:
  3. EBX 暫存器將包含指向進程環境塊(PBE) 結構的指標。 ImageBaseAddress 可在 PBE 內的偏移 8 處找到。
  4. 準備記憶體中EXE:
  5. 如果掛起進程和記憶體中EXE 的基底位址與記憶體中的相匹配EXE 小於或等於大小,使用WriteProcessMemory 將其直接寫入掛起進程的內存。
  6. 需要魔法:
  7. 如果不滿足步驟 3 中的條件,則取消映射原始映像 ( ZwUnmapViewOfSection),使用 VirtualAllocEx 分配內存,並使用 WriteProcessMemory 寫入內存中 EXE。
  8. 修補 PEB 和線程上下文:
  9. 使用記憶體中 EXE 的基底位址更新掛起進程的 ImageBaseAddress ,修補線程上下文的 EntryPoint 位址,並使用 SetThreadContext 儲存變更的上下文。
  10. 恢復執行:
  11. 使用 ResumeThread 恢復掛起的程序以執行記憶體中的 EXE。

結論

透過執行以下步驟,可以從記憶體緩衝區中建立流程,從而為程式碼注入和安全修補場景提供彈性。

以上是如何在沒有檔案儲存的情況下直接從記憶體緩衝區建立進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn