简单的Windows消息钩取
Windows事件驱动的媒介是消息,而消息的传递则存在破绽。
一、What should I do?
监听notepad键盘输入,并存入文件“input.txt",而且用户不能察觉出来(即notepad正常回显字符)。
二、程序思路
- 利用Windows消息钩取机制,向Windows系统注册一个消息钩子,该钩子存在于自己编写的dll中,一旦监听到来自notepad的键盘消息就将其存入文件。
- 值得一提的是,这里还顺便向所有发生键盘消息的进程注入了自己的dll文件。
三、关键语句实现
整个程序的关键就是这个包含了消息钩子过程的dll文件的编写,然后主程序调用此dll文件中的消息钩子完成键盘监听。
Hookdll:
我这里主要谈谈回调函数KeyboardProc,也就是钩子的处理逻辑。
回调函数是在消息发生时操作系统调用的一种用户自定义函数,它负责告诉操作系统怎样处理消息,当然这里只针对键盘消息。
先说说参数:ncode指示按键状态,wParam存放虚拟键值,lParam对键盘状态进行位标识。
程序逻辑是这样的:当ncode大于等于0且lParam最高位为1时,用户有按键动作,这时我们调用GetModuleFileNameA函数获取发出此键盘消息进程的绝对路径,然后经过一个_tcsrchr函数定位到此进程可执行文件名,若可执行文件名等于”notepad++.exe"(我这里采用了宏定义DEF_P