Skip to content

为什么6202年了, updater & uninstaller 反而越来令人恐惧?

📅 发布于: 2026-04-12🔄 更新于: 2026-04-13📝 字数: 3286 字⌛ 预计: 17 分钟

我只是想尝鲜一下portmaster,怎么我系统变量的Path就什么都没啦?

前几天我看到微信有篇文章,提到了portmaster,说是能以监控系统中每个应用的链接,还能自动拦截不安全的应用请求出站,我还挺感兴趣,因为能从应用的角度来跟踪应用的tcp/udp请求,我就可以很轻松发现和干掉某些干坏事的应用了,正好这个软件也是开源的,于是我就抱着尝鲜的想法,下载来玩玩看了,版本是2.1.7

1775994358969

这里没有这款软件实际截图了,因为我不想再跑一遍它的uninstall.exe了,原因下面会说

我装完打开一看,喔跳出来一个右下角通知,然后应用主窗口里就弹一个框,让我配置一些东西,大概的意思是初始化一些配置可以让电脑变得更加"安全和隐私",然后我看了两页,里边都是一些复选框,一页是AD限制(也就是广告)相关的,还有一页是DNS相关的(应该就是电脑dns改1.1.1.1之类的操作吧),我想了想,我不需要在电脑上做这些,我本事就有openwrt路由器,我真要想做我在路由器上做更合适,而且本来我电脑上的国产软件就比较少,没什么广告,有广告的都被我干掉了,我就没什么兴致,于是乎点了"取消"按钮

确实如它宣传的那样,有拦截本机应用发出网络连接和监控应用发出的链接的能力,至于其他的,我也没细看,总体而言之前的一些想改我系统配置的东西已经让我不太满意了,我只是想要一个纯粹的监控网络的软件而已,有这么多别的功能我实在是不喜欢,所以我很自然地关闭应用,然后找到对应的点击uninstall.exe运行,并勾选了"删除所有用户数据",就直接卸载它了

过了半小时不到,我正好要想研究一下tssh,然后就开始不对了,怎么我的ssh命令没了?吓得我直接一个everything进行一个ssh.exe的搜索,ssh.exe还在,那还能是什么出了问题呢?

于是我打开环境变量一看,给我气笑了,我系统变量Path里的内容全空了,真是有趣,我一边问Gemini看看我怎么把Path恢复回来,一边再想到底是谁把我Path干掉了,我想了想,虽然两小时前停过电,但是停电导致的突然关机可不会把本来该在磁盘的某些东西清空啊,最多最多也可就写入异常数据导致读取失败而已,那Gemini一提醒我,想了想应该是portmasteruninstall.exe导致的,portmaster有一些特征能证明他能干这件事

portmaster的readme里声明了如下功能:

  • Monitor All Network Activity
  • Full Control: Block Anything
  • Automatically Block Trackers & Malware
  • Set Global & Per‑App Settings
  • Secure DNS (Doh/DoT)
  • Record and Search Network Activity ($)
  • Per-App Bandwidth Usage ($)
  • SPN, our Next-Gen Privacy Network ($$)

翻译一下就是

  • 监控所有网络活动 — 全面掌握设备网络连接状况
  • 完全控制:拦截任何内容 — 精准阻断指定连接
  • 自动拦截追踪器与恶意软件 — 智能防护,无需手动配置
  • 设置全局及按应用配置 — 灵活管控不同应用的网络权限
  • 安全 DNS(DoH/DoT) — 加密 DNS 查询,防止劫持窥探
  • 记录并搜索网络活动($)— 详细日志,支持历史检索
  • 按应用统计带宽使用($)— 清晰了解各应用流量消耗
  • SPN,我们的下一代隐私网络($$)— 多层加密匿名网络

上面的功能说明已经表明 portmaster是会获取非常高的权限的了,没有高权限怎么能使用WFP或者ebpf来进行网络连接阻断呢? 对吧

虽然我没有非常具体的证据了证明path消失是它干的(我实在是没空开虚拟机去测这个神秘的uninstaller了),但是,我认定的指控应该是没有错的,因为如下的理由:

  • 我的windows关闭了UAC (我知道这不安全,但是UAC这个东西理论上应该要么开最高等级,要么直接不开,既然我细粒度低,且每次运行程序它都烦我,那我不如不开,就算我开了UAC这次的Path被删除也无法幸免,因为我肯定会允许Uninstaller的UAC质询的),所以他干了啥我确实啥都不知道,一点通知都没有,他就啥都能干了
  • 在我电脑断电之前,到我Path消失这段时间内,我只捣鼓过portmastertssh,确认不是tssh导致的,那就只能是portmaster
  • 我勾选了"删除所有用户数据"(即使我不知道为什么"删除用户数据"这个功能需要去捣鼓Path)
  • portmaster的Issue页里,能找到很多人反馈的安装或者卸载portmaster后,windows系统发生一些严重的问题

1775998578122

基于上述的推断,我认定是portmasteruninstall.exe导致的这个问题

幸好我发现了Path的问题,并能有意识去问ai,尽可能的恢复Path本身,我也知道我的各个语言的环境变量路径在哪,用户级的Path还没有被删除,能让我尽可能的恢复环境变量,我不敢想,如果是别的电脑小白的windows发生这种情况,是不是让windows背这个黑锅,骂一通windows,然后灰溜溜的去重装系统呢?

这个问题我没去源码仓库那提交issue,可能有人会说我"你说了这么多,为什么不去提交issue积极解决呢,扯这么一大堆"

虽然我写完这篇文章的时间,大概率够我做实验了,但是我还是不想做,第一个,我确实不怎么想碰这个软件了,看了那些相关的Issue之后,我甚至还担心我的windows是不是还有什么也被破坏了,我实在是不想碰这么"危险"的东西了;第二个,即使我提交了issue,后面肯定还得和开发者跟进,也就是扯皮,到时候什么"我怎么测不出来",或者不愿意改什么的,那我的issue白提了,还浪费我的时间,我对陌生项目的态度就是如此,要么啥都不说,要么提issue就负责到底,提供相应的资料和日志,所以我宁愿花时间写这篇没有答案,全是猜想的文章

我对"Auto Updater"和"Uninstaller"的担忧

现在供应链投毒的攻击越来越多了,据我所知,近一年(2025年-2026年4月)起码有xz,notepad++,apifox,cpu-z,这几个软件受到了供应链投毒,且均沦陷并造成影响,而这些供应链投毒的目的都是通过软件或者包管理工具的"Auto update",也就是自动更新能力,来将恶意程序扩散到各个计算机中

LLM(大语言AI模型)的出现让更多并非软件专业的普通人也拥有了做出实现某些功能的软件的能力,包括程序员也在ai tools中提升工作效率,受益匪浅,但是ai的极其高效的编码效率也让人类无法与ai相同的速度对ai生成的代码进行审查,而受限于使用者对代码和程序的理解,很多代码是ai在一个超大的上下文中一次性吐出来的,使用者根本没法也不愿意阅读"成吨"的代码,因此,许多的ai生成物就这么被一股脑的编译,上传,分发出去了,虽然未必和ai有关系,但是在uninstaller这块,我已经听说过许多生产级的事故了,尤其是游戏圈,例如"少女前线2"的uninstaller,就曾错误的将游戏所在的盘符整个清空,还有我这次提到的portmaster把我的Path干掉了

当然,这也是可以理解的,auto update和uninstaller是方便用户的东西,这种东西没什么人愿意做,因为它两不挣钱,大概率也不影响口碑,也不是业务功能的一部分,没人愿意花时间打磨和测试,这也是预期中的,但是呢,由于市面上大多数软件都配备了auto update和uninstaler,这已经成为windows的事实标准了,所以还得硬着头皮做出来,我对这些表示理解,但是我不能理解的是,到底是什么业务设计,必须要触碰注册表和环境变量却收拾不好手尾? ,到底是什么样的安全设计和代码审计流程,才能让删除整个盘符里文件的uninstaller存在而不被发现? 才能对auto update拉下来的内容一丁点校验和验证都不做? 既然都没这个意识,那为什么不用现成的服务或者开源的自动更新打包和分发框架(例如velopack,或者分发到apt/winget),这样不是省事吗? winget和apt都有hash校验和签名校验,有现成的自动更新软件功能,抄都抄8会么?

我没做过上层的决策和管理者,我大概率无法知道背后事情的真相,但是这些事情一直在警告着我,自动更新未必可信,Uninstall卸载器也未必可信,windows update每次更新,或多或少都有些新bug影响我使用windows,我对windows很失望;我vsc每次自动更新,他都在添加ai agent的内容,我暂时还用不上,但是我始终记得,有次自动更新完毕,我的vsc插件直接无法自动更新了,因为拉下来的vsix文件的后缀名很奇怪,虽然后面修复了,但是我还是忘不掉那一次;而这次,就是portmasterPath干掉了,我估计以后也会忘不掉了. 在我眼里,现在的软件行业,因为有自动更新渠道,都敢给用户推实验性质的功能和代码,太不稳定了,而uninstaller,更是没有心思去做,随便让ai甩个脚本或者什么别的,能跑就行,实在是太难令人信服和使用了

我只是没想到,6202年了,我竟然像回到了20多年前,没有卸载程序和更新程序的时候(20年前的win32 应用似乎也有卸载程序来着,但是应该做的没这么敷衍),全要靠手动的文件删除和替换的时代,这样自己操作的文件,才算心安,这算什么? 历史倒退吗? 难不成我安装的每个软件的源码,我都得审计一遍才放心么? 令人唏嘘捏 😦

在外置大脑Gemini的帮助下,我能想到的建议就是:

  • 如果可以,禁用或者延后自动更新,尽可能使用已经发型且被众多用户验证过的稳定版本,如需更新,最好手动下载安装包进行更新,在更新前检索相关软件目标版本号的新闻或者时间,以及issue追踪相关的情况,确认没有什么问题在进行安装
  • 除非游戏,或者有严重bug或者漏洞,尽量不追最新版本,从发布日期,changelog(更新日志),版本号,新闻,漏洞报告,源代码,用户使用报告,等多维度综合评价软件发布渠道和特定版本是否可信
  • 将应用进行杀毒软件扫描测试,或者自动/手动沙箱隔离测试(微步沙箱/windows sandbox,自动沙箱测试可能对gui效果很差,最好有自己的虚拟机手动测试),测试通过后再到自己的电脑上安装

我知道进行测试会很麻烦,但是这也是没办法的办法了,MicroSoft这种大厂的的部分产品线的软件质量都令人堪忧,又有谁家的软件能无条件的令人信赖呢? 这些事情在以前,人手工做测试和搜集资料确实麻烦,现在有ai能帮忙收集资料和做一些繁琐的脚本了,但是这样做只是把危险性扔给ai而已,我觉得这还是不太妙,这本质上是上游软件厂商要干的事情,怎么甩给用户了,这也本身就不应该,那我测完了是不是应该给点钱给我呢)