所谓的全局hook就是通过修改物理页属性把系统DLL的写拷贝去除达到修改指令不会重新分配物理地址
通过WINDBG命令:!vad可以看到系统dll都是写拷贝属性
通过修改MessageBoxW来测试:
先把RING3程序的PID传给驱动层,通过驱动附加到进程修改PTE的R/W属性
//修改MessageBoxWPTE属性
case CODE_PTE_ATTRIBUTE:
{
//DbgBreakPoint();
if (MmIsAddressValid(package->inData))
{
DWORD_PTR Address = *(DWORD_PTR*)package->inData;
status = PsLookupProcessByProcessId(g_PID, &eprocess);
if (NT_SUCCESS(status))
{
KeStackAttachProcess(eprocess, &apc); //附加到进程
ChangePteAttribute(Address);
KeUnstackDetachProcess(&apc);
ObDereferenceObject(eprocess);
}
}
break;
}
修改完成之后,RING3程序再进行自我hook,hook代码也需要调整:
首先需要把获取和修改内存属性代码注释掉,不然可能执行失败。
hook代码中不要自己申请内存作为跳转,不然别的程序访问不到导致异常,最好就找系统dll作为shellcode中转站。
看效果:
标签:调用,修改,PTE,PID,hook,全局,eprocess,属性 From: https://blog.csdn.net/wxy_xx1/article/details/143157786