之前发了一篇截图,由于时间紧迫,只贴了一张图,应网友要求,现在贴上思路,代码就算了,都是基本的hook代码,1是贴出来被无德的人利用,2是但凡同行都能根据思路写出代码,想必没必要。
保护原理
1.设置Debug钩子,来管理普通的一些钩子,WH_KEYBOARD 是被调式钩子所管理的,所以它可以干掉一些基本的简单的键盘钩子,调用这些简单钩子前都会经过它,可以起到反钩子的作用。
2.设置WH_KEYBOARD_DLL钩子,因为WH_KEYBOARD_DLL钩子是级别最高的钩子,因此会首先得到输入。
3.设置定时器来自动装卸键盘钩子,这样做的目的是为了保证自己的键盘钩子始终保持在钩子队列中的最优先位置,因为钩子机制是 后装载的钩子在最前面,类似栈概念,这是钩子链的机制。
4.设置定时器来自动模拟输入乱码,后台有一个TIMER在每隔500ms就执行一次,目的是将qq自己的钩子保证在钩子链最顶部,这样能保证它会第一个接收到按键信息。
破解原理
1.屏蔽WH_DEBUG钩子,在钩子处理函数里直接返回,不再调用下一个钩子处理函数,实现屏蔽腾讯WH_DEBUG的目的,从而能让我们的钩子挂钩成功。
2.屏蔽定时器,这样防止腾讯自动装卸钩子,让我们的钩子能够进入钩子链优先位置,同时破坏掉腾讯的乱码Timer。
3.设置我们的设置WH_KEYBOARD_DLL钩子,此时我们的WH_KEYBOARD_DLL钩子在最优先位置,从而取得按键信息。