Loading... ``` #pragma onc // 过滤函数 void _declspec(naked) MyKiFastCallEntry() { _asm { pushad; // 保存寄存器 cmp eax, 0x0BE; // 是否是ZwOpenProcess 函数 jne CallEnd; // 结束过滤 mov eax, [edx + 0x14]; // 获取第四个参数 ClientId mov eax, [eax]; // ClientId->ProcessId cmp eax, g_PID; // 判断是否要保存的进程 jne CallEnd; mov[edx + 0x0c], 0; // 将权限改为0,无法访问 CallEnd: popad; //恢复寄存器 jmp g_OldKiFastCallEntry; //调用原始函数 } } void Install_Hook_Sysenter() { // 获取原始函数 _asm { // 从 MSR 0x176 的位置读取原有的 KiFastCallEntry 函数进行保存 mov ecx, 0x176; rdmsr; //将msr176寄存器的内容保存eax mov g_OldKiFastCallEntry, eax; //保存原始函数地址 } // 设置钩子 _asm { mov ecx, 0x176; mov eax, MyKiFastCallEntry; // 过滤函数 wrmsr; //写入到msr0x176寄存器 } } //卸载钩子 void UnInstall_Sysenter_Hook() { // 设置钩子 _asm { mov ecx, 0x176; mov eax, g_OldKiFastCallEntry; // 过滤函数 wrmsr; //写入到msr0x176寄存器 } } //Sysenter-Hook void Hook_Sysenter(ULONG PID) { g_PID = PID; Install_Hook_Sysenter(); } ``` 最后修改:2021 年 02 月 27 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏