2013-07-30 32 views
2

最近我一直在研究掛鉤函數和創建回調函數。雖然我沒有完全理解整個技術,但似乎我應該能夠像掛鉤Windows API的ReadProcessMemory()函數一樣執行某些操作,並讓我的進程在某個內存讀取完成後調用一個函數。雖然我只是因爲好奇才想做這件事,但是看起來它對於防止網絡遊戲中的黑客行爲非常有用。如何在進程讀取進程的內存時調用函數 - Win32 API

不幸的是,在這個問題上缺乏教程,文章等。我查看了很多注入代碼,但缺乏理解讓我反感。我想做什麼是可能的,任何人都可以指出我的方向?

我應該提一下,這是我第一次樂意走出面向對象編程,所以我很抱歉如果這沒有意義。

+1

應當注意的是,如果你認爲你的控制之外的所有的東西,將/可以閱讀你的記憶,'ReadProcessMemory'將他們的過小的分數察覺。 DMA可能發生;你的頁面可以交換到磁盤,各種第三方代碼從你的進程中運行,等等等等。 –

回答

1

使用鉤子函數:

BOOL WINAPI hkReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead) 
{ 

    if (GetCurrentProcess() == hProcess) { 

      // your process 
    } 
     return oReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); 

} 

的typedef功能:

typedef BOOL (WINAPI* _NtReadProcessMemory)(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T *lpNumberOfBytesRead); 

聲明老功能:

_NtReadProcessMemory oReadProcessMemory = (_NtReadProcessMemory) 
GetProcAddress(GetModuleHandle(L"ntdll"), "NtReadProcessMemory"); 

安裝彎路:

BOOL bHook = Mhook_SetHook((PVOID*)&oReadProcessMemory, 
      hkReadProcessMemory)); 

很明顯,您需要將此DLL注入到系統上運行的所有進程中。

Mhook:(彎路庫)http://codefromthe70s.org/mhook22.aspx

+0

然後他們掛鉤你並且在不調用ReadProcessMemory的情況下讀你的內存。 –