本文所有结论都来自 2026 年 11 月的一次真实排查:全新安装微信 4.2.0.12,登录后 1 小时内被静默升级到 4.2.0.53,全程无任何提示。我们顺着日志和二进制文件把微信 PC 版(4.x / xwechat)的更新机制完整挖了一遍,并给出可随时还原的四层屏蔽方案。
一、真实案例:装好的版本”自己”变了
用户从可信渠道拿到 WeChatWin_4.2.0.12.exe,全新安装后登录。1 小时后打开”应用和功能”,版本号已经变成 4.2.0.53——没有弹窗、没有 UAC、没有确认框。
检查安装目录发现:
C:\Program Files\Tencent\Weixin\下只剩一个4.2.0.53目录,旧的4.2.0.12目录被直接删除- 注册表
HKLM\...\Uninstall\Weixin的DisplayVersion被改写,这就是”添加删除程序”里版本号变化的来源 %APPDATA%\Tencent\xwechat\update\download\4.2.0.53\里躺着约 330MB 的组件压缩包(Weixin.dll.zip、RadiumWMPF.bin.zip等),下载时间与版本变化时间完全吻合
结论:这不是显示错误,是真实发生的静默替换。
二、微信 4.x 的自动更新机制
微信 4.x 采用了类似 Chrome 的组件化更新,整个链路是:
登录 → 向服务端校验版本策略
→ 后台静默下载组件包(update\download\版本号\)
→ 下次启动时替换文件、写入新版本目录
→ 改写注册表 DisplayVersion、清理旧目录
两个关键发现:
1. 更新清单的域名藏得很深。 从 Weixin.dll(约 200MB)中提取字符串,找到了更新配置的真实地址:
https://dldir1v6.qq.com/weixin/Universal/Windows/XPlugin/updateConfigUniWin.xml
注意是 dldir1v6.qq.com(带 v6),而不是网上教程常说的 upgrade.weixin.qq.com——后者在 4.x 的二进制里根本不存在。只挡 dldir1.qq.com 等于没挡。
2. 更新器是可以”重新生成”的插件。 更新组件不只是一个 WeixinUpdate.exe,它还以插件形式存放在:
%APPDATA%\Tencent\xwechat\XPlugin\Plugins\WeixinUpdate(4.2.0.12)%APPDATA%\Tencent\xwechat\XPlugin\Plugins\WeixinUpdateNew(4.2.0.53,名字会变!)
这意味着:删掉或禁用一个更新 EXE 是”打地鼠”——主程序随时可以换个名字重新释放一个。想真正屏蔽,必须锁”更新路径”,而不是锁”某个文件”。
三、四层屏蔽方案总览
| 层级 | 手段 | 作用 |
|---|---|---|
| 1 | hosts 屏蔽升级域名 | 拿不到更新清单,从源头断流 |
| 2 | NTFS ACL 拒绝权限 | 锁死更新器执行、暂存目录、插件目录 |
| 3 | 防火墙出站规则 | 双保险,阻断更新进程联网 |
| 4 | 计划任务自愈 | 每 6 小时自动补锁,防”打地鼠” |
文末提供一键脚本,以下逐层讲解原理和手动操作。
四、第一层:hosts 屏蔽升级域名
以管理员身份编辑 C:\Windows\System32\drivers\etc\hosts,末尾追加:
127.0.0.1 dldir1v6.qq.com
127.0.0.1 dldir1.qq.com
127.0.0.1 dldir2.qq.com
127.0.0.1 dl.softmgr.qq.com
保存后执行 ipconfig /flushdns 刷新 DNS 缓存。
副作用提示:dldir1v6.qq.com 同时也是 XPlugin 插件(视频解码、小程序引擎)的下载源。屏蔽后这些插件无法在线更新,已安装功能不受影响。若视频/小程序出现异常,可只保留 ACL 层。
五、第二层:NTFS ACL 锁死更新路径(核心)
这是整个方案里最重要的一层。思路不是”禁止某个文件运行”,而是让更新器写不进它必须写的位置:
:: 1. 拒绝执行更新器(对所有版本目录生效)
icacls "C:\Program Files\Tencent\Weixin\4.2.0.12\WeixinUpdate.exe" /deny "%USERNAME%:(RX)"
:: 2. 禁止在插件目录创建新文件夹(防止换个名字重新放更新器)
icacls "%APPDATA%\Tencent\xwechat\XPlugin\Plugins" /deny "%USERNAME%:(AD)"
:: 3. 锁死更新暂存目录(下载的组件包落不了地)
icacls "%APPDATA%\Tencent\xwechat\update" /deny "%USERNAME%:(OI)(CI)(WD,AD,DE,DC,WEA)"
关键点:
(RX)= 拒绝读取和执行;(AD)= 拒绝”添加子目录”;(OI)(CI)= 权限继承到子文件和子文件夹- 用拒绝 ACE 而不是删除文件——删除后微信会重新生成,拒绝权限则让它撞墙
- 拒绝 ACE 对管理员同样生效,所以想恢复时必须先
/remove:d(文末脚本已处理)
六、第三层:防火墙出站阻断
New-NetFirewallRule -DisplayName "WECHAT-UPDATE-BLOCK-WeixinUpdate.exe" `
-Direction Outbound `
-Program "C:\Program Files\Tencent\Weixin\4.2.0.12\WeixinUpdate.exe" `
-Action Block -Profile Any -Enabled True
即使更新器被重新释放并通过了 ACL,出站规则也能掐断它联网下载。规则按程序路径匹配,每升级/更换版本目录后需要对新路径重新添加(自愈任务会自动做这件事)。
七、第四层:计划任务自愈,解决”打地鼠”
微信换个版本就会换个更新器目录名,手动锁跟不上。注册一个 SYSTEM 权限的计划任务,登录时 + 每 6 小时静默重跑一遍加固脚本:扫描所有 WeixinUpdate*.exe、重新应用拒绝权限、补建防火墙规则。新冒出来的更新组件会在 6 小时内被自动锁住。
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File `"C:\-tools\wechat-harden.ps1`" -Quiet"
$trig = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(3) `
-RepetitionInterval (New-TimeSpan -Hours 6) -RepetitionDuration (New-TimeSpan -Days 3650)
$prin = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName "WeChatUpdateHardening" -Action $action `
-Trigger $trig -Principal $prin -Force
八、一键脚本
将以下内容保存为 wechat-harden.ps1(完整版含日志、回读校验、失败重试,开源仓库地址见文末):
param([switch]$Restore, [switch]$Quiet)
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
$installRoot = 'C:\Program Files\Tencent\Weixin'
$dataRoot = Join-Path $env:APPDATA 'Tencent\xwechat'
$pluginDir = Join-Path $dataRoot 'XPlugin\Plugins'
$updateDir = Join-Path $dataRoot 'update'
$user = "$env:USERDOMAIN\$env:USERNAME"
$taskName = 'WeChatUpdateHardening'
$domains = @('dldir1v6.qq.com','dldir1.qq.com','dldir2.qq.com','dl.softmgr.qq.com')
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) { Write-Host '请以管理员身份运行'; exit 1 }
if ($Restore) {
# 还原:移除 hosts 屏蔽行、拒绝 ACE、防火墙规则、计划任务
$pat = '^\s*127\.0\.0\.1\s+(dldir1v6\.qq\.com|dldir1\.qq\.com|dldir2\.qq\.com|dl\.softmgr\.qq\.com)(\s|$)'
$kept = @([System.IO.File]::ReadAllLines($hostsPath) | Where-Object { $_ -notmatch $pat })
[System.IO.File]::WriteAllText($hostsPath, (($kept -join "`r`n") + "`r`n"), [System.Text.Encoding]::ASCII)
@($updateDir, $pluginDir) +
@(Get-ChildItem $installRoot -Recurse -Filter 'WeixinUpdate*.exe' -EA SilentlyContinue).FullName |
ForEach-Object { if (Test-Path $_) { icacls $_ /remove:d $user *> $null; icacls $_ /remove:d Users *> $null } }
Get-NetFirewallRule -DisplayName 'WECHAT-UPDATE-BLOCK*' -EA SilentlyContinue | Remove-NetFirewallRule
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -EA SilentlyContinue
ipconfig /flushdns *> $null
Write-Host '已还原,微信恢复默认更新机制'; exit
}
# 加固:hosts(写后回读校验)
$existing = if (Test-Path $hostsPath) { [System.IO.File]::ReadAllText($hostsPath) } else { '' }
$add = $domains | Where-Object { $existing -notmatch "(?m)^\s*127\.0\.0\.1\s+$([regex]::Escape($_))\s*$" }
if ($add) {
$newText = $existing.TrimEnd() + "`r`n`r`n# block wechat pc auto update`r`n" + ($add -join "`r`n") + "`r`n"
[System.IO.File]::WriteAllText($hostsPath, $newText, [System.Text.Encoding]::ASCII)
}
# 加固:ACL 拒绝权限
Get-ChildItem $installRoot -Recurse -Filter 'WeixinUpdate*.exe' -EA SilentlyContinue |
ForEach-Object { icacls $_.FullName /deny "${user}:(RX)" *> $null }
icacls $pluginDir /deny "${user}:(AD)" *> $null
icacls $updateDir /deny "${user}:(OI)(CI)(WD,AD,DE,DC,WEA)" *> $null
# 加固:防火墙 + 自愈任务(略,见上方第三、四层代码)
ipconfig /flushdns *> $null
Write-Host '加固完成'
配套的启动器 屏蔽升级.bat(双击即用,弹 UAC 点”是”):
@echo off
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath powershell -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File','%~dp0wechat-harden.ps1' -Verb RunAs -Wait"
pause
正确的使用顺序:卸载微信 → 安装目标旧版本 → 先跑脚本再登录(一旦登录,更新流程立刻开始)→ 重启 → 登录。
九、常见问题 FAQ
Q:屏蔽后微信弹出”更新失败”正常吗?
正常。说明它还在尝试更新但被拦住了,功能不受影响。
Q:会影响聊天记录吗?
不会。脚本只锁更新通道,不碰微信主程序和数据目录。
Q:已经升到最新版了还能降级吗?
可以。先卸载、装旧版安装包(各历史版本可在 GitHub 的 wechat-win-versions 仓库找到),装完先跑脚本再登录,顺序不能反。
Q:杀毒软件报 hosts 被修改?
修改 hosts 属于敏感操作,部分安全软件会拦截。在杀软中放行 hosts 文件后重跑脚本即可。
Q:想升级了怎么办?
运行脚本的 -Restore 参数,hosts、ACL、防火墙、计划任务会全部还原,升级完再重新加固。
Q:微信输入法 / QQ 会被影响吗?dldir1.qq.com 是腾讯通用下载 CDN,屏蔽后 QQ、微信输入法等的下载更新也可能失败。介意的话可以只屏蔽 dldir1v6.qq.com 一条。
十、风险与注意事项
- 屏蔽更新意味着拿不到安全补丁,请自行权衡
- 腾讯随时可能更改更新机制(比如强更提示”必须更新才能使用”),届时先跑
-Restore排除本方案因素,再决定是否对抗 - 所有操作只动 Windows ACL、hosts、防火墙和计划任务,不修改微信二进制,可完整还原
*本文由知识箱(kmsbox.com)整理,基于 2026 年 11 月对微信 4.2.0.x 的实测分析。工具会持续跟随微信更新机制迭代,
另外 github 上也有这个相应的工具(但不如我这个来的更彻底)
如果你不会编辑脚本和下载工具,可以私信 jeremy@kmsbox.com ,我整个文件包发你
