所有操作系统都需要確保程式能夠正常使用系統資源,同時防止程式濫用權限或干擾其他程式的正常運行。Windows 作為一個權限管理相當混亂的系統,其應用的安裝和打包方式擁有極高的自主權,使得一些惡意應用可以在使用者不知情的情況下修改註冊表,安裝未知的服務和啟動項,甚至偷偷讀取全盤資料。
在 Windows 11 Build 2023 中,微軟推出了一種名為 Win32 app isolation 的應用隔離方案。這種方案類似於運行容器,不僅確保了轉換後的應用能夠高效運行,而且也簡化了權限管理。使用微軟的工具,我成功將微信和 TIM 的 exe 安裝包轉換成了帶有沙盒功能的 MSIX 格式安裝包。
步驟 0:依賴項#
- Windows 11
- MSIX Packaging Tool
- 從官網下載的軟體安裝包 WeChat
- 提前將電腦裡的微信卸載
步驟 1:轉換#
打開 MSIX packaing Tool,在主頁上選擇第一個選項「應用程式包」。在「選擇環境」步驟,選擇「在此計算機上創建程式包」。在「準備計算機」步驟按指示操作即可。
在「選擇安裝程式」步驟,選擇微信的安裝包檔案。雖然簽名對於安裝是必要的,但生成證書簽名時又需要下一步的程式包資訊,所以這裡先跳過,在稍後的步驟中再進行操作。
在「程式包資訊」步驟,指定程式包的相關資訊,比如程式包名稱、顯示名稱、發布者名稱。可以直接從 exe 檔案的右鍵選單中選擇「屬性」,然後依次複製。例如:[WeChat, WeChat, CN=Tencent, Tencent, 3.9.4.0]
點下一步,之後 Packager 會執行該 exe 檔案,進行一次常規的安裝操作,同時自動記錄程式安裝路徑,待我們安裝完畢時會彈窗詢問是否已經完成。我裝微信沒有遇到任何問題,但裝 TIM(可能 QQ 也一樣)完成後發現 Packager 遲遲不彈窗,也就是說 TIM 的安裝進程尚未結束。此時如果開任務管理器強行結束 TIM 進程,Packager 就會報錯,最終我發現可以點 Packager 裡重啟電腦的選項,通過重啟來安全結束進程。
最後,點擊右下角「創建」就會創建後綴名為 .msix 的軟體部署包,至此第一步操作算是完成了。
步驟 2:卸載應用程式#
在「設定 - 應用」裡把剛才安裝的微信和 TIM 都卸載掉。完成後記得手動結束 TIM uninstall 進程。
步驟 3:生成證書#
如果不對軟體包簽名,那麼 .msix 應用就會無法安裝。軟體包簽名的機制類似於 HTTPS 證書,開發者用私鑰對程式的 hash1 簽名,使用者用對應的公鑰解密出 hash1,再計算當前程式的 hash2。如果二者相同,則驗證通過。既然自己打包的 MSIX 程式包不可能用騰訊的私鑰進行簽名,那麼就需要自己生成一個私鑰,再把對應證書安裝到系統的信任列表裡。
- 打開 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}
是基本約束擴展,但這裡沒有指定具體的值。
-
複製得到的 THUMBPRINT1 並保存到安全的位置,比如 Bitwarden,然後生成一個密碼或用一個方便記憶的密碼,我下文都用 PASSWORD1 代替。
-
生成證書
$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,再點擊下一步。
在「證書存儲」中,選第二個「將所有的證書都放入下列存儲」,點擊瀏覽,找到「受信任人」,然後點擊下一步完成匯入操作。
步驟 4:應用證書#
打開 MSIX packaing Tool,選擇編輯程式包,打開此前保存的 .msix 檔案。在程式包編輯器頁面中,在「簽名首選項」裡面選擇「使用證書 (.pfx) 簽名」,選擇 Wechat.pfx 並輸入密碼。但先別急著爆粗保存,還有下一步。
步驟 5:修改權限#
左側第三欄「功能」裡,可以選擇開啟若干權限。我給微信開啟了攝像頭、麥克風、通知、Internet 權限。此外還有些選項無法直接在這裡勾選,我們需要回到第一欄「程式包資訊」,點最下面的清單檔案編輯,拉到文本最底部,在rescap:XXXXXXX相鄰添加幾行:
<rescap:Capability Name="isolatedWin32-print" />
<rescap:Capability Name="isolatedWin32-sysTrayIcon" />
<rescap:Capability Name="isolatedWin32-promptForAccess" />
<rescap:Capability Name="isolatedWin32-accessToPublisherDirectory" />
這些功能分別對應著:列印檔案、顯示來自系統托盤的通知、訪問檔案時徵求使用者批准、允許訪問以發布者 ID 結尾的目錄。
最後保存成 .msix 程式包,雙擊安裝,封印工作算是大功告成!騰訊見鬼去吧