HOOK集合----SSDTDPC Hook(X86 win7)

介绍:

  SSDT DPC Hook 其实是建立在SSDT Hook的基础上的,建立一个定时器,然后设置触发时间,反复去 SSDT Hook,这样会使直接进行SSDT UnHook的无法恢复,在学习过程中,算不上是一种全新的Hook,算是SSDT Hook 的一种升级版。

 

(一)

     ⚪建立定时器,定时回调函数为SSDTHook 函数,反复Hook。

     ⚪首先找到全局导出的KeServiceDescriptorTable。

     ⚪然后从ntdll.dll的导出表中获取ZwOpenProcess函数地址。

     ⚪从ZwOpenProcess中获取序号。

     ⚪将SSDT所在页属性改为可读可写的状态。

     ⚪将自己写好的Fake函数地址替换进去即可。

 

(二)

SSDTHook 代码可以看之前的文章,有详细的介绍。

 

NTSTATUS DPC_SSDTHook(BOOLEAN IsOk);
VOID DelayProcedureCall
(
    _In_ struct _KPDC *DPC,
    _In_opt_ PVOID  DeferredCpntext,
    _In_opt_ PVOID  SystemArgument1,
    _In_opt_ PVOID  SystemArgument2
);



KTIMER __Timer =  { 0 };
LARGE_INTEGER __Interval = { 0 };
KDPC __DPC = {0};
NTSTATUS DPC_SSDTHook(BOOLEAN IsOk)
{
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
    if (IsOk)
    {
        Status = SSDTHook(IsOk);
        //初始化时钟
        KeInitializeTimer(&__Timer);
        //构建DPC 
        KeInitializeDpc(&__DPC, (PKDEFERRED_ROUTINE)DelayProcedureCall, NULL);
        __Interval = RtlConvertLongToLargeInteger(1000000 * -10);
        //设置时钟
        KeSetTimer(&__Timer, __Interval, &__DPC);
    }
    else
    {
        KeCancelTimer(&__Timer);
        Status = SSDTHook(IsOk);
    }
    return Status;
}


VOID DelayProcedureCall
(
    _In_ struct _KPDC *Dpc,
    _In_opt_ PVOID  DeferredCpntext,
    _In_opt_ PVOID  SystemArgument1,
    _In_opt_ PVOID  SystemArgument2
)
{
    SSDTHook(TRUE);
    KeSetTimer(&__Timer, __Interval, Dpc);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值