首页
社区
课程
招聘
[原创]一种简单屏蔽nmi中断的方法
发表于: 2022-9-19 23:32 6771

[原创]一种简单屏蔽nmi中断的方法

2022-9-19 23:32
6771

一种非常简单的屏蔽方法
NMI处理例程为KiProcessNMI

其中有对当前核NMI是否正在处理的判断,如判断为真则直接返回

将该变量对应的每个核都置位则nmi回调不会被调用,实现代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
uint8_t* KiNmiInProgress = NULL;
        if (dwBuildNumber < 22000) //win10
        {
            KiNmiInProgress = reinterpret_cast<uint8_t*>(FindPatternInSectionAtKernel((char*)".text", ntoskrnlAddr, (PUCHAR)"\x81\x25\x00\x00\x00\x00\x00\x00\x00\x00\xB9\x00\x00\x00\x00", (char*)"xx????????x????"));
        }
        else //win11
        {
            KiNmiInProgress = reinterpret_cast<uint8_t*>(FindPatternInSectionAtKernel((char*)".text", ntoskrnlAddr, (PUCHAR)"\x81\x25\x00\x00\x00\x00\x00\x00\x00\x00\x8D\x00\x00", (char*)"xx????????x??"));
        }
        if (KiNmiInProgress)
        {
            uint8_t uTemp = this->read_virtual<uint8_t>((void*)KiNmiInProgress);
 
            while (uTemp != 0x48)
            {
                ++KiNmiInProgress;
                uTemp = this->read_virtual<uint8_t>((void*)KiNmiInProgress);
            }
 
            KiNmiInProgress = reinterpret_cast<uint8_t*>(ResolveRelativeAddress(KiNmiInProgress, 3, 7));
            ULONG nCoreNum = this->v_ctx->kn_KeQueryActiveProcessorCountEx(0);
            if (nCoreNum)
            {
                for (int i = 0; i < nCoreNum; i++)
                {
                    this->v_ctx->kn_KeInterlockedSetProcessorAffinityEx((__int64)KiNmiInProgress, i);
                }
            }
            return true;
        }
        return false;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 12848
活跃值: (9167)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
EAC:学到了,下个版本加入校验
2022-9-20 09:47
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
hzqst EAC:学到了,下个版本加入校验
EAC:很遗憾,我已经校验了
把握好打开和关闭的时机仍然有用
2022-9-20 15:43
0
雪    币: 3663
活跃值: (4841)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hzqst EAC:学到了,下个版本加入校验
早加了 这样操作会被flag 封不封 看心情
2022-9-20 15:46
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
syser 早加了 这样操作会被flag 封不封 看心情
然鹅你为什么要全时段所有核屏蔽呢
2022-9-20 15:55
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
屏蔽NMI中断,时间长了不出问题吗?
2022-9-21 02:41
0
雪    币: 1922
活跃值: (4165)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
屏蔽NMI中断,学习了,谢谢
2022-9-21 22:36
0
游客
登录 | 注册 方可回帖
返回
//