-
-
[原创]一个有趣的APIHook用宏
-
发表于:
2015-3-28 21:37
6168
-
不管用什么APIHook库,或怎样实现APIHook都避免不了要
先声明一个函数指针存储要Hook的函数指针,再声明一个跳转函数的实现函数。
这里以detours给的一段例子作为说明
static DWORD (WINAPI * TrueSleepEx)(DWORD dwMilliseconds, BOOL bAlertable);
DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
{
return TrueSleepEx(dwMilliseconds, bAlertable);
}
如果HOOK的函数比较少,倒是没什么,但如果Hook的函数多了,譬如行为分析类程序,那会让人抓狂的。
这时,一个不错的宏就派上用场了
#define HOOKDEF(return_value, calling_convention, apiname, ...) \
return_value (calling_convention *Real_##apiname)(__VA_ARGS__); \
return_value calling_convention Mine_##apiname(__VA_ARGS__)
这时上面的代码,就可简化为
HOOKDEF(DWORD , WINAPI, SleepEx,
DWORD dwMilliseconds,
BOOL bAlertable)
{
return Real_SleepEx(dwMilliseconds, bAlertable);
}
上面的那个宏定义来自于 cuckoo的开源代码,对行为分析有兴趣的可以看下
https://codeload.github.com/cuckoobox/cuckoomon/zip/master
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)