社区
C#
帖子详情
请问如何当前输入是键盘输入的还是远程桌面模拟输入的?如何让输入框不被HOOK拦截?
这个还能被注册?
2009-10-22 10:54:10
如题,主要是想防止客户端被人恶意控制的情况下进行操作,判断当前的输入是本地引起的还是远程引起的,请高人指点!!!还有一个问题,如何让输入框不被HOOK拦截?有解决方案了立马结贴!另开贴送分200答谢大侠!!!
...全文
121
2
打赏
收藏
请问如何当前输入是键盘输入的还是远程桌面模拟输入的?如何让输入框不被HOOK拦截?
如题,主要是想防止客户端被人恶意控制的情况下进行操作,判断当前的输入是本地引起的还是远程引起的,请高人指点!!!还有一个问题,如何让输入框不被HOOK拦截?有解决方案了立马结贴!另开贴送分200答谢大侠!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
这个还能被注册?
2009-10-26
打赏
举报
回复
谢谢楼上的
_see_you_again_
2009-10-22
打赏
举报
回复
钩子函数的反拦截
请留意前面带*号注释的代码,其中传入了钩子的句柄g_hhookKey,只要使用API钩子将CallNextHookEx函数替换,并在替换函数中将其卸载,消息钩子就完蛋了。同时,还要保证本进程安装的钩子不被卸载,其中既可能有local类型的还可能有remote类型的。不要以为自己没有在程序中安装钩子,程序中就一定没有安装钩子,在MFC4版本中,MFC会自己装一个local类型的钩子,MFC7版本中好像没了。好了,下面介绍其实现。
1、建立DLL,在头文件中添加如下代码。
#ifdef HOOKFORBID_EXPORTS
#define HOOKFORBID_API __declspec(dllexport)
#else
#define HOOKFORBID_API __declspec(dllimport)
#endif
HOOKFORBID_API int fnHookForbid(void);//在exe程序中调用此函数,使DLL加载
HOOKFORBID_API bool AddHhook(HHOOK Hhook);//若exe中安装remote类型消息钩子,将其句柄添加
HOOKFORBID_API bool DelHhook(HHOOK Hhook);//在exe中卸载remote类型消息钩子时,删除其句柄
2、在.cpp文件中添加代码。
CArray<HHOOK,HHOOK> array;//用于记录本进程安装的钩子的句柄
//////////////////////////////////////////////////////////////////////////////
int fnHookForbid(void)
{
return 1;
}
bool AddHhook(HHOOK Hhook)
{
array.Add(Hhook);
return true;
}
bool DelHhook(HHOOK Hhook)
{
bool ret=false;
for(int i=0;i<array.GetSize();i++)
{
if(array.GetAt(i)==Hhook)
{
array.RemoveAt(i);
ret=true;
break;
}
}
return ret;
}
//////////////////////////////////////////////////////////////////////////////
下面的代码用于API替换,其中用到了CAPIHook 类,《Windows 核心编程》(Jeffrey Richter著)一书中有源代码。使用其它开发包也可以实现此功能。
//////////////////////////////////////////////////////////////////////////////
typedef HHOOK (WINAPI *PFNSETWINDOWSHOOKEX)(
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId
);
typedef LRESULT (WINAPI *PFNCALLNEXTHOOKEX)(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam
);
//////////////////////////////////////////////////////////////////////////////
extern CAPIHook g_SetWindowsHookExA;
extern CAPIHook g_SetWindowsHookExW;
extern CAPIHook g_CallNextHookEx;
//////////////////////////////////////////////////////////////////////////////
//此函数用于替换SetWindowsHookEx函数的ASCII版本SetWindowsHookExA
HHOOK WINAPI Hook_SetWindowsHookExA( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId )
{
HHOOK nResult =0;
nResult = ((PFNSETWINDOWSHOOKEX)(PROC) g_SetWindowsHookExA)( idHook, lpfn, hMod, dwThreadId );
//若在本进程中安装了local类型钩子,记录其句柄
if(hMod==NULL)
array.Add(nResult);
return(nResult);
}
//此函数用于替换SetWindowsHookEx函数的UNICODE版本SetWindowsHookExW
HHOOK WINAPI Hook_SetWindowsHookExW( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId )
{
HHOOK nResult =0;
nResult = ((PFNSETWINDOWSHOOKEX)(PROC) g_SetWindowsHookExW)( idHook, lpfn, hMod, dwThreadId );
//若在本进程中安装了local类型钩子,记录其句柄
if(hMod==NULL)
array.Add(nResult);
return(nResult);
}
//此函数用于替换CallNextHookEx函数,此函数只有一个版本
LRESULT WINAPI Hook_CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam)
{
LRESULT nResult =0;
nResult = ((PFNCALLNEXTHOOKEX)(PROC) g_CallNextHookEx)( hhk, nCode, wParam, lParam );
//在数组中查找句柄,若找不到,将其卸载
bool bfind=false;
for(int i=0;i<array.GetSize();i++)
{
if(array.GetAt(i)==hhk)
{
bfind=true;
break;
}
}
if(!bfind)
{
UnhookWindowsHookEx( hhk );
}
return (nResult);
}
//////////////////////////////////////////////////////////////////////////////
//使用CAPIHook 类对函数进行替换
CAPIHook g_SetWindowsHookExA("User32.dll", "SetWindowsHookExA",
(PROC) Hook_SetWindowsHookExA, true);
CAPIHook g_SetWindowsHookExW("User32.dll", "SetWindowsHookExW",
(PROC) Hook_SetWindowsHookExW, true);
CAPIHook g_CallNextHookEx("User32.dll", "CallNextHookEx",
(PROC) Hook_CallNextHookEx, true);
到了这里,所有工作都完成了,只要在exe程序中调用fnHookForbid函数,并在安装remote类型钩子时调用AddHhook函数记录其句柄,卸载时调用DelHhook函数删除句柄就万事ok了。
支持手动
输入
的下拉框组件设计与实现
在现代Web应用开发中,用户交互体验的优化已成为前端设计的核心目标之一。支持手动
输入
的下拉框(Combobox)融合了文本
输入
框
与选择列表的功能,允许用户从预设选项中选择或直接
输入
自定义值,显著提升数据录入效率与灵活性。该组件广泛应用于搜索建议、地址填写、标签管理等场景,在电商商品搜索、CRM客户筛选和配置平台参数设置中发挥关键作用,兼顾用户体验与数据准确性,为后续技术实现提供明确需求导向。理想的可
输入
下拉框应遵循以下四大设计原则:默认情况下,Select2 仅允许从预设选项中选择值。
深度解析
键盘
输入
监控技术与安全防护实战
键盘
输入
监控是操作系统底层行为捕获的核心技术之一,通过
拦截
用户按键事件实现对人机交互过程的实时感知。其技术基础在于操作系统对
输入
设备事件的统一调度机制——从硬件中断触发、HID协议解析到内核
输入
子系统(如Windows的KBDCLASS驱动)将扫描码转换为虚拟键码,最终经由消息队列分发至应用程序。这一完整路径为监控提供了多个介入点,包括驱动层过滤、API钩子注入与用户态消息截取。// 示例:基本键盘钩子安装(WH_KEYBOARD_LL)
全局软键盘TouchKey:跨平台高效
输入
解决方案
全局软键盘TouchKey是一种可在操作系统级任意应用界面中调用的虚拟
输入
法,其“全局”特性依赖于系统级事件监听机制。不同于仅限于特定App的局部软键盘,TouchKey通过注册全局钩子(Global
Hook
)和
输入
法服务接口(IME),实现跨进程、跨窗口的统一
输入
支持。graph LRA[用户触摸
输入
] --> B(触控事件捕获)B --> C{是否激活全局
输入
?C -->|是| D[注入至
当前
焦点应用]C -->|否| E[忽略或进入待机模式]
Remote Desktop Organizer 1.4.7
远程桌面
管理工具实战应用
Remote Desktop Organizer(RDO)1.4.7 是一款专为高效管理多
远程桌面
会话而设计的第三方工具,基于微软
远程桌面
协议(RDP)构建,深度融合了 WinForms 平台下的 ActiveX 控件与 .NET 扩展能力。其核心架构通过集成和实现对 RDP 客户端功能的完整封装,并借助与构建高度可定制化的用户界面与标签化导航系统。RDO 支持会话分组、配置持久化、主题美化及快速切换,显著提升运维人员在复杂IT环境中的操作效率。
易语言实现微信
Hook
技术初学者实战项目
Hook
最直观的表现形式是消息
拦截
。在Windows图形界面中,所有用户交互(如点击、按键、窗口重绘)都以“消息”的形式进入线程的消息队列,并由GetMessage或函数取出处理。
Hook
机制允许我们在消息到达目标窗口过程之前进行截取。这正是早期木马、录屏工具、远程控制软件常用的技术路径。然而,随着安全机制的演进,仅依赖消息级
Hook
已不足以满足复杂需求。更深层次的函数劫持成为主流。所谓函数劫持,是指通过修改程序调用外部API的方式,使其跳转至攻击者/开发者预设的代码段。
C#
111,120
社区成员
642,545
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章