首页
社区
课程
招聘
[原创]一个有趣的APIHook用宏
发表于: 2015-3-28 21:37 6168

[原创]一个有趣的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期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
mark.
2015-3-28 21:44
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了..当时用Detour一个一个定义的..
2015-3-28 21:47
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2015-3-29 10:16
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
如果你使用高版本MSVC, 配合lambda表达式和auto特性, 将会更加简洁
2015-3-29 10:26
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
怎么看不懂呢
2015-3-29 15:13
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习~ 谢分享
2015-3-29 15:53
0
雪    币: 1313
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好东西,正好在想如何简化Detour多个函数
2015-4-3 22:24
0
游客
登录 | 注册 方可回帖
返回
//