Saber 酱的抱枕

Fly me to the moon

07/3
2024
软件

折腾了下 Sandboxie 和 Windows Sandbox

之前我把恶心的夸克网盘卸载了,但是现在又有资源需要用它下,不得不又下载回来。但是我不想把它安装在我的真实系统里了,那怎么办呢?用虚拟机的话有点重了,新安装一个系统需要不少磁盘空间,系统运行时也要不少内存。

Sandboxie

于是我想到了沙箱软件,有个成名已久的 Sandboxie,不过我之前没怎么用过,它似乎已经没有官方更新了,现在在 Github 上有个版本,是一些人自行维护更新的,界面重做了,功能也有改进,于是我下载安装了这个版本。

仓库地址:https://github.com/sandboxie-plus/Sandboxie

安装沙盒后,在夸克的 exe 安装程序上右键,选择“在沙盒中运行”,就可以把它安装到沙盒里,之后登录、下载文件,都正常。

在沙盒中运行程序时,程序窗口是和平时一样的独立窗口(也会出现在任务栏上),在任务管理器里也是可以照常看到程序的进程的。

Sandboxie 的界面如下:

但是我发现夸克在沙盘里访问本地文件依然是没有受到限制的。比如它每次启动都会提示我备份微信、QQ、桌面的文件,它在沙盒里也是直接读取了这些文件的,没有受到限制。

Sandboxie 会在 C 盘根目录创建一个 Sandbox 文件夹,存放在它里面安装的程序。比如夸克被安装在这个目录里:

C:\Sandbox\12477\DefaultBox\user\current\AppData\Local\Programs\quark-cloud-drive

在我退出夸克以及退出沙盒程序后,该目录依然存在,也就是在沙盒里面安装的程序文件是持久存在的。退出沙盒后,里面的文件不受影响,exe 文件可以直接运行(当然这样就不是在沙盒里了)。

所以我在沙盘里运行夸克,等于只是把它换了个安装位置而已。所以维基上说的我没懂啊:

它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可用以测试不受信任的应用程序或上网行为。

在我看来做不到啊,程序要读写硬盘上的文件依然是畅通无阻的。也就是多开程序会比较好用吧,指望它把沙盒里的程序与真实系统环境、真实文件系统隔离,看来是做不到的,还是得走虚拟机路线。

Windows Sandbox

有个好消息是,Windows 11 自带了沙盒功能,而且是虚拟机类型的,与真实系统是隔离的。于是我尝试了 Windows Sandbox,对它比较满意。

需要先在“启用或关闭 Windows 功能”里开启它:

然后系统提示重启,重启后就能用了(。在开始菜单里输入 Windows Sandbox 的部分文字找到它然后启动就可以了。

它的启动速度很快(相对于传统的虚拟机系统来说),只需要三四秒就可以了,会直接进入一个干净的系统桌面。

里面不能访问实机的文件,不过可以通过复制粘贴来交换文件。我把夸克的安装包复制进来安装使用。

这下狗日的夸克终于读取不到我的文档了:

关闭 Windows Sandbox 之后,里面所有的修改都会消失;每次打开 Windows Sandbox 都是一个全新的虚拟系统。

虚拟机进程刚进入桌面时大约使用 1.2 活动内存,当我运行夸克时占用大约 1.4 GB。CPU 使用率只有 10% 或更低,我觉得挺不错。

不过 Windows Sandbox 也有些限制,比如只能开一个,不能多开(我倒没有这个需求)。

使用网络代理的问题

另外是网络问题,如果实机里开了梯子软件,设置了系统的代理服务器(例如):

那么在 Windows Sandbox 里是无法访问网络的:

提示代理错误。一个简单的办法是,先在实机上清除(或关闭)代理服务器设置,然后再启动 Windows Sandbox,这样后者可以正常使用网络(但这样两个系统里都无法翻墙了)。

如果我不想取消实机的代理设置(毕竟实机还是需要翻墙的),该怎么办呢?先看上图的错误提示:代理错误。那么代理出什么问题了?

打开 Windows Sandbox 的系统代理设置一看,好家伙,原来它会同步实机的代理设置。也就是说,在实机里开启或关闭代理服务器,Windows Sandbox 里也会马上同步进行修改。

由于我的代理软件只在实机上运行,所以在 Windows Sandbox 里,代理服务器 127.0.0.1:10809 是无效的,因为 127.0.0.1 是本机 ip,但是 Windows Sandbox 里并没有运行梯子软件(因为它是一个纯净的系统),所以就产生了代理错误。

解决办法是在实机里修改代理服务器的 ip 地址,将其修改为实机在局域网里的 ip 地址,比如我的是 192.168.1.3

稍等一下,Windows Sandbox 里的代理也会同步这个修改,这样它就可以连通实机的代理服务器了,也就可以上网以及翻墙了。

Windows Sandbox 的本机 ip 网段与实机不同,但是可以 ping 通实机。

折腾了下 Sandboxie 和 Windows Sandbox

  1. 萌新
    Google Chrome 126Google Chrome 126WindowsWindows

    之前有差不多这样的需求,所以也认真研究过...
    Sandboxie 并没有隔离,只是通过 hook 的方式,把软件要写入的文件路径重定向到指定的目录,注册表操作拦截之类的方式,防止软件直接修改主系统,但是读取部分是没拦截的,要做完全隔离、限制读取的话,需要高级版。
    Windows Sandbox 是使用 Hyper-V 技术的轻量级虚拟机,只不过不用像单独安装系统那样配置一大堆,即开即用,关闭就丢失。对于这种下载用途,可以写一个配置文件,设置静默安装(打开就会自动安装好软件),路径映射(保存安装好的目录、下载完的文件)会比较方便,其中路径映射特别好用,可以不用下载完又复制出来,不然一不小心关掉了还得重新开始下。
    详细可以参考这篇:https://bbs.letitfly.me/d/1149
    或者微软官方教程:https://learn.microsoft.com/zh-cn/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-configure-using-wsb-file
    不过 Windows Sandbox 也有缺点,里面系统是英文环境,某些软件安装可能会不正常;资源管理器(explorer.exe)也经常卡死,如果没做好路径映射的话,卡死就只能关掉重新来了。

    回复