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汇编——钩子相关推荐

  1. 【win32汇编】0x01 开篇一些乱七八糟的话

    之前弄完了16位汇编,现在正式学习win32汇编,首先就是一些原理了,其实就是在16位的基础上增加了一些内容,其程序主要的结构记录如下 (1)指令集     .386     这是指定指令集 必须工作 ...

  2. Win32汇编_基础

    Win32汇编_基础 包含全部段的源程序结构: .386 .model flat, stdcall Option casemap:none ;<一些include语句> .stack [堆 ...

  3. 选择“Win32汇编”的三大理由?

    选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...

  4. win32汇编实现拼接SQL语句

    字符串合并,在汇编语言,一般是用loop循环和cx寄存器,自己编程实现: 如果是win32汇编,可以使用movsb指令: 一般开发应用程序都会碰到拼接SQL语句,在C#这些语言用字符串连接的加号就可以 ...

  5. Win32汇编获取和设置文本框的内容

    看一下Win32汇编如何获取和设置文本框的内容: 资源文件如下: #include <resource.h>#define ICO_MAIN 0x1000 //图标 #define DLG ...

  6. Win32汇编基本编程框架

    Win32汇编编程框架如下: .386 .model flat,stdcall option casemap:none <一些include语句> .stack [堆栈段的大小] .dat ...

  7. Win32 汇编环境和入门程序图解

    一 安装 在安装的最后,执行VBS脚本,在桌面建立快捷方式:执行快捷方式,会调入Win32汇编的编辑器qeditor.exe,进入到开发环境 二 构建Hello World程序 ;.386是伪指令 告 ...

  8. Win32 汇编语句模板

    Win32 汇编语句模板 一 变量 ;句柄 hInstance dd 0 hWnd dd 0 hPen dd 0 hPend dd 0 oldPen dd 0;过程变量 hInst :DWORD hP ...

  9. Win32汇编扩展教程

    Win32汇编扩展教程 第一课 Win32 扩展消息框示例 在罗哥云琳的Win32消息框示例基础上,做一个扩展例子. 首先弹出消息框,2个按钮,YESNO; 点击NO,程序结束:点击YES,弹出第二个 ...

最新文章

  1. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
  2. 我被编程语言PUA了!
  3. 为什么工厂老板们从不「迷信」人工智能?
  4. Qt编写OpenMP程序--循环测试
  5. android edittext 联想,Android 输入法联想问题
  6. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
  7. 【转】C 从函数返回数组
  8. windows 环境下mysql的操作浅析
  9. 数学狂想曲(三)——统计杂谈, PID算法, 20世纪10大算法, 矩阵向量的积
  10. Linux系统自动备份脚本,供参考的Linux系统中自动执行分段备份脚本
  11. Java机器学习,第2部分
  12. window两个窗口上下摆放_滑动窗口技巧
  13. Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布
  14. 基于知识库的自动问答:seq2seq模型实践
  15. EA 反向工程 导入oracle中表结构
  16. vulhub靶场sql注入漏洞复现
  17. (离线)英语词典软件推荐
  18. 如何使用Bootbox?
  19. 使用地图编辑器构建游戏场景
  20. 蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节1 概述

热门文章

  1. 订阅号获取openid_小程序订阅消息
  2. linux常用知识命令
  3. Android手机模拟器如何把语言设置为中文
  4. ngrok 代理访问
  5. cad二次开发加载cad自动调用_python实例_cad半自动绘图
  6. left join on 左边为主
  7. html 多层滚动,如何实现多个div同时滚动(3个以上)
  8. mysql读写分离实现_laravel 配置MySQL读写分离
  9. c语言10000以内最大的质数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  10. ios签名软件_如何解决IOS企业签名超高掉签率?当然是选择小菠萝企业签名啦!...