使用 Win32-app-isolation 封印国产软件

所有操作系统都需要确保程序能够正常使用系统资源，同时防止程序滥用权限或干扰其他程序的正常运行。Windows 作为一个权限管理相当混乱的系统，其应用的安装和打包方式拥有极高的自主权，使得一些恶意应用可以在用户不知情的情况下修改注册表，安装未知的服务和启动项，甚至偷偷读取全盘数据。

在 Windows 11 Build 2023 中，微软推出了一种名为 Win32 app isolation 的应用隔离方案。这种方案类似于运行容器，不仅确保了转换后的应用能够高效运行，而且也简化了权限管理。使用微软的工具，我成功将微信和 TIM 的 exe 安装包转换成了带有沙盒功能的 MSIX 格式安装包。

Step 0: Depencencies

Windows 11

MSIX Packaging Tool

从官网下载的软件安装包 WeChat

提前将电脑里的微信卸载

Step 1: Convert

打开 MSIX packaing Tool，在主页上选择第一个选项 “应用程序包”。在 “选择环境” 步骤，选择 “在此计算机上创建程序包”。在 “准备计算机” 步骤按指示操作即可。

在 “选择安装程序” 步骤，选择微信的安装包文件。虽然签名对于安装是必要的，但生成证书签名时又需要下一步的程序包信息，所以这里先跳过，在稍后的步骤中再进行操作。

在 “程序包信息” 步骤，指定程序包的相关信息，比如程序包名称、显示名称、发布者名称。可以直接从 exe 文件的右键菜单中选择 “属性”，然后依次复制。例如：[WeChat, WeChat, CN=Tencent, Tencent, 3.9.4.0]

点下一步，之后 Packager 会执行该 exe 文件，进行一次常规的安装操作，同时自动记录程序安装路径，待我们安装完毕时会弹窗询问是否已经完成。我们只需按照一般的流程安装即可。我装微信没有遇到任何问题，但装 TIM（可能 QQ 也一样）完成后发现 Packager 迟迟不弹窗，也就是说 TIM 的安装进程尚未结束。此时如果开任务管理器强行结束 TIM 进程，Packager 就会报错，最终我发现可以点 Packager 里重启电脑的选项，通过重启来安全结束进程。

最后，点击右下角 “创建” 就会创建后缀名为 .msix 的软件部署包，至此第一步操作算是完成了。

Step 2: Uninstall App

在 “设置 - 应用” 里把刚才安装的微信和 TIM 都卸载掉。完成后记得手动结束 TIM uninstall 进程。

Step 3: Generate Certificate

如果不对软件包签名，那么 .msix 应用就会无法安装。软件包签名的机制类似于 HTTPS 证书，开发者用私钥对程序的 hash1 签名，用户用对应的公钥解密出 hash1，再计算当前程序的 hash2。如果二者相同，则验证通过。既然自己打包的 MSIX 程序包不可能用腾讯的私钥进行签名，那么就需要自己生成一个私钥，再把对应证书安装到系统的信任列表里。

打开 Administrative Powershell，生成证书指纹

Copy
New-SelfSignedCertificate -Type Custom -Subject "CN=Tencent Technology(Shenzhen) Company Limited, O=Tencent Technology(Shenzhen) Company Limited, L=Shenzhen, S=Guangdong Province, C=CN" -KeyUsage DigitalSignature -FriendlyName"WeChat" -CertStoreLocation "Cert:\LocalMachine\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3","2.5.29.19={text}")

-Subject：可以任意修改

-CertStoreLocation "Cert:\LocalMachine\My"：指定证书存储的位置在本地计算机的个人证书存储区。

-TextExtension：添加证书的扩展。2.5.29.37={text}1.3.6.1.5.5.7.3.3 指定证书的扩展密钥用途 (EKU)，1.3.6.1.5.5.7.3.3 是代码签名的 OID。2.5.29.19={text} 是基本约束扩展，但这里没有指定具体的值。

复制得到的 THUMBPRINT1 并保存到安全的位置，比如 Bitwarden，然后生成一个密码或用一个方便记忆的密码，我下文都用 PASSWORD1 代替。

生成证书

Copy
$password = ConvertTo-SecureString -String "PASSWORD1" -Force -AsPlainText
Export-PfxCertificate -cert "Cert:\LocalMachine\My\THUMBPRINT1" -FilePath Wechat.pfx -Password $password
Remove-Item -Path "Cert:\LocalMachine\My\THUMBPRINT1"

你需要用对应的值替换掉 PASSWORD1 和 THUMBPRINT1。

完成后去文件资源管理器找到当前目录，双击 Wechat.pfx，在证书导入向导选择存储位置是 “本地计算机”。然后在输入刚才设置的密码 PASSWORD1，再点击下一步。

在 “证书存储” 中，选第二个 “将所有的证书都放入下列存储”，点击浏览，找到 “受信任人”，然后点击下一步完成导入操作。

Step 4: Apply Certificate

打开 MSIX packaing Tool，选择编辑程序包，打开此前保存的 .msix 文件。在程序包编辑器页面中，在「签名首选项」里面选择 “使用证书 (.pfx) 签名”，选择 Wechat.pfx 并输入密码。但先别急着爆粗保存，还有下一步。

Step 5：Modify Permissions

左侧第三栏 “功能” 里，可以选择开启若干权限。我给微信开启了摄像头、麦克风、通知、Internet 权限。此外还有些选项无法直接在这里勾选，我们需要回到第一栏 “程序包信息”，点最下面的清单文件编辑，拉到文本最底部，在rescap:XXXXXXX相邻添加几行：

Copy
<rescap:Capability Name="isolatedWin32-print" />
<rescap:Capability Name="isolatedWin32-sysTrayIcon" />
<rescap:Capability Name="isolatedWin32-promptForAccess" />
<rescap:Capability Name="isolatedWin32-accessToPublisherDirectory" />

这些功能分别对应着：打印文件、显示来自系统托盘的通知、访问文件时征求用户批准、允许访问以发布者 ID 结尾的目录。

最后保存成 .msix 程序包，双击安装，封印工作算是大功告成！腾讯见鬼去吧