<寒江独钓>Windows内核安全编程__键盘过滤内核级Hook(二)
如果不想让键盘过滤驱动程序或回调函数首先获得按键,则必须比端口驱动更加底层一些。
早期版本的QQ反盗号驱动的原理是这样的:用户要输入密码时(比如把输入焦点移动到了密码框里),就注册一个中断服务来接管键盘中断,比如0x93中断,之后按键就不关键驱动的事了。
首先就来介绍一下Hook键盘中断。
1.中断:IRQ和INT
学过计算机体系结构的人都知道硬件往往是通过中断来通知CPU某个事件的发生。比如按键按下了。但是中断并不一定要有任何硬件的通知,一条指令就能使CPU“发生中断”。比如,在一个.c文件写上:
_asm int 3
这样的代码常常来人工设置一个断点,执行到这里程序会中断。int n(n为中断号)可以触发软件中断(软件中断又叫异常),触发的本质是:是CPU的执行暂停,并跳到中断处理函数,中断处理函数已经事先保存在内存中。同时,这些函数的首地址保存在一个叫做IDT(中断描述符表)的表中,每一个中断号在这个表中都有一项。
一旦一个int n被执行,则CPU会到IDT中去查找第n项。其中有一个中断描述符,在这个描述符里可以读到一个函数的首地址,然后CPU就跳到这个首地址去执行了。当然,适当的处理之后一般都会回来继续前面程序的执行。这就是中断的过程。
真正的中断一般被称为IRQ。某个IRQ来自什么硬件,这在很大程度上有规定的。比如IRQ1一定是PS/2键盘,只有少数几个IRQ留