首页
社区
课程
招聘
[求助]为什么64位键盘hook把32位的hook覆盖
发表于: 2015-12-17 10:58 3983

[求助]为什么64位键盘hook把32位的hook覆盖

2015-12-17 10:58
3983
同样的代码,做了一份x32,一份x64。
先开x32的键盘hook,正常;
再开x64的键盘hook,64位的程序正常,32位的hook失去作用。

exe设置hook的代码,32位为AH2013x32.dll,没有弹出对话框,证明SetWindowsHookEx是成功的:
        HINSTANCE hMod = LoadLibrary(L"AH2013x64.dll");
        if ( hMod )
        {
                dll_MyKbFilter lpfn;
                dll_Stupid stupid;
                lpfn =(dll_MyKbFilter)( GetProcAddress(hMod, "dll_MyKbFilter"));
                stupid=(dll_Stupid)(GetProcAddress(hMod, "dll_Stupid"));
                hhk = SetWindowsHookEx(WH_KEYBOARD, lpfn, hMod, 0);// WH_KEYBOARD
                if ( hhk )
                {
                        stupid(hhk);
                }
                else{
                        MessageBox(_T("hook失败,检查一下是否已经运行过同一程序或32位的Autohook"));
                        return FALSE;
                }
        }

然后启动调试32位的dll:
发现无法在dll_MyKbFilter中断。但SendInput的可以,SendMessage(hWndAcad,WM_COPYDATA,NULL,(LPARAM)&cmdMsg)的代码不起作用。何解?

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 12663
活跃值: (3172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
然后把64位的程序关掉,32位的又可以了。
同样,先开64位,再开32位的,64位的不行,32位的可以。
即使用OD打开cad调试,也无法中断,证明hook已经屏蔽掉或覆盖掉了。
2015-12-17 11:21
0
雪    币: 12663
活跃值: (3172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我大概知道什么原因了,因为64位的hook后开,优先处理64位的hook,虽然是32位的程序,但代码里仅仅判断是否cad窗口,没有判断cad的版本,所以没有把消息CallNextHook传下去。
先去弄一下
2015-12-17 14:35
0
雪    币: 12663
活跃值: (3172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
终于搞定,问题真的是出在dll_MyKbFilter,里面的hwnd是通过GetForegroundWindow获得,但计算程序所在路径却用了GetModuleFileName,应该用GetModuleFileNameEx才能得到非本程序的文件所在路径。
至于为什么是加载hook的对话框,就不知道了,解决问题就好。
2015-12-17 15:29
0
游客
登录 | 注册 方可回帖
返回