Windows 中的功能锁定

来自 WinStory Wiki
(重定向自 Velocity
跳转到导航 跳转到搜索

Windows 中的功能锁定是在 Microsoft Windows 新版本开发期间使用的一种措施。Microsoft 曾多次使用各种机制在 Microsoft Windows 的预发布版本正式推出新功能之前将其隐藏起来。

Windows 7

Windows 7 的开发标志着第一次有意识地引入集中工作来隐藏新功能。大约在 Build 65746583 时引入了两种不同的机制:

  • Redpill,是一系列注册表检查,通常存在于实现隐藏功能的可执行文件中。用于启用 Superbar、桌面幻灯片、“开始”菜单固定、跳转列表、Internet Explorer 8 增强功能、Aero Peek 和 Aero Shake。
  • Bluepill,在应用程序兼容性引擎中实现。它仍然会导致注册表检查,尽管是间接的。用于启用新版本的计算器画图便笺写字板

Build 7022 是已知的最后一个包含 Redpill 和 Bluepill 的版本。

Windows 8

Windows 8 的开发过程中引入了一种更复杂的功能锁定系统,称为 Redpill 或 SuperPill,它现在利用了许可子系统以及基本系统中未包含的组件。隐藏在 Redpill 后面的值得注意的功能包括开始屏幕、重新设计的登录 UI、新的 OOBE、资源管理器中的功能区、新的 Aero 资源和模式登录(后来成为图片密码登录)。然而,虽然大多数隐藏功能都使用 Redpill 锁定,但在某些区域,简单的注册表检查仍然是首选方法。

“Redpill”这个名字来源于 1999 年电影《黑客帝国》中同名的比喻性“红药丸与蓝药丸(red pill and blue pill)”情节,在此情节中,叛军领袖墨菲斯向影片的主角尼奥提供选择服用红药丸或蓝药丸的机会,这两种药丸都会改变他对现实的感知。[1]

产品策略(通常用于确定特定版本可以做什么或不能做什么的一组值)现在也用于控制 shell 功能。这使得克服保护变得更加困难,因为大多数许可数据主要在内核级别进行签名和处理。将 Redpill 策略传送到现有安装中的预期方法(全新安装不附带它们)是使用参数 configextension=rpp 针对内部 win8act 服务器进行激活。手动解锁功能意味着需要牺牲部分许可功能。除了产品策略来源的值外,Redpill 隐藏的相当大块行为还依赖于一个名为 shsxs.dll 的外部库,此库不包含在基本 Windows 安装中,仅在激活 Redpill 时复制。此库包含大量图像和 DirectUI 标记资产,以及用于初始化 Metro 各个部分的少量函数,例如超级按钮栏(Charm 栏,Charms bar)、“开始”屏幕搜索和 PC 设置应用。

从 Milestone 1 到 Developer Preview 之后不久(目前为 77798118)的几乎所有版本都实施了 Redpill。豁免是来自 fbl_eeapwinmain_win8m3_eeap 分支的版本,例如 Build 8064,它们没有实施任何形式的 Redpill,因为在编译时从操作系统中删除了 Metro 用户界面组件的所有痕迹。这些版本通过生态系统工程访问计划(EEAP)发布给 Microsoft 合作伙伴。唯一开箱即用解锁 Redpill 的可用版本是 Build 8102,即原始 Developer Preview。由于此机制的复杂性,以前在其他版本上解锁 Redpill 的一种广泛方法是使用 Build 8102 中修改后的一组组件,尽管这种方法的可靠性随着早期版本的增加而降低。直到引入 Redlock 并从头开始重新实现自定义版本的 shsxs.dll 后,Redpill 才能在 Build 7927 之前的版本中解锁。

解锁程序

已经开发了几个工具来启用 Redpill 隐藏的功能:

  • RedPill Enabler(也称为 MDL Redpill Enabler,以其首次发布的论坛命名)是首批旨在启用受 Redpill 限制的功能的公共应用程序之一。它由 My Digital Life 论坛成员 Vizion 开发,并于 2011 年 6 月 17 日首次发布。
  • Metro Unlocker 由 YouTuber 兼开发者 MetroFetro 开发。它是第一个允许启用所有受限功能(包括“开始”屏幕)的公共应用程序,并且从 2016 年的初始版本到 2020 年 Redlock 的发布,它仍然是唯一能够执行此类任务的应用程序。
  • Redlock 由 lucasm 和 gus33000 开发,他们是两位 BetaWiki 成员和软件开发者。初始版本于 2020 年 1 月 29 日发布。此工具旨在尽可能接近地复制 Microsoft 的原始 Redpill 实现。
  • Morpheus 由 BetaWiki 成员 pivotman319 开发。它在机制中使用了 Redlock(以及 AdvancedRun 和 TSForge),但不需要禁用软件保护服务。用户可以选择 4 个 Redpill 级别;它们将根据级别启用不同的功能。此工具于 2025 年 11 月 30 日发布。目前,它适用于 Windows 8 Build 78508121

Windows 10 及以上版本

Windows 10 11 月更新以来,Windows 版本使用简化的功能锁定机制,此机制使用在内部称为 Velocity staging keys(Velocity 暂存密钥)或 Feature ID(功能 ID)的数字字符串。这些值由动态链接库 ntdll.dll[a]fcon.dll(功能配置,Feature Configuration)控制,这些库位于 Windows\System32 目录中,负责管理 REG_BINARY 元素 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Notifications\Data!418A073AA3BC7C75 的功能启用。[b]Velocity 功能 ID 存储查询和更新由 NTDLL 函数 NtQueryWnfStateDataNtUpdateWnfStateData 处理,均为 Build 14910 至 Vibranium 早期版本中的 NtUpdateWnfStateData 处理:

NTSTATUS NTAPI NtQueryWnfStateData(
    PWNF_STATE_NAME StateName,
    PWNF_TYPE_ID TypeId,
    const VOID* ExplicitScope,
    PWNF_CHANGE_STAMP ChangeStamp,
    PVOID Buffer,
    PULONG BufferSize
);

NTSTATUS NTAPI NtUpdateWnfStateData(
    PWNF_STATE_NAME StateName,
    const VOID* Buffer,
    ULONG Length,
    PCWNF_TYPE_ID TypeId,
    const PVOID ExplicitScope,
    WNF_CHANGE_STAMP MatchingChangeStamp,
    ULONG CheckStamp
);

自 Vibranium 起,版本采用了一种新的功能状态存储方式,功能管理信息被移至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FeatureManagement 键(及相关子键,如 OverridesEnterpriseTempControls)。如果库检测到现有覆盖存在的问题,也可以通过使用最后已知物品存储(位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FeatureManagement\LastKnownGood)从之前状态恢复功能。内置功能覆盖功能早在 Windows 11 Build 22606 就被引入。

某些功能的可用性可能取决于关联暂存密钥的当前状态。在大多数情况下,如果优先级数据返回 8(User),则可以修改功能状态。在某些情况下,如果某个功能的优先级返回 ImageDefault,则可以在代码中强制启用或禁用此功能。这种类型的功能锁定还引入了一种称为“variants”的数据类型,此数据类型为同一暂存密钥提供多个实现方法。处理方法可能因设备和安装而异。

目前,大多数新版 Windows 引入的功能都采用这种方法来隐藏和/或测试那些尚未准备好向特定用户群体广泛发布的功能。通过 Windows 注册表进行的功能启用检查仍然是操作系统某些方面的常用选择。

工具

有四个可用工具可用于管理 Velocity 暂存密钥的状态:

  • ViVeTool —— 由 Albacore 开发,推荐用于在 Windows 10 和 11 的更高版本中启用功能。
  • mach2 —— 由 Rafael Rivera 开发,用于启用旧版 Windows 10 中的功能,例如 Build 17618 的集(Sets)和 18946 的新“开始”菜单。自 2020 年 12 月起停止开发。
  • 设置中的“实验性功能”下拉菜单(“Windows 更新”>“Windows 预览体验计划”);Velocity 暂存密钥 40062046 —— 作为内部 Windows 版本的一部分包含在内(例如:Build 25267.rs_wdatp_edr)。它是 Microsoft 员工内部用于启用各种暂存密钥的两种官方方法之一,例如来自 Microsoft 安全响应中心(MSRC)的安全修复、非公共 shell 功能以及内部 Windows 功能(如 DirectX 图形堆栈)的 bug 修复或改进。它可能不会列出当前未完成的要素。
  • Staging ToolStagingTool.exe,版本 10.0.25910.1000):这是 Microsoft 员工使用的另一个官方内部工具,通过使用基于命令行的用户体验来管理和配置 Velocity 暂存密钥的状态,无意中分发在 2023 年 8 月 2 日公开的两个内部反馈中心任务中。此链接后来被删除,尽管网上存在此工具的存档版本。

Staging Tool 帮助命令

StagingTool [version 10.0.25910.1000 (WinBuild.160101.0800)] 

    [StagingTool.exe] Controls the feature configurations for this device

       Usage: StagingTool.exe [/enable  <featureId>]
                              [/disable <featureId>]
                              [/query   [featureId]]
                              [/reset   <featureId>]
                              [/testmode]
                              [/setvariant <featureId> <variantId> [payload]]
                              [/serialize]

                              [/setlkg]
                              [/restorelkg]

                              [/trace <featureId1> [<featureId2> ... <featureIdN>]]

                              [/setbootconfigs <jsonFile> <registryPath>]

       /enable          Enable the specified feature
       /disable         Disable the specified feature
       /query           Query the specified feature (or all features, if featureId
                        is omitted) for enablement and variant information
         /v                 Optional parameter to also print ImageDefault and ImageOverride features

       /reset           Reset the specified feature to its default state

         <featureId>        Specifies a feature by its feature Id
                            Example: Enable features with Id 1

                                StagingTool.exe /enable 1

       /testmode        Used in conjunction with /enable /disable /reset
                        Applied feature configs will revert after reboot

       /telemetry       Used in conjunction with /enable /disable /reset
                        Enables sending additional telemetry

       /setvariant      Select a feature variant to use (note: the feature must be
                        enabled for variants to be expressed). Use /query to list
                        configured variants.

         <featureId>        Specifies a feature by its feature Id

         <variantId>        Specifies a feature variant by id.

         [payload]          (Optional) Unsigned int payload for the variant
                            (for variants that support fixed payload)

       /serialize       Rather than apply changes to the local machine, use this
                        option to print out (in reg.exe/hex format) a new config
                        with all of the requested changes. This can be used for
                        offline updates to VHDs prior to first boot.

       /setlkg          Set Boot time feature override states as LKG Configurations
       /restorelkg      Restore Boot time LKG configurations states Feature Configurations

       /trace           Realtime ETW trace for the specified feature(s) usage in code
                        E.g. enable trace for the feature with ID 1235441: StagingTool.exe /trace 1235441

       /?                Show command usage

图库

另行参阅

  1. 功能锁定功能嵌入在 Windows 10 秋季创意者更新及更早版本的 NTDLL 中。
  2. Build 14910 之前的 Windows 10 版本中,WNF 功能存储使用的位置是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Notifications!418A073AA3BC7C75

引用资料