-
-
[原创]一个有趣的APIHook用宏
-
发表于:
2015-3-28 21:37
6295
-
不管用什么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的开源代码,对行为分析有兴趣的可以看下
dc6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8$3c8W2L8r3!0S2k6q4)9J5k6h3N6A6N6r3S2#2j5W2)9J5k6h3y4G2L8g2)9J5c8X3y4#2j5$3E0G2L8$3u0G2P5q4)9J5c8X3y4#2j5$3E0G2L8$3#2G2L8W2)9J5c8Y4A6A6M7q4)9J5c8X3#2S2M7%4c8W2M7R3`.`.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!