#define SYSTEMSERVICE(_function) \
KeServiceDescriptorTable.ServiceTableBase[ \
*(PULONG)((PUCHAR)_function+1)]
//1.加载/ 解除SSDT挂钩系统服务函数ZwXXX
NTSTATUS mySSDTHook(IN BOOLEAN bAdd)
{
If(bAdd)//开始挂钩{
// 保存SSDT 表中ZwXXX 的原始入口地址指针
originalZwXXX=(PTR_ZwXXX)(SYSTEMSERVICE
(ZwXXX)) ;
//修改SSDT表中ZwXXX的入口地址指针,实现挂钩
_asm cli
(PTR_ZwXXX)(SYSTEMSERVICE(ZwXXX))=hook_ZwXXX;
_asm sti
}
else //解除挂钩{
_asm cli
(PTR_ZwXXX)(SYSTEMSERVICE(ZwXXX))=originalZwXXX;
_asm sti
}
⋯
}
//2.钩子函数hook_ZwXXX()
//函数参数、返回值类型与被挂钩系统服务函数相同
TypeX hook_ZwXXX(⋯)
{
⋯
if(条件n=1){完成某些用户定义的操作}
⋯
If(条件x=1)return Value_of_TypeX;//直接返回
else //继续执行原系统服务函数
return originalZwXXX(⋯);
}
hook
最新推荐文章于 2023-06-18 11:30:16 发布