EasyHook을 사용하여 라이브러리에서 시스템 API 루틴 (C++)을 후킹하는 데 성공했습니다. 이러한 라이브러리는 항상 플랫하고 기본적으로 전역 호출 가능 루틴으로 채워져 있습니다.GetProcAddress 및 EasyHook을 사용하여 클래스 메서드 및 생성자를 후킹
HMODULE hUser32 = GetModuleHandle (L"User32");
FARPROC TrampolineMethod; // This would have been set to my new replacement trampoline method.
TRACED_HOOK_HANDLE hHook = new HOOK_TRACE_INFO();
NTSTATUS status;
status = LhInstallHook(
GetProcAddress(hUser32, "MessageBeep"),
TrampolineMethod,
(PVOID)0x12345678,
hHook);
이 모두가 좋은 작품입니다 : 여기에서 User32.dll 라이브러리 (마이너스 설정 코드)에서 MessageBeep()를 사용하여 작은 샘플입니다. 문제는, 이제 전역 함수가 아니라 클래스에서 메서드를 후크 할 필요가 있다는 것입니다. 나는 그 객체 자체에 대해 정말로 신경 쓰지 않는다. 나는 그 메소드의 매개 변수를 조사하는데 정말로 관심이있다. GetProcAddress()에 대한 함수 이름 매개 변수에서 구문 론적으로 루틴을 식별하는 방법을 모르겠습니다. GetProcAddress()가 지원하는지 확실하지 않습니다. 예를 들어, 나는 gdiplus.dll을 라이브러리 밖으로 Pen::SetColor() 방법 후크 싶습니다
HMODULE hGDIPlus = GetModuleHandle (L"Gdiplus");
FARPROC TrampolineMethod; // This would have been set to my new replacement trampoline method.
TRACED_HOOK_HANDLE hHook = new HOOK_TRACE_INFO();
NTSTATUS status;
status = LhInstallHook(
GetProcAddress(hGDIPlus, "Pen.SetColor"), // this is probably wrong or not possible here
TrampolineMethod,
(PVOID)0x12345678,
hHook);
GetProcAddress를 (hGDIPlus을 이것은 물론 작동하지 않습니다와 나는 생각하지 않는다 "Pen.SetColor을 ")이 정확합니다. GetProcAddress()에 클래스의 멤버 함수를 어떻게 지정합니까? 이것은 가능한가? 또한 Pen::Pen()과 같은 생성자를 연결하려는 경우 어떻게 보이나요?
흥미 롭습니다. 정확히 내 질문에 대답하지 않습니다. 그러나 잠재적으로 동일한 결과를 얻는 대체 경로입니다. 고마워, 내가 이것을 추구하고 그것이 나에게 효과가 있다면 다시보고 할 것이다. – Ultratrunks