翼度科技»论坛 编程开发 .net 查看内容

【UWP】修改清单脱离沙盒运行

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
总说周知,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 即可
首先我们在清单中加入权限
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Package
  3.   ...
  4.   xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
  5.   xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  6.   IgnorableNamespaces="... uap4 rescap">
  7.   ...
  8.   <Capabilities>
  9.     ...
  10.    
  11.     <rescap:Capability Name="runFullTrust" />
  12.     <uap4:CustomCapability Name="Microsoft.coreAppActivation_8wekyb3d8bbwe" />
  13.   </Capabilities>
  14. </Package>
复制代码
Custom Capability 不同于其他权限,这是用来给 OEM 自定义使用的,需要 SCCD 文件来证明你有使用权限的资格,所以想上架是基本没可能了,相关内容可以查看教程 [UWP] Custom Capability的使用
我们在项目根目录新建一个名为 CustomCapability.SCCD 的文件,在其中写入
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2018/sccd" xmlns:s="http://schemas.microsoft.com/appx/2018/sccd">
  3.   <CustomCapabilities>
  4.     <CustomCapability Name="Microsoft.coreAppActivation_8wekyb3d8bbwe"></CustomCapability>
  5.   </CustomCapabilities>
  6.   <AuthorizedEntities AllowAny="true"/>
  7.   <Catalog>FFFF</Catalog>
  8. </CustomCapabilityDescriptor>
复制代码
 然后将该文件设置为内容,或者选择复制到输出,只要最后能出现在安装包里面就行了
最后我们将 uap10:TrustLevel 设置为 mediumIL
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Package
  3.   ...
  4.   xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  5.   IgnorableNamespaces="... uap10">
  6.   ...
  7.   <Applications>
  8.     <Application
  9.       ...
  10.       uap10:TrustLevel="mediumIL">
  11.       ...
  12.     </Application>
  13.   </Applications>
  14.   ...
  15. </Package>
复制代码
我们调用Process.GetProcesses()获取进程列表(UAP 10.0.15138.0虽然加入了Process支持,但是并没有实现Process.GetProcesses(),所以这里是运行在 .NET 8.0 上的
  1. using Microsoft.UI.Xaml.Controls;
  2. using System.Diagnostics;
  3. // To learn more about WinUI, the WinUI project structure,
  4. // and more about our project templates, see: http://aka.ms/winui-project-info.
  5. namespace FullTrustUWP.Pages
  6. {
  7.     /// <summary>
  8.     /// An empty page that can be used on its own or navigated to within a Frame.
  9.     /// </summary>
  10.     public sealed partial class MainPage : Page
  11.     {
  12.         public MainPage() => InitializeComponent();
  13.         public void Test()
  14.         {
  15.             // 这里使用了 Windows App SDK,实际上 WAS 是支持 UWP 的
  16.             Content = new ItemsView
  17.             {
  18.                 // 必须使用 .NET Core App,因为微软没有给 .NET Core 5.0 实现这个方法
  19.                 ItemsSource = Process.GetProcesses()
  20.             };
  21.         }
  22.     }
  23. }
复制代码
运行效果

如果没有设置uap10:TrustLevel 为 mediumIL,则依然运行在沙盒中,Process.GetProcesses()只能获取到沙盒中的进程


来源:https://www.cnblogs.com/wherewhere/p/18171253
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具