移除时钟KTIMER和DPC

本文介绍了如何在Windows系统中枚举并移除KTIMER及其关联的DPC。通过KPRCB和KPCR结构,找到系统中的KTIMER链表,并通过特定条件判断找到目标KTIMER,最后使用KeCancelTimer()函数来移除定时器。文中详细阐述了查找和移除过程,并提供了相关结构体和寄存器的解读。
摘要由CSDN通过智能技术生成
typedef struct _KTIMER {
    DISPATCHER_HEADER Header;
    ULARGE_INTEGER DueTime;
    LIST_ENTRY TimerListEntry;
    struct _KDPC *Dpc;

#if !defined(KENCODED_TIMER_PROCESSOR)

    ULONG Processor;

#endif

    ULONG Period;
} KTIMER, *PKTIMER, *PRKTIMER;

一、枚举所有KTIMER

通过这个结构体我们可以看出来DPC是KTIMER的一个成员,也就是说只要找到我们想要移除的KTIMER之后,移除KTIMER就可以移除DPC了,那么问题就来了,我们怎么找到KTIMER呢,而且系统里面有很多的KTIMER结构,就算找到了,怎么确定找到的KTIMER就是我们要移除的KTIMER呢。

所以我们可以理一下移除DPC的步骤:

1.先找到所有的KTIMER。

2.从所有的KTIMER中一个一个的找我们所要想要移除的KTIMER。(当然,如果一击即中,直接把我们所要移除的KTIMER从系统中拽出来,不用暴力枚举所有的KTIMER,那就最好了,不过好像没有办法这么做,网上也没有类似的方法,基本上都是暴力枚举所有KTIMER)

3.移除KTIMER。

 

说起来容易,那怎么寻找呢,原来,系统中有一个链表,这个链表将所有的KTIMER串起来,链表头存在于一个数组中,这个数组叫TimerEntries,256个数组成员,每一个成员都是一个链表头。这个数组存在于TimerTable数组中,TimerEntries是 TimerTable的第二数组成员,TimerTable这个数组存在结构体KPRCB0x2200(x64)或0x1960(x86)处,而KPRCB结构体指针又存在于结构体KPCR0x20处。KPCR结构体在64位中是在寄存器msr[c0000101]的位置,在32位中是在fs寄存器中。

关于KPRC等的解释可以看后面的脚注1。




好了,我们可以通过画图理一遍思路。




我们可以再通过Windbg调试看一下具体的信息:

 

X64:

msr寄存器

kd> rdmsr 0xc0000101

msr[c0000101] = fffff800`04055d00

KPCR 结构体

kd> dt _KPCR fffff800`04055d00

ntdll!_KPCR

   +0x000 NtTib            : _NT_TIB

   +0x000 GdtBase          : 0xfffff800`00b95000 _KGDTENTRY64

   +0x008 TssBase          : 0xfffff800`00b96080 _KTSS64

   +0x010 UserRsp          : 0x30ffb48

   +0x018 Self             : 0xfffff800`04055d00 _KPCR

   +0x020 CurrentPrcb      : 0xfffff800`04055e80 _KPRCB

......  

KPRCB 结构体

kd> dt _KPRCB 0xfffff800`04055e80

ntdll!_KPRCB

   +0x000 MxCsr            : 0x1f80

   +0x004 LegacyNumber     : 0 ''

   +0x005 ReservedMustBeZero : 0 ''

   +0x006 InterruptRequest : 0 ''

.....

   +0x2200 TimerTable       : _KTIMER_TABLE

......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值