封面来源:骤雨 | oO大黄Oo #pixiv https://www.pixiv.net/artworks/91461486
植根于国内复杂的网络生态环境,众互联网巨头的软件在隐私方面的暴雷早就成为了月经新闻。幸甚大多数的软件都不属刚需,亦或是有值得信任的或开源的平替,唯独腾讯系的软件定位特殊:既属刚需又无平替,相对安全的 UWP 已死,使用第三方的风险又极其巨大,到了非用官方包不可的地步。即便如此,在相对暴露的 Windows 下裸运行这些软件,仍绝对是下下策之举。
想要防住不受信任而又不得不用的软件,无非将这些软件扔进隔离的环境中运行。现有的隔离 Windows 软件运行的方案繁多,最广为人知的一种是使用虚拟机,在下也在《The Pure WINDOWS Project: Hyper-V 虚拟机使用笔记》一文中实践过,虚拟机的隔离方案虽然有不言自明的诸多好处,但是不免有杀鸡用牛刀之嫌,运行环境也不甚轻量;还有一种流行的方案是 Sandboxie,开源免费,足够轻量,使用起来与系统的整合度也很高,不过其自带的基础沙箱需要一定的配置才能保证不会漏沙,任何因疏忽而忘记堵住的孔都可能成为漏沙的点;再有就是下文要说的 Windows Sandbox,也是本文要介绍的运行方案,在此先按下不表;新兴的一种是微软最近才推出的 win32-app-isolation,可以像 VMware ThinApp 那样通过容器将 Win32 软件隔离,不过其尚处早期预览版,操作非常复杂,需要手动将软件重新打包成 MSIX,其中又涉及到了使用自签名证书的操作,暂不适合一般用户使用,不过未来相当可期。
说回 Windows Sandbox,其实际上还是一个基于 Hyper-V 的虚拟机,安全性上当然就和 Hyper-V 虚拟机相当,但是内存和硬盘占用比传统的虚拟机要小,使用体验上也会更加轻量。但 Windows Sandbox 在使用上有一个不可忽视的主要问题:无法实现持久化保存,每一次关闭沙盒再重新打开,只能得到一个全新的沙盒,旧有沙盒里的一切更改都会消失。想要解决这个问题,只能通过挂载的方式,将沙盒里的文件保存到宿主机上,来实现一定程度上的对于中间态的「保存」。
启用 Windows Sandbox
首先,需要
打开设置 - 应用 - 可选功能 - 更多 Windows 功能。
找到 Windows 沙盒并勾选,点击确定,随后重启。
注意:Windows 家庭版系统并没有集成 Windows Sandbox 功能,无法通过正常方案启用 Windows Sandbox,可尝试将下列代码保存成 bat 文件后管理员下运行安装,不保证可行性。
安装代码,点击展开
1 | @echo off |
执行后会进入 Sandbox 安装界面,安装完成后将提示是否重启,输入 Y,并回车。
若安装失败,则需另辟蹊径寻求他法,可将下列代码保存成 bat 文件后管理员下运行删除。
删除代码,点击展开
1 | @echo off |
编写沙盒配置
为了实现对创建出来的沙盒的保存,需要编写沙盒的配置文件。Windows Sandbox 的配置文件为纯文本,后缀名是 .wsb
,可以用于定义沙盒的 vGPU 状态、网络信号、文件夹映射等属性。
出于编写配置的方便考虑,可以直接套用他人已经写好的配置模板,Github 上有一个最近才上传的适用于腾讯全家桶的沙盒配置仓库 tencent-sandbox,可谓上佳之选。
把 tencent-sandbox 的源代码下载下来,并在其目录下创建空的挂载文件夹为如下形式:
1 | tencent-sandbox |
使用文本编辑器打开 Tencent.wsb,可以看到沙盒的配置文件写起来和 HTML 代码很像,非常清晰且容易理解。由 <MappedFolders>
和 </MappedFolders>
这一对标签框起来的就是文件挂载路径,找到刚刚没有创建的 App 下的子文件夹的对应挂载代码,删除之。
若安装的是 64 位版本微信,则找到 <SandboxFolder>C:\Program Files (x86)\Tencent\WeChat</SandboxFolder>
一行,将 Program Files (x86)
改为 Program Files
。
若没有 QQ 或 TIM 的安装计划,可以删除 <Command>C:\Program Files (x86)\Common Files\Tencent\QQProtect\Bin\QQProtect.exe</Command>
一行,新版的 QQNT 没有 Q 盾,故也可删除之。
若想要在沙盒中实现视频需求,可在音频配置一行 <AudioInput>Enable</AudioInput>
之后加入 <VideoInput>Enable</VideoInput>
允许沙盒应用使用摄像头。
默认分配给沙盒的运行内存是 2GB,可在 <MemoryInMB>2048</MemoryInMB>
中修改之。
更多沙盒配置可在微软官方的说明文档中找到。
新开一个默认沙盒,并正常安装 QQ / QQNT / TIM,安装完成之后复制沙盒中的 C:\Windows\SysWOW64 下的文件到配置文件夹的 Data\SysWOW64 下,否则 QQ 运行一段时间后会崩溃。
全部修改完成后保存即可,理论上不仅仅只是腾讯系软件,还可以借助此法实现其他软件的沙盒内保存。
软件的安装与使用
以 Windows Sandbox 运行 Tencent.wsb。
正常在沙盒中下载并安装即可。
若出现应用安装包无法启动或安装失败的情况,则可将其直接「绿色化」,使用压缩软件直接解压安装包,将解压后的文件移动到沙盒内的对应的挂载文件夹,找到软件的 .exe 可执行文件,右击之创建桌面快捷方式即可。
经在下测试,微信和 不需 Q 盾的 QQNT 使用这种方法均可正常运行。
解决宿主机代理导致的沙盒无网络问题
Windows Sandbox 会自动继承主机的代理服务器设置,而且无法修改。假如设主机上运行着代理软件的话,本地代理服务器地址 127.0.0.1 就会被沙盒继承,而沙盒会据此不断尝试连接沙盒内不存在的端口,进而造成沙盒实际无网络的问题。
采用 PAC 模式的代理可以避免此问题,但如此配置沙盒就无法使用代理,最佳的解决方案是将代理服务器的地址设置为沙盒的网关地址:
在沙盒中运行命令提示符,键入 ipconfig
,即可在默认网关一栏查看到沙盒的网关地址。
复制该地址,打开宿主机的设置 - 网络和 Internet - 代理。
点击使用代理服务器一栏的编辑,修改对应的代理 IP 地址为将刚刚复制的沙盒的网关地址,并保存。
部分代理软件支持直接自定义代理服务器地址,例如 Clash for Windows 就可以在 Settings - System Proxy - Static Host 一栏中修改。