首页
论坛
课程
招聘
[原创]关于RegisterUserApiHook
2007-7-23 22:09 7829

[原创]关于RegisterUserApiHook

2007-7-23 22:09
7829
前两天研究了一下一个主题软件,发现的这个未公开的函数,并分析了一下,这个函数的功能是向user32.dll注册一个回调函数,这个函数在程序启动的时候会回掉,可以用于DLL注入,这个函数的原形指针定义如下
在XP中,这个函数有两个参数,第一个参数是模块基址,第二个参数是回调函数地址,
typedef DWORD (CALLBACK * USERAPIHOOKPROC)(HINSTANCE hInstance, FARPROC *fnUserApis);
typedef DWORD (WINAPI * SYS_RegisterUserApiHookXP)(HINSTANCE hInstance, USERAPIHOOKPROC fnUserApiHook);
但是在windows 5.1版本后,也就是win2003开始,这个函数的参数开始变化了,结构大概如下
typedef struct _REGISTERUSERAPIHOOK2003
{
DWORD m_size;
LPCWSTR m_dllname1;
LPCWSTR m_funname1;
LPCWSTR m_dllname2;
LPCWSTR m_funname2;
}REGISTERUSERAPIHOOK2003,*PREGISTERUSERAPIHOOK2003;

typedef DWORD (WINAPI * SYS_RegisterUserApiHook2003)(PREGISTERUSERAPIHOOK2003);
这次不在需要给出函数地址,而是设置函数名称,m_size是这个结构大小,共14字节.其他4个字串我并没有研究详细用途,只知道大概用法如下
     REGISTERUSERAPIHOOK2003 pRegInfo2003;
     pRegInfo2003.m_size = sizeof(REGISTERUSERAPIHOOK2003);
     pRegInfo2003.m_dllname1 =L"wbtest.dll";
     pRegInfo2003.m_funname1 = L"User32CallBack";
     pRegInfo2003.m_dllname2 = L"wbtest.dll";
     pRegInfo2003.m_funname2 = L"User32CallBack";
这样每个程序启动,只要调用到了user32.dll,那么系统会尝试装入指定dll和函数.和键盘钩子类似,这个函数是以进程为宿主的,也就是如果注册这个函数的进程关闭了,那么系统会自动注销这个注册.当然也可以手工调用UnregisterUserApiHook来取消注册,原形指针如下:
typedef BOOL (WINAPI *  SYS_UnregisterUserApiHook)(VOID);

[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 1613
活跃值: 活跃值 (33)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
北极星2003 活跃值 25 2007-7-25 17:38
2
0
看起来REGISTERUSERAPIHOOK2003可以绑定两个函数
这样的回调也真怪,普通的软件想不用user32都难,应该比较有用。学习加标记!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
堀北真希 活跃值 1 2007-7-25 17:44
3
0
2000下貌似木有这个函数
雪    币: 440
活跃值: 活跃值 (51)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
StarsunYzL 活跃值 2007-7-25 18:25
4
0
不错~收藏学习~!
雪    币: 109
活跃值: 活跃值 (134)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2007-7-26 17:10
5
0
不错,测试看看
雪    币: 280
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
trkzrq 活跃值 2007-9-4 21:45
6
0
这个有搞头,thx
雪    币: 240
活跃值: 活跃值 (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xicao 活跃值 2007-9-5 10:42
7
0
貌似按楼主说法只有2003的系统才能用
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Xfreeboy 活跃值 2008-2-26 09:40
8
0
2003下测试可以。xp好像不行,不知有没人测试成功?
游客
登录 | 注册 方可回帖
返回