3

最近我一直在研究挂钩函数和创建回调函数。虽然我并不完全理解整个技术,但似乎我应该能够做一些事情,比如挂钩 Windows API 的 ReadProcessMemory() 函数,并让我的进程在读取它的内存时调用一个函数。虽然我只是出于好奇才想这样做,但连接到 Windows 功能似乎对于防止在线游戏中的黑客攻击非常有用。

不幸的是,关于这个主题的教程、文章等非常缺乏。我查看了很多注入代码,但缺乏理解使我退缩了。我想做的事有可能吗,有人能指出我正确的方向吗?

我应该提一下,这是我第一次自愿跳出 OO 编程,所以如果这没有意义,我深表歉意。

4

1 回答 1

2

使用钩子函数:

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

于 2013-07-30T22:25:47.207 回答