windows系统在某些版本下对某些内存区域启用了写保护的功能,因为这些区域一般合法程序是不可能修改其内容的,那么我们如何来写这些内存呢? PS:1) 这些系统包括:windows xp与windows 2003 2) CPU提供写保护的功能是从486开始的 3) 一般合法程序不包括杀毒软件,因为他们在Hook SSDT中是直接改ServiceTableBase,而没有用inline的方法 我们就用SSDT做例子吧,在Hook SSDT时不用innline hook方法,我们就要修改SSDT这个系统服务描述表;而这个表是被写保护了,在ring0下也是没有写的权限。 方法一: 首先我们来看一下CR0寄存器的格式 |31|30| |18|17|16| 5|4|3|2|0|1| |P |C | |A | |W | N|E|T|E|M|P| |G |D | |M | |P | E|T|S|M|P|E| 我们主要注意这个WP这位,其他的请参考IA-32 Volume 3A; WP——Write Protect,当设置为1时只提供读页权限 PE——Paging,当设置为1时提供分页 MP——Protection Enable,当设置为1时进入保护模式 所以我们只要把WP这一位设置为0时,就可以修改SSDT了 //1 关闭写保护 __asm { push eax mov eax, CR0 and eax, 0FFFEFFFFh mov CR0, eax pop eax } //2 打开写保护 __asm { push eax mov eax, CR0 or eax, NOT 0FFFEFFFFh mov CR0, eax pop eax } 通过上面的第一组指令我们就可以正常修改SSDT,记得修改后要还原。 方法二: 此方法是盖茨提供的,在内存描述表(MDL)中描述一块内存区域,MDL包含此内存区域的起始地址,拥有者进程,字节数量以及标志。 //在ddk中的描述 typedef struct _MDL { struct _MDL *Next; CSHORT Size; CSHORT MdlFlags; struct _EPROCESS *Process; PVOID MappedSystemVa; PVOID StartVa; ULONG ByteCount; ULONG ByteOffset; } MDL, *PMDL;
#define MDL_MAPPED_TO_SYSTEM_VA 0x0001 #define MDL_PAGES_LOCKED 0x0002 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 #define MDL_ALLOCATED_FIXED_SIZE 0x0008 #define MDL_PARTIAL 0x0010 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 #define MDL_IO_PAGE_READ 0x0040 #define MDL_WRITE_OPERATION 0x0080 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 #define MDL_LOCK_HELD 0x0200 #define MDL_PHYSICAL_VIEW 0x0400 #define MDL_IO_SPACE 0x0800 #define MDL_NETWORK_HEADER 0x1000 #define MDL_MAPPING_CAN_FAIL 0x2000 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 // Declarations #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; unsigned int NumberOfServices; unsigned char *ParamTableBase; } SSDT; #pragma pack() __declspec(dllimport) SSDTKeServiceDescriptorTable; PMDL g_pmdlSystemCall; PVOID *MappedSystemCallTable; // save old system call locations // Map the memory into our domain to change the permissions on // the MDL g_pmdlSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4); if(!g_pmdlSystemCall) return STATUS_UNSUCCESSFUL; MmBuildMdlForNonPagedPool(g_pmdlSystemCall); // Change the flags of the MDL g_pmdlSystemCall->MdlFlags = g_pmdlSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA; MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode); MappedSystemCallTable就是SSDT的地址,现在可以放心的操作它吧!用完了最好MmFreePagesFromMdl。
相关推荐
C语言 函数
一、什么是函数 二、函数的相关语法 三、函数编码规范
关于MDL的一些事情
微软的文档里对MDL的描述感觉语焉不详,这两天在找工作的间隙逆向+黑盒测试了一下MmBuildMdlForNonPagedPool,把得到的一些理解描述下来。 一.MDL数据结构 MDL是用来建立一块虚拟地址空间与物理页面之间的映射,结构定义如下: [cpp] view plaincopy typedef struct _MDL { struc
给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略
本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。
服务器修复分区,存储空间保护分区如何修复进行分区扩展?
是的,所以找了一台其他Windows服务器进行挂载成功,并将数据拷贝出来重建VMDK磁盘文件在加载到最初的Windows服务器中使用。所以我想知道存储空间保护分区 id号?能否告知??EFI 系统分区:c12a7328-f81f-11d2-ba4b-00a0c93ec93b基本数据分区:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7Microsoft 保留分区:e3c9e...
别只刷题了!我用834分经验告诉你,华为HCIP大数据考试(H13-723)这样准备更高效
本文分享了华为HCIP大数据认证(H13-723)834分通关的高效备考经验。通过分析考试动态、题库验证技巧和章节优先级策略,帮助考生超越单纯刷题,系统化掌握核心知识点。特别强调实时流处理和离线批处理等重点章节,提供黄金90分钟临场发挥策略,助力考生一次性通过考试。
Ubuntu 22.04下Realtek R8125网卡驱动安装避坑指南(附DKMS自动编译配置)
本文详细介绍了在Ubuntu 22.04系统上为Realtek R8125 2.5GbE网卡安装驱动的完整流程与避坑指南。针对内核通用驱动r8169的冲突问题,重点讲解了如何通过DKMS(Dynamic Kernel Module Support)实现驱动的持久化自动编译与安装,确保系统内核升级后网卡驱动依然有效。内容包括环境准备、驱动源码获取、DKMS标准配置、驱动冲突解决(设置黑名单)以及日常维护与故障排查方法,旨在为用户提供一个一劳永逸的稳定解决方案。
windows下多进程通信,基于共享内存环形队列实现
使用方式非常简单,需要的进程初始化类调用InitializeLock函数传入相同的字符串即可。可以多个进程使用PushString(),写入缓冲区,只允许一个进程进行调用PopString()读取,读取方面没有写保护锁,非线程安全。构造函数与析构函数看起来似乎不严谨,但不影响使用,有不对的地方望大牛提供指点。 测试代码用于获取通信所需的时间 进程读取缓冲区代码 1 #include "
耕地质量评价软件实操指南:如何用Excel+ArcGIS一键生成土壤普查报告(附避坑技巧)
本文提供了一套融合Excel数据处理与ArcGIS空间分析的耕地质量评价实战工作流。详细讲解了从数据规范化预处理、高效数据桥接,到在ArcGIS中实现指标评分、综合指数计算与等级划分的全流程,旨在帮助土壤普查工作者大幅提升报告生成效率与准确性,并分享了关键的避坑技巧。
【win10】磁盘保护清除
【背景描述】 旧电脑拆下来的硬盘成功改装成移动硬盘了,但硬盘还有保护分区未清除,直接用计算机的磁盘管理权限不够,右键只会提示“帮助”。 【解决步骤】 计算机->cmd->右键选择 以管理员身份运行 输入:diskpart 进入磁盘分区 输入:list disk 列出当前活动磁盘,可以看到有两块磁盘0和1,其中1对应外接硬盘 选择要清楚的磁盘,比如这里的第...
Cilium动手实验室: 精通之旅---5.Mutual Authentication with Cilium
在Cilium 入门实验室中,您将在受《星球大战》启发的场景中实施高级第 3-7 层网络策略。在实验结束时,您将实施强大的网络策略,并通过微分段保护 Empire 免受来自叛乱的攻击。在本实验中,您将重新部署《星球大战》演示应用程序,但除了网络策略之外,您还将了解如何在工作负载之间实施相互身份验证。
智能车图像处理11-进阶篇3--中线累积差值的统计
中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g
Windows内存管理(二):内存架构 浅谈一二
windows内存管理
最新Codex接入DeepSeek官方API教程(无需cc-switch)
最新Codex接入DeepSeek官方API教程(无需cc-switch)
《Windows核心编程系列》十二谈谈Windows内存体系结构
转载自:http://blog.youkuaiyun.com/ithzhang/article/details/8392933 Windows内存体系结构 理解Windows内存体系结构是每一个励志成为优秀的Windows程序员所必须的。 进程虚拟地址空间 每个进程都有自己的虚拟地址空间。对
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
Windows 驱动: 消除核心内存的只读保护
在很多机器上 SSDT 表是不可写的,写即导致机器无提示崩溃重启。这是需要去除核心内存的写保护: //----------------------------------------------------------------------//// 设置核心内存访问保护////--------------------------------------------------------
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
数据执行保护讲解
2. **仅为基本Windows程序和服务启用DEP**:这种模式被称为“Option”,它只对Windows系统组件和服务启用DEP保护,而对其他第三方应用程序则不启用。1. **为所有程序和服务启用DEP**:这种模式被称为“AlwaysOn”,它为所有程序和服务启用了DEP保护,不允许任何程序从受保护的内存区域执行代码。相反,选择“仅为基本Windows程序和服务启用DEP”则仅对Windows系统组件和服务提供保护,这可以减少对第三方程序的干扰,但相应地降低了对某些潜在威胁的防护。
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
windows-rs内存保护:设置页面属性与Guard Pages
在Windows系统中,内存保护是保障程序稳定性和安全性的核心机制。通过设置内存页面属性,开发者可以控制程序对特定内存区域的访问权限,防止非法读写操作导致的崩溃或安全漏洞。Guard Pages(防护页)作为一种特殊的内存保护技术,能够在内存溢出发生时提供即时检测能力,是防御缓冲区溢出攻击的重要手段。 windows-rs库通过`windows_sys`模块提供了对Windows内存管理API的...
Title: Protected Mode Memory 保护模式下的内存
*************Title: Protected Mode Memory***************************** 标题:保护模式下的内存******************=================译自Tutor by Hutch==================**====Original:Collected and packed by dREAMtHEAT
彻底关闭数据执行保护(DEP)
彻底关闭数据执行保护(DEP) 1、直接修改Boot.ini文件(彻底关闭数据执行保护DEP) 在WinXP SP2系统所在分区根目录下找到Boot.ini文件(需打开系统隐藏文件及受保护的系统隐藏文件夹,打开方法:工具-文件夹选项-查看-拉下列表就可以看到了)。 然后右键Boot.ini属性去掉Boot.ini只读属性,把NoExecute=Optin改为...
计算机打数据执行保护删除不掉,肿么才能关闭系统的数据执行保护
exec方法一:关闭数据保护,编辑Boot.ini文件,将/NoExecute=OptIn 改为/NoExecute=AlwaysOff。要编辑Boot.ini,请在开始中我的电脑上点右键?属性?高级,启动和故障恢复设置,?编辑 即可!方法二:Win XP SP2具备数据执行保护(DEP)功能,要实现此功能,需配合支持DEP功能的处理器使用,如AMD Athlon64和编号中包含字母J的Intel...
WINDOWS程序一般性保护错误的原因与解决办法
一 什么是一般性保护错误(GP)? 一般性保护错误(general protect简称GP),通常只是WINDOWS下的一个术语,我们现在也常把它引用到UNIX下指程序的崩溃。 本文主要探讨WINDOWS下面程序GP的原...
1891



被折叠的 条评论
为什么被折叠?



