【UWP】修改清單脫離沙盒執行

where-where發表於2024-05-03

總說周知,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" while uap10:RuntimeBehavior="windowsApp" requires the Microsoft.coreAppActivation_8wekyb3d8bbwe Custom Capability.

This is also true if uap10:TrustLevel="mediumIL" and EntryPoint 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 擴充套件: 引數錯誤。

暫時沒有找到解決方法,重啟幾次電腦可能就好了

相關文章