UUP 助手[24.7.1 更新] - 轻松获取 Windows UUP 并制作映像或安装/升级系统

[复制链接]
208 |10
发表于 2025-11-6 18:24:23 | 显示全部楼层 |阅读模式
UUP 助手

UUP 是 Windows 的统一更新更新平台,Windows 更新就是使用 UUP 升级系统。UUP 助手是一个集下载并以此制作映像、安装系统、就地升级/安装的工具。同时支持自定义 Windows:自定义安装更新、Appx、驱动,甚至安装系统支持修改 RE 位置、预分配卷标、更换版本(如家庭版升级专业版、专业版切换到企业版)、自定义 OOBE、还支持格式化为 ReFS、VHD 启动、移除硬件支持等功能。
提一嘴背景:这个软件我断断续续写了将近四年,原先只是 Windows 11 刚出来时我刚好在学 Win32 桌面开发,就用纯 C 先写了个 Windows 11 升级助手。这就是 UUP 助手的前身,虽然比起现在的 UUP 助手界面更好看但存在很多问题。后来学了 C++,就逐步引入。最后自己设计了一个 UI 框架,决定全部推翻用 C++ 重写。就形成了现在的 UUP 助手。迄今为止,总代码量将近三万行。
相关技术

关于本软件的技术介绍,可以在这里看到。
更新日志

25.9.15

    修正 UUP 获取逻辑,解决选择多版本时获取 UUP 信息失败的问题。修正获取 UUP 信息进度条显示逻辑。新增在空临时目录中创建更新包符号链接的安装更新逻辑,解决安装某些更新(如:KB5043080)会出现“传送的 ACL 不包含最低要求的信息。”错误的问题。修正功能启用包更新的识别逻辑,支持 25H2 功能启用包的识别。
  • 为软件添加 Lourdle 签名。可手动将 Lourdle Root Certificate Authority 2025 证书添加到信任的根证书颁发机构。25.7.1添加制作移除硬件要求的 ISO 功能添加 DPI 感知,优化视觉体验改进下载和 UI 框架链接,移除 UCRT 的依赖修复版本号比较错误的问题其他未列出的细节修正
    25.6.7

    添加升级时移除硬件要求的功能添加在 Unattend.xml 中隐藏密码明文功能,从此后将不再显示明文密码

UUP 助手功能截图

功能主界面

UUP 助手

制作映像界面

可以制作 ISO 或系统映像文件,允许自定义映像。

安装界面

选择安装分区和引导分区,下一步将格式化系统卷。自定义安装可以指定安装路径且不会格式化。
允许自定义系统(如图)。实用工具包括:打开命令提示符、打开磁盘管理、管理 EFI 分区、管理 MBR、PBR 等功能。
安装系统

升级界面

升级系统

下载 UUP

UUP 获取助手,是通过 WebView2 显示,你可以自己选择系统。选择后,软件会下载 UUP。如果获取信息时出错,可能因为触发反滥用机制,重新尝试即可。
查找系统


下载:

链接: https://pan.baidu.com/s/1htD7Zk5PyvGGxVVKDMGjqw?pwd=dx9w 提取码: dx9w
软件版本和运行注意事项介绍

软件支持 x64 和 ARM64 平台,不支持 32 位 x86 平台。但是可以安装 32 位 x86 系统或制作系统映像。
两个发行版本,Release 和 RelMT。两者的区别是前者专门针对新的系统优化大小,只有新版本的 Windows 10 和 Windows 11 上可以运行。RelMT 的体积稍大,但可以在早期版本的 Windows 上运行。
[25.9.15 补充] 在早期版本 Windows 运行 Release 版因缺少 __CxxFrameHandler4 而无法运行,此时只需要换 RelMT 版即可运行。
UUP 助手主程序仅能在 Windows 8.1 及以上的系统运行,但在早期版本的 Windows 上运行会出问题,因为使用的部分 DismAPI 函数只有在较新的系统上才有。若要在早期系统运行,可下载 UUP 后在系统的 ESD 文件(一般是叫做 professional_zh-cn.esd、core_zh-cn.esd 等)中的第一个映像,提取 sources 安装文件夹,把软件放到此文件夹里。(或许我可以加一个动态加载 dismapi.dll 的功能)
[25.6.9 补充] 我在网盘分享内提供了从 Windows 11 21H2 ADK 提取的 DISM。如果在早期版本的 Windows 运行出现无法定位入口点 _DismXXX 的情况,可以下载相应版本的 DISM 并解压到程序同目录下。这样就可以在早期版本的 Windows 为现代 Windows 提供 DISM 服务。注意:amd64 就是 x64,一般电脑下载 amd64 就行了。虽然 Windows ADK 提供了 32 位的 X86 和 ARM 的 DISM,但由于 UUP 助手不提供 32 位软件,这里就没有收录。
UUP 获取工具收到 UI 框架影响,只能在 Windows 7 及以后的系统使用。
UUP 助手和获取工具两者都支持在 PE/RE 下运行。
不提供系统激活破解服务,系统激活问题请自行解决。
使用

请勿用于商业用途。虽然我在虚拟机和自己的电脑上实机测试过没问题,但不知道还会不会有什么 bugs。大家可以在虚拟机上测试,有问题可以反馈。如果实体机使用出问题,请自行负责。
我只在 Windows 11 21H2~24H2 及其 RE、Windows 10 1803 和 Windows 10 1909 PE 上测试过,其它版本没有测试。UUP 助手主程序和获取工具理论支持的最早系统分别是 Windows 8.1 和 Windows 7,由于没有测试过,不保证能正常运行。
理论可以处理所有 UUP,但我只测试过 Windows 10/11 zh-CN 的 UUP。
制作移除硬件要求的 ISO,请直接从根目录的 setup.exe 启动安装程序,不要直接运行 \sources\setup.exe 或者 \sources\setupprep.exe,否则可能不起作用。
支持中文和英文,英文是 AI 翻译后自己校对的,可能不准确。
软件功能挺多的,这里我也介绍不完。大家可以自己慢慢体验。
关于开源

我考虑过将软件完全开源,毕竟这不是什么商业机密,就是写着玩的。但目前由于代码太乱,尤其是很多代码连 o3-mini 重构运行时都出问题。而且不喜欢写注释,命名很随意(帕斯卡、驼峰、下划线命名法混用)。所以就等我慢慢(很慢)重构后,可能就考虑开源了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2025-11-6 18:24:38 | 显示全部楼层
本质上还是用官方的安装程序实现的。只是软件通过劫持和钩子接管部分安装流程,可以更加自定义。而且用 UUP 可以直接升级你可以安装任何你想升级的版本,不需要等推送的更新,不需要找 ISO。
回复

使用道具 举报

发表于 2025-11-6 18:24:50 | 显示全部楼层
这里我介绍一下这当中的知识和技术。这里我只介绍不能从网上查询到的,可以轻松查到的(如 MBR、GUID 分区表结构、Unattend 无人参与配置文件等)我就不介绍了。
无文档 DISM API

对离线 Windows 映像的组建修改就需要 DISM。Dism.exe 提供了很多的功能包括添加包、启用功能、添加驱动、设置版本、添加预置应用包、清理映像等。DISM API 提供了完成这些操作的 API,但仅有一些基础功能如添加包、启用功能、添加驱动这些是有文档的。虽然 DISM API 提供了大部分的 Dism.exe 的功能(Dism.exe 不依赖 DISM API),但绝大多都是无文档的。

我通过反编译 dismapi.dll 找到了这些无文档函数(下划线开头的)及其用法。值得庆幸的是,DISM API 输出的日志和调试字符串包含了这些参数信息,方面我们找到这些参数的含义。

首先是 _DismSetEdition2
因此前三个参数是会话、版本、产品 ID。
最后应该是取消事件、进度回调函数极其数据。

然后是 _DismCleanImage

参数分别代表什么很清楚了。至于类型往下看就知道了。

Flags 可以参考 Dism.exe 的帮助。
最终我们得到了这些无文档函数。

优化 Appx 的函数在 IDA Pro 一看,只有一个参数,就只可能是会话。
Wimgapi 启用 LZMS 压缩的 ESD 映像支持

Wimgapi 是 Windows 的映像 API,尽管很多核心功能有文档,但是 LZMS 支持并没有文档。虽然头文件里有 LZMS 的定义,但如果用来创建映像,那在关闭后映像文件无法被解析。Dism.exe 依赖 wimgapi.dll,但支持 LZMS,这必然是因为微软刻意隐藏了什么。这里我通过做一个假的 wimgapi.dll,除了 WIMCreateFile,其它全部转发到 realwimgapi.dll。打印 WIMCreateFile 的参数,然后调用 realwimgapi.dll!WIMCreateFile,于是我发现了这个标识:0x20000000,只要打开文件时或上这个标识,即可启用 LZMS 支持。经测试,加上此标识创建的 ESD,文件也可以正常捕获映像,这是 Dism.exe 所不支持的功能,但实际 Wimgapi 是支持的。
Windows Appx 应用

简介

Appx 应用一般是由 .appx;.appxbundle;.msix;.msixbundle 文件安装。应用一般需要许可证 XML 文件,也可以跳过。一般只有框架 Appx 如运行库等不需要许可证。普通应用需要许可证,否则首次启动必须联网验证,无网络将不允许运行。
Stub 存根

Stub 应用包是一种特殊的应用包,安装后可以在开始菜单看到。但只是用于占位,首次运行必须更新才能使用。一般用于某些应用功能的占位,减小系统大小。
UUP 的 Appx 应用

UUP 的 Appx 应用信息保存在。UUP 中直接叫做 Feature,为避免与 Dism 中的 Windows 功能混淆,这里叫做 Appx Feature。

可以看到,这里的 Appx feature 分为两种,就是框架和捆绑包。应用应遵循目录树结构,需根据的路径保存。

在 UUP 助手处理 ESD 引用映像前会建立这些树结构。在指定的临时目录中,UUP 助手会创建一个随机 GUID 命名的系统隐藏目录作为工作目录,其中的 AppxFeatures 文件夹就保存了这些应用(为减少占用空间和加速处理,除了许可证其余所有文件都采用符号链接)。
Appx 的安装

从 XML 看到,可能有多个资源包,有一个主包和一个捆绑包(一般是一个 bundle 文件)。安装应用只需要指定捆绑包安装即可。虽然应用存在依赖关系,但是在安装时可以忽略。UUP 助手会自动处理依赖关系,先安装依赖的应用,然后安装应用时忽略依赖包。
Edge 的安装

在某些 UUP 上系统不自带 Edge 和 WebView2,需要通过 Edge.wim 安装。打开 Edge.wim 就可以看到 \Edge\Edge.dat 的存在,WebView2 和 EdgeUpdate 都有。

这是一个注册表文件,保存了相关产品的注册表信息。

把 Edge.wim 应用到指定的位置,然后再添加注册表即可完成安装。


在复制注册表时不要用 RegCopyTree 函数,因为它会复制源的安全属性,导致 SOFTWARE 或 SYSTEM 的安全属性改变。这会导致一系列问题,如专业版没有转换版本就变成企业版、WinX 菜单打不开、任务栏托盘没有 Defender 等问题。


系统启动后自动运行 EdgeUpdate 服务,此服务会配置产品完成安装。
有人可能会问:可不可以安装新版本的 Edge 呢?很遗憾,不能。我用新版的 Edge 文件,修改注册表内的产品版本号制作的 Edge.wim 安装后 EdgeUpdate 并不能正确完成配置。
BCD 编辑与建立引导

BCD

BCD 其实是注册表文件。里面的信息记录了引导配置数据。
要探究各个配置分别是什么,只需要修改 BCD 配置,然后对比差异即可。UUP 助手内部实现了一系列基本的 BCD 编辑接口。

引导文件

保存在 %WINDIR%\Boot 下,建立引导文件只需要复制相应的文件同时复制 Fonts 和 Resource 即可。
BootEx

在 24H2 的系统上,BCDBoot.exe 新增 /bootex 选项。这是因为微软发布了新的启动管理器签名以缓解漏洞。恶意软件可利用 CVE-2023-24932 漏洞绕过安全启动。缓解漏洞的“Windows UEFI CA 2023”签名的启动管理器就是 Boot 文件夹下以 _EX 结尾的目录。默认使用旧的启动管理器,因为设备可能不信任新的签名。但新版 BCDBoot.exe 和 UUP 助手支持使用新的启动管理器建立引导。但只安装启动管理器,不会更新 DB 或启用 PCA2011 吊销,因此安全启动时可能会遇到问题。
建立引导文件

把启动管理器文件复制到指定位置,然后创建 BCD 文件即可。软件会从 %WINDIR%\System32\config\BCD-Template 复制模板。当不存在 BCD 文件时,根据模板初始化 BCD,然后添加启动项。因为 BCD 的注册表安全属性限制,在配置前需要为当前用户修改安全属性的控制权。在配置结束后,应用从 BCD-Template 复制的安全属性。
生成安装程序

核心安装映像

安装程序最核心的文件就是 install.wim/install.esd/install[index].swm。导出映像后挂载,添加更新等之后再导出即可。如果要用来升级,\Windows\System32\Recovery\Winre.wim 必须存在,这要用来制作 SafeOS。
启动映像

从安装介质启动 PE 的映像是 boot.wim。此文件有两个映像,一个是不带安装程序的 PE,一个是带安装程序的 PE。这两个映像需要把 WIM 映像的版本(EDITIONID)分别设置为 9 和 2。PE 映像的系统 RAM Disk 根目录如果存在 Setup.exe,系统就会自动运行。PE 映像是从 RE 制作而来。PE 和 RE 有什么区别?其实我也不知道,但就是有区别。我从微软官方的 ISO 中提取了 PE 和 RE 映像,再用注册表差异比较工具对比发现这注册表的差别蛮大的。
如果使用 Modern Setup(就是直接启动 \setup.exe 的安装程序)不需要 boot.wim,因为只需要 RE 映像制作 SafeOS 就行了。但如果启动 \sources\setup.exe 传统安装程序,则必须要 boot.wim。
ISO

这里我直接使用 Windows ADK 当中的 OSCDImg.exe 生成,通过管道读取输出,分析输出字符串获取进度。因为微软官方的映像就是使用这个工具生成的,我也懒得研究 ISO 文件结构了。
UUP

简介

终于到 UUP 了。UUP 是 Windows 的统一更新平台。通过将各种功能文件独立成多个包进行分发,支持增量更新。这些功能的包有 ESD 和 CAB。这些包类似 SWM 那样需要引用才能正常释放主 UUP 映像的系统文件。但是 Wimgapi 不支持添加 CAB 文件引用,因此 UUP 助手需要将 CAB 文件展开,然后重新封装为 ESD 文件,才能引用。
官方的更新机制

Windows 更新会下载 UUP 的系统包、更新包和 WindowsUpdateBox.exe。WindowsUpdateBox.exe 会展开安装程序,运行 SetupHost.exe 完成安装。Windows 更新通过相关向量(Correlation Vector)跟踪进度。我不知道是如何处理 UUP 的 CAB 引用包的,Wimgapi 并不支持引用 CAB。或许也是和我一样先制作 ESD 引用映像?我也不清楚。
Rollup 更新

从 Windows 11 开始,引入了 PSFX 更新。有一个 CAB 文件和一个 PSF 文件。安装需要先展开 CAB 文件,CAB 文件当中有个 express.psf.cix.xml。里面包含了在 PSF 中的文件的偏移量、长度、压缩类型和哈希。

UUP 助手会解析 XML 文件获取文件列表,然后展开。使用 MSDelta 应用增量。

从 Windows 11 24H2 开始,CAB+PSF 的 Rollup 更新换成了 MSU 更新。MSU 是也是包含 CAB+PSF 的更新。在 24H2 以前,从 Microsoft Update Catalog 获取的 MSU 更新可以提取 CAB+PSF 文件并由 UUP 助手安装。但从 24H2 开始,MSU 内提取的 CAB+PSF 更新无法被 UUP 助手安装,ApplyDeltaB 会出错。因此只能直接安装 MSU 更新。
Unattend.xml 中不显示明文密码

在 Unattend.xml 创建账户或指定自动登陆的密码在官方的文档没有说怎么得到密文,但看起来像是 Base64 的编码,测试一下就可以发现规则。在 Unattend.xml 中,创建用户账户和指定自动登陆的密文密码是原宽字符串密码+宽字符串 Password,然后取这个数据的 Base64 编码。如果是指定内置管理员的密码,密文是宽字符串密码+宽字符串 AdministratorPassword 的 Base64。我原本以为可能用什么非对称加密之类的保证安全,GPT-4.1 还跟我说是针对不同的机器有不同的加密算法。这种加盐后 Base64 编码,并不是什么特别安全的加密方式。也就是不会让人一眼就看出来密码,但要得到明文也很简单。防君子不防小人。
两个 UUP 助手进程

如果你在运行时打开过任务管理器,你可能会发现 UUP 助手有两个 UUPAssistant.exe 进程。因为使用 DISM API 安装 Rollup 更新后,即使关闭会话并关闭 Dism,Dism 日志文件任然在打开状态,这可能是 DISM API 的一个 bug。这导致无法删除临时目录。由于我是已经完成安装的功能了才发现这个问题,我不想再改安装过程了,就搞了这个操作。不然的话我觉得在执行 Dism 操作时启动一个后端进程执行操作,同时向前端进程报告进度这样更好(UUP 获取工具的下载就是这样的)。进程启动后再次启动自己,后台进程等待前台进程退出后做清理工作如卸载映像、删除临时文件等。
协同安装

在内部版本高于 20000 的 Windows 10/11,安装程序的 sources 中存在 wimgapi.dll。安装程序就是调用此 DLL 实现的映像操作。这里我设计了 FakeWimgapi,在几个核心函数自己实现,从而接管部分安装流程,其它函数直接转发到 realwimgapi.dll。

UUP 助手先在系统卷创建临时文件夹,应用安装程序到此,然后使用 Wimgapi 快速导出 install.esd 映像。
由于 Windows 安装程序退出时可能不会清理干净,重复运行安装程序必须先清理,否则可能无法启动。SetupPrep.exe 可以清理、部署安装程序并运行。直接运行 \setup.exe 其实也是运行了 \sources\SetupPrep.exe。由于 SetupPrep.exe 会自动运行 SetupHost.exe,我们不需要。于是我设计了 FakeSetupHost。

打开后,会获取父进程信息并打开进程,终止进程且退出代码为 0x1234 表示正常。
准备好 install.esd 后,打开 SetupHost.exe,保存数据并使用 FakeSetupHost 替换。然后运行 SetupPrep.exe,等待退出。如果退出码为 0x1234,表明正常。重新写回 SetupHost.exe 的数据,然后部署安装程序(其中要把 wimgapi.dll 重命名为 realwimgapi.dll,将 FakeWimgapi 的文件数据写入到 wimgapi.dll)并创建进程作为父进程(后台进程)的子进程(因为 UUP 助手取消 Dism 操作都是靠直接杀死所有子进程实现的,为防止误杀。不这么做取消太慢了,就像 Dism.exe 安装更新时按 Ctrl+C 那样)。

在提取 Winre.wim 时,除了提取文件,同时完成安装系统和添加更新、应用等。将系统安装到 %SystemDrive%$WINDOWS.~BT\Sources\StoragedOS。使用 wimlib 应用映像。为什么不用 Wimgapi?因为这种特殊的 ESD 带资源引用,Wimgapi 处理起来特别慢,应用映像可能要一个小时以上的时间。所以 UUP 助手安装系统和升级的映像安装操作都是用 wimlib 完成的。
当安装程序应用映像时,直接返回失败。为什么这么做呢。是因为 Windows 安装程序我目前发现有三种流程。
第一是最常见的,提取 Winre.wim 后应用映像到 %SystemDrive%$WINDOWS.~BT\NewOS,然后配置迁移,重启到 SafeOS 继续配置或者直接重启到 NewOS。
第二种稍微少见,提取 Winre.wim 后不应用映像,扫描配置准备迁移,重启到 SafeOS 应用映像并完成迁移。
第三种我见过两次,非常让人感到迷惑。先跟第一种一样应用映像后准备迁移。然后就开始迷惑的操作:在重启前又删掉 NewOS。重启到 SafeOS 后和第二种一样应用映像和迁移。
正因为有第三种这么迷惑的流程,UUP 助手不知道安装程序到底是走哪个流程,所以我选择先安装到 StoragedOS。
经测试发现,Windows 安装程序在应用映像时失败并不会导致整个安装过程失败,失败几次后安装程序选择在 SafeOS 应用映像。因此在应用映像时会检测当前是否是正常系统,如果是则返回失败,不是则用 StoragedOS 替换 NewOS。通过这种方式强制安装程序走第二种流程。
完成 StoragedOS 安装后,用空 ESD 文件替换 install.esd 节省空间。对了,你可能要问为什么一开始不直接用空的 install.esd,如果安装程序提取 install.esd 的映像信息直接从 UUP 获取信息给,这不一直都节省空间还更快吗?我试过了,在某些安装程序上可用,但有些安装程序在提取许可证验证时会失败,提取文件是成功的,不知道为什么。
为了用户能随时取消安装和 UUP 助手操作失败能主动取消安装。需要对安装程序的窗口挂钩。HookProc 就在 FakeWimgapi 中,安装开始时向安装窗口的线程注入钩子。由于安装界面只有一个按钮所以接收到按钮被单击的命令消息时按钮的父窗口的所有者窗口是安装程序的窗口且按钮 ID 为 IDYES 表明安装被取消。当接收到来自 UUP 助手的指定的消息时,枚举安装程序的子窗口找到按钮,并发送按钮单击的命令。当接收到 WM_INITDIALOG 消息且所有者窗口为安装程序的窗口时,直接发送 IDYES 的按钮命令,即可直接取消安装过程。

跳过要求检查

UUP 助手的安装功能由于是直接应用映像没有使用安装程序,所以天生没有要求检查。
而升级需要 Windows 安装程序,在不满足要求的硬件上运行会拒绝继续。开源媒介工具 Rufus 有个移除安装要求检查的功能,我们来看看源代码。


工具会把 appraiserres.dll 备份后创建一个空文件。如果是 24H2 及以上的,把 setup.exe 重命名为 setup.dll,然后释放自己的 setup.exe。
这个 setup.exe 会先清理注册表,然后添加绕过检查的注册表,最后运行 setup.dll 并退出。

微软删除了绕过检查的文档,在未来可能会彻底删除绕过检查的功能。目前 UUP 助手升级系统时是通过清空 appraiserres.dll 和应用注册表绕过的,在未来可能不可用。到那时,我考虑通过 inline hook+trampoline 劫持相关的接口来实现欺骗安装程序,让安装程序以为是在符合要求的电脑。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2025-11-6 18:25:23 | 显示全部楼层
升级系统的新方式?
回复

使用道具 举报

发表于 2025-11-6 18:25:32 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 2025-11-6 18:25:51 | 显示全部楼层
好东西,自己动手丰衣足食
回复

使用道具 举报

发表于 2025-11-6 18:26:06 | 显示全部楼层
很好啊。正需要
回复

使用道具 举报

发表于 2025-11-6 18:26:39 | 显示全部楼层
去年早期就写得差不多了
回复

使用道具 举报

发表于 2025-11-6 18:27:26 | 显示全部楼层
没看懂哪来干嘛的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

发表于 2025-11-6 18:27:47 | 显示全部楼层
支持比较老旧的电脑去硬件校验安装升级吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表