关于RegisterUserApiHook

前两天研究了一下一个主题软件,发现的这个未公开的函数,并分析了一下,这个函数的功能是向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);

转载于:https://www.cnblogs.com/lifeengines/archive/2007/07/23/828814.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值