hook

来源:互联网 发布:java整形转换成字符串 编辑:程序博客网 时间:2024/06/06 20:13
#define SYSTEMSERVICE(_function) \KeServiceDescriptorTable.ServiceTableBase[ \  *(PULONG)((PUCHAR)_function+1)]//1.加载/ 解除SSDT挂钩系统服务函数ZwXXXNTSTATUS 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(⋯);}