高分请教:如何判断机器中被安装了键盘钩子? 大家有什么好的方法?谢谢参与!还有为什么键盘钩子很难截取到一些网上银行页面上输入的信息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Hook Chains:钩子链系统中可能同一类型的钩子不只安装一个,每个后续安装的钩子会放在钩子链的首部。钩子的调用是从钩子链头部开始的,为了保证钩子链的完整性,一般的你的钩子的回调函数要调用CallNextHookEx,以便该钩子链中后面的钩子得到调用,假如你没有使用CallNextHookEx,那么该钩子链后面的其他钩子将得不到调用。 你自己安装一个WH_DEBUG的钩子,就可以知道系统有哪些钩子了。 我试了一下,(win2000 sp4)安装了一个WH_DEBUG钩子,安装之后导致机器弹出n多错误,都是正在运行的程序的,不知道为什么hDebugHook = NULL; // Add the CallWnd hook hDebugHook = SetWindowsHookEx( WH_DEBUG, (HOOKPROC)DebugProc, // Hook procedure hInstance, // This DLL instance 0L ); 系统调用任何钩子之前都会先调用WH_DEBUG钩子,不管系统中是否安装了其他钩子 不需要反复安装啊,一次就够了http://blog.vckbase.com/bluesky/archive/2005/12/09/15787.html 我试过了,无论是先安装系统钩子还是先安装这个钩子,都没有发挥作用,不知道是什么原因?能不能把你的测试工程发到下面的邮箱,谢谢![email protected] 我的键盘钩子是做为dll,注入到所有进程中的 我在我的BLOG上做了回答。那个系统钩子装上后,当你按键时会发声。但我的程序的窗口没有获得输入焦点时,按键会有声音发出。我的程序装上钩子后,在我的程序窗口上按键的话就没有声音了。 呵呵,我测试过了还是有声音的我的测试环境是:win2000 pro sp4 +VC6 KeySound.exe点击“确定”注入hodll.dll吗?还是一打开就注入了?/*两个钩子都安装上之后,1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声*/上面“我的程序窗口”是指Testkeyboardhook.exe的窗口,对吧?测试的结果是安装两个钩子之后(KeySound.exe点击“确定”、Testkeyboardhook.exe点击“安装”):如果键盘输入焦点在Testkeyboardhook.exe上时会发声,不在时却不会发声,呵呵 KeySound.exe不要点确定,直接运行钩子就安装了点确定的话,系统钩子就卸下来了。Testkeyboardhook.exe需要点installhook 我用工具查了一下,发现TestKeyBoardHook.exe中没有hodll.dll你的hodll.dll是注入到哪个进程中的? 如果KeySound.exe不要点确定,那在任何地方按键都有发声,不知道为什么 我这边经过实验是没有问题的。1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声随便点Testkeyboardhook.exe的窗口,(别让它退出哦),按键还有声音吗?你仔细研究研究 我给你另外发一份吧,把声音改成MESSAGEBOX 已发邮件,查收,这回应该没问题了。现在用MESSAGEBOX代替声音。 测试通过,谢谢!这种方法不能阻止驱动级的hook吧? 什么叫驱动级的HOOK,驱动是驱动,HOOK是HOOK没办法阻止驱动的。 驱动可以做键盘过滤程序,这个你可能是很难阻止的。在驱动里也可以hook CallNextHook在win32k.sys中对应的函数,然后判断该钩子类型在应用层中也可以用DEBUG钩子切入到别的进程内,hook CallNexHook函数,类型的判断也很简单,不过不能完全判断出来,举个例子,要判断是否是键盘钩子,可以这样:int g_nSecondTime = 0;LRESULT WINAPI My_CallNextHookEx(IN HHOOK hhk, IN int nCode, IN WPARAM wParam, IN LPARAM lParam){ DWORD dwlParam = 0;DWORD *pdwlParam = NULL;if((DWORD)lParam)pdwlParam = (DWORD*)lParam;dwlParam = *pdwlParam;g_nSecondTime ++;if(g_nSecondTime == 1){if(dwlParam != WM_KEYDOWN){g_nSecondTime = 0;}}if(g_nSecondTime == 2){g_nSecondTime = 0;if(dwlParam == WM_KEYUP){// 这里就说明是键盘钩子了}}return Real_CallNextHookEx(hhk, nCode, wParam, lParam);} 在windows2000下 使用 Turboc2 编写程序时候,如何写入中文注释???有没有方便的方法 很菜得问题,希望大家指导!!!! VC6中使用定时器 鼠标托动窗口时, 当鼠标离开速度过快, 使窗口接收不到下一个移动消息, 窗口不会移动了, 有何办法解决 发送端如何知道接收端已经正确接收到??? 请教高手:奇怪的出错问题,在线等........... 怎样把类型库编译进exe和dll文件中? 谁有从位图到GIF的转换模块,C++或VB的都行? 硬盘解密,值的关注!!!急急急!!!!在线等待!!! 十六进制字符串转short int。 共用端口的问题? 键盘钩子的三点疑问
系统中可能同一类型的钩子不只安装一个,每个后续安装的钩子会放在钩子链的首部。钩子的调用是从钩子链头部开始的,为了保证钩子链的完整性,一般的你的钩子的回调函数要调用CallNextHookEx,以便该钩子链中后面的钩子得到调用,假如你没有使用CallNextHookEx,那么该钩子链后面的其他钩子将得不到调用。
hDebugHook = NULL;
// Add the CallWnd hook
hDebugHook = SetWindowsHookEx(
WH_DEBUG,
(HOOKPROC)DebugProc, // Hook procedure
hInstance, // This DLL instance
0L
);
http://blog.vckbase.com/bluesky/archive/2005/12/09/15787.html
能不能把你的测试工程发到下面的邮箱,谢谢!
[email protected]
那个系统钩子装上后,当你按键时会发声。
但我的程序的窗口没有获得输入焦点时,按键会有声音发出。我的程序装上钩子后,在我的程序窗口上按键的话就没有声音了。
我的测试环境是:win2000 pro sp4 +VC6
/*
两个钩子都安装上之后,1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声
*/
上面“我的程序窗口”是指Testkeyboardhook.exe的窗口,对吧?
测试的结果是安装两个钩子之后(KeySound.exe点击“确定”、Testkeyboardhook.exe点击“安装”):如果键盘输入焦点在Testkeyboardhook.exe上时会发声,不在时却不会发声,呵呵
点确定的话,系统钩子就卸下来了。
Testkeyboardhook.exe需要点installhook
你的hodll.dll是注入到哪个进程中的?
1。当键盘输入焦点不在我的程序窗口上时会发声2。当键盘输入焦点在我的程序窗口上时不会发声随便点Testkeyboardhook.exe的窗口,(别让它退出哦),按键还有声音吗?
你仔细研究研究
现在用MESSAGEBOX代替声音。
这种方法不能阻止驱动级的hook吧?
没办法阻止驱动的。
在驱动里也可以hook CallNextHook在win32k.sys中对应的函数,然后判断该钩子类型在应用层中也可以用DEBUG钩子切入到别的进程内,hook CallNexHook函数,类型的判断也很简单,不过不能完全判断出来,举个例子,要判断是否是键盘钩子,可以这样:int g_nSecondTime = 0;LRESULT WINAPI My_CallNextHookEx(IN HHOOK hhk, IN int nCode, IN WPARAM wParam, IN LPARAM lParam)
{
DWORD dwlParam = 0;
DWORD *pdwlParam = NULL;
if((DWORD)lParam)
pdwlParam = (DWORD*)lParam;
dwlParam = *pdwlParam;
g_nSecondTime ++;
if(g_nSecondTime == 1)
{
if(dwlParam != WM_KEYDOWN)
{
g_nSecondTime = 0;
}
}
if(g_nSecondTime == 2)
{
g_nSecondTime = 0;
if(dwlParam == WM_KEYUP)
{
// 这里就说明是键盘钩子了
}
}
return Real_CallNextHookEx(hhk, nCode, wParam, lParam);
}