32位/64位WINDOWS驱动之突破进程保护CR0方式写入只读内存

本文详细介绍了如何通过CR0寄存器的方式,在32位/64位Windows系统下,绕过进程保护机制写入只读内存。文章涉及VirtualProtectEx函数、内存保护标志的解释,以及驱动层实现的步骤,包括修改驱动代码、添加新文件等。最终在虚拟机上验证了写入成功的调试结果。

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

一、CR0方式写入只读内存

VirtualProtectEx
League of Legends.exe
0x400000
#include<ntifs.h>
VirtualQueryEx

#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02 只读
#define PAGE_READWRITE 0x04 可读可写
#define PAGE_WRITECOPY 0x08 写时复制
#define PAGE_EXECUTE 0x10 可执行
#define PAGE_EXECUTE_READ 0x20 可读可执行
#define PAGE_EXECUTE_READWRITE 0x40 可读可写可执行
#define PAGE_EXECUTE_WRITECOPY 0x80 可执行 写时复制 ntdll.dll user32.dll
#define PAGE_GUARD 0x100
#define PAGE_NOCACHE 0x200
#define PAGE_WRITECOMBINE 0x400

PAGE_READONLY: 该区域为只读。如果应用程序试图访问区域中的页的时候,将会被拒绝访
PAGE_READWRITE 区域可被应用程序读写
PAGE_EXECUTE: 区域包含可被系统执行的代码。试图读写该区域的操作将被拒绝。
PAGE_EXECUTE_READ :区域包含可执行代码,应用程序可以读该区域。
PAGE_EXECUTE_READWRITE: 区域包含可执行代码,应用程序可以读写该区域。
PAGE_GUARD: 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常,这个标志要和其他保护标志合并使用,表明区域被第一次访问的权限
PAGE_NOACCESS: 任何访问该区域的操作将被拒绝
PAGE_NOCACHE: RAM中的页映射到该区域时将不会被微处理器缓存(cached)

二、驱动层,远程写只读内存驱动2.c

注释掉:

//g_pmdl->MdlFlags = MDL_WRITE_OPERATION | MDL_ALLOCATED_FIXED_SIZE | MDL_PAGES_LOCKED;

在这里插入图片描述

三、在驱动 ,过保护读写筛选器中添加 CR0_HEAD.c文件

添加代码如下:

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a756598009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值