我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
进程内钩子用于监视指定线程的事件消息。它的钩子过程一般位于当前线程或当前线程创建的线程中。
全局钩子监视系统中全部线程的消息。由于全局钩子会影响系统中全部的应用程序,所以钩子过程必须放在独立的动态链接库(DLL) 中。系统会自己主动将这个含有钩子过程(实质上是回调函数)的DLL映射到受钩子过程影响的全部进程的地址空间中,也就是将这个DLL注入全部进程。
几点说明:
1. 假设对于同一消息(如鼠标消息)既安装了进程内钩子又安装了全局钩子,那么系统会优先调用进程内钩子,然后调用全局钩子。
2. 对于同一消息而言,能够安装多个钩子,消息被当前钩子的钩子过程处理完成后应该把这个消息继续传递给下一个钩子。
3. 钩子特别是全局钩子会减少消息处理效率,影响系统性能,因此仅仅有在必要的时候才安装钩子,在使用完成后应及时卸载。
BOOL UnhookWindowsHookEx( HHOOK hhk // handle to hook procedure to remove );
简单说明:
UnhookWindowsHookEx()函数用于从系统中卸载钩子;
hhk參数是要被卸载的钩子的句柄,也就是SetWindowsHookEx()的返回值;
最后,假设这个函数运行成功会返回非零值,假设运行失败会返回零值,用户能够通过调用GetLastError()函数获知详情。
<未完待续>
2.在OnInitDialog()中加入代码:
HHOOK g_hKeyboard=NULL;
HHOOK g_hMouse;
HWND g_hWnd=NULL;
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;
}
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
//if(VK_SPACE==wParam || VK_RETURN==wParam)假设是空格键
/*if(VK_F4==wParam && (1==(lParam>>29 & 1)))拦截ALT+F4按键!
return 1;
else
return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/
if(VK_F2==wParam)按F2时程序能够退出,这是留的后门。否则程序无法关闭,仅仅能用任务管理器来关闭它了。
{
::SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyboard);当程序退出时最好将钩子移除。
UnhookWindowsHookEx(g_hMouse);
}
return 1;
}
3.编写一个屏屏蔽全部进程和全部线程的钩子程序。耸闭飧龉匙颖匦氚沧霸贒LL中,然后被某个程序调用才行。
1.新建一个DLLproject名为Hook
2.添加Hook.cpp
3.代码例如以下:
#include <windows.h>包括头文件
HHOOK g_hKeyboard=NULL;
HWND g_hWnd=NULL;这个变量是全局共享的。
#pragma data_seg()
/*HINSTANCE g_hInst;
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
g_hInst=hinstDLL;
}*/
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
return 1;拦截了鼠标消息。
}
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F2==wParam)假设是F2键,则退出。
{
SendMessage(g_hWnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hMouse);当退出时将钩子卸掉。
UnhookWindowsHookEx(g_hKeyboard);
}
return 1;
}
{
g_hWnd=hwnd;注意这样的传递调用它的进程的句柄的方法,比較巧妙!
g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
}
LIBRARY Hook
EXPORTS
SetHook @2
SEGMENTS
MySec READ WRITE SHARED 也能够设置节的属性。
4.新建一个project调用此钩子函数。project名为HookTest,基于对话框的。在OnInitDialog()中调用SetHook(),要事先声明_declspec(dllimport) void SetHook(HWND hwnd);
然后在Project->Setting->Link->增加../Hook/Debug/Hook.lib,并将Hook.Dll复制到当前文件夹。
int cxScreen,cyScreen;
cxScreen=GetSystemMetrics(SM_CXSCREEN);
cyScreen=GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(&wndTopMost,0,0,cxScreen,cyScreen,SWP_SHOWWINDOW);将窗体保持在最前面。
SetHook(m_hWnd);
5.DLL的调试方法,设置断点,然后执行时断点时,step into就可以。
转载于:https://www.cnblogs.com/gcczhongduan/p/4281691.html
我的学习笔记_Windows_HOOK编程 2009-12-03 11:19相关推荐
- python学习笔记——多线程编程
python学习笔记--多线程编程 基础不必多讲,还是直接进入python. Python代码代码的执行由python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时 ...
- ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)...
ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...
- HALCON 21.11:深度学习笔记---语义分割/边缘提取(12)
HALCON 21.11:深度学习笔记---语义分割/边缘提取(12) HALCON 21.11.0.0中,实现了深度学习方法. 本章介绍了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语 ...
- 学习笔记之编程达到一个高的境界就是自制脚本语言(图)
学习笔记之编程达到一个高的境界就是自制脚本语言(图) 编程达到一个高的境界就是自制脚本语言,通过这可以精通编程里面的高深的技术,如编译原理.语言处理器.编译器与解释器,这些都是代表一个程序员实力的技术 ...
- 公众号内容拓展学习笔记(2021.5.12)
公众号内容拓展学习笔记(2021.5.12)
- 【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台学习笔记(3.11-3.12)
[全栈之巅]Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台学习笔记(3.11-3.12) 本项目是 学习Bilibili 全栈之巅 视频教程相关源码和体会 https://gi ...
- UI学习笔记---EasyUI panel插件使用---03
UI学习笔记---EasyUI panel插件使用---03 UI学习笔记---EasyUI panel插件使用---03 1.panel简单小例子 ------------------- 2.可以自 ...
- Java学习笔记:2022年1月11日
Java学习笔记:2022年1月11日 摘要:这篇笔记主要讲解了一些数据在计算机中的存在方式相关的知识点,并由此延伸出了数据在计算机中的操作以及一些数据结构的知识. 文章目录 Java学习笔记:2 ...
- linux学习笔记 -- 系统编程
系统编程 相关概念 概念 简易cpu结构 mmu内存管理单元 环境变量 PATH SHELL HOME LANG TERM getenv setenv unsetenv 进程控制 fork函数 get ...
最新文章
- Android JNI初试之环境搭建,最新方式的HelloWorld
- csrf攻击防御 php,Yii2.0防御csrf攻击方法
- java如何返回之前代码_java – 如何在每次返回之前向消息添加代码?
- Spring事务的实现方式和实现原理
- go语言 doc转换html,go语言使用wkhtmltopdf工具将html转成pdf
- 邹建的实现分页的通用存储过程
- 通达信公式转python为什么很难_转行数据分析为什么这么难?
- 浮点数在内存中的表示
- spring注解记录
- c++ math头文件一些函数使用记录
- maven 里的 repositories里空的_IntelliJ IDEA 结合 maven通过profile实现多环境
- java链表打印_java链表打印
- 下载DirectX 9 SDK开发包
- 国标 计算机房 湿度,数据中心机房:温度、湿度标准是什么?
- PS制作晶莹剔透的文字
- 微信开发者工具配置连接Gitee
- 【转】电子毕业设计题目
- 【报告分享】2020年中国老年教育市场研究报告-IT桔子(附下载)
- 谷歌浏览器访问网站提示“您要访问的网站包含恶意软件”
- 2022-2028全球与中国DevOps工具市场现状及未来发展趋势
热门文章
- ecshop文章增加点击次数插件
- 斯诺克之星 - 白沙台球杆 官方 及 派蔻台球杆 官方 www.snkstar.com - 最专业的台球杆销售网站...
- 浅析Google技术底蕴
- 4.3.8 DHCP协议
- always@( )列表里不能同时有电平敏感事件和边沿触发事件
- 无线信号功率计算公式(自由空间模型,地面反射模型)
- 深入浅出解释FFT(一)——用fft求频谱
- 两个pytorch版本Fnet
- kivy中kv语言的变态用法
- scrapy中使用代理cookies user-agent