總說周知,UWP 是執行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外互動也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒有這種可能呢?
我們開啟設定應用,透過工作管理員檢視程序,就會發現它並沒有 Runtime Broker 存在,這個程序是用來在沙盒間代理的,這說明微軟給 UWP 開了一個後門。
那麼我們是不是也有辦法脫離沙盒執行呢?Ahmed Walid 在 2023年2月 發表了這樣一個帖子:
同時他還提交了一個名為 Added a remark about uap10:TrustLevel 的 PR,在這個 PR 中明確提到了如何透過設定 Custom Capability 來修改 UWP 的 TrustLevel
Setting
uap10:TrustLevel="mediumIL"
whileuap10:RuntimeBehavior="windowsApp"
requires theMicrosoft.coreAppActivation_8wekyb3d8bbwe
Custom Capability.This is also true if
uap10:TrustLevel="mediumIL"
andEntryPoint
is any other value than"windows.fullTrustApplication"
or"windows.partialTrustApplication"
.You can read more about this custom capability here in Custom Capabilities.
如今這個 PR 已經合併,現在可以直接在微軟文件《應用程式 (Windows 10)》中找到了
根據文件描述,我們需要新增一個名為 Microsoft.coreAppActivation_8wekyb3d8bbwe
的自定義許可權,然後將 uap10:TrustLevel
設定為 mediumIL
即可
首先我們在清單中加入許可權
<?xml version="1.0" encoding="utf-8"?>
<Package
...
xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
IgnorableNamespaces="... uap4 rescap">
...
<Capabilities>
...
<!-- runFullTrust 許可權是必不可少的 -->
<rescap:Capability Name="runFullTrust" />
<uap4:CustomCapability Name="Microsoft.coreAppActivation_8wekyb3d8bbwe" />
</Capabilities>
</Package>
Custom Capability 不同於其他許可權,這是用來給 OEM 自定義使用的,需要 SCCD 檔案來證明你有使用許可權的資格,所以想上架是基本沒可能了,相關內容可以檢視教程 [UWP] Custom Capability的使用
我們在專案根目錄新建一個名為 CustomCapability.SCCD
的檔案,在其中寫入
<?xml version="1.0" encoding="utf-8"?>
<CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2018/sccd" xmlns:s="http://schemas.microsoft.com/appx/2018/sccd">
<CustomCapabilities>
<CustomCapability Name="Microsoft.coreAppActivation_8wekyb3d8bbwe"></CustomCapability>
</CustomCapabilities>
<AuthorizedEntities AllowAny="true"/>
<Catalog>FullTrust</Catalog>
</CustomCapabilityDescriptor>
然後將該檔案設定為內容,或者選擇複製到輸出,只要最後能出現在安裝包裡面就行了
最後我們將 uap10:TrustLevel
設定為 mediumIL
<?xml version="1.0" encoding="utf-8"?>
<Package
...
xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
IgnorableNamespaces="... uap10">
...
<Applications>
<Application
...
uap10:TrustLevel="mediumIL">
...
</Application>
</Applications>
...
</Package>
部署時有機率遇到
DEP0700: 應用程式註冊失敗。[0x80073CF6] 錯誤 0x80070057: 在準備處理請求時,由於以下錯誤,系統無法註冊 windows.capability 擴充套件: 引數錯誤。
暫時沒有找到解決方法,重啟幾次電腦可能就好了