2013-06-02 42 views

回答

5

在當前過程中沒有處理WriteProcessMemory。它發生在OS內部 - 它將外部進程映射到當前進程的地址空間,寫入內存並再次取消映射。

如果您需要防止這種情況發生,您將不得不阻止所有使用WriteProcessMemory的進程(或者至少攔截它並檢查您的進程是否有目標)。如果您不小心,這可能會阻止調試器在該系統上工作。這可能會讓人感到不安,而知道自己在做什麼的人可能會繞過它。

+0

而VirtualProtectEx,CreateRemoteThread在當前進程中也不是什麼不能造成的? –

+0

正確,它們都發生在操作系統內部 - CreateRemoteThread顯然會導致另一個線程在原始進程中運行,如果代碼知道它應該有多少線程(通過枚舉進程中的所有線程 - 但它確實假設你知道圖形驅動程序,音頻驅動程序,物理引擎等不會在[某些硬件上]創建任意線程。VirtualProtect及其兄弟完全是操作系統的一部分,所以你不能從「目標」進程中看到這一點: –

+0

在這裏添加一點點:在典型情況下,當發生WriteProcessMemory時,目標進程將被掛起,因此通常根本無法做出反應。 –