|
作者:Tesla.Angela
MSR HOOK是一种比较罕见的HOOK了,网上甚至少有提及。这里我必须普及一下关于MSR的知识。MSR直译叫做“模块指定寄存器”,这是一组特殊的寄存器,它不能通过MOV指令进行读写,而必须用专门的指令:RDMSR和WRMSR。这种寄存器甚至没有名称,只有代号,但是部分MSR里却记录了重要的内容,比如KiFastCallEntry的函数地址(WIN64上不叫这个名字,但是用途相同)。众所周知,KiFastCallEntry是RING3进入RING0的关口,是一个“一夫当关万夫莫开”的位置,而这个地址,系统就是通过RDMSR获取的。所以如果修改了特定寄存器(WIN32是0x176,WIN64是0xC0000082)里的内容,那么就能劫持这个入口。内核重载让RING3程序无视内核HOOK,根本点就在这里。所以MSR HOOK的本质就是使用WRMSR来修改特定MSR的内容。但是这个这么重要的位置,PATCHGUARD当然是不会放过的。在WIN64上修改关键MSR的值会导致蓝屏。如果用VT技术,拦截RDMSR指令,返回代理函数的地址,就能绕过PG实现类似SSDT HOOK的效果了。当然,要实现用VT框架来拦截MSR,就是另外一个故事了。
|
|