首页
社区
课程
招聘
[求助]已知钩子句柄的情况下,如何分析出钩子的类型
发表于: 2011-5-23 20:12 5828

[求助]已知钩子句柄的情况下,如何分析出钩子的类型

2011-5-23 20:12
5828
在自身不使用HOOK的情况下,已找到了另外一个钩子。

但是怎么样通过句柄得知这个钩子是什么类型的呢?

HHOOK Hooktest = FindHook; //已找到的钩子句柄

if (Hooktest==WH_KEYBOARD_LL) //这句话不能编译,我只是想实现这样的功能
{
printf("找到了");
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
#include <stdio.h>
#include <Windows.h>

void _declspec(naked) NtUserCallOneParam()
{
        __asm
        {
                mov     eax, 1143h                                //XP:1143;2003:1142;Win7:114E
                mov     edx, 7FFE0300h
                call    dword ptr [edx]
                retn    8
        }
}

LRESULT CALLBACK lpfn (int nCode, WPARAM wParam, LPARAM lParam)
{
        return CallNextHookEx (NULL, nCode, wParam, lParam);
};

void main()
{
        int idHook;
        HHOOK        Hooktest= SetWindowsHookEx(WH_CALLWNDPROCRET,(HOOKPROC)lpfn, GetModuleHandle(NULL), 0);

        __asm
        {
                push 30h
                push Hooktest                                //已找到的钩子句柄
                call NtUserCallOneParam
                mov eax,[eax+18h]
                mov idHook,eax
        }
        printf("%d",idHook);                        //钩子类型
}
2011-5-24 03:37
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
十分感谢。

这段代码很精简。

但是Hooktest如果在之前被UnhookWindowsHookEx了,再用这段代码,就会应用程序错误。也就是要确保HHOOK存在的情况下,但是HHOOK好像没有判断的代码?窗体句柄有IsWindow,那HHOOK是什么呢?
2011-5-24 09:33
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
HHOOK跟HWND一样也是个句柄,如果被UnhookWindowsHookEx了,或者是个无效句柄,NtUserCallOneParam返回值就是0,这就需要你自己在call NtUserCallOneParam后添加对EAX判断了。

另外 push 30h 中的30h在XP/2003/Win7下是不同的
2011-5-24 09:55
0
游客
登录 | 注册 方可回帖
返回
//