Windows 机密:利用 EmulateHeap 还原早期内存行为
Raymond Chen
应用程序兼容性工具包中提供了一项极其简单而又非常疯狂的兼容性行为:EmulateHeap。
如果您对进程启用此兼容性修复措施,则所有操作系统级的堆函数(从 HeapCreate 到 LocalLock 再到 GlobalReAlloc,以及其间的所有函数)都会重定向到替代函数,从而彻底模拟 Windows 95 堆。
例如,您可能有一个程序,该程序先分配两个内存块,再释放它们,然后分配第三个内存块,而您可以依赖于第三次分配所返回的指针与第一次分配所返回的指针在数值上相等的事实,因为在 Windows 95 上就是这样的。
您可能有一个程序,该程序会使堆缓冲区溢出,而不会造成任何严重后果,因为堆缓冲区之后的内存未用于其他任何用途,至少在 Windows 95 上是这样的。
您可能还会运行一个程序,该程序将释放内存,随后可能再次访问其释放的内存,并希望该内存仍然包含在其释放时所写入的值,并且没有被其他任何内存分配所重用,或者至少在 Windows 95 上没有被重用。(也许更可怕的是,该程序依赖于在释放内存后对该内存以非常特殊的方式更改的值!)
在旧版应用程序中,有一大堆很小的与此类似的奇特依赖性。编程人员并非特意采用这种方式对这些应用程序进行编码;这些行为不过是散布在各处的小错误,而由于程序在与 Windows 95 堆管理器联合运行时,这些错误凑巧没有引起问题,因此就蒙混过关了。但是,当这些程序在其他任何版本的 Windows 上运行时,它们就会崩溃,因为其他版本的 Windows 拥有不同的堆管理器。
因此,这并不能说明 Windows 95 堆管理器比其他版本“更好”或“更强大”。不过是不一样罢了。很可能只是因为有很多行为在 Windows 95 应该造成崩溃而实际上没有造成崩溃,所以在 Windows 7 上也要努力避免崩溃。您看到的效果不过是自我选择的结果:如果您在 1995 年编写了一个程序,而这个程序在 Windows 95 上会造成崩溃,您一定会注意到这个问题并将其修复,因为 Windows 95 是您的目标平台!
如果对进程启用 EmulateHeap 兼容性修复措施,堆管理器的行为就会变得完全与 1995 年的行为相匹配。所有会在 Windows 95 上发生的巧合 - 那些应用程序无意中所依赖的巧合 - 再次强制出现了,这使得包含这种错误的应用程序能够继续按照与以前完全相同的方式运行。提醒您,强制实现所有巧合还意味着必须关闭新的堆特性(例如减少碎片),因为这些特性可能会改变应用程序所依赖的巧合。
以上解释了为什么此项行为是简单的。
而此项行为还是疯狂的,其原因在于:应用程序兼容性人员为了尽量完美地模拟 Windows 95 堆管理器而采取的方式 - 他们直接复制了一份 Windows 95 堆管理器的源代码,重新编译,然后将其加入兼容性基础结构中。换句话说,在 Windows 应用程序兼容性框架中有一大块 Windows 95 内核的副本。虽然不是 Microsoft Bob 的完整副本,但是在这种情况下,这段从 Windows 95 中原封不动复制过来的代码仍然是不稳定因素;如果对进程启用了 EmulateHeap 兼容性修复措施,则这段古老的代码就会从硬盘加载到内存中,并且真的开始执行工作!
Windows 7 有一个新的容错堆子系统,该系统试图检测多种简单的应用程序堆内存错误并自动应用补救措施。例如,容错堆会检测并更正重复释放、堆缓冲区溢出(至少是少量溢出)以及在释放后再使用内存(至少是在释放之后的短时间内再次使用它)。这种更通用的解决方案有望使下一版 Windows 中不再需要在其兼容性基础结构文件中包含一个 Windows 7 堆管理器的副本。
原文链接:
http://technet.microsoft.com/zh-cn/magazine/ff625273.aspx
分享到:
相关推荐
机密:中国个人金融服务市场及新兴银行的制胜战略.ppt
专题资料
【标题】:“机密:AAA JRPG ...不”可能指的是一个未公开的、可能是AAA级(高质量、大制作)的日式角色扮演游戏项目。在游戏行业中,AAA级别的游戏通常具有高预算、大规模的开发团队和广泛的市场推广。JRPG,全称...
机密 :zipper-mouth_face: 这是一个实践项目,用于处理不同级别的身份验证和安全性。 每次提交将指示在那一刻之前实施的安全级别。身份验证和安全级别级别1:使用电子邮件和密码注册用户。 级别2:数据库加密。 级别...
《BMZCTF内存取证三项.zip》是一个与网络安全和取证相关的压缩文件,包含了一次可能的CTF(Capture The Flag)挑战。从标题和描述中,我们可以推测这是一场涉及解密、密码学以及文件分析的竞赛。接下来,我们将深入...
2. **Clojure** - 这是一个基于Lisp的现代函数式编程语言,很可能被用来开发这个服务的后端系统,以其强大的并发性和内存安全性著称。 3. **Cryptography** - 加密是保护信息安全的关键技术,这里可能意味着服务...
本文将围绕“简单机密:秘密的圣诞老人作业,无需所有跟踪”这一主题,探讨如何利用HTML技术创建一个互动、隐私友好的圣诞活动页面。 首先,理解“无需所有跟踪”的概念。在当前的互联网环境中,许多网站会利用...
Kubernetes的“密封秘密” 问题: “我可以在git中管理我所有的K8s配置,除了Secrets。” 解决方案:加密你的秘密成SealedSecret,这是安全存储-... 这些加密的机密编码在SealedSecret资源中,您可以将其视为创建机密
机密教程:联想外设培训教程(激光打印机篇).ppt
秘密Secret是由隐私狂创建的一种开源工具,用于保护隐私狂,使您可以发送AES加密笔记,这些笔记在被读取后会自毁。入门这些说明将为您提供项目副本并在本地计算机上运行使用Docker 克隆存储库并导航到其中: git ...
特征: 扫描秘密扫描未机密,作为向左转移安全性的一部分扫描可用的通过toml配置的使用高性能JSON,SARIF和CSV报告使用基于密钥或密码的身份验证进行私人仓库扫描安装Gitleaks可以与Homebrew,Docker和Go一起安装。...
在这个场景中,"noecho"、"机密"、"密码"、"令牌"和"提示"是与数据安全相关的关键词,尤其是涉及用户输入时。让我们深入探讨这些概念以及它们在实际应用中的作用。 1. **noecho**: 在命令行或终端环境中,`noecho...
黑客大曝光:网络安全机密与解决方案(第7版)
RDP Windows Server 2019 :sparkles: Windows Server 2019 with 2cpu-7gb Ram FREE with Github with RDP Access(ngrok US) 回购链接: : 单击屏幕右上角的Fork将其保存到您的Github。 访问以获取NGROK_AUTH_TOKEN...
secrets secrets是一个库,可帮助Rust程序员安全地在内存中保存加密机密。 它主要是围绕人体工程学的内存秘密包装器,是帮助Rust程序员安全地将密码秘密保存在内存中的库。 它主要是围绕libsodium提供的内存保护实用...
机密 使用S3安全共享密码和机密 一个用于安全地创建和访问密码及其他机密的命令行工具。 它使用进行存储,并使用进行访问控制。 非常适合在团队中共享密码。 机密以纯文本文件形式存储在S3中,并在静止时使用自动...
-Linux,MacOS和Windows 请下载适合您的操作系统和体系结构的软件包。 您可以在找到Gatekeeper的,并且可以验证已使用AXOE的GPG密钥签名的校验和签名文件。 概述 Gatekeeper建立在并利用命令,自变量和标志的结构...
### 第10章 内存管理与用户操作 #### Linux内存管理概览 在Linux操作系统中,内存管理是一项核心功能,旨在高效地管理和分配物理内存资源。为了理解Linux的内存管理,首先需认识到Linux采用虚拟内存机制,这使得每...
《工程管理人员廉政行为十不准》是针对工程管理领域制定的一套廉洁自律准则,旨在保障工程建设的公正、公平和透明,防止腐败现象的发生。以下是这十不准的详细解释: 1. 不准违反国家有关工程建设管理的有关规定和...