Be Free and Unafraid

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

Windows 的权限管理谜之混乱,应用的安装和运行往往拥有极高的自主权,使得一些恶意应用(企鹅)可以在用户不知情的情况下修改注册表,安装未知的启动项,甚至偷偷读取全盘数据。恰好 Win11 Build 2023 推出了一种名为 Win32 app isolation 的应用隔离方案……

这种方案类似于 Container,不仅确保了转换后的应用能够高效运行,而且也简化了权限管理。使用微软的工具,我成功将微信和 TIM 的 exe 安装包转换成了带有沙盒功能的 MSIX 格式安装包。

警告⚠ 2024.07.23 追加
本文提供的manifest文件修改方案存疑,或许不能封印文件乱访问的特权。详情请见:
https://community.wvbtech.com/d/3785/40

Step 0: Depencencies

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 程序包不可能用腾讯的私钥进行签名,那么就需要自己生成一个私钥,再把对应证书安装到系统的信任列表里。

  1. 打开 Administrative Powershell,生成证书指纹
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} 是基本约束扩展,但这里没有指定具体的值。
  1. 复制得到的 THUMBPRINT1 并保存到安全的位置,比如 Bitwarden,然后生成一个密码或用一个方便记忆的密码,我下文都用 PASSWORD1 代替。
  2. 生成证书
$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>相邻添加几行:

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

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

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

添加新评论