其实 驱动hook也就仅限于32位 64位有保护 类似 pg什么的 现在听大佬们讲驱动hook都已经过时了(感觉对于我这种萌新还是有参考价值的)
讲hook前 需要了解其实windows驱动编程就可以说是windows内核编程 内核除了看似很简单的错误 毕竟轻的后果就是蓝屏 后续还会出现各种各样的错误(这就体现了虚拟机和快照的好处)
然后 windows为了内核的安全 就规定很多不可写的内存吗,其中有很多我们都可以规定是可写内存
原理也就是改 cr0这个寄存器 至于原理 这里就不讲了 可以自行百度
然后 改的方法就是内嵌汇编 就是这个样子
void PageProtectOff()//关闭页面保护
{
__asm{
cli
mov eax, cr0
and eax, not 10000h
mov cr0, eax
}
}
void PageProtectOn()//打开页面保护
{
__asm{
mov eax, cr0
or eax, 10000h
mov cr0, eax
sti
}
}
这就是 打开保护 和关闭保护 hook前 要关闭保护 然后在打开 按理说 这里还应该加个锁(可以参考学习windows编程的时候的临界区的作用) 然后 hook 大家都知道 就是改变地址 然后先关闭 然后在打开 就就ok了 只要找到我们需要的地址 然后转化成自己的 就行了 (好像和windows 应用层没有什么区别!)