无忧启动论坛

标题: 简单聊聊我如何从Windows11平滑降级回Windows10 [打印本页]

作者: Windows_Air    时间: 2021-9-22 19:48
标题: 简单聊聊我如何从Windows11平滑降级回Windows10
本帖最后由 Windows_Air 于 2021-11-2 20:48 编辑

摘要

本文提出了一种方法,该方法借助Windows Setup的升级功能,允许Windows10以上版本用户在保留个人设置与资料的情况下,实现不同版本系统的平滑迁移而无需全新安装。该方法已在22458(Windows11)和20190(Windows10)下进行了测试,均已成功迁移回19044(21H2)。



前言

距离Windows10最早的预览版发布已经过去六七年了,而Windows11的第一个正式版本将于下个月发布,眼下我还停留在20190(Windows10)。这是一个令人尴尬的版本,内存泄漏、声卡爆破,每个月总要来这么几次的绿屏……老实说,如果不是因为解决了WSL2不能启动的问题,说啥我也不会来到这个版本。

我相信不少preview用户和我有着一样的遭遇:“升级了之后就回不去了”、“没有回滚就只能全新安装”。我停在20190版本可能已经快一年了(这个版本早在今年1月就已经过期),为的就是等到Release版本跑到20190前面,抓紧最后的升级机会。不过现在看来,微软已经打算全面推进Windows11,20000+版本号之后都会属于Windows11。

这里我就不得不提一嘴Win11,为了照顾Win10用户的使用习惯,微软甚至贴心地提供了10天的回滚机会,我的心里只有感恩了已经

好了,闲话不多说,我们直接进入实操环节。在接下来的章节中,我将介绍Windows的升级检测机制,简要阐述其检测原理以及绕过方法;此外,我还将给出在进行版本迁移后遇到的一些常见问题的解决方法。

从Setup入手,看看一般的升级步骤

在较新版本的Windows安装程序中,你能看到有选择要保留的内容这一步,对于安装较新版本的Windows来说,你可以选择保留个人文件和应用一项,这样升级之后个人资料和相关的环境就不会遭到破坏。



然而,当你想要安装较旧版本的系统时,这项就不起作用了,这也意味着只能全新安装。实际上,要想“保留个人文件和应用”,需要通过兼容性测试,其中的几个测试点有:


具体的兼容性检查项目不是我们讨论的重点。这些信息可以在C:\$WINDOWS.~BT\Sources\Panther\CompatData*.xml中查找到。

庆幸的是,我们只需要关注目标系统的版本是否符合要求,而微软暂时没有作过多的判断,我们可以相对容易地绕开这一点。

实操:绕过安装过程中的版本检测

实际上,微软目前的采取的版本检测方法也相当粗暴:直接检测两个版本号字符串,看目标系统的版本号是否大于当前系统的版本号。

方法一

这里需要用到反汇编工具,我用的是IDA,你也可以用别的。

加载镜像中的source\setupcompact.dll文件,查找到ConX::Setup::Common::CWindowsVersion::IsLaterThan方法(直接简单搜索IsLaterThan也行):



这个函数就是判断版本号字符串的了,可以看到整个函数相对比较简单,在该函数的末尾有两个label,分别是返回0和返回1,这里直接全部返回0,把mov eax, 1改成mov eax, 0就行。

保存对DLL的修改,替换原本的source\setupcompact.dll文件即可。

微软将setupcompact.dll的符号文件放在公共符号文件服务器上了,大大节省了我们解析相关代码的时间。

方法二

法一看着可能有些麻烦,如果不使用反汇编工具行不行?你也可以用WinHex等十六进制编辑工具直接进行修改,但是我不推荐采用这个方法。(我使用的是19044 x64版本的镜像)

打开编辑工具,直接搜索十六进制数据B801000000C3。你可能会找到多个结果,在这些结果中,观察B801000000C3出现的位置,如果在它之前的不远处出现33C0C3的一串数据,那么就是我们想要的那个结果。 将B801000000C3中的01替换为00,保存后替换原始的setupcompact.dll即可。




现在,执行setup.exe,你就可以从高版本“升级”到低版本了:





“升级”之后:常见问题解决

在升级之后,你有极大的概率遇到如下的问题:


这里我提供一种解决方法:


在你可能遇到一些比较无关紧要错误,例如:


上述过程本质上是在重建AppPackage的数据库。一般情况下,我们比较关心商店应用的数据。在删除StateRepository*文件之前,可以先执行Get-AppPackage获取已经安装的包。在输出中,SignatureKind属性为Store的就是用户安装的商店应用,而InstallLocation属性即为其安装路径。删除StateRepository*并不会对安装路径下原有文件造成影响。

如果你需要显式地恢复应用,或者不确定应用是否正确恢复了,你可以不用上面的通配符形式,而是使用精确的文件路径。

下面我以Windows Terminal应用为例,介绍如何精确地恢复某个应用:



总结

我原本想写写自己是如何发现这个方法的,奈何探寻的过程枯燥而乏味,大多数读者对此不感兴趣,加之自身水平有限,没法进一步展开来讲,因此文中只取IsLaterThan加以讨论,感兴趣的读者可以自行深入了解。

当然,上述的方法同样存在一些问题。我没有做很详尽的测试,但目前来看我的开发环境基本运行正常,这里我简要列举一些测试过的模块:

正常的功能模块


存在问题的功能模块


补充


在重启后失败:


失败后进入系统的提示:



2. 尝试通过修改注册表中的系统版本号,以此来欺骗安装程序的方法并不奏效。原因在于,安装程序获取版本号是通过ntdll.dll中的RtlGetVersion方法,该方法会直接在内核中进行版本号的读取,而注册表项的填充也依赖于内核。 或许可以尝试修改ntdll.dll等内核文件的相关内容来达到相同的目的,但是这种方法可能会遇到数字签名验证等问题。

如果有别的方法欢迎朋友们在楼下补充



勘误: 之前写的法二,直接通过修改hex的方式存在一些问题,不能精确地区分出我们想要的那个函数。这里附上正确的操作:
直接搜索B801000000C333C0C3 十六进制值,先去找到这一块中最近的填充边界(通过int3指令填充,直接找一连串的CC就行),在前面的边界起始的不远处,看看能否找到一串FF FF 00 00 的指令,如果能找到就是我们想要的那一块。这时候将B801 中的01改为00 即可。







作者: fulibo    时间: 2021-9-22 20:15
为什么不重新装个系统?
十多分钟就解决了!

作者: 2013ertert    时间: 2021-9-22 20:22
楼主的简单 原来是技术贴,可作l论文了。大神都很谦虚! 感谢分享知识。
作者: 2623666    时间: 2021-9-22 20:23
11又是折腾的产品
作者: 2012andyle113    时间: 2021-9-22 20:46
算是一种另外的思路吧
就像以前纠结于系统修复一样,但是往往吃力不讨好
后来安装系统方便快捷了,基本就直接重装了,
或者折腾之前就搞备份了,根本不需要这么复杂的方法
作者: 新空气    时间: 2021-9-22 21:41
单位电脑系统软件全是正版,重装太麻烦只能多做备份,想要大跃进升级系统也得留好退路
作者: Windows_Air    时间: 2021-9-22 22:25
fulibo 发表于 2021-9-22 20:15
为什么不重新装个系统?
十多分钟就解决了!

环境太多啦,懒得重新装
作者: tools241    时间: 2021-9-22 23:25
本帖最后由 tools241 于 2021-9-23 00:00 编辑

适用于Linux的Windows子系统(Windows Subsystem for Linux,简称WSL)
是一个为在Windows 10和Windows Server 2019上能够原生执行Linux二进位可执
行档(ELF格式)的相容层。

2020年9月,WSL 2开始向Windows 10 Version 1903/1909和
Windows 10 May 2020(20H1/Version 2004)的使用者推播。

>=18362.1049 19H1 1903 ( 终止支援日期 2020/12/08 )
  18363      19H2 1909 ( 终止支援日期 2021/05/11 ; 企业版,教育版:2022/05/10 )
  19041      20H1 2004 ( 终止支援日期 2021/12/14 )

Windows 10,11 "预览版" 都有使用期限,
若使用预览版每隔一段时间(出现黑屏)便须重新安装.
不妨考虑改用 "正式版" WIN10.VHD 18363 企业版




作者: lily9718    时间: 2021-9-23 05:42
谢谢
作者: zhxhwyzh14    时间: 2021-9-23 07:20
fulibo 发表于 2021-9-22 20:15
为什么不重新装个系统?
十多分钟就解决了!

重装系统简单,后续的装软件改设置是真的麻烦
作者: wpyjp    时间: 2021-9-23 07:55
为什么不重新装个系统?后续的装软件改设置是真的麻烦

作者: wsdyleon    时间: 2021-9-23 08:35
支持技术讨论,不过重装感觉更实用。什么升级降级都没有用
作者: wahopi    时间: 2021-9-23 09:05
fulibo 发表于 2021-9-22 20:15
为什么不重新装个系统?
十多分钟就解决了!

老铁 是专门搞科研的

作者: 进士小站    时间: 2021-9-23 10:27
11 稳定之后
回滚 10 应该可以了
作者: 2011miyahanni    时间: 2021-9-23 14:33
云桌面有软件分发功能,windows现在自己只实现了系统网络分发,所以软件的备份和还原从来都是个大问题,我选择自己备份个GHO
作者: syj163    时间: 2021-9-23 14:55
感谢楼主分享经验,尽管还在坚守win7
作者: 铿锵玫瑰    时间: 2021-9-23 18:04
费事,费力,结果并不完美,还不是一般人能做的,建议直接重装。
作者: aiya01    时间: 2021-9-24 15:10
感谢分享
作者: sxs1116    时间: 2021-9-28 01:58

感谢楼主分享经验
作者: foolst    时间: 2021-9-28 07:46
费事,费力,结果并不完美,但就是進步的動力
作者: cdl_1    时间: 2021-9-28 18:29
大神!!!!!
作者: jsjs110    时间: 2021-11-14 11:27
感谢楼主,按照楼主的教程成功了,只出现了微软商店错误,按楼主的指导也搞定了
作者: a123456789z    时间: 2021-11-14 12:30
情况允许的还是进行备份吧,遇到升级后软件不能用的会很折腾。
作者: 黑中见白    时间: 2021-11-14 13:19
del  /f /s /q %~dp0Windows\SysWOW64\SPPEXTCOMOBJ.EXE
del  /f /s /q %~dp0Windows\System32\SppExtComObj.Exe
作者: dengchao_a    时间: 2021-11-15 08:20
大神贴,我的电脑也是环境复杂需要配置的多,换做是我就安装前备份不合适直接恢复过来
作者: crazyzt    时间: 2024-5-8 18:32
点赞, 楼主的帖子帮到了我
作者: neil4181    时间: 2024-5-19 11:07
好帮手,再也不愁了,谢楼主分享,非常不错 !!
作者: wang1973    时间: 2024-5-19 12:59
感谢楼主分享经验。。
作者: gander6    时间: 2024-5-19 13:25
本帖最后由 gander6 于 2024-5-19 13:27 编辑

重装,更方便,不须舍简求繁。或者,弄两个备份,恢复更是分分钟的事儿。
作者: youlin211    时间: 2024-5-19 14:33
gander6 发表于 2024-5-19 13:25
重装,更方便,不须舍简求繁。或者,弄两个备份,恢复更是分分钟的事儿。

要试试,保存原来资料和环境是非常有必要的
作者: maisifu    时间: 2024-5-19 15:06
强大,不过我已回不去win10了
作者: youlin211    时间: 2024-5-19 15:56
本帖最后由 youlin211 于 2024-5-19 19:38 编辑

不会这个IDA,怎么1改成0. 有时间继续研究.
楼主讲的好简单,咱不会IDA,哎

[color=rgba(0, 0, 0, 0.85)]IDA如何反编译修改DLL文件

[color=rgba(0, 0, 0, 0.85)]1.使用IDA Pro反编译DLL文件

[color=rgba(0, 0, 0, 0.85)]首先,打开IDA Pro工具,并导入要反编译的DLL文件。IDA Pro会自动识别文件的格式和处理器架构,并将其转换为反汇编代码。

[color=rgba(0, 0, 0, 0.85)]2.进行反编译

[color=rgba(0, 0, 0, 0.85)]在IDA Pro中,可以通过反编译功能将DLL文件转换为C语言代码或其他高级语言代码。在IDA Pro的菜单栏中选择File->Produce File->Create C file,然后选择输出文件的名称和保存位置,即可生成反编译后的代码。

[color=rgba(0, 0, 0, 0.85)]3.修改DLL文件

[color=rgba(0, 0, 0, 0.85)]生成的C语言代码是反编译的结果,它并不完全等同于原始的源代码。因此,在修改C语言代码后,需要通过编译器将其重新编译成DLL文件。在Windows平台中,可以使用Visual Studio等集成开发环境来进行编译。


无标题.png (90.65 KB, 下载次数: 3)

无标题.png

作者: 旭东    时间: 2024-8-21 23:15
重装可能更省事儿
作者: j4tan    时间: 2024-8-21 23:28
有这时间折腾,够重装几次了吧,哈哈




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3