机制
Windows操作系统提供GUI(Graphic User Interface), 以事件驱动方式工作. 而所有外设的输入都是事件, 发生事件时, OS会把事先预定的消息发送给应用程序, 应用程序分析接收的消息然后执行相应动作.(比如我在用输入法打字, 按下键盘的时候Windows会给输入法应用程序发送消息, 输入法接收消息并分析之后给出打字的结果). 而钩子hook就在键盘输入与消息发送到应用程序的过程中起作用, 可以查看, 拦截, 修改消息.
最基本的钩子实现就是调用Windows系统提供的API: SetWindowsHookEx()
调试钩子进程的实例
比如调试keyhook.dll(包含钩取键盘消息的钩子进程), 文件示例见逆向工程核心原理的demos21章.
流程
- 运行/attach 目标文件
- 开启break on new module(DLL)选项 (2.0+版本是 pause on new module(DLL))
- 运行hook.exe
- 在目标文件中输入任意字符触发dll注入
- 在keyhook.dll的EP位置打断点开始调试
坑点
- XP下可以使用1.x版本实现dll调试, 但是Win10下可能出错
- Win10下用2.0+版本