フック関数を使用します。
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