我已经使用EasyHook将系统API例程(使用C++)挂钩到库之外取得了大量成功。这些库一直是扁平的,并且基本上充满了全局可调用的例程。下面是使用MessageBeep()出的User32.dll库(减去设置代码)的一个小样本:使用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);
这是所有的伟大工程。问题是,我现在需要将方法从一个类中去除,而不仅仅是一个全局函数。我并不真正关心对象本身,我真的更关心检查方法的参数,就是这样。我不知道如何在函数名称参数中为GetProcAddress()语法确定例程,我甚至不确定GetProcAddress()是否支持它。例如,我想勾Pen::SetColor()方法出来的Gdiplus.dll库:
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 2014-11-14 23:16:10