Windows 11 22H2 08 累积更新(KB5029263)破坏了 ExplorerPatcher 进而导致系统不可用。

2023-08-10 10:19:38 +08:00
 nothingistrue

昨晚自动更新 KB5029263 ,今天起来 ExplorerPatcher 和 explorer.exe 均陷入无限重启状态。必须不停右键任务栏,才能触发 ExplorerPatcher 的自动退出机制。随后尝试了卸载 KB5029263 和昨晚更新中所有能卸载的,不起作用。无奈只能先卸载了 ExplorerPatcher 。

详细情况可另见: https://github.com/valinet/ExplorerPatcher/issues/1802

KB5029263 只是一个累积补丁更新,不是年度版本,这原本是不应该动基础 API 。现在这样搞,以为这每个补丁星期二,都有可能产生严重的兼容性问题,这谁还敢自动更新。

不论你以前是否支持自动更新,从现在开始应该禁止 Win 11 的自动更新。如果有机会的话,还是别用 Win11 这个垃圾或。

6105 次点击
所在节点    Windows
70 条回复
zictos
2023-08-10 17:18:46 +08:00
@flyqie #8
@OwenY #39
win10 不会哪天自动升级到 win11 吧,有点担心,不知道要不要禁用升级。网上都说不会,刚才自动更新里面提示了可以升级到 win11 ,我选择了“暂时继续使用 win10”
nothingistrue
2023-08-10 17:19:38 +08:00
@NessajCN #34 Win11 年度版本(打开你的系统信息,里面有版本号,当前是 22H2 ),是手动触发而非自动更新的,再次提醒你一下啥是大版本更新。

软件开发是有过程的,不是你一句「我要改 BUG 」就能随时随心搞升级的。如果你对这个「过程」不了解,那再对话下去就没啥意义了。
deplivesb
2023-08-10 17:24:07 +08:00
系统官方更新,破坏了第三方的 hook ,好家伙,不知道的还以为 Windows 是谁的产品了。
NessajCN
2023-08-10 17:24:57 +08:00
@nothingistrue 我已经说第三遍了,你只要回答我一个简单的问题,微软发布的「补丁」到底能不能改它自己的系统程序。能 或 不能,二元选择。
ambition117
2023-08-10 17:28:15 +08:00
凭什么不能动 undocumented API
clorischan
2023-08-10 17:32:13 +08:00
nothingistrue
2023-08-10 17:32:29 +08:00
@zictos #41 win10 到 win11 已经不是跨版本,而是跨商品了,显然是不能自动安装的。但是可以通过自动下载、不断提醒、引导你误操作等各种措施,来变相强制你「手动」升级。我们通常所说的 IOS 、Android 的强制更新,指的其实是后者。

但现在讨论的不是这个版本升级,而是版本内部的补丁更新,与之类比的是 Android 的安全更新补丁( IOS 那边我没注意过有没有这样的补丁)。对于今天微软这种行为,类比到 Android 上,相当于 Google 在月度安全补丁里面,做了「最低安装目标级别提高到 23 」这种变更。
ShadowPower
2023-08-10 17:44:16 +08:00
微软不会保证 [未公开 API] 稳定,市面上任何软件都是这样。
公开 API (即:记录在开发文档中的)都保证内核大版本不变时,它的行为不变。

你说的问题不是 Windows 的问题,而是 ExplorerPatcher 的问题。


考虑下面的情况:

你在程序内部写了一个结构体,只在内部逻辑中使用,不暴露任何 API 。整个结构体的大小是 12 。
有一次更新给结构体增加了新的属性,现在结构体大小变成 16 了。
这个结构体装在一个数组里,用来存储一些配置信息。

有人给你的程序写了个外挂,用来修改你未公开的配置项。这个配置项放在数组第三项第一个属性中,长度为 4 字节。
代码逻辑是:先读取你的进程一处固定内存地址(是个指针),读取里面存储的地址,并在这个地址上加上 12*2 ,然后修改这个位置之后 4 字节的数据。
但因为你更新了程序,真正要改的数据其实在 16*2 的位置。

然后你的程序崩溃了。因为改变了一个本来不应该改的数据。

有人说你写的程序太烂了,理由是“这原本是不应该动基础 API”。但你只是给你的结构体多加了一个属性罢了,而且这个结构体完全没暴露给用户。

你觉得,他说的合理吗?
zictos
2023-08-10 17:58:59 +08:00
@nothingistrue #47 我上回的一加强制升级就不是误操作,真的是强制升级,而且我应该关闭了 wifi 状态下自动下载和开发者选项里的系统更新的。而且这个是直接从安卓 11 升级到安卓 13 。
https://tanronggui.xyz/t/958901
hez2010
2023-08-10 18:15:36 +08:00
@nothingistrue 然而根本就不是「最低安装目标级别提高到 23 」这种变更。

你要知道各种 explorer patcher 插件的原理:注入他们自己的 dll 到 explorer.exe 进程中,替换掉某个内存地址上的函数指针指向他们插件自己的函数来实现自动自定义逻辑,然后这个内存地址还是通过各种逆向工具 dump 出来的。

explorer 自己往自己某个私有类型里加了个私有函数自己用,结果因为这样使得你的插件应该 hack 的地址偏移变了导致崩溃,这总不能是 explorer 的问题吧?
hez2010
2023-08-10 18:28:09 +08:00
@hez2010 况且,explorer 从来都没有 API 让你修改成旧风格的开始菜单,不管是公开的还是私有的 API 都没有,要做这件事只能劫持 explorer 的内存地址。

做个简单的不准确的解释的话就是,假设你点击开始菜单的时候 explorer.exe 会执行一个内部的 `OpenStartMenu` 函数打开开始菜单,现在 Explorer Patcher 想要把开始菜单换成他们自己做的旧风格的开始菜单,那怎么做呢?

于是 Explorer Patcher 的开发者通过逆向工具找到这个内部的 `OpenStartMenu` 函数的地址,比如说是这个地址是 `A`,然后他们写一个 dll 在 explorer 启动的时候注入到 explorer 进程里,这个 dll 被 explorer 成功加载之后就会给地址 `A` 插入一条跳转指令使得只要代码执行到 `A` 这里就会跳转到他们自己做的打开开始菜单的函数地址上。这样当你点击开始菜单的时候,explorer 想要执行 `OpenStartMenu` 函数但是被 patcher 的 dll 篡改掉了,于是执行了 patcher 自己的函数,实现了打开旧风格的开始菜单。

那现在 explorer 因为一些原因,比如修复安全漏洞等等,加了一些代码恰好使得重新编译之后 `OpenStartMenu` 函数的地址变了,这可并没有修改任何的 API ,结果 patcher 仍然是按照以前的 `A` 地址进行篡改,这样必然会导致别的什么东西被改掉了,于是使得正常的 explorer 崩溃了。

这难道是 explorer 自己的问题?
NoOneNoBody
2023-08-10 18:29:40 +08:00
win7 时代用过魔改的美化工具,然后某次更新系统蓝屏崩了,之后至今都没敢随意装这些魔改工具
GrayXu
2023-08-10 18:49:32 +08:00
@EVANGELIONAir #18 +1 ,魔改了当然得承担不稳定的后顾
yyysuo
2023-08-10 19:05:08 +08:00
@nothingistrue 你自己编造了一些微软公司开发中不存在的概念、标准、要求,然后拿这些东西来吐槽,这明显是不对的,你还是好好理解一下 46 楼的图吧。
fox0001
2023-08-10 21:38:31 +08:00
因为 ExplorerPatcher 不能用了,只能接受 Win11 的任务栏,并使用 CLaunch 实现自定义菜单
ikas
2023-08-10 21:55:09 +08:00
只怪微软不是苹果
kekeyu
2023-08-10 23:31:33 +08:00
妈蛋,原来是系统更新的锅,我还以为是公司的监控软件问题,直接把系统重装了。微软真实害人不浅啊
hanqian
2023-08-10 23:38:01 +08:00
看了一下幸亏 StartAllBack 还能用。。
其实我压根就不想用这些魔改工具,但有一天遇到原生开始菜单弹出延迟的问题,没办法只能用了
AvilCore
2023-08-10 23:43:03 +08:00
微软至今为止仍然不让把 win11 任务栏拖到左右侧是真的狗逼,谁没事儿喜欢牺牲稳定性 dll 注入 explorer 呢
EdwardSherlock
2023-08-11 00:16:16 +08:00
@Carlgao win11 dev 想回到正式版 除了重装系统外 只能等到正式版号高于 dev 版了 我看再过段时间 估计 win12 要出了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/963991

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX