VOID HookPage(PUCHAR Page)
{
PHARDWARE_PTE_X86PAE PointerPte;
__try {
__asm {
mov eax, Page
mov eax, [eax]
}
PointerPte = (PHARDWARE_PTE_X86PAE)MiGetPteAddressPAE(Page);
if (PointerPte->Valid == 1) {
PointerPte->ExecuteDisable = 1;
DbgPrint("HookPage = %08X", Page);
}
}
__except(EXCEPTION_EXECUTE_HANDLER) {
DbgPrint("Exception captured while hooking page");
}
}
VOID UnhookPage(PUCHAR Page)
{
PHARDWARE_PTE_X86PAE PointerPte;
__try {
__asm {
mov eax, Page
mov eax, [eax]
}
PointerPte = (PHARDWARE_PTE_X86PAE)MiGetPteAddressPAE(Page);
if (PointerPte->Valid == 1) {
PointerPte->ExecuteDisable = 0;
}
}
__except(EXCEPTION_EXECUTE_HANDLER) {
DbgPrint("Exception captured while unhooking page");
}
}
本文介绍了一种内核级的技术,通过修改页表项来实现页面的Hook与Unhook操作,以此来控制页面的执行权限。该技术利用了Intel x86 PAE架构的特性,特别关注Execute Disable位的设置。
2189

被折叠的 条评论
为什么被折叠?



