Win32汇编——钩子
1.概念:钩子是Windows消息处理机制中的一个监视点,应用程序可以在这里安装一个监视子程序,在消息流到达目的窗口前监控它们。监视函数是一个处理消息的回调函数,也称为“钩子函数”
2.类型:
局部钩子:仅挂钩自身进程的事件
远程钩子:可分为基于线程的和系统范围的,远程钩子的钩子函数必须位于共享数据段的动态链接库中(除日志记录钩子和日志回放钩子外)
具体类型见书P405
3.钩子程序的结构——3个功能模块
① 主程序——用来实现界面或者其他功能
② 钩子回调函数——用来接收系统发过来的消息
③ 钩子的安装和卸载模块
一般情况下,远程钩子,第②、③部分放在动态链接库中;局部钩子的这些模块可以处在同一个可执行文件中。
4.相关函数:
安装钩子:SetWindowsHookEx
卸载钩子:UnhookWindowsHookEx
5.钩子回调函数写法:(不同类型钩子,参数和返回值的定义不同)
HookProc proc dwCode,wParam,lParaminvoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam;处理消息的代码mov eax,返回值ret
HookProc endp
6.键盘钩子:参数定义、GetKeyboardState、GetKeyState、ToAscii 详见P412
7.钩子链:由系统负责为每一种钩子进行维护,新进钩子放在链的最前端,优先执行,当前钩子可以在回调函数中发起调用下一个钩子的动作(并不是卸载当前钩子,钩子还在),即CallNextHookEx ,若调用成功,函数的返回值是下一个钩子回调函数返回的数值(???暂未理解)
PS:通过将自身钩子卸载重新加载来获得最高权力(有待考证)
8.日志记录钩子:特殊的钩子,是远程钩子,缺不用放在动态链接库中,这就为监视系统范围的消息提供方便。日志记录钩子的回调函数的返回值没有定义,故无影响消息的传递。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;使用日志记录钩子实现键盘监控功能
;日志记录钩子回调函数
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HookProc proc _dwCode,_wParam,_lParamlocal @szKeyState[256]:byteinvoke CallNextHookEx,hHook,_dwCode,_wParam,_lParampushad.if _dwCode == HC_ACTION;当发生HC_ACTION 标志的消息时,lParam指向一个EVENTMSG 结构mov ebx,_lParamassume ebx:ptr EVENTMSG.if [ebx].message == WM_KEYDOWN;将按键扫描码和虚拟码转换成ASCII 码invoke GetKeyboardState,addr @szKeyStateinvoke GetKeyState,VK_SHIFTmov @szKeyState + VK_SHIFT,almov ecx,[ebx].paramH ;消息的lParam参数shr ecx,16invoke ToAscii,[ebx].paramL,ecx,addr @szKeyState,addr szAscii,0mov byte ptr szAscii [eax],0.if szAscii == 0dhmov word ptr szAscii+1,0ah.endifinvoke SendDlgItemMessage,hWinMain,IDC_TEXT,EM_REPLACESEL,0,addr szAscii.endifassume ebx:nothing.endifpopadxor eax,eaxretHookProc endp
Win32汇编——钩子相关推荐
- 【win32汇编】0x01 开篇一些乱七八糟的话
之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下 (1)指令集 .386 这是指定指令集 必须工作 ...
- Win32汇编_基础
Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...
- 选择“Win32汇编”的三大理由?
选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...
- win32汇编实现拼接SQL语句
字符串合并,在汇编语言,一般是用loop循环和cx寄存器,自己编程实现: 如果是win32汇编,可以使用movsb指令: 一般开发应用程序都会碰到拼接SQL语句,在C#这些语言用字符串连接的加号就可以 ...
- Win32汇编获取和设置文本框的内容
看一下Win32汇编如何获取和设置文本框的内容: 资源文件如下: #include <resource.h>#define ICO_MAIN 0x1000 //图标 #define DLG ...
- Win32汇编基本编程框架
Win32汇编编程框架如下: .386 .model flat,stdcall option casemap:none <一些include语句> .stack [堆栈段的大小] .dat ...
- Win32 汇编环境和入门程序图解
一 安装 在安装的最后,执行VBS脚本,在桌面建立快捷方式:执行快捷方式,会调入Win32汇编的编辑器qeditor.exe,进入到开发环境 二 构建Hello World程序 ;.386是伪指令 告 ...
- Win32 汇编语句模板
Win32 汇编语句模板 一 变量 ;句柄 hInstance dd 0 hWnd dd 0 hPen dd 0 hPend dd 0 oldPen dd 0;过程变量 hInst :DWORD hP ...
- Win32汇编扩展教程
Win32汇编扩展教程 第一课 Win32 扩展消息框示例 在罗哥云琳的Win32消息框示例基础上,做一个扩展例子. 首先弹出消息框,2个按钮,YESNO; 点击NO,程序结束:点击YES,弹出第二个 ...
最新文章
- html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
- 我被编程语言PUA了!
- 为什么工厂老板们从不「迷信」人工智能?
- Qt编写OpenMP程序--循环测试
- android edittext 联想,Android 输入法联想问题
- 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- 【转】C 从函数返回数组
- windows 环境下mysql的操作浅析
- 数学狂想曲(三)——统计杂谈, PID算法, 20世纪10大算法, 矩阵向量的积
- Linux系统自动备份脚本,供参考的Linux系统中自动执行分段备份脚本
- Java机器学习,第2部分
- window两个窗口上下摆放_滑动窗口技巧
- Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
- 基于知识库的自动问答:seq2seq模型实践
- EA 反向工程 导入oracle中表结构
- vulhub靶场sql注入漏洞复现
- (离线)英语词典软件推荐
- 如何使用Bootbox?
- 使用地图编辑器构建游戏场景
- 蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节1 概述
热门文章
- 订阅号获取openid_小程序订阅消息
- linux常用知识命令
- Android手机模拟器如何把语言设置为中文
- ngrok 代理访问
- cad二次开发加载cad自动调用_python实例_cad半自动绘图
- left join on 左边为主
- html 多层滚动,如何实现多个div同时滚动(3个以上)
- mysql读写分离实现_laravel 配置MySQL读写分离
- c语言10000以内最大的质数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
- ios签名软件_如何解决IOS企业签名超高掉签率?当然是选择小菠萝企业签名啦!...