2011-09-08 27 views
0

我想知道如何監視另一個應用程序的進程內存,看看它是否被第三方操縱。比如當在特定進程上調用ReadProcessMemory,WriteProcessMemory時。例如,nProtect GameGuard可以檢測遊戲進程內存何時被操縱。檢測是否正在處理進程內存?

+1

你究竟想要完成什麼? –

+0

我想檢測何時在我的應用程序上調用OpenProcess,ReadProcessMemory,WriteProcessMemory。我想通過一個單獨的程序來監視它。 – PepsiMmmm

+0

可能是一個系統廣泛的鉤。你會注入每個進程,並監視他們對這些函數的調用,如果進程ID與你的匹配,你的行爲依據是什麼? –

回答

2

真正的答案可能非常長,所以這裏有一些小技巧給你。首先,你需要一些系統級的掛鉤來實現這些功能,以及它們的低級構建塊(Zw ...,Nt ...,甚至系統調用)。這應該由內核驅動程序完成。

其次,您需要一種方法來安裝此驅動程序,並將其隨意刪除。這可以通過服務完成。

三,你需要一種內核驅動程序和遊戲之間的通信方式。在初始化階段,遊戲將安裝驅動程序,並告訴它遊戲正在運行的進程ID。然後,驅動程序將阻止從其他進程訪問該特定進程。

第四,你需要保持一個白名單。殺毒軟件等應用程序需要窺視和捅你的遊戲。您的內核驅動程序必須允許這些檢查通過。這是nProtect和類似技術失敗的地方。他們只是與其他軟件衝突。

第五,也許是時候想想其他方法來保護你的遊戲。 David Aucsmith的論文「防篡改軟件:實施」值得一讀。

+0

謝謝,我想我會和你的第五個建議一起去。我希望它不必如此入侵。 – PepsiMmmm

+0

抱歉張貼在舊線程上,但這也是一個很好的閱讀。儘管它採用了稍微不同的方法,但它引入了很多好方法來檢測和抵消內存操作,包括哈希/冗餘。 http://research.microsoft.com/en-us/um/people/venkie/jakubowski09tts.pdf –