首页
社区
课程
招聘
[求助]现在不能通过写CR0.WP关闭写保护了吗
2024-3-8 02:23 2838

[求助]现在不能通过写CR0.WP关闭写保护了吗

2024-3-8 02:23
2838

前几年记得用过这种代码可以正常跑现在试了下会触发KiGeneralProtectionFault异常
查阅资料发现和CR4.CET位有关但ntoskrnl里也存在这样的代码
希望有前辈解答下

KIRQL WPOFFx64()
{
KIRQL irql = KeRaiseIrqlToDpcLevel();
UINT64 cr0 = __readcr0();
cr0 &= 0xfffffffffffeffff;
__writecr0(cr0);
_disable();
return irql;
}

void WPONx64(KIRQL irql)
{
UINT64 cr0 = __readcr0();
cr0 |= 0x10000;
_enable();
__writecr0(cr0);
KeLowerIrql(irql);
}


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

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
WindBlow小迪 2024-3-8 02:30
2
0
WPOFFx64的__writecr0(cr0);就会触发异常
雪    币: 405
活跃值: (1890)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wowocock 1 2024-3-12 18:10
3
0
关闭内核隔离。
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
WindBlow小迪 2024-3-12 20:48
4
0
wowocock 关闭内核隔离。
Win10 22H2 并没有开内核隔离
雪    币: 789
活跃值: (1494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
のばら 2024-3-12 21:00
5
0
WindBlow小迪 Win10 22H2 并没有开内核隔离
你既然查到CR4.CET置位的情况下复位CR0.WP会产生#GP异常,那就不应该去纠结原因了。
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
WindBlow小迪 2024-3-12 21:03
6
0
のばら 你既然查到CR4.CET置位的情况下复位CR0.WP会产生#GP异常,那就不应该去纠结原因了。
单纯好奇 因为记得之前是没有这种情况的 似乎是Windows的影子堆栈保护
但是明明ntoskrnl里也存在修改WP位,这样不就可能跑正常代码也会触发异常导致蓝屏吗
雪    币: 789
活跃值: (1494)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
のばら 2024-3-12 23:28
7
0
WindBlow小迪 单纯好奇 因为记得之前是没有这种情况的 似乎是Windows的影子堆栈保护 但是明明ntoskrnl里也存在修改WP位,这样不就可能跑正常代码也会触发异常导致蓝屏吗
一般情况下,ntoskrnl不会修改WP位
雪    币: 1014
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AsuraCoder 2024-3-29 23:39
8
0

新版手册里面有  2.5 开头 CR0.WP的描述

群里大佬说了,有CET就不行 AMD Intel都一样的



CR0.WP


Write Protect (bit 16 of CR0) — When set, inhibits supervisor-level procedures from writing into read-

only pages; when clear, allows supervisor-level procedures to write into read-only pages (regardless of the

U/S bit setting; see Section 4.1.3 and Section 4.6). This flag facilitates implementation of the copy-on-

write method of creating a new process (forking) used by operating systems such as UNIX. This flag must

be set before software can set CR4.CET, and it cannot be cleared as long as CR4.CET = 1 (see below).


最后于 2024-3-29 23:59 被AsuraCoder编辑 ,原因:
游客
登录 | 注册 方可回帖
返回