<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>软件安全与逆向分析</title>
    <link>https://wechat2rss.xlab.app/feed/021e3a28dfa435253d1b5610e6678205ea0919b6.xml</link>
    <description>分享最前沿的软件安全与逆向分析技术与资讯。包括Windows、macOS、iOS、Android、Linux等平台。&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (软件安全与逆向分析)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM7Gka279vlRGZfQGVKG8Oy8HvZaSibRVWYqwI8g4X7tsbA/0</url>
      <title>软件安全与逆向分析</title>
      <link>https://wechat2rss.xlab.app/feed/021e3a28dfa435253d1b5610e6678205ea0919b6.xml</link>
    </image>
    <item>
      <title>安卓完美云手机内测镜像已发布，支持以下机型</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485396&amp;idx=1&amp;sn=4f20dc5e303adf9d75bd57d448d9b57d</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-08-24 16:39</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=df04194a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeT8GjFSJ2YtosmoGfDZD5Cddd7p7AdJ5gwBd3hmiauEBdOGX7UDkHQYvucibX0XnpptjdcSd6AmYX7tnDSulwSNXJHckwgyJVR3Lc%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">Rock 5b开发板</span></p></li><li><p><span leaf="">OrangePi 5Plus开发板</span></p></li><li><p><span leaf="">OrangePi 6Plus开发板</span></p></li><li><p><span leaf="">明钒MS-R1迷你主机</span></p></li><li><p><span leaf="">苹果M1 MacMini</span></p></li><li><p><span leaf="">苹果M1 Max笔记本</span></p></li><li><p><span leaf="">苹果M4 MacMini</span></p></li><li><p><span leaf="">苹果M4 MacMini Pro</span></p></li><li><p><span leaf="">苹果M4 Macbook Air笔记本</span></p></li><li><p><span leaf="">NVIDIA DGX Spark迷你主机</span></p></li></ul><p><span leaf="">支持的机型可选不止这些，但目前手上能测试的环境就这些。</span></p><p><span leaf="">理论上绝大多数3588开发板（私板不支持，无驱动无法制作基座），所有CIX P1开发板，</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]">苹果</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]">M</span><span leaf="">全系电脑都支持。</span></p><p><span leaf="">以后更新支持机型列表。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001745" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4114d8ea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT9E2dwHcryQGIAeP7S1KmCdC9kiaJYhXzMlrpxVWcIKe14PyeIKwyR9ykjWM165zBZTKYIjiaMYN26DbIRIfibSfCfWvX199JKGHw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a3b9652a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485396%26idx%3D1%26sn%3D4f20dc5e303adf9d75bd57d448d9b57d">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 24 Aug 2026 16:39:00 +0800</pubDate>
    </item>
    <item>
      <title>安卓完美云手机首个内测镜像发布，第一季课</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485391&amp;idx=1&amp;sn=3abc2e4ca0fd3ae4ba72c19e1f7fd50f</link>
      <description>有学员反馈，多多云机这个名字已经有厂家在使用了，重新给安卓云手机想了个好听的名字：蜚卓通&#xA;对子机型可以取名如（口嗨）：&#xA;蜚星通、蜚米通、蜚菊通、蜚空通、蜚加通、蜚我通、蜚想通、蜚尼通。&#xA;云机课程第一季方案篇已完结！课程6折优惠还有一天！&#xA;马上就会开始第二季更新。现更新Pixel6的完美机型镜像，给课程学员内测使用找找Bug。&#xA;注意：镜像运行支持在RK3588、CIX P1开发板，苹果M全系列电脑上运行。DGX Spack理论支持，待学员测试反馈给我后我同步一下。所有云机学员不得对外分发镜像，否则视为放弃后面课程视频更新与代码发放！&#xA;一枚程序，一个镜像，方为天地！</description>
      <content:encoded><![CDATA[<p><span>非虫</span> <span>2026-08-19 15:32</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=86b49854&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTice1N0BCPGiao9fhLleYiaGJibCv1NxSxEBD1oxw0AiasogibTK5dz6VibickduCR7niarmDed1THKgFS6aVBficQzS127tqtkPiaAqKeib1Y%2F640%3Fwx_fmt%3Dpng%26amp%3Bfrom%3Dappmsg"/></p>
  <p>有学员反馈，多多云机这个名字已经有厂家在使用了，重新给安卓云手机想了个好听的名字：蜚卓通</p><p>对子机型可以取名如（口嗨）：</p><p>蜚星通、蜚米通、蜚菊通、蜚空通、蜚加通、蜚我通、蜚想通、蜚尼通。</p><p>云机课程第一季方案篇已完结！课程6折优惠还有一天！</p><p>马上就会开始第二季更新。现更新Pixel6的完美机型镜像，给课程学员内测使用找找Bug。</p><p>注意：镜像运行支持在RK3588、CIX P1开发板，苹果M全系列电脑上运行。DGX Spack理论支持，待学员测试反馈给我后我同步一下。所有云机学员不得对外分发镜像，否则视为放弃后面课程视频更新与代码发放！</p><p>一枚程序，一个镜像，方为天地！</p>
  



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8aad3863&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485391%26idx%3D1%26sn%3D3abc2e4ca0fd3ae4ba72c19e1f7fd50f">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 19 Aug 2026 15:32:00 +0800</pubDate>
    </item>
    <item>
      <title>安卓完美云手机首个内测镜像发布，第一季课程完结！</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485387&amp;idx=1&amp;sn=a9bef45ddde395ea734f92178dd4b89e</link>
      <description>安卓完美云手机首个内测镜像发布，第一季课程完结！</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-08-19 15:25</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=234d148c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeT85kNE1G19pbIJicuicCy3MH2r8iccntp8wZ1c7BKFSca8fN8aTndgiajpx4KxurDFWR5kJJUtXXvwvTX4Rnn6lVIGSlkgPn5iaBfHw%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>安卓完美云手机首个内测镜像发布，第一季课程完结！</p>
  <p><span leaf="">有学员反馈，多多云机这个名字已经有厂家在使用了，重新给安卓云手机想了个好听的名字：<span textstyle="" style="font-weight: bold;">蜚卓通</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">对子机型可以取名如（口嗨）：</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">蜚星通、蜚米通、蜚菊通、</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">蜚空通、</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">蜚加通、</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">蜚我通、</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">蜚想通、</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">蜚尼通。</span></span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">云机课程第一季方案篇已完结！课程6折优惠还有一天！</span></span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: normal;">马上就会开始第二季更新。现更新Pixel6的完美机型镜像，给课程学员内测使用找找Bug。</span></span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: bold;">注意</span><span textstyle="" style="font-weight: normal;">：镜像运行支持在RK3588、CIX P1开发板，苹果M全系列电脑上运行。DGX Spack理论支持，待学员测试反馈给我后我同步一下。</span><span textstyle="" style="color: #f00;font-weight: bold;">所有云机学员不得对外分发镜像，否则视为放弃后面课程视频更新与代码发放！</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">一枚程序，一个镜像，方为天地！</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001736" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4ed9ba1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTice1N0BCPGiao9fhLleYiaGJibCv1NxSxEBD1oxw0AiasogibTK5dz6VibickduCR7niarmDed1THKgFS6aVBficQzS127tqtkPiaAqKeib1Y%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b3163f0a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485387%26idx%3D1%26sn%3Da9bef45ddde395ea734f92178dd4b89e">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 19 Aug 2026 15:25:00 +0800</pubDate>
    </item>
    <item>
      <title>安卓完美云手机支持功能列表</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485381&amp;idx=1&amp;sn=67d8e3d0cbea6c384da7e6633613a24c</link>
      <description>安卓云手机功能模型</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-08-04 17:19</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=8a1e46d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeTiclXuKrL9TYyicqF7hvnMwCyQNBkL3KbibH5NbZdhfyNS0IfjbCicjwHvzd7BF3N6D0y2PvVQcuqrmj1S8zjcgmXGonyW8dOpOQGA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h1 data-line="0" dir="auto" style="margin-top: 0px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">安卓云手机功能模型</span></h1><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本文列举安卓云手机各项功能的当前状态和版本范围。</span></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">多多完美云机的实现方案为更通用的跨平台实现方案。不采用任何国内已知的如Cuttlefish/AVD/Redroid/LXC/Waydroid等方案。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="font-weight: bold;">完美云机课程共30小节三个阶段。每个阶段10小节。目前第一阶段更新大半，本月会更新完第一阶段，现在报名优惠6折价格。第二阶段开更7折优惠，第三阶段开更8折优惠，完结恢复原价，发布课程全套代码。在这里承诺课程永远不会降价，把云机实现兑现给每个真实有需求的朋友。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><b><span leaf="">注意这是高端课程，课程就算半价也是过W的。</span></b></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">声明：多多云机于我个人而是，目标是为安全逆向分析与木鱼沙箱动态分析提供后端技术赋能与安全分析所使用，但它的能力远不止于此。支持现在主流的电商出海业务。但注意不支持任何黑灰产，找我买成品镜像的请绕道！做国内任何黑灰产项目的请绕道！云手机所有功能无任何功能虚假宣传与不良引导，更无任何黑灰</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">产业功能</span></span><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">暗示。</span></span></p><p><span leaf="">完美云机课程完结时，会提供成套的项目代码与文档。方便学习交流与二次定制。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001728" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4de08e24&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT8jowBJhnGCGQ8Q4njjLJrl5KDJiaynklxHHOaDicWqhwhXw99Guhb7942jUaoHicosKggT1gicVPZyTNMH9XxXibvSmCsVD85XvUQ8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""> 接下来列举出来的功能列表基本涵盖了安卓完美云手机的所有能力了。后面课程更新时，可能会有个别项根据项目更新需要进行能力调整，但整体变化不会太大，特别在意个别功能的可联系我确认。</span></p><h2 data-line="4" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">功能列表</span></h2><p data-line="6" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">每项功能分别标记当前实现状态，以及个人版和企业版的提供范围。</span></p><h3 data-line="8" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">环境与设备信息模拟</span></h3><p data-line="10" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><span textstyle="" style="font-weight: bold;"> 注意：以下能力非常特殊，只能用于合法自动化测试与安全分析相关等场景。</span></span></p><p data-line="10" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">环境模拟覆盖应用和系统可读取的位置、网络、设备身份、电量、时间与传感器状态，如表1-1所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GPS模拟</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置经纬度、高度、速度、卫星数和时间</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">定位数据模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">注入标准定位数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Wi-Fi功能模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置Wi-Fi开关、连接状态和网络信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Wi-Fi列表模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供可配置的热点名称、频段、信号强度和安全类型</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实系统指纹信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供对应系统的完整信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CPU与内存信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供对应设备的CPU和内存信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">显示信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供分辨率、密度、刷新率、方向和显示尺寸</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">电量变化模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">调整电量、充放电状态、电源连接和电池在位状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">时间与区域模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置系统时间、自动时间、时区、语言区域和时间制式</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">传感器模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟加速度、磁场、陀螺仪和铰链角度</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">震动模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置震动时长、幅度和停止状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">温度信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供温度、阈值和系统热状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">自动电量模型</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按时间自动充电、放电并变化电量和充电状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整传感器数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供全部传感器的连续数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">动态温度模型</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">根据运行负载变化温度和性能状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">宿主触觉反馈</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将云手机震动反馈到宿主设备</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GPS路线连续播放</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按时间序列播放位置、速度和卫星变化</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">卫星原始数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供卫星原始测量和导航数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="33" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-1 环境设备能力</span></p><h3 data-line="35" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SIM、短信与电话</span></h3><p data-line="10" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;data-line&#34;:&#34;10&#34;,&#34;class&#34;:&#34;code-line&#34;,&#34;dir&#34;:&#34;auto&#34;,&#34;style&#34;:&#34;margin-top: 0px; margin-bottom: 16px; color: rgb(0, 0, 0); font-family: -apple-system, \&#34;system-ui\&#34;, \&#34;Segoe WPC\&#34;, \&#34;Segoe UI\&#34;, system-ui, Ubuntu, \&#34;Droid Sans\&#34;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-weight: bold;"> 注意：以下能力非常特殊，只能用于合法自动化测试与安全分析相关等场景。</span></span></p><p data-line="37" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">通信模拟覆盖卡状态、移动网络、短信、呼叫和蜂窝数据等系统电话能力，如表1-2所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SIM模型</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供模拟手机号、卡状态、运营商和移动网络信息</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">电话模型</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟网络信号、来电、接听、保持、拒接和挂断</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">短信模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟接收文本短信和PDU短信</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">蜂窝数据模拟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟移动数据注册、连接和断开</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">动态修改SIM号码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在运行中更新模拟SIM号码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟短信外发</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用透传SIM向真实号码发送短信</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">模拟电话外呼</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用透传SIM拨打真实电话</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">云手机互拨</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在云手机模拟号码间双向通话</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">eSIM</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">下载、切换和管理eSIM</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">电话数据控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">批量管理通话记录、通讯录和订阅数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整电话服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供系统电话、短信、SIM和移动数据所需的完整服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="53" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-2 通信模拟能力</span></p><h3 data-line="55" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">系统与运行</span></h3><p data-line="57" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">宿主能力按编译、系统补丁和云手机运行三个阶段分别记录，如表1-3所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安卓系统</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">运行安卓15、安卓16和安卓17</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">macOS编译、补丁与运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在Apple Silicon Mac上编译项目、制作系统补丁和运行云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">RK3588开发板编译、补丁与运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在RK3588开发板上编译项目、制作系统补丁和运行云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CIX P1开发板编译、补丁与运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在CIX P1开发板上编译项目、制作系统补丁和运行云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Linux arm64编译、补丁与运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在Linux arm64设备上编译项目、制作系统补丁和运行云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Linux x86_64 PC编译与补丁</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在Linux x86_64 PC上编译项目和制作系统补丁</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Linux x86_64 PC运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在Linux x86_64 PC上运行ARM64云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">云手机Docker部署</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用Docker部署和运行云手机服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CPU硬件加速</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用宿主CPU硬件能力运行云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">实例多开</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">同时运行多个数据与状态相互独立的云手机实例</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">实例生命周期</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">创建、启动、查看、暂停、恢复、重启、停止、重置和删除实例</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">窗口与后台运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供窗口显示、窗口缩放和后台运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">启动状态检查</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">检查系统启动、设备连接、显示、资源和运行状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">浏览器远程使用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供低延迟画面、音频和输入控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">多显示器与折叠屏</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供多显示器、折叠状态和连续窗口布局</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">应用虚拟显示</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按应用创建和管理独立虚拟显示</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">首次启动时间</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置首次启动时间和设备激活时间</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">一键新机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">一次操作重建身份、数据和运行状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td></tr></tbody></table><p data-line="80" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-3 系统运行能力</span></p><h3 data-line="82" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">应用与分身</span></h3><p data-line="84" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">应用能力覆盖安装、调试、数据隔离、分身运行和文件交换，如表1-4所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">应用安装</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安装单包和多包安卓应用</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">国外常见App使用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安装和运行海外社交、电商、内容与工具类常见应用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">应用分身</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在系统分身空间中启用或停用指定应用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">分身独立数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">主应用与分身应用使用独立账号和数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">分身同时运行</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">同时启动和运行主应用与分身应用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">应用调试</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供命令行、日志、文件传输和端口转发</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">文件上传下载</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在宿主与云手机之间上传和下载文件</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">锁屏控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置或清除锁屏密码、锁定屏幕和密码解锁</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="97" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-4 应用分身能力</span></p><h3 data-line="99" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">图形、显示与媒体</span></h3><p data-line="101" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">图形与媒体能力覆盖画面渲染、输入、音频、视频编解码和相机数据，如表1-5所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GPU加速</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用宿主GPU加速图形显示和三维应用</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">分辨率与密度</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置分辨率、显示密度、旋转方向和尺寸</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">键盘与鼠标</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供按键、文本、鼠标和基础触控输入</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">截图</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按实例生成截图</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">屏幕录像</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">录制云手机屏幕视频</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">音频播放</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供媒体、听筒和通话音频播放</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">音量控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">读取和设置不同场景的音量</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">软件编解码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">使用软件完成音视频编解码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">硬件视频解码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供H.264和H.265硬件解码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">相机枚举与参数</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供前置、后置、广角和多摄像头信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">硬件视频编码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供H.264硬件编码</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">麦克风输入</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主麦克风和音频输入设备接入云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整多点触控</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供多指手势、压力和连续触点轨迹</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">相机预览与采集</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供预览、拍照、录像、RAW和图像分析</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">相机透传</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主内置摄像头或USB摄像头画面传入云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">虚拟相机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将图片或视频作为虚拟相机画面</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="122" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-5 图形媒体能力</span></p><h3 data-line="124" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">网络与连接</span></h3><p data-line="126" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">网络能力同时覆盖应用访问网络和实例管理连接，如表1-6所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">IPv4与IPv6</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供IPv4和IPv6网络访问</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">独立管理网络</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将设备管理网络与应用网络分离</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">端口转发</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主端口映射到云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">网络限速</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">分别设置上传和下载速率</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">网络延迟</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置固定延迟和延迟范围</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">网络抓包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">开始、停止、查询和定时保存网络抓包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">HTTP代理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设置和清除系统全局HTTP代理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">调试连接</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">为每个实例提供独立的调试和维护连接</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">宿主与局域网隔离</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供统一的宿主访问和局域网访问隔离策略</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">蓝牙通道</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在云手机与宿主之间传输蓝牙数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">蓝牙完整功能</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供扫描、配对、低功耗广播和设备数据收发</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="142" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-6 网络连接能力</span></p><h3 data-line="144" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">硬件与安全</span></h3><p data-line="146" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">硬件能力通过安卓系统标准功能向应用提供，安全能力覆盖设备密钥、认证和完整性状态，如表1-7所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">定位硬件服务</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">向系统和应用提供真实设备语义的位置</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">传感器硬件服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供传感器清单和部分传感器数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">灯光硬件服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供灯光设备和状态控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">震动硬件服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供震动强度、时长和停止控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">温度硬件服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供温度、阈值和热状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">NFC基础功能</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供NFC开关、基础通信和卡模拟能力</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">生物指纹接口</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供系统生物指纹接口和设备信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">硬件级密钥服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供设备密钥和密钥证明基础能力</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">生物指纹认证</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供指纹录入、触摸、认证和密钥授权</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">NFC完整功能</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供标签读取、点对点通信和安全单元</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">远程密钥供应</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供完整远程密钥供应服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">应用完整性验收</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">稳定完成全部应用完整性等级验收</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安全单元</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供可用于密钥和交易的安全单元</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">认证信息集中管理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">集中管理设备调试和控制认证信息</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="165" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-7 硬件安全能力</span></p><h3 data-line="167" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">系统镜像、ROM与Root</span></h3><p data-line="169" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">系统镜像能力覆盖ROM导入、云手机系统制作、镜像维护、Root环境和固件获取，如表1-8所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ROM导入</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">导入主流安卓ROM包、系统镜像和分区目录</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ROM转云手机系统</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将原厂ROM转换为可运行的云手机系统</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">多盘运行镜像</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将系统、启动和用户数据分开管理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">运行镜像打包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">创建、拆分、合并和检查运行镜像包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">镜像维护</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">检查、转换、扩容、压缩、修复和回收镜像空间</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">分区维护</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">查看、提取、写回和检查系统分区</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">启动镜像维护</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">检查、解包、修改和重新封装启动镜像</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Root方案</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供KernelSU、Magisk和APatch Root环境</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">固件获取</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">查询、下载、续传和缓存已登记固件</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="183" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-8 镜像系统能力</span></p><h3 data-line="185" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">快照与自动控制</span></h3><p data-line="187" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实例控制覆盖运行状态保存、设备参数调整、网络控制和电话状态控制，如表1-9所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">关机快照</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">创建、加载、删除和查询关机状态快照</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">运行快照</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">创建、加载、删除和查询运行中实例快照</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">快照状态同步</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在快照操作中同步系统、磁盘和设备连接状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">设备控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">统一管理设备状态和常用操作</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">网络控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">控制网络状态、限速、延迟、抓包和端口转发</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">电话控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">控制短信、来电、接听、保持、拒接、挂断、信号和数据状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">运行控制</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">控制暂停、恢复、启动、停止、重启、结束和状态查询</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="199" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-9 快照控制能力</span></p><h3 data-line="201" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">平台集成</span></h3><p data-line="203" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">平台集成用于把单机功能接入浏览器、开发工具和远程管理服务，如表1-10所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">全量固件查询下载</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">覆盖全部品牌和系统版本的固件查询与下载</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">浏览器管理控制台</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在浏览器中管理云手机实例</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">远程控制接口</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供统一的远程设备控制服务</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">开发工具设备管理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供设备创建、编辑和图形化管理</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="212" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-10 平台集成能力</span></p><h3 data-line="214" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">真实设备透传</span></h3><p data-line="216" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">真实设备透传将宿主或外接硬件的现场状态实时提供给云手机，与内置模拟数据分开管理，如表1-11所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">功能</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">已实现</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">个人版</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">企业版</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实本地Wi-Fi列表透传</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主扫描到的本地Wi-Fi列表实时提供给云手机</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实本地Wi-Fi状态透传</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主当前Wi-Fi连接和网络切换状态提供给云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实4G模块透传</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">通过宿主直连4G模块提供真实SIM、运营商、信号、基站和移动数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实短信与电话</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">通过直连4G模块接收和发送短信、接听和拨打电话</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实电话信息透传</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">提供真实号码、SIM信息、网络注册和通话状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">真实GPS透传</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">将宿主或外接定位设备的位置、速度、方向、精度和卫星信息实时提供给云手机</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">❌</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅</span></p></td></tr></tbody></table><p data-line="227" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1-11 真实透传能力</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001729" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4d3ec882&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTibiczFCbrxTXUzAicmkicpQ6ZZr1lEKLIsUzGzKxSNvBsrY2axb4hzx76JBhzjf3lCJTia2tSZ5DqEmeQd7hssg7NhIvn6Hqbya08s%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">可找上面图中二维码联系咨询。</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=5f7ed9c7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485381%26idx%3D1%26sn%3D67d8e3d0cbea6c384da7e6633613a24c">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 04 Aug 2026 17:19:00 +0800</pubDate>
    </item>
    <item>
      <title>安卓最新Root提权漏洞分析与利用</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485374&amp;idx=1&amp;sn=70e3f7da734cb81e92aedc72e7e58988</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-07-30 15:03</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=5b05bc5f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeTibcm4GPia1l66hZtYZUa8icQ4tqoXnFCbKDde80OT0oShQj2ibjicJuteTQCFDBMu4pfaLjiccFRJW6KnEosF4McqFic3Bk2RicClcuyk%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h1 data-line="0" dir="auto" style="margin-top: 0px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">安卓最新Root提权漏洞分析与利用</span></h1><blockquote style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 242, 242);border-color: rgba(0, 122, 204, 0.5);margin: 0px;padding: 0px 16px 0px 10px;border-left-width: 5px;border-left-style: solid;border-radius: 2px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">2026年7月，Linux内核本地提权漏洞GhostLock（CVE-2026-43499）公开完整利用链之后，安卓侧很快出现了面向锁BL机型的公开仓库：JoinChang的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ghostlock-oneplus</span></code><span leaf="">，以及YuKongA面向OPPO Find N5与Find X8的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ghostlock-oplus</span></code><span leaf="">。它们打的不是厂商私有驱动，而是GKI里那条已经存在十余年的futex PI栈UAF。公开仓已有完整实现，下文只谈公开机制与机型差异。</span></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">文章作者：非虫（fei_cong@hotmail.com）</span></p></blockquote><p data-line="6" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安卓本地Root近年常见目标仍是GPU驱动、binder与各类vendor ioctl。GhostLock不一样：缺陷在主线Linux的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rtmutex</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">futex</span></code><span leaf="">路径，和ColorOS、OxygenOS私有HAL无关。锁着bootloader的OnePlus、OPPO机型之所以能在未解锁状态下拿到root，是因为同一条内核洞被改成了arm64安卓利用链，再接上KernelSU的late-load。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001723" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=def3e91e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTibmkuz8Hgftw263JOaBubk2ibZd3NpctXCUeDkVsjlxOydY9cjqe6kicaZoyQEeY1Zq04bTns1VkicWt0UOsZM0tMotkGRfG2S0pQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="8" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">两个仓库的关系如下：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">JoinChang/ghostlock-oneplus</span></code><p><span leaf="">：面向OnePlus/OPPO/realme等OPlus系锁BL机型的多设备偏移表与完整jailbreak链路，仓库创建于2026年7月12日。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">YuKongA/ghostlock-oplus</span></code><p><span leaf="">：在同一漏洞与相近代码骨架上，单独补齐OPPO Find N5与Find X8的偏移与构建入口，并显式声明参考了Nebula的CyberMeowfia、JoinChang仓库以及</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">x-spy/CVE-2026-43499-popsicle</span></code><span leaf="">；仓库创建于2026年7月29日。</span></p></li></ol><h2 data-line="13" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">漏洞定位与时间线</span></h2><p data-line="15" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">CVE-2026-43499要点如表1所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">字段</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">内容</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CVE</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CVE-2026-43499，俗称GhostLock</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">组件</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Linux内核</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel/locking/rtmutex.c</span></code><span leaf="">，经futex优先级继承（PI）路径触发</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">类型</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">栈上Use-After-Free，CWE-416</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CVSS</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">kernel.org给出CVSS 3.1：7.8 High，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">引入</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Linux 2.6.39-rc1（约2011年5月），提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">8161239a8bcc</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">修复</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">主线7.1，提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">3bfdc63936dd</span></code><span leaf="">（rtmutex: Use waiter::task instead of current in remove_waiter）</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">发现方</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Nebula Security（VEGA），Google kernelCTF奖励92337美元</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">公开分析</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Nebula《IonStack part II: GhostLock》，2026年7月7日</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安卓侧公开利用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">JoinChang、YuKongA等仓库，面向锁BL的OPlus系机型与部分同SoC机型</span></p></td></tr></tbody></table><p data-line="29" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1 CVE-2026-43499要点</span></p><p data-line="31" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">时间线按公开资料整理如下：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">约2011年：rtmutex PI重写引入错误假设，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">remove_waiter()</span></code><span leaf="">始终按</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">current</span></code><span leaf="">清理waiter。</span></p></li><li><p><span leaf="">2026年4月：主线合入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">3bfdc63936dd</span></code><span leaf="">修复。</span></p></li><li><p><span leaf="">2026年5月21日：NVD收录CVE-2026-43499。</span></p></li><li><p><span leaf="">2026年7月7日：Nebula公开完整writeup与通用Linux利用思路；同日前后发行版开始集中发补丁说明。</span></p></li><li><p><span leaf="">2026年7月8日：oss-security出现GhostLock提醒邮件。</span></p></li><li><p><span leaf="">2026年7月12日起：安卓侧锁BL jailbreak仓库陆续公开；YuKongA仓库约两周后补齐Find N5与Find X8。</span></p></li></ol><p data-line="40" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里可以看出：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">漏洞本体是通用Linux内核问题，不绑定某一OEM。</span></p></li><li><p><span leaf="">安卓暴露面是开启</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CONFIG_FUTEX_PI</span></code><span leaf="">的GKI/OEM内核；JoinChang README写明，安卓GKI 6.12.x在其写作时尚处受影响区间。</span></p></li><li><p><span leaf="">两个GitHub仓库把漏洞利用做成“锁BL拿uid 0并装KernelSU”的工程实现；机型范围由偏移表与栈布局可行性决定，不是CVE影响名单本身。</span></p></li></ol><h2 data-line="46" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">威胁模型与影响面</span></h2><p data-line="48" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">对于安卓手机，威胁模型更贴近下面几条：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">攻击者已能在设备上运行本地代码：用户安装的App、调试shell，或其它远程洞拿到的同UID执行能力。</span></p></li><li><p><span leaf="">目标内核仍未合入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">3bfdc63936dd</span></code><span leaf="">及其stable回补；内核版本号“看起来很新”不等于已修，要以实际</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">uname -r</span></code><span leaf="">与厂商OTA为准。</span></p></li><li><p><span leaf="">利用不依赖解锁bootloader，也不要求改写</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">boot</span></code><span leaf="">分区。公开仓库的目标正是：锁BL状态下拿到root，再靠</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksud late-load</span></code><span leaf="">装上KernelSU。</span></p></li><li><p><span leaf="">成功后常见结果是：写掉</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_enforcing</span></code><span leaf="">、把当前进程凭据切到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">init_cred</span></code><span leaf="">，或走UMH路径让内核以uid 0执行用户态载荷。</span></p></li></ol><p data-line="55" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">厂商品牌上，公开仓库当前主要覆盖OnePlus、OPPO，以及同SoC验证过的Xiaomi 17。realme等OPlus系机型在JoinChang的“不可行”表里也有条目，说明作者尝试过提取偏移，但栈布局不兼容。不要把“仓库名带了OnePlus”理解成“只有一加受影响”——洞在内核，仓库只是现成适配清单。</span></p><h2 data-line="57" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">缺陷成因</span></h2><p data-line="59" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Nebula的分析把成因说得很直白：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">remove_waiter()</span></code><span leaf="">最初只服务“线程自己阻塞、自己清理”的慢路径，于是一律操作</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">current</span></code><span leaf="">。Requeue-PI却通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rt_mutex_start_proxy_lock()</span></code><span leaf="">让另一个线程代劳入队与回滚。此时</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">current</span></code><span leaf="">是发起</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FUTEX_CMP_REQUEUE_PI</span></code><span leaf="">的requeuer，真正的waiter对象躺在睡眠线程自己的内核栈上。</span></p><p data-line="61" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">出错路径可以压缩成：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="63" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">waiter线程：持有f_pi_chain，再FUTEX_WAIT_REQUEUE_PI(f_wait -&gt; f_pi_target)</span><br/><span leaf="">owner线程：持有f_pi_target，再阻塞在f_pi_chain</span><br/><span leaf="">主线程：FUTEX_CMP_REQUEUE_PI(f_wait -&gt; f_pi_target)</span><br/><span leaf="">  代理入队检测到死锁，返回-EDEADLK</span><br/><span leaf="">  remove_waiter()清掉current-&gt;pi_blocked_on</span><br/><span leaf="">  waiter任务自己的pi_blocked_on仍指向即将弹出的栈帧</span><br/><span leaf="">  栈帧回收后形成栈UAF</span></code></pre><p data-line="73" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">后续任意一次会走PI链的操作，例如</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sched_setattr()</span></code><span leaf="">，都可能顺着悬空指针去解引用已经返回用户态的栈帧。触发后没有紧迫的竞态窗口：waiter可以先回到用户态，攻击者再慢慢安排栈回收与伪造。</span></p><p data-line="75" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">修复同样直接：在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">remove_waiter()</span></code><span leaf="">及相关路径里，一律用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">waiter-&gt;task</span></code><span leaf="">取代</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">current</span></code><span leaf="">去持锁、出队、清空</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pi_blocked_on</span></code><span leaf="">。lockdep原先只检查“有没有持有某把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pi_lock</span></code><span leaf="">”，并不核对“持的是不是waiter所属任务的那把”，所以这类错误能藏很久。</span></p><h2 data-line="77" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">从栈UAF到受控写</span></h2><p data-line="79" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">通用Linux链（Nebula / CyberMeowfia）与安卓仓共享同一起点：悬空的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rt_mutex_waiter</span></code><span leaf="">。后续差异主要在“如何把可控字节铺回那块栈”，以及“把有限写原语接到什么目标上”。</span></p><p data-line="81" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Nebula在x86通用环境里的轮廓是：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">用prefetch一类侧信道摸KASLR与physmap。</span></p></li><li><p><span leaf="">触发GhostLock，留下悬空</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pi_blocked_on</span></code><span leaf="">。</span></p></li><li><p><span leaf="">用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">prctl(PR_SET_MM_MAP)</span></code><span leaf="">等大块栈本地缓冲覆盖旧waiter帧，伪造</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rt_mutex_waiter</span></code><span leaf="">。</span></p></li><li><p><span leaf="">PI链上的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rb_erase</span></code><span leaf="">给出受约束的指针写，常见写入目标是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">inet6_protos[IPPROTO_UDP]</span></code><span leaf="">一类函数表。</span></p></li><li><p><span leaf="">再接控制流劫持与后续提权。</span></p></li></ol><p data-line="89" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安卓公开仓把栈回收换成了更贴近手机环境的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pselect6</span></code><span leaf="">路径。JoinChang README写明：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pselect6</span></code><span leaf="">会把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fd_set</span></code><span leaf="">拷到内核栈上的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">stack_fds</span></code><span leaf="">；在合适的编译栈布局下，这块缓冲区与已释放的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rt_mutex_waiter</span></code><span leaf="">重叠，攻击者就能把伪造的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">task</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lock</span></code><span leaf="">等字段写进用户可控区。随后PI链walk时的红黑树再平衡，把受控值写到选定的内核地址。</span></p><p data-line="91" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安卓侧原语链可以写成：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="93" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">三futex死锁触发GhostLock</span><br/><span leaf="">  waiter任务悬空pi_blocked_on</span><br/><span leaf="">  pselect6把可控fd_set铺回同一栈深</span><br/><span leaf="">  伪造rt_mutex_waiter</span><br/><span leaf="">  PI写原语（受约束的内核写）</span><br/><span leaf="">  关闭SELinux enforcing，或改凭据，或建立更稳的读写原语</span><br/><span leaf="">  可选：ksud late-load安装KernelSU</span></code></pre><p data-line="103" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">公开仓给出的两条Root路径，按设备能力自动选择：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">UMH路径（优先，需C ashmem且能拿到静态</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">miscdevice</span></code><span leaf="">偏移）：先用PI写把misc fops拐到伪造表，再经configfs与pipe物理内存读写把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_enforcing</span></code><span leaf="">写成单字节0，最后向</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">system_unbound_wq</span></code><span leaf="">注入work，让内核执行</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/data/local/tmp/... --umh</span></code><span leaf="">拿到uid 0。这条路少改活着的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">task_struct</span></code><span leaf="">凭据，也能绕开部分seccomp对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">perf_event_open</span></code><span leaf="">的限制。Rust ashmem的GKI 6.12上miscdevice在堆上分配，地址不稳定，通常走不通。</span></p></li><li><p><span leaf="">直接PI写路径（回退）：先写</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_enforcing</span></code><span leaf="">，再把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">task-&gt;cred</span></code><span leaf="">指到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">init_cred</span></code><span leaf="">，随后装KernelSU，并视需要处理策略副作用。</span></p></li></ol><p data-line="108" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">还有bootstrap模式：App上下文先做不依赖perf的Write 1，再经本机mini-adb连回自己，在更宽松的shell上下文跑完整链。这是为了躲开App侧seccomp，不是第二条漏洞。</span></p><h2 data-line="110" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">栈布局决定机型能不能打</span></h2><p data-line="112" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">CVE在很多内核上都在，但公开安卓利用能不能打通，取决于编译器给</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">do_select</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pselect</span></code><span leaf="">栈帧排出来的布局。JoinChang把可行性写成硬规则：在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">NFDS=320</span></code><span leaf="">时，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">stack_fds</span></code><span leaf="">前半是用户可控位图；</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rt_mutex_waiter</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">task</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lock</span></code><span leaf="">字段必须落在可控区。waiter起始word超过3，通常就没有安全的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">PSELECT_SHIFT</span></code><span leaf="">可调。</span></p><p data-line="114" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">同一内核版本号、不同SoC分支，因为PGO/LTO/BOLT画像不同，栈布局可以完全不一样。所以“同为6.12”不等于都能打；反过来，6.6上只要布局合适、偏移齐备，也能成。YuKongA仓库里的Find N5与Find X8，正是6.6.118安卓15 GKI分支上的成功适配。</span></p><p data-line="116" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">另外还有</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel_phys_load</span></code><span leaf="">：bootloader决定的内核物理装载地址，不能从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">boot.img</span></code><span leaf="">直接推出来。写错不会必然panic，写会落到无关RAM上，表现为“跑了没效果”。公开仓要求按机型填表，或在已有root的同型号机器上从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/iomem</span></code><span leaf="">读取。</span></p><h2 data-line="118" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">两个仓库的机型覆盖</span></h2><p data-line="120" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">两仓支持范围以各自README为准，摘要如表2、表3。状态会随作者更新变化，动手前请再对一下仓库当前表格。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">设备</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">SoC</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">内核线索</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">状态</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OnePlus Ace 6T（PLR110）</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8845</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">6.12.38，多build已列</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">已验证</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OnePlus 15（CPH2749）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8850</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">6.12.23</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">已验证</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Xiaomi 17（pudding）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8850</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">6.12.23</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">已验证</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OnePlus 15T（PLZ110）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8845</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">与Ace 6T同内核线索</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">偏移已提，待真机确认</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OnePlus 13（IN2060）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8750</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">6.6.89，需</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">PSELECT_SHIFT=-2</span></code></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">偏移已提，UMH路径有公开线索</span></p></td></tr></tbody></table><p data-line="132" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表2 JoinChang/ghostlock-oneplus支持摘要</span></p><p data-line="134" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">JoinChang明确标为不可行的例子包括：OPPO Find X9 Ultra（栈SP差与Ace 6T相反）、OPPO Find X7与多款realme 6.1分支（waiter落在word 13）、OnePlus 13R/Ace 5、OPPO Pad 5，以及非OPlus的iQOO Z9（且5.15 waiter结构不兼容）。这些条目说明：洞可能仍在，但当前这条</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pselect</span></code><span leaf="">叠栈打法在这些编译产物上走不通。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">设备</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">SoC</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">内核线索</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">说明</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPPO Find N5（PHK110）</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SM8750</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">6.6.118-android15-8-...-ab15114928-4k</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">uname -r</span></code><span leaf="">选偏移表</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPPO Find X8（PKB110）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">MT6991</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">6.6.118-android15-8-...-ab15099304-4k</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">同上；天玑平台单独适配</span></p></td></tr></tbody></table><p data-line="142" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表3 YuKongA/ghostlock-oplus支持摘要</span></p><p data-line="144" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">两仓差异可以概括成：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">JoinChang覆盖更广，带可行性筛查、UMH与直接PI写双路径、bootstrap、多SoC的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel_phys_load</span></code><span leaf="">表，以及从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">boot.img</span></code><span leaf="">批量抽kallsyms/BTF偏移的工具链。</span></p></li><li><p><span leaf="">YuKongA收窄到Find N5与Find X8两条已验证内核，启动时读</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">uname -r</span></code><span leaf="">，不匹配直接拒绝；构建与安装脚本更轻，并写明继承Apache-2.0与上游参考列表。</span></p></li><li><p><span leaf="">两者都把“提权”和“持久Root框架”拆开：没有</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksud</span></code><span leaf="">时，W1/W2仍可能拿到uid 0，但KernelSU不会装上，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">su</span></code><span leaf="">也不持久。</span></p></li></ol><h2 data-line="150" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">检测与缓解</span></h2><p data-line="152" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">真正有效的修复只有内核补丁。上游关键提交是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">3bfdc63936dd</span></code><span leaf="">；各stable分支另有回补，NVD与发行版公告里能看到6.1、6.6、6.12、6.18、7.0等线的修复版本门槛。安卓侧不能只看AOSP安全公告月份，还要看OEM是否把对应GKI/vendor内核推进到已回补版本。JoinChang写作时点名的6.12.23、6.12.38，仍低于当时公开资料里常见的6.12.86一类修复门槛；具体以设备OTA与内核changelog为准。截至成稿，未看到OnePlus/OPPO就该CVE单独发布的中文用户公告可引用，仍应以内核版本与厂商安全更新频道为准。</span></p><p data-line="154" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">临时缓解都有代价：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">用seccomp挡住</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FUTEX_LOCK_PI</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FUTEX_WAIT_REQUEUE_PI</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FUTEX_CMP_REQUEUE_PI</span></code><span leaf="">及其time64/变体。能切断触发面，但会弄坏依赖优先级继承互斥量的工作负载。</span></p></li><li><p><span leaf="">限制不可信本地代码执行，收紧侧载与调试接口。对锁BL手机上的恶意App模型，这比“指望用户别点安装”更实在，但挡不住已经拿到代码执行的攻击者。</span></p></li><li><p><span leaf="">Nebula还讨论过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">RANDOMIZE_KSTACK_OFFSET</span></code><span leaf="">对栈帧重叠的干扰：它会抬高利用难度，不是完整修复。安卓公开仓按机型实测栈布局，说明在目标编译产物上重叠仍可稳定发生。</span></p></li></ol><p data-line="160" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">尽快装厂商内核OTA。补丁到位前，别把来路不明的“一键Root”包当常规工具。两仓已把偏移提取办法公开到“只需</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">boot.img</span></code><span leaf="">”的程度，适配成本会继续下降，回补越慢，锁BL机型上的现成利用越多。</span></p><h2 data-line="162" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">参考资料</span></h2><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">Nebula Security，IonStack part II: GhostLock：<a href="https://nebusec.ai/research/ionstack-part-2/" target="_blank">https://nebusec.ai/research/ionstack-part-2/</a></span></p></li><li><p><span leaf="">NVD，CVE-2026-43499：<a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43499" target="_blank">https://nvd.nist.gov/vuln/detail/CVE-2026-43499</a></span></p></li><li><p><span leaf="">上游修复提交：<a href="https://git.kernel.org/stable/c/3bfdc63936dd4773109b7b8c280c0f3b5ae7d349" target="_blank">https://git.kernel.org/stable/c/3bfdc63936dd4773109b7b8c280c0f3b5ae7d349</a></span></p></li><li><p><span leaf="">oss-security提醒：<a href="https://www.openwall.com/lists/oss-security/2026/07/08/12" target="_blank">https://www.openwall.com/lists/oss-security/2026/07/08/12</a></span></p></li><li><p><span leaf="">AlmaLinux补丁说明：<a href="https://almalinux.org/blog/2026-07-09-ghostlock/" target="_blank">https://almalinux.org/blog/2026-07-09-ghostlock/</a></span></p></li><li><p><span leaf="">JoinChang/ghostlock-oneplus：<a href="https://github.com/JoinChang/ghostlock-oneplus" target="_blank">https://github.com/JoinChang/ghostlock-oneplus</a></span></p></li><li><p><span leaf="">YuKongA/ghostlock-oplus：<a href="https://github.com/YuKongA/ghostlock-oplus" target="_blank">https://github.com/YuKongA/ghostlock-oplus</a></span></p></li><li><p><span leaf="">NebuSec/CyberMeowfia（YuKongA声明的参考之一）：<a href="https://github.com/NebuSec/CyberMeowfia" target="_blank">https://github.com/NebuSec/CyberMeowfia</a></span></p></li></ul><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c637a987&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485374%26idx%3D1%26sn%3D70e3f7da734cb81e92aedc72e7e58988">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 30 Jul 2026 15:03:00 +0800</pubDate>
    </item>
    <item>
      <title>安卓GKI内核模块开发编译工具包开发与使用</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485369&amp;idx=1&amp;sn=0cc7abb85722c7d8533cd09b91355b26</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-07-26 20:08</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=27864db2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeTibu22PZvxzEg3IiaT2wwhQFPAPGA6KB6bn8UUPrNwKd6Y7008y59OeBgHW1VZTFXTQq8XtTNsqlEUAdq508bS1UICBnKsUWywMk%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h1 data-line="0" dir="auto" style="margin-top: 0px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">安卓GKI内核模块开发编译工具包开发与使用</span></h1><blockquote style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 242, 242);border-color: rgba(0, 122, 204, 0.5);margin: 0px;padding: 0px 16px 0px 10px;border-left-width: 5px;border-left-style: solid;border-radius: 2px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">本文介绍dddk（Droid DDK）的设计思路与实现细节，讲解如何在ddk的基础上实现x86_64与ARM64双架构原生编译加速，覆盖Android 13到Android 17全部GKI内核版本，以及通过GitHub Actions一键编译内核模块</span></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">作者：非虫</span></p></blockquote><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001718" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b12e3e1b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT8rwTcTDvFSg8p2iaLk9BUlicZ8rzROyHlCarX6AzNt15VqAnzsTEZian8rMf5aGOAJRVdG38Qa4GvLAspmRBwBKiajLuzREGq1C84%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-line="6" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">目录</span></h2><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">从ddk到dddk的演进动机</span></p></li><li><p><span leaf="">整体架构与配置设计</span></p></li><li><p><span leaf="">原生编译加速的实现</span></p></li><li><p><span leaf="">Android 17支持的关键细节</span></p></li><li><p><span leaf="">dddk命令行工具使用</span></p></li><li><p><span leaf="">在GitHub Actions中编译内核模块</span></p></li><li><p><span leaf="">镜像构建流水线</span></p></li><li><p><span leaf="">总结</span></p></li></ol><h2 data-line="17" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">1 从ddk到dddk的演进动机</span></h2><p data-line="19" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">做过安卓内核模块开发的人都知道，编译一个</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ko</span></code><span leaf="">需要完整的内核源码树、匹配的工具链和正确的内核构建配置。Ylarod/ddk项目解决了环境搭建的问题，把AOSP Clang工具链和预编译好的内核源码打包到Docker镜像里，开发者拉取镜像后执行</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">make</span></code><span leaf="">即可得到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ko</span></code><span leaf="">文件。</span></p><p data-line="21" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">但在实际使用中遇到了几个瓶颈。</span></p><p data-line="23" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一个问题是架构限制。原版ddk只提供x86_64镜像，在ARM64服务器（如GitHub Actions的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ubuntu-24.04-arm</span></code><span leaf=""> Runner或云厂商的ARM实例）上需要通过QEMU模拟运行x86_64容器，编译速度慢到无法接受。对于拥有ARM64构建机的团队，硬件资源完全被浪费。</span></p><p data-line="25" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个问题是工具链选型。原版直接使用AOSP预编译的Clang工具链，但AOSP Clang仅发布x86_64版本。在ARM64宿主机上，即使容器本身是ARM64的，也无法直接使用AOSP Clang。</span></p><p data-line="27" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第三个问题是版本覆盖。随着Android版本快速迭代，GKI内核从5.10一路演进到6.18。原版ddk支持的目标版本有限，缺少Android 16和Android 17的支持。Android 17引入了6.18内核和Rust 1.91.1工具链，构建环境发生了较大变化。</span></p><p data-line="29" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第四个问题是CI集成。原版缺少开箱即用的GitHub Actions集成方案，项目组想在CI里自动编译内核模块，需要自行编写复杂的工作流。</span></p><p data-line="31" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk（Droid DDK）就是在这些需求驱动下的重新实现。核心思路是用Android NDK替代AOSP Clang作为交叉编译工具链，实现x86_64和ARM64宿主机的原生编译支持，同时覆盖从Android 13到Android 17的全部GKI内核版本。</span></p><h2 data-line="33" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2 整体架构与配置设计</span></h2><p data-line="35" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk的架构分为四层，如下所示：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="37" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">+----------------------------------------------------+</span><br/><span leaf="">|           dddk 命令行工具 (scripts/dddk)             |</span><br/><span leaf="">|         统一入口, 支持 docker/local 双模式            |</span><br/><span leaf="">+----------------------------------------------------+</span><br/><span leaf="">|                 Docker 镜像层                        |</span><br/><span leaf="">|      builder, toolchain, ddk, ddk-min               |</span><br/><span leaf="">+----------------------------------------------------+</span><br/><span leaf="">|               构建系统 (build/)                      |</span><br/><span leaf="">|      build-droid-ddk.py + mapping.json              |</span><br/><span leaf="">+----------------------------------------------------+</span><br/><span leaf="">|             GitHub Actions 工作流                    |</span><br/><span leaf="">|      release.yml / publish-prebuilts.yml            |</span><br/><span leaf="">+----------------------------------------------------+</span></code></pre><h3 data-line="53" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2.1 mapping.json作为构建配置的单一事实源</span></h3><p data-line="55" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个项目的核心配置集中在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mapping.json</span></code><span leaf="">中，它定义了三类信息。</span></p><p data-line="57" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一类是目标矩阵。每个构建目标由Android版本、Clang版本、Rust版本、NDK版本和支持的宿主平台组成：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="59" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;android&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android17-6.18&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;clang&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;clang-r584948c&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;rust&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;rust-1.91.1&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;ndk&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;r29&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;platforms&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">[</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;linux-amd64&#34;</span></span><span><span leaf="">,</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;linux-arm64&#34;</span></span><span><span leaf="">]</span></span><br/><span><span leaf="">}</span></span></code></pre><p data-line="69" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二类是平台配置。每个宿主平台的工具链类型、NDK下载地址、Rust安装方式等：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="71" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;linux-arm64&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;toolchainKind&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android-ndk&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;ndks&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;r29&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;url&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://github.com/SnowNF/ndk-aarch64-linux/releases/..." target="_blank">https://github.com/SnowNF/ndk-aarch64-linux/releases/...</a>&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;root&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;r29&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;bin&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;toolchains/llvm/prebuilt/linux-x86_64/bin&#34;</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;rust&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;kind&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;rustup&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;version&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;1.91.1&#34;</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span></code></pre><p data-line="90" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第三类是镜像仓库，支持Docker Hub、GHCR和CNB三个镜像源：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="92" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;registry&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;droid-ddk&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;github&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ghcr.io/feicong/droid-ddk&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;docker&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;docker.io/fsx199/droid-ddk&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;cnb&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;docker.cnb.cool/feicong/droid-ddk/droid-ddk&#34;</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span></code></pre><p data-line="104" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所有构建脚本、Dockerfile、CI工作流和dddk命令行工具都从这一个文件读取配置。新增一个内核版本，只需在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mapping.json</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">matrix</span></code><span leaf="">数组中加一条记录。</span></p><h3 data-line="106" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2.2 支持的GKI目标版本</span></h3><p data-line="108" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk当前覆盖9个目标版本，横跨Android 13到Android 17，如表1所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">dddk目标</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">ACK源码分支</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">NDK</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">Rust</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android13-5.15</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android13-5.15-lts</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android14-5.15</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android14-5.15-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android14-6.1</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android14-6.1-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android15-6.1</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android14-6.1-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android15-6.6</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android15-6.6-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android16-6.6</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android15-6.6-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r25c</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android16-6.12</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android16-6.12-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r29</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">1.82.0</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android17-6.12</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android16-6.12-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r29</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">1.82.0</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android17-6.18</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android17-6.18-lts</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">r29</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">1.91.1</span></p></td></tr></tbody></table><p data-line="122" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表1 dddk支持的GKI目标版本</span></p><p data-line="124" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">其中</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android15-6.1</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android16-6.6</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android17-6.12</span></code><span leaf="">是三个&#34;跨代&#34;目标，用于设备升级了Android大版本但仍使用上一代内核的场景。选择目标时以设备</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">uname -r</span></code><span leaf="">输出中的ACK代际和内核版本为准。</span></p><h2 data-line="126" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3 原生编译加速的实现</span></h2><h3 data-line="128" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3.1 用NDK替代AOSP Clang</span></h3><p data-line="130" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">AOSP预编译的Clang工具链只有x86_64版本。要在ARM64宿主机上原生编译ARM64内核模块，需要一套能在ARM64上运行、输出ARM64目标代码的交叉编译工具链。</span></p><p data-line="132" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Android NDK天然满足这个需求。NDK中的Clang本身就是交叉编译器，支持多种目标架构。Google官方发布的NDK包含x86_64宿主版本，社区项目SnowNF/ndk-aarch64-linux提供了ARM64宿主版本。</span></p><p data-line="134" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk的解法是x86_64宿主机使用Google官方NDK，ARM64宿主机使用SnowNF ARM64 NDK。两者的Clang版本、头文件和链接器完全一致，区别仅在于宿主二进制文件的架构。</span></p><p data-line="136" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">映射关系在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mapping.json</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">platforms</span></code><span leaf="">节中定义：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="138" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;linux-amd64&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;toolchainKind&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android-ndk&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;ndks&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;r25c&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;url&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://dl.google.com/android/repository/android-ndk-r25c-linux.zip" target="_blank">https://dl.google.com/android/repository/android-ndk-r25c-linux.zip</a>&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;sha256&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;769ee342ea75f80619d985c2da990c48b3d8eaf45f48783a2d48870d04b46108&#34;</span></span><br/><span><span leaf="">}</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;r29&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;url&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://dl.google.com/android/repository/android-ndk-r29-linux.zip" target="_blank">https://dl.google.com/android/repository/android-ndk-r29-linux.zip</a>&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;sha256&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;4abbbcdc842f3d4879206e9695d52709603e52dd68d3c1fff04b3b5e7a308ecf&#34;</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;linux-arm64&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;toolchainKind&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android-ndk&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;ndks&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;r25c&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;url&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://github.com/SnowNF/ndk-aarch64-linux/releases/download/0.0.1/android-ndk-r25c-aarch64-linux.tgz" target="_blank">https://github.com/SnowNF/ndk-aarch64-linux/releases/download/0.0.1/android-ndk-r25c-aarch64-linux.tgz</a>&#34;</span></span><br/><span><span leaf="">}</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;r29&#34;</span></span><span><span leaf="">:</span></span><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;url&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://github.com/SnowNF/ndk-aarch64-linux/releases/download/0.0.2/android-ndk-r29-linux-aarch64.tar.gz" target="_blank">https://github.com/SnowNF/ndk-aarch64-linux/releases/download/0.0.2/android-ndk-r29-linux-aarch64.tar.gz</a>&#34;</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span><br/><span><span leaf="">}</span></span></code></pre><p data-line="167" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Android 13到15使用NDK r25c，Android 16和17使用NDK r29。</span></p><h3 data-line="169" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3.2 NDK作为内核编译工具链的适配</span></h3><p data-line="171" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">NDK虽然自带Clang，但内核构建系统默认按AOSP Clang的目录布局寻找工具。使用NDK需要显式指定每一个工具的路径。dddk通过环境变量完成这个映射：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="173" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># dddk脚本中的NDK工具链配置</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> CC=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/clang&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> LD=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/ld.lld&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> AR=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/llvm-ar&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> NM=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/llvm-nm&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> OBJCOPY=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/llvm-objcopy&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> OBJDUMP=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/llvm-objdump&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> STRIP=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/llvm-strip&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> HOSTCC=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/clang&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> HOSTCXX=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$CLANG_PATH</span></span><span leaf="">/clang++&#34;</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> CLANG_TRIPLE=aarch64-linux-gnu-</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> CROSS_COMPILE=aarch64-linux-gnu-</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> ARCH=arm64</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> LLVM=1</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">export</span></span><span leaf=""> LLVM_IAS=1</span></code></pre><p data-line="191" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Docker镜像的Toolchain层（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ddk-toolchain/Dockerfile</span></code><span leaf="">）中，NDK被下载后，其Clang目录通过符号链接统一到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/opt/droid-ddk/toolchain/bin</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="193" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">RUN</span></span><span><span style="color: rgb(0, 122, 204);"><span leaf="">set</span></span><span leaf=""> -eux; \</span><br/><span leaf="">    toolchain_bin=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/opt/droid-ddk/ndk/</span><span style="color: rgb(0, 128, 0);"><span leaf="">${NDK_ROOT}</span></span><span leaf="">/toolchains/llvm/prebuilt/linux-x86_64/bin&#34;</span></span><span leaf="">; \</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">mkdir</span></span><span leaf=""> -p /opt/droid-ddk/toolchain; \</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">ln</span></span><span leaf=""> -s </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$toolchain_bin</span></span><span leaf="">&#34;</span></span><span leaf=""> /opt/droid-ddk/toolchain/bin</span></span></code></pre><p data-line="200" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这样上层的DDK镜像和dddk命令行都通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/opt/droid-ddk/toolchain/bin</span></code><span leaf="">访问工具链，无需关心底层是AOSP Clang还是NDK。</span></p><h3 data-line="202" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3.3 Ubuntu 26.04构建环境适配</span></h3><p data-line="204" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk的基础构建镜像（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ddk-builder</span></code><span leaf="">）基于Ubuntu 26.04。这个选择带来了一些兼容性问题需要处理。</span></p><p data-line="206" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一个问题是libxml2版本冲突。Ubuntu 26.04自带libxml2 2.14，而部分旧版内核的构建脚本依赖libxml2 2.9的API。Builder镜像单独编译了一份libxml2 2.9.14放在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/opt/droid-ddk/compat/lib</span></code><span leaf="">，通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LD_LIBRARY_PATH</span></code><span leaf="">注入：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="208" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">RUN</span></span><span><span style="color: rgb(0, 122, 204);"><span leaf="">set</span></span><span leaf=""> -eux; \</span><br/><span leaf="">    curl --retry 3 -fsSL </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$LIBXML2_COMPAT_URL</span></span><span leaf="">&#34;</span></span><span leaf=""> -o /tmp/libxml2.tar.xz; \</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">cd</span></span><span leaf=""> /tmp/libxml2-2.9.14; \</span><br/><span leaf="">    ./configure --prefix=/opt/droid-ddk/compat \</span><br/><span leaf="">      --without-python --without-lzma --without-iconv \</span><br/><span leaf="">      --disable-static; \</span><br/><span leaf="">    make -j</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(43, 145, 175);"><span leaf="">$(nproc)</span></span><span leaf="">&#34;</span></span><span leaf="">; make install</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">ENV</span></span><span leaf=""> LD_LIBRARY_PATH=/opt/droid-ddk/compat/lib</span></code></pre><p data-line="220" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二个问题是宿主编译器兼容性标志。Android 14的6.1内核在新版Clang下会出现</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">incompatible-pointer-types-discards-qualifiers</span></code><span leaf="">编译错误。dddk为这些目标设置了额外的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">HOSTCFLAGS</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="222" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span><span leaf="">{</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;android&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android14-6.1&#34;</span></span><span><span leaf="">,</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">&#34;hostCFlags&#34;</span></span><span><span leaf="">:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;-Wno-error=incompatible-pointer-types-discards-qualifiers -DUSE_PKCS11_ENGINE&#34;</span></span><br/><span><span leaf="">}</span></span></code></pre><p data-line="229" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这些标志在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mapping.json</span></code><span leaf="">中按目标配置，构建脚本自动读取并传入。</span></p><h3 data-line="231" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3.4 原生编译与模拟编译的性能对比</span></h3><p data-line="233" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">原生编译和QEMU模拟编译的性能差距很大。如表2所示，以编译一个典型的内核模块为例。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">场景</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">耗时</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">x86_64 Runner加x86_64镜像（原生）</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">约30秒</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ARM64 Runner加ARM64镜像（原生）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">约30秒</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ARM64 Runner加x86_64镜像（QEMU模拟）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">5分钟以上</span></p></td></tr></tbody></table><p data-line="241" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表2 原生编译与模拟编译耗时对比</span></p><p data-line="243" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">双架构原生支持让ARM64 Runner不再是二等公民，CI矩阵可以自由选择宿主架构。</span></p><h2 data-line="245" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">4 Android 17支持的关键细节</span></h2><p data-line="247" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Android 17带来了两个重要变化，分别是6.18内核分支和Rust内核模块支持的升级。</span></p><h3 data-line="249" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">4.1 新内核分支android17-6.18</span></h3><p data-line="251" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Android 17引入了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android17-6.18-lts</span></code><span leaf="">分支，使用最新的Clang </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">clang-r584948c</span></code><span leaf="">（来自</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">main-kernel-2026</span></code><span leaf="">分支）和NDK r29。这是截至目前ACK支持的最新内核版本。</span></p><h3 data-line="253" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">4.2 Rust工具链的双平台安装</span></h3><p data-line="255" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">从Android 16的6.12内核开始，GKI引入了Rust内核模块支持。Android 17进一步将Rust版本从1.82.0升级到1.91.1。</span></p><p data-line="257" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">x86_64和ARM64宿主机上的Rust工具链安装方式不同。</span></p><p data-line="259" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">x86_64宿主机使用AOSP预编译的Rust工具链，从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">platform/prebuilts/rust-toolchain/linux-x86</span></code><span leaf="">仓库下载归档包，与AOSP Clang类似的分发方式：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="261" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># build-droid-ddk.py中的Rust预构建下载</span></span><br/><span leaf="">url = </span><span style="color: rgb(163, 21, 21);"><span leaf="">f&#34;<a href="https://android.googlesource.com/" target="_blank">https://android.googlesource.com/</a></span><span style="color: rgb(43, 145, 175);"><span leaf="">{repo}</span></span><span leaf="">/+archive/refs/heads/</span><span style="color: rgb(43, 145, 175);"><span leaf="">{branch}</span></span><span leaf="">/</span><span style="color: rgb(43, 145, 175);"><span leaf="">{archive_path}</span></span><span leaf="">.tar.gz&#34;</span></span></code></pre><p data-line="266" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ARM64宿主机因为AOSP不提供ARM64版本的预编译Rust，需要通过rustup在线安装：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="268" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># ARM64 Rust安装流程</span></span><br/><span leaf="">curl --proto </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;=https&#39;</span></span><span leaf=""> --tlsv1.2 -fsSL <a href="https://sh.rustup.rs" target="_blank">https://sh.rustup.rs</a> | sh -s -- -y --no-modify-path</span><br/><span leaf="">rustup toolchain install 1.91.1 --profile minimal --component rust-src,rustfmt</span><br/><span leaf="">cargo +1.91.1 install bindgen-cli --version 0.72.1 --locked</span></code></pre><p data-line="275" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里有一个不明显但关键的细节，即bindgen与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CLANG_PATH</span></code><span leaf="">的冲突。dddk的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CLANG_PATH</span></code><span leaf="">环境变量指向NDK的Clang目录，但</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">bindgen-cli</span></code><span leaf="">在检测到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CLANG_PATH</span></code><span leaf="">是一个目录（而非文件路径）时会行为异常。解法是为ARM64创建一个wrapper脚本，在调用bindgen前清除</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CLANG_PATH</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="277" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(43, 145, 175);"><span leaf="">#!/bin/sh</span></span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">unset</span></span><span leaf=""> CLANG_PATH</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">exec</span></span><span leaf=""> /opt/droid-ddk/.cargo/bin/bindgen </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$@</span></span><span leaf="">&#34;</span></span></code></pre><p data-line="283" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个wrapper放在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/opt/droid-ddk/bin/bindgen</span></code><span leaf="">，PATH优先级高于cargo安装的原始bindgen。</span></p><h3 data-line="285" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">4.3 CFI整数规范化配置</span></h3><p data-line="287" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Android 16和17的6.12内核还需要启用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CFI_ICALL_NORMALIZE_INTEGERS</span></code><span leaf="">配置项，否则CFI（控制流完整性）检查会在模块加载时触发保护。构建脚本中对应的处理如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="289" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># build-droid-ddk.py中的内核配置</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> android_branch </span><span style="color: rgb(0, 0, 255);"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android16-6.12&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;android17-6.12&#34;</span></span><span leaf="">):</span><br/><span leaf="">    run(</span><span style="color: rgb(163, 21, 21);"><span leaf="">f&#34;</span><span style="color: rgb(43, 145, 175);"><span leaf="">{scripts_config}</span></span><span leaf=""> --file </span><span style="color: rgb(43, 145, 175);"><span leaf="">{config_file}</span></span><span leaf=""> -e CFI_ICALL_NORMALIZE_INTEGERS&#34;</span></span><span leaf="">)</span></code></pre><p data-line="295" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">需要注意的是，这里使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CFI_ICALL_NORMALIZE_INTEGERS</span></code><span leaf="">而不是带</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CONFIG_</span></code><span leaf="">前缀的完整名，因为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">scripts/config</span></code><span leaf="">工具会自动添加前缀。</span></p><h2 data-line="297" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5 dddk命令行工具使用</span></h2><p data-line="299" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">dddk</span></code><span leaf="">是一个独立的Bash脚本，安装后作为统一入口管理所有操作。</span></p><h3 data-line="301" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.1 安装dddk</span></h3><p data-line="303" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在Linux宿主机上执行以下命令安装：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="305" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">curl -fsSL <a href="https://raw.githubusercontent.com/feicong/droid-ddk/main/host/install.sh" target="_blank">https://raw.githubusercontent.com/feicong/droid-ddk/main/host/install.sh</a> | sudo bash</span></code></pre><p data-line="309" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安装脚本将dddk放到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/usr/local/bin/dddk</span></code><span leaf="">。首次运行时会引导选择运行模式（docker或local）和镜像源（docker、github或cnb）。配置保存在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">~/.droid-ddk/</span></code><span leaf="">目录下。</span></p><h3 data-line="311" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.2 基本工作流</span></h3><p data-line="313" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安装完成后，通过以下命令完成首次环境准备：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="315" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 更新dddk脚本和mapping.json</span></span><br/><span leaf="">dddk update</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 查看所有可用目标</span></span><br/><span leaf="">dddk list-all</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 拉取目标镜像</span></span><br/><span leaf="">dddk pull --target android17-6.18</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 查看已拉取的镜像</span></span><br/><span leaf="">dddk list</span></code></pre><h3 data-line="329" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.3 编译内核模块</span></h3><p data-line="331" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模块目录至少需要包含源码文件和一个Kbuild兼容的Makefile：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="333" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">my-driver/</span><br/><span leaf="">  my_driver.c</span><br/><span leaf="">  Makefile</span></code></pre><p data-line="339" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Makefile内容如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="341" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">obj-m += my_driver.o</span></code></pre><p data-line="345" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">编译、清理和进入构建环境的命令：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="347" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">MODULE_DIR=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$PWD</span></span><span leaf="">/my-driver&#34;</span></span><br/><span leaf="">TARGET=android17-6.18</span><br/><span leaf="">dddk build --target </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$TARGET</span></span><span leaf="">&#34;</span></span><span leaf=""> --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$MODULE_DIR</span></span><span leaf="">&#34;</span></span><br/><span leaf="">dddk build --target </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$TARGET</span></span><span leaf="">&#34;</span></span><span leaf=""> --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$MODULE_DIR</span></span><span leaf="">&#34;</span></span><span leaf=""> -- -j8 V=1</span><br/><span leaf="">dddk clean --target </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$TARGET</span></span><span leaf="">&#34;</span></span><span leaf=""> --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$MODULE_DIR</span></span><span leaf="">&#34;</span></span><br/><span leaf="">dddk shell --target </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$TARGET</span></span><span leaf="">&#34;</span></span><span leaf=""> --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$MODULE_DIR</span></span><span leaf="">&#34;</span></span></code></pre><p data-line="357" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--module</span></code><span leaf="">参数将模块目录挂载到镜像内的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/build</span></code><span leaf="">，执行与镜像内核构建目录匹配的标准Kbuild命令。生成的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ko</span></code><span leaf="">文件直接写入模块目录。</span></p><h3 data-line="359" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.4 使用.ddk-version固定目标</span></h3><p data-line="361" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在项目根目录创建</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ddk-version</span></code><span leaf="">文件可以省去每次输入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--target</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="363" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 122, 204);"><span leaf="">echo</span></span><span leaf=""> android17-6.18 &gt; .ddk-version</span><br/><span leaf="">dddk pull</span><br/><span leaf="">dddk build --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$PWD</span></span><span leaf="">/my-driver&#34;</span></span><span leaf=""> -- -j8</span><br/><span leaf="">dddk clean --module </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$PWD</span></span><span leaf="">/my-driver&#34;</span></span></code></pre><p data-line="370" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">目标解析的优先级为：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--target</span></code><span leaf="">命令行参数优先于</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ddk-version</span></code><span leaf="">文件，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ddk-version</span></code><span leaf="">文件优先于</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DDK_TARGET</span></code><span leaf="">环境变量。</span></p><h3 data-line="372" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.5 传递环境变量和自定义make参数</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="374" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 传递内核配置</span></span><br/><span leaf="">dddk build -t android17-6.18 --</span><span style="color: rgb(0, 122, 204);"><span leaf="">env</span></span><span leaf=""> CONFIG_FOO=y -e CONFIG_BAR=n</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 传递make参数，双横线之后的参数传给make</span></span><br/><span leaf="">dddk build -t android17-6.18 -- CFLAGS=-O2 V=1</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 生成编译数据库，用于clangd代码补全</span></span><br/><span leaf="">dddk compdb android17-6.18</span></code></pre><h3 data-line="385" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">5.6 Docker模式与Local模式</span></h3><p data-line="387" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk支持两种运行模式。</span></p><p data-line="389" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Docker模式是默认模式，通过Docker容器运行编译，无需在宿主机安装任何工具链。镜像包含完整的编译环境。</span></p><p data-line="391" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Local模式直接在宿主机上使用本地安装的工具链编译，适合已经部署好DDK环境的服务器或需要更快编译速度的场景。配置后通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DDK_ROOT</span></code><span leaf="">环境变量（默认</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/opt/droid-ddk</span></code><span leaf="">）定位工具链和内核源码。Local模式下的目录布局如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="393" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">/opt/droid-ddk/</span><br/><span leaf="">  ndk/              NDK工具链</span><br/><span leaf="">  rust/             Rust工具链</span><br/><span leaf="">  src/              内核源码</span><br/><span leaf="">    android13-5.15/</span><br/><span leaf="">    android17-6.18/</span><br/><span leaf="">    ...</span><br/><span leaf="">  kdir/             内核构建输出</span><br/><span leaf="">    linux-amd64/</span><br/><span leaf="">      android17-6.18/</span><br/><span leaf="">    linux-arm64/</span><br/><span leaf="">      android17-6.18/</span></code></pre><p data-line="408" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Local模式对CI环境或构建服务器特别有用，避免每次构建都拉取数GB的Docker镜像。</span></p><h2 data-line="410" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">6 在GitHub Actions中编译内核模块</span></h2><p data-line="412" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk提供了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">feicong/android-kernel-build-action@v2</span></code><span leaf=""> Action，用于在GitHub Actions中编译内核模块。</span></p><h3 data-line="414" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">6.1 基本用法</span></h3><p data-line="416" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">工作流分为两个Job，先上传模块源码为Artifact，再调用Action编译：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="418" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(255, 0, 0);"><span leaf="">name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">Build</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">Kernel</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">Module</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">on:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">push:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">branches:</span></span><span leaf=""> [</span><span style="color: rgb(163, 21, 21);"><span leaf="">main</span></span><span leaf="">]</span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">workflow_dispatch:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">jobs:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">upload-module:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">runs-on:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ubuntu-24.04</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">steps:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">actions/checkout@v6</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">actions/upload-artifact@v7</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">with:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">path:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">path/to/hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">build-module:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">needs:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">upload-module</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">runs-on:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ubuntu-24.04</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">steps:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">feicong/android-kernel-build-action@v2</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">with:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">tag:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android17-6.18</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">arch:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aarch64</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-path:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span></code></pre><p data-line="448" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模块目录需要包含</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Makefile</span></code><span leaf="">和同名</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.c</span></code><span leaf="">源文件。编译完成后输出Artifact名为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Image-TAG-ARCH</span></code><span leaf="">，其中的模块文件名为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">TAG_MODULE_NAME.ko</span></code><span leaf="">。</span></p><h3 data-line="450" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">6.2 多目标矩阵编译</span></h3><p data-line="452" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果需要同时编译多个内核版本的模块，可以使用矩阵策略：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="454" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(255, 0, 0);"><span leaf="">jobs:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">upload-module:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">runs-on:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ubuntu-24.04</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">steps:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">actions/checkout@v6</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">actions/upload-artifact@v7</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">with:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">path:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">drivers/hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">build-module:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">needs:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">upload-module</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">runs-on:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ubuntu-24.04</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">strategy:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">fail-fast:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">matrix:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">target:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android14-6.1</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android15-6.6</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android16-6.12</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android17-6.18</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">steps:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">feicong/android-kernel-build-action@v2</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">with:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">tag:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">${{</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">matrix.target</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">}}</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">arch:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aarch64</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-path:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span></code></pre><p data-line="485" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这样一次Push就能自动产出四个内核版本的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.ko</span></code><span leaf="">文件。</span></p><h3 data-line="487" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">6.3 使用ARM64 Runner加速</span></h3><p data-line="489" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果仓库有ARM64 Runner可用，可以利用原生编译避免模拟开销：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="491" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(255, 0, 0);"><span leaf="">build-module:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">needs:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">upload-module</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">runs-on:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ubuntu-24.04-arm</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">steps:</span></span><br/><span style="color: rgb(0, 176, 232);"><span leaf="">-</span></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">feicong/android-kernel-build-action@v2</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">with:</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">tag:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">android17-6.18</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">arch:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aarch64</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-path:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span><br/><span style="color: rgb(255, 0, 0);"><span leaf="">module-name:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">hello-ko</span></span></code></pre><p data-line="504" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk镜像同时发布x86_64和ARM64版本，Action会根据Runner架构自动拉取匹配的镜像。</span></p><h2 data-line="506" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">7 镜像构建流水线</span></h2><p data-line="508" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk的镜像构建本身也完全自动化。理解这个流水线有助于需要自建私有镜像的场景。</span></p><h3 data-line="510" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">7.1 四层镜像体系</span></h3><p data-line="512" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk的镜像采用四层结构，如表3所示。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">镜像</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">基础镜像</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">内容</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">droid-ddk-builder</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Ubuntu 26.04</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">gcc、make、flex、bison、libelf-dev、libssl-dev等构建依赖</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">droid-ddk-toolchain</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">droid-ddk-builder</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">NDK和Rust工具链，按目标版本分tag</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">droid-ddk</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">droid-ddk-toolchain</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">内核源码加完整kdir，用于高级开发和调试</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">droid-ddk-min</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">droid-ddk-toolchain</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">内核源码加精简kdir，满足绝大多数模块编译需求</span></p></td></tr></tbody></table><p data-line="521" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">表3 dddk镜像层次结构</span></p><p data-line="523" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">droid-ddk-builder层与目标版本无关，所有目标共用。droid-ddk-toolchain层每个目标版本有独立的tag，例如</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">droid-ddk-toolchain:android17-6.18</span></code><span leaf="">。精简镜像droid-ddk-min的内核构建输出仅包含</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">modules_prepare</span></code><span leaf="">的结果加上补齐的头文件和构建文件，体积显著小于完整镜像。</span></p><h3 data-line="525" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">7.2 预构建产物管理</span></h3><p data-line="527" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">内核源码和kdir构建输出以</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.tar.zst</span></code><span leaf="">归档的形式存储在GitHub Release（tag </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">prebuilts-v1</span></code><span leaf="">）中。Dockerfile通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--mount=type=bind</span></code><span leaf="">从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">prebuilts</span></code><span leaf="">目录读取归档并解压：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="529" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">RUN</span></span><span><span leaf=""> --mount=</span><span style="color: rgb(0, 122, 204);"><span leaf="">type</span></span><span leaf="">=</span><span style="color: rgb(0, 122, 204);"><span leaf="">bind</span></span><span leaf="">,</span><span style="color: rgb(0, 122, 204);"><span leaf="">source</span></span><span leaf="">=prebuilts,target=/mnt/prebuilts,</span><span style="color: rgb(0, 122, 204);"><span leaf="">readonly</span></span><span leaf=""> \</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">set</span></span><span leaf=""> -eux; \</span><br/><span leaf="">    tar -xf </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/mnt/prebuilts/src/src.</span><span style="color: rgb(0, 128, 0);"><span leaf="">${ANDROID_VER}</span></span><span leaf="">.tar.zst&#34;</span></span><span leaf=""> -C /opt/droid-ddk/src; \</span><br/><span leaf="">    tar -xf </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/mnt/prebuilts/kdir/</span><span style="color: rgb(0, 128, 0);"><span leaf="">${artifact_platform}</span></span><span leaf="">/kdir.</span><span style="color: rgb(0, 128, 0);"><span leaf="">${ANDROID_VER}</span></span><span leaf="">.tar.zst&#34;</span></span><span leaf=""> \</span><br/><span leaf="">        -C </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/opt/droid-ddk/kdir/</span><span style="color: rgb(0, 128, 0);"><span leaf="">${artifact_platform}</span></span><span leaf="">&#34;</span></span></span></code></pre><p data-line="537" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">publish-prebuilts.yml</span></code><span leaf="">工作流负责在ARM64和x86_64 Runner上分别编译内核并打包上传归档。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">release.yml</span></code><span leaf="">工作流则从归档构建最终的Docker镜像。整个流程为：先发布预构建产物，然后构建builder镜像，接着在两个平台上并行构建toolchain镜像并合并manifest，最后在两个平台上并行构建ddk和ddk-min镜像并合并manifest。</span></p><p data-line="539" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">每个目标版本的镜像都发布为多架构manifest，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">docker pull</span></code><span leaf="">时自动选择匹配的架构。镜像同时推送到Docker Hub（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">docker.io/fsx199/droid-ddk</span></code><span leaf="">）和GHCR（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ghcr.io/feicong/droid-ddk</span></code><span leaf="">）。</span></p><h3 data-line="541" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">7.3 本地构建镜像</span></h3><p data-line="543" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果需要修改基础环境或添加自定义依赖，可以在本地构建：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="545" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 构建builder镜像</span></span><br/><span leaf="">make -C docker builder</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 构建特定目标的toolchain镜像</span></span><br/><span leaf="">make -C docker toolchains VER=android17-6.18</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 构建DDK镜像，需要先准备prebuilts</span></span><br/><span leaf="">make -C docker build VER=android17-6.18</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 构建精简镜像</span></span><br/><span leaf="">make -C docker build-min VER=android17-6.18</span></code></pre><h2 data-line="559" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">8 总结</span></h2><p data-line="561" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">dddk在原版ddk的基础上解决了三个核心问题。</span></p><p data-line="563" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第一是原生编译加速。用Android NDK替代AOSP Clang，实现x86_64和ARM64双架构原生编译，消除QEMU模拟带来的数倍性能损失。</span></p><p data-line="565" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第二是Android 17全版本覆盖。从Android 13的5.15内核到Android 17的6.18内核，覆盖9个GKI目标版本，包括Rust内核模块编译支持。</span></p><p data-line="567" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">第三是CI开箱即用。提供</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">feicong/android-kernel-build-action@v2</span></code><span leaf=""> Action和完整的镜像构建流水线，一段YAML即可在GitHub Actions中编译内核模块。</span></p><p data-line="569" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">项目地址：<a href="https://github.com/feicong/droid-ddk" target="_blank">https://github.com/feicong/droid-ddk</a></span></p><p data-line="571" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安装命令：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="573" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">curl -fsSL <a href="https://raw.githubusercontent.com/feicong/droid-ddk/main/host/install.sh" target="_blank">https://raw.githubusercontent.com/feicong/droid-ddk/main/host/install.sh</a> | sudo bash</span></code></pre><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4570698a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485369%26idx%3D1%26sn%3D0cc7abb85722c7d8533cd09b91355b26">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 26 Jul 2026 20:08:00 +0800</pubDate>
    </item>
    <item>
      <title>我有一机，可破万检！它叫多多云机，简称多云</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485364&amp;idx=1&amp;sn=f53b2f0bbd5c09b9c67c5dbdd7214594</link>
      <description>多多完美云机的实现方案为更通用的跨平台实现方案</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-07-18 15:09</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7c7273d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT8HsS0wXP4qsZufwfv8BhvwXVF2crzsjTCbfAgya2Y4kxUb7m1Vphz6ohT5cgJdAGUS39HBK73z4yVibUogFOY3flS4IDOXSl7o%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">多多完美云机的实现方案为更通用的跨平台实现方案。不采用任何国内已知的如Cuttlefish/AVD/Redroid/LXC/Waydroid等方案来实现。</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">目前完美云机课程早鸟半价优惠活动，截至到本月25日结束。有兴趣的朋友要快来了！</span></span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">本云机的目标是为安全逆向分析与木鱼沙箱动态分析提供后端技术赋能。不参与任何</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: bold;">黑灰产业务，找我买成品镜像的请绕道！</span></span></p><p data-pm-slice="2 2 []"><span leaf=""><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">声明：以下演示为多多云机真实效果，无任何功能作假与不良引导，更无任何黑灰</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">产业功能</span></span><span leaf=""><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">暗示。</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001644" data-s="300,640" type="block" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=66a4ebac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT9XDLbV8DpRnG5kmpD8YSVyNxnianjnqxK6EN3WLCKQvk6Y9MBo3yYwOWCn5U4RyC0aX4yjV97fFjfUQr2tFibVic2OAYiaNjfBB3Q%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001645" data-s="300,640" type="block" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=a0979d43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT8te5esfeqJnclvYpGsso38337cPbibfv3ORicWmkU6CeiaxM6blVmIsEMGG5Qf48ibtrqskwwEpQe60t4Y83LVWAHl2iaMPXybjeJc%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001647" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=5cc0efb6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT8CkNArPt5MhbiapTNWDNPSvs7xKWFUrjG02Bs5Qc6OFWia7SZcpX3cUpS3WIYnnb2hjHCp7Zxq68nib3PSHX4TqoLVyNvbrgCSvI%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001649" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=40de4b50&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeTico6V65r3mpVGwOTicRKXOdxNkEeIU4oA0HhbNlkQoiaM2UnZQaS0TMgvFHAdMaIfYNwicOH618KppkKkUG0VGicVU5tJJjXL1WWkU%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001653" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=b65b8ed8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT9a50NgLcjCvomoa5P5Pm72C0rAMictRvaxOjgEyF5qkfe3t1TVvXicYXlm35VVDQZkkCiaXnsGlQFia6jLN8E8DiciaoyPlmYZCibfPE%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001654" data-s="300,640" type="block" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=f21d1c63&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT8nJ1IRA2tmBCATPAcmxSnUn6dNsia8q1JvW3KmFlaJa8cpJ19ibuVC8sokrMpXaeHZEoTUicXNt7Zk2e7AdgB9BbiccrtlsdGvia5o%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001657" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=a5780d75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT9J0Xan9xMFHLDT2RqLjgczquTwT9xaK9rSlicMU5L316ODDtoTldZYWMFibdAR5N79JebzwxV2eR30xJqO7Ngiby5XMeQxdRHEA4%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001659" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=1965be3c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeTicmR4Aaz2cDic2Omib9XKCkd2icaX0BnQ5mQIDguA46Ag2halcicvH0gNPCfdAENBTGeTKLpyxhuZicXhMaNLYDwmictuUGIEiavqCqjg%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001712" data-s="300,640" type="block" data-type="gif" style="" src="https://wechat2rss.xlab.app/img-proxy/?k=774f981c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeTib9ZE7X3ibSAjAibuR3GRofZOWpZf1QKyG78o8EV7aehFXvp4YNaoicFf6dhqNpTqDFzv9Pzhm0NM3xj2MFTibicwlMqF2wNW5PiaVbU%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001704" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=28f3de9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT9ygJpZicGic1b9m2319X4ysxYj7ia8BTkbjThiaJ8N71GTph3hzFCuyxs0poRZtMJPBdb0PP3NtIVZBMeKM4UqywSRn7JMqYXpx0c%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001701" data-ratio="2.236666666666667" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=d122a55e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT8CCKGr9TLx6rDRQ7LnmtDJJtRwcPRYqtDmILqw5lGeOszDYRhJvoeYmo8SFPl2aCDgnelSaQofbO31AaV9al1Vp2Bqfx7kSAk%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001709" data-ratio="2.0733333333333333" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=789636bb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeTibD0icVkWssc4hKQ0MoRDdBCJd4M0ib61svI37vvKOkkao1fOqQvhaoVIJjDPJDfNC3gJlYTpUNtaAoDMUS92xcRrD9gHFoqY9S4%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001708" data-ratio="2.0733333333333333" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=82fea871&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT97beHoeSCbXLQIibmJqvU5kliciaI4KMaDGla8McUpFqaC0ekibUbOLUTWJicwWMcxlWk6vZibyu9E2lwUgSdaVuJY4rDDKibCHJHczU%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001713" data-ratio="1.9363920750782064" data-s="300,640" type="block" data-type="gif" data-w="959" src="https://wechat2rss.xlab.app/img-proxy/?k=54b8ac91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT8rpTcCSWleynNmaIbYJRLvLWWdGIaLSHKPO2td2qXj47ZeXbuibnDeYqDjaldHco5R8NSsrNk1Mia36DnAnSOsMmerjt8qOzKhU%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001707" data-ratio="1.9383333333333332" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=5b3598e4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT9tlXSN6Pt3Qdz6nHn8pibn4sMVNzkQ3xT52gdmEQibX5dsZJO5wH1WPzeMZxkbbCicJJbOCyRpPmoQc9Aibf9tVEa3Unko2EEUGQI%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001705" data-ratio="2.228125" data-s="300,640" type="block" data-type="gif" data-w="320" src="https://wechat2rss.xlab.app/img-proxy/?k=0a0f7981&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT9LECqRbYPP28oic7IVL9nP4kVJbXohDLRpPHCJiamX5ScmpeBE5WTyia9EzaJewZQGURl7icamiba3TtNPxgmu880DQdIgzh9OiaSiaU%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001711" data-ratio="1.935" data-s="300,640" type="block" data-type="gif" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=85c40f31&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT8Rl8opANz4NDablSPURu9vucrwZIQyn5HHAiceSZCq5XdBKn81KM62XTaAdgQsH9lM8atibcibepG4TkkDySuUw7kMp72tAZYJt4%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001710" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e558cf01&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTicfqFjgcYxdK6VsqPIF3xzRbO5vLSia5zUU68BfDeumBSDvbCk6bNxpYslTicI7icrOstC9J74gLmibBT1ojk3HttITFWIqz0dibzQE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]"><span textstyle="" style="font-weight: bold;">目前完美云机课程早鸟半价优惠活动，截至到本月25日结束。有兴趣的朋友要快来了！</span></span></p></div><p><span leaf="">云机购课咨询加WX：feicongcn</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=88100bd9&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485364%26idx%3D1%26sn%3Df53b2f0bbd5c09b9c67c5dbdd7214594">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 18 Jul 2026 15:09:00 +0800</pubDate>
    </item>
    <item>
      <title>来了！你要的安卓完美云手机方案</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485290&amp;idx=1&amp;sn=0c8ca70d2b65f48d62f2d07a90b058ae</link>
      <description>一款个人认为目前最完美的安卓云手机方案。</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-07-14 11:42</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=1ffaa122&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT8fUTISnRBPYBaG7dCWbpHczCQoZFTMsaGVibEjTiapDrzfCcBLO8GLWaBQhGj4Usjzs22fvgJXia3icOtUPsgSbdlBYSzpic6kkjLc%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>一款个人认为目前最完美的安卓云手机方案。</p>
  <h1 cid="n0" mdtype="heading" style="box-sizing: border-box;" data-pm-slice="0 0 []"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">这是一款个人认为目前<span textstyle="" style="font-weight: bold;">最完美</span>的安卓云手机方案。因为它：</span></span></h1><ul style="box-sizing: border-box;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">解决了安装部署挑硬件问题，支持全系列ARM64的开发板与电脑</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持macOS/Linux平台，甚至一些Win平台也可以</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持本地部署云部署与Docker容器化</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持GPU图形加速</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持多个安卓最新全版本系统</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持全球几乎所有安卓安卓机型定制</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">支持实例多开与App多开</span></span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span leaf="">完美机型可登Play商店与过环境检测</span></p></li><li style="box-sizing: border-box;"><p cid="n6" mdtype="paragraph" style="box-sizing: border-box;"><span leaf="">只要硬件IO允许无任何多开限制</span></p></li></ul><h2 cid="n19" mdtype="heading" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf=""><span textstyle="" style="font-weight: bold;">运行要求</span></span></span></h2><ul style="box-sizing: border-box;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p cid="n30" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">启动内存不能低于4096MB，宿主可探测物理内存低于4GB时直接失败。</span></span></p></li><li style="box-sizing: border-box;"><p cid="n32" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">系统可用空间不能低于50GB。</span></span></p></li></ul><p cid="n32" mdtype="paragraph" style="box-sizing:border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="" data-pm-slice="1 1 [&#34;heading&#34;,{&#34;tagName&#34;:&#34;h2&#34;,&#34;attributes&#34;:{&#34;cid&#34;:&#34;n33&#34;,&#34;mdtype&#34;:&#34;heading&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;,&#34;level&#34;:2},&#34;node&#34;,{&#34;tagName&#34;:&#34;span&#34;,&#34;attributes&#34;:{&#34;md-inline&#34;:&#34;plain&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-weight: bold;">云机效果</span></span></span></p><p data-pm-slice="0 0 []"><span style="color: #000000;"><span leaf="">课程云机会支持全球多款机型。动图演示为云机型号Pixel6的安卓15版本。</span></span></p><p data-pm-slice="0 0 []"><span leaf="">感受GPU加速，无卡顿（动画无加速）</span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.9366666666666668" data-s="300,640" data-type="gif" data-w="600" type="block" data-imgfileid="100001641" src="https://wechat2rss.xlab.app/img-proxy/?k=3e9ee923&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT8VbB8G6K97crrVdpGib4AF5AhribXPaicJB7ucdqRl91NRficPLZ0miabjTicia4quduROhqjKcNlhGr9fKMrmG6NNY66cpSwIFY9cmI%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p data-pm-slice="0 0 []"><span style="color: #000000;"><span leaf="">cpu-z检测处理器</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.9383333333333332" data-s="300,640" data-type="gif" data-w="600" type="block" data-imgfileid="100001640" src="https://wechat2rss.xlab.app/img-proxy/?k=4ed7cdda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT8eqN0mvrLYhdM3G5EHTIrNoOLiccz9ocKTFSJITiaylhcSlBmglRIqlgxqwBniaGWnw9gz2jrLsbiaJaTh3L0ShxibAQqJN78RwemI%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p><span style="color: #000000;"><span leaf="">Hunter环境检测全绿</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.9366666666666668" data-s="300,640" data-type="gif" data-w="600" type="block" data-imgfileid="100001639" src="https://wechat2rss.xlab.app/img-proxy/?k=13bdd6e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT9DQFhMMWgUS37Wjgsbe7OKzdmPrfyLX2tsPkLnL9FwQKvDFEnhcYBuWqQBxrkaByf4B98RAbVlKeKQIACOzibmJ80MV978MoQk%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p><span style="color: #000000;"><span leaf="">Duck Detector环境检测全绿</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.935" data-s="300,640" data-type="gif" data-w="600" type="block" data-imgfileid="100001638" src="https://wechat2rss.xlab.app/img-proxy/?k=1b0ddbcb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeTibhIH0Y2EThvjgW7In1SIlkhWAbj9jrrDOELPV9M4PA4tiaDOtFFVxDvhrVEHVPJzqmweb19Jic3uiaCf5GvrDrtyKoIMNqKnDlTI%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><p><span style="color: #000000;"><span leaf="">Play商店登际</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="2.228125" data-s="300,640" data-type="gif" data-w="320" type="block" data-imgfileid="100001637" src="https://wechat2rss.xlab.app/img-proxy/?k=44074a9b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeT8icVNYcRib5jrBKyXF8ibNnraJ7CSicUkiciakmCAfCibRticdapv66unLpnPSr8yKqZrXnnMJicUzhNUOqLLgxEBgsU6YiaWIwd4AZvSjQ%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><h2 cid="n33" mdtype="heading" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf=""><span textstyle="" style="font-weight: bold;">课程对比</span></span></span></h2><h3 cid="n34" mdtype="heading" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">提供镜像机型</span></span></h3><p cid="n35" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">基础版本提供8台课程云机镜像：</span></span></p><figure cid="n36" mdtype="table" style="box-sizing: border-box;"><table style="box-sizing: border-box;"><thead><tr style="box-sizing: border-box;"><th style="box-sizing: border-box;"><span cid="n38" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">机型</span></span></span></th><th style="box-sizing: border-box;"><span cid="n39" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Android版本</span></span></span></th><th style="box-sizing: border-box;"><span cid="n40" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">说明</span></span></span></th></tr></thead><tbody><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n42" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel 6</span></span></span></td><td style="box-sizing: border-box;"><span cid="n43" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">15 / 16 / 17</span></span></span></td><td style="box-sizing: border-box;"><span cid="n44" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">官方Pixel factory image定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n46" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel 9</span></span></span></td><td style="box-sizing: border-box;"><span cid="n47" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">15 / 16 / 17</span></span></span></td><td style="box-sizing: border-box;"><span cid="n48" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">官方Pixel factory image定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n50" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Samsung S25 Ultra</span></span></span></td><td style="box-sizing: border-box;"><span cid="n51" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n52" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">三星机型定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n54" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx</span></span></span></td><td style="box-sizing: border-box;"><span cid="n55" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n56" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx机型定制</span></span></span></td></tr></tbody></table></figure><p cid="n57" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">高级版与企业版在基础版本8台云机基础上，额外提供以下镜像：</span></span></p><figure cid="n58" mdtype="table" style="box-sizing: border-box;"><table style="box-sizing: border-box;"><thead><tr style="box-sizing: border-box;"><th style="box-sizing: border-box;"><span cid="n60" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">机型</span></span></span></th><th style="box-sizing: border-box;"><span cid="n61" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Android版本</span></span></span></th><th style="box-sizing: border-box;"><span cid="n62" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">说明</span></span></span></th></tr></thead><tbody><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n64" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel 6 Pro</span></span></span></td><td style="box-sizing: border-box;"><span cid="n65" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n66" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">官方Pixel factory image定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n68" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel 7</span></span></span></td><td style="box-sizing: border-box;"><span cid="n69" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n70" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">官方Pixel factory image定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n72" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel 8</span></span></span></td><td style="box-sizing: border-box;"><span cid="n73" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">15 / 16 / 17</span></span></span></td><td style="box-sizing: border-box;"><span cid="n74" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">官方Pixel factory image定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n76" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx</span></span></span></td><td style="box-sizing: border-box;"><span cid="n77" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n78" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx机型定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n80" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx</span></span></span></td><td style="box-sizing: border-box;"><span cid="n81" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n82" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx机型定制</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n84" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx</span></span></span></td><td style="box-sizing: border-box;"><span cid="n85" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">16</span></span></span></td><td style="box-sizing: border-box;"><span cid="n86" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">xxx机型定制</span></span></span></td></tr></tbody></table></figure><p cid="n87" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">视频课程中讲解的某米、某加、OPPO等国产机型会讲完整创建思路和关键实现，但不提供现成镜像，需要学员按课程流程自行创建。</span></span></p><p cid="n88" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">以下是不同版本提供的内容。</span></span></p><figure cid="n89" mdtype="table" style="box-sizing: border-box;"><table style="box-sizing: border-box;"><thead><tr style="box-sizing: border-box;"><th style="box-sizing: border-box;"><span cid="n91" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">对比项</span></span></span></th><th style="box-sizing: border-box;"><span cid="n92" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">个人版</span></span></span></th><th style="box-sizing: border-box;"><span cid="n93" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">高级版</span></span></span></th><th style="box-sizing: border-box;"><span cid="n94" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">企业版</span></span></span></th><th style="box-sizing: border-box;"><span cid="n95" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">备注</span></span></span></th></tr></thead><tbody><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n97" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">课程播放视频</span></span></span></td><td style="box-sizing: border-box;"><span cid="n98" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n99" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n100" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n101" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">全套视频3年播放</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n103" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机管理程序</span></span></span></td><td style="box-sizing: border-box;"><span cid="n104" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n105" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n106" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n107" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机cdh补丁创建启动云机</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n109" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机踩坑文档</span></span></span></td><td style="box-sizing: border-box;"><span cid="n110" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n111" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n112" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n113" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机踩坑配置文档包含核心日志</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n115" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机配置代码</span></span></span></td><td style="box-sizing: border-box;"><span cid="n116" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n117" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n118" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n119" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">课程相关云机机型配置代码</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n121" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机桥接代码</span></span></span></td><td style="box-sizing: border-box;"><span cid="n122" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n123" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n124" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n125" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机fishbridge控制管理代码</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n127" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">安卓15云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n128" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n129" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n130" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n131" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">定制好的多款安卓15云机</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n133" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">安卓16云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n134" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n135" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n136" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n137" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">定制好的多款安卓16云机</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n139" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">安卓17云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n140" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n141" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n142" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n143" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">定制好的多款安卓17云机</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n145" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">8台基础课程云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n146" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n147" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n148" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n149" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel6 15/16/17、Pixel9 15/16/17、S25Ultra 16、NothingPhone4a 16</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n151" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">高级扩展云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n152" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n153" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n154" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n155" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">Pixel6Pro 16、Pixel7 16、Pixel8 15/16/17、NothingPhone3a/2a/3 16</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n157" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机永久使用</span></span></span></td><td style="box-sizing: border-box;"><span cid="n158" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n159" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n160" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n161" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">定制好的云机本地或云端无任何限制使用</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n163" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">半年程序更新</span></span></span></td><td style="box-sizing: border-box;"><span cid="n164" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n165" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n166" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n167" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机管理程序更新，课程全阶段结束时算起</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n169" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机管理源码</span></span></span></td><td style="box-sizing: border-box;"><span cid="n170" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n171" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n172" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n173" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">相关配套代码课程结束时发布，不提供更新</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n175" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">项目SKILLS</span></span></span></td><td style="box-sizing: border-box;"><span cid="n176" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n177" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n178" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n179" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">所有SKILL除核心两个</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n181" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">全套云机代码</span></span></span></td><td style="box-sizing: border-box;"><span cid="n182" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n183" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n184" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n185" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">课程外其它机型配套代码</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n187" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">云机踩坑日志</span></span></span></td><td style="box-sizing: border-box;"><span cid="n188" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n189" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n190" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n191" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">定制踩坑记录日志与截图</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n193" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">核心SKILLS</span></span></span></td><td style="box-sizing: border-box;"><span cid="n194" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n195" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n196" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n197" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">可以创建全新机型的SKILL</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n199" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">全套项目内容</span></span></span></td><td style="box-sizing: border-box;"><span cid="n200" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n201" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n202" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n203" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">项目所有代码文档日志脚本以zip打包</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n205" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">项目提交更新</span></span></span></td><td style="box-sizing: border-box;"><span cid="n206" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n207" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n208" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">✅</span></span></span></td><td style="box-sizing: border-box;"><span cid="n209" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">项目Git仓库直接拉人，以年为单位提供维护更新</span></span></span></td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box;"><span cid="n211" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">多套国产云机</span></span></span></td><td style="box-sizing: border-box;"><span cid="n212" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n213" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n214" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">❌</span></span></span></td><td style="box-sizing: border-box;"><span cid="n215" mdtype="table_cell" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">视频讲解完整创建流程，不提供定制好的镜像，需要自行创建</span></span></span></td></tr></tbody></table></figure><ul style="box-sizing: border-box;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p cid="n218" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">课程个人版相关程序与代码在课程全阶段结束时提供一份更新完整版本打包发布，不提供代码文档后续更新。</span></span></p></li><li style="box-sizing: border-box;"><p cid="n220" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">课程高级版包含课程内与课程外全部本项目的代码文档与日志打包发布，不提供代码文档后续更新。</span></span></p></li><li style="box-sizing: border-box;"><p cid="n222" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">企业版本包含课程高级版全部内容，并提供一年代码与文档维护更新，维护时间从本系列全部课程结束购买企业版服务时间算起。</span></span></p></li></ul><h2 cid="n223" mdtype="heading" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf=""><span textstyle="" style="font-weight: bold;">FAQ</span></span></span></h2><p cid="n224" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：本方案是基于redroid还是lxc还是AVD还是CVD？</span></span></p><p cid="n225" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：这些方案都不是，本课程采用另一种全新更完美的技术方案。</span></span></p><p cid="n226" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：课程中讲的方案支持哪些安卓设备定制？</span></span></p><p cid="n227" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：理论现有的安卓设备都支持。</span></span></p><p cid="n227" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：你这个云机与其它XX相比如何？</span></span></p><p cid="n227" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：本项目的目标是星辰大海，不对标任何其它云手机项目。</span></span></p><p data-pm-slice="0 0 []"><span style="color: #000000;"><span leaf="">问：有些风控会检测安卓系统的全部文件时间戳与哈希，你这个云手机可以过这些检测？</span></span></p><p><span md-inline="plain" style="box-sizing: border-box;"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;cid&#34;:&#34;n227&#34;,&#34;mdtype&#34;:&#34;paragraph&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;node&#34;,{&#34;tagName&#34;:&#34;span&#34;,&#34;attributes&#34;:{&#34;md-inline&#34;:&#34;plain&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">答：有方法。课程会讲解方案，以及</span><span md-inline="plain" style="box-sizing: border-box;"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null,&#34;node&#34;,{&#34;tagName&#34;:&#34;span&#34;,&#34;attributes&#34;:{&#34;md-inline&#34;:&#34;plain&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">会提供</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;cid&#34;:&#34;n227&#34;,&#34;mdtype&#34;:&#34;paragraph&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;node&#34;,{&#34;tagName&#34;:&#34;span&#34;,&#34;attributes&#34;:{&#34;md-inline&#34;:&#34;plain&#34;,&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">项目代码。</span></span></p><p cid="n228" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：课程中会讲解哪些安卓型号的定制？</span></span></p><p cid="n229" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：官方Pixel与国产某米某加与三星等主流机型。</span></span></p><p data-pm-slice="0 0 []"><span leaf="">问：课程的云手机是否支持XX的风控过检测？</span></p><p><span leaf="">答：课程不提供任何过风控的答疑。也不做任何过目标检测的服务。虽然云机很强，但风控是一个安全体系。不只是设备端一个点的检测。我能保证的是尽可能让云机帖近真实安卓手机效果。</span></p><p cid="n230" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：小白可以学习这个课程吗？</span></span></p><p cid="n231" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：小白不适合。云机系统定制需要有一定的开发与逆向工程基础。在学习全系列课程内容前，最少需要先看安卓系统定制与安卓安全开发与逆向分析全套课程。</span></span></p><p cid="n232" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：学这个课程能获得什么？</span></span></p><p cid="n233" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：可以得到：</span></span></p><pre spellcheck="false" lang="" cid="n234" mdtype="fences" style="white-space:pre-wrap;box-sizing: border-box;"><span role="presentation" style="box-sizing: border-box;"><span leaf="">全套云手机无保留实现思路以及方案的特点实现方式与多开部署方法。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">节省时间Token与少踩坑，节省时间。课程中会把所有的踩坑记录与学员全部分享。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">多款已经实现好的云手机镜镜直接无限制使用。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">多款云手机特点与Bug处理方法与定制全过程。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">全部云手机过程的profile文档与核心知识点的代码。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">云手机管理器与镜像长达半年功能新增与Bug修正支持。</span></span></pre><p cid="n235" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：学这个课程不能获得什么？</span></span></p><p cid="n236" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：以下场景：</span></span></p><pre spellcheck="false" lang="" cid="n237" mdtype="fences" style="white-space:pre-wrap;box-sizing: border-box;"><span role="presentation" style="box-sizing: border-box;"><span leaf="">支持国产系统自主研发，虽然讲解了国产某些型号的全部过程，但由于我国法律法规，不直接提供部分国产定制好的镜像。国产云机镜像产物，学员在学习完本系列课程后可完全自主100%定制实现。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">不提供任何华为设备的云手机化。虽然本课程方案支持。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">不提供全部（<span textstyle="" style="font-weight: bold;">课程中讲的会全部提供</span>）的云手机项目的代码与文档。完整项目的文档代码与更新服务可另外商定。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">不提供过脸部验证、视频通话、语音通话、GPS定位等高风险功能支持。本项目云手机如果引入这些功能，也不会是主要的卖点。如果学员有这方面需求，可以在课程方案基础上自行定制（方案原理上完全支持），或者寻求其它方案。</span></span><span leaf=""><br/></span><span role="presentation" style="box-sizing: border-box;"><span leaf="">不提供云手机定制服务。学员提出的需求如果是云手机自身功能限制需求，可考虑完善后提供给学员二进制使用。</span></span></pre><p cid="n238" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：每节课程多少时间？</span></span></p><p cid="n239" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：视频信息密度高，每集内容30分钟左右。</span></span></p><p cid="n240" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：是否可以试用一下课程的云手机，看皇不是想要的，再决定是否购买课程？</span></span></p><p cid="n241" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：在看了上面的介绍后，无法确定是否对你有用的话，那通常就不太适合你了。</span></span></p><p cid="n242" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">问：课程中的方案是否可以开源或商业化？</span></span></p><p cid="n243" mdtype="paragraph" style="box-sizing: border-box;"><span md-inline="plain" style="box-sizing: border-box;"><span leaf="">答：不支持对本项目的方案进行开源。但支持你对方案的商业化，但不包括课程或视频录制。具体情况，每个学员会签署相关的电子保密协议。</span></span></p><p><span leaf="">问：全套课程与云机的售价是多少？</span></p><p><span leaf="">答：提供30小节共三季的视频课程，以及全套课程相关的项目代码与镜像。价格方面目前<span textstyle="" style="font-weight: bold;">开更早鸟半价</span>。但由于课程内容质量与商业价值，价格还是会破万的。课程在本月25日正式开始更新。更新频率与我其它课程更新频率一样。</span></p><p><span leaf="">问：最后问一下怎么购买？</span></p><p><span leaf="">答：联系购买加微信： <span textstyle="" style="font-weight: bold;">feicongcn</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0de3fb97&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485290%26idx%3D1%26sn%3D0c8ca70d2b65f48d62f2d07a90b058ae">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 14 Jul 2026 11:42:00 +0800</pubDate>
    </item>
    <item>
      <title>最新Linux的本地提权漏洞分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485280&amp;idx=1&amp;sn=1fcdc3c1ef0b8299952a470ef99300d9</link>
      <description>最新Linux的本地提权漏洞分析</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-06-27 13:04</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=fc727c60&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeTicvar7HXvHicePpYZ4HgnQBUG1yFofDc763OQo0mXKqGmLD4mocxj2KbVK8usEkelGbvPm1WrTmBHBRmYiaBYxKce8XCsZdVrLP8%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>最新Linux的本地提权漏洞分析</p>
  <p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">2026年6月25日，JFrog Security Research公开了DirtyClone（CVE-2026-43503）。它不是一个全新的内核原语，而是DirtyFrag修复链上的回归绕过：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">__pskb_copy_fclone()</span></code><span leaf="">在克隆</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb</span></code><span leaf="">时丢掉了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SKBFL_SHARED_FRAG</span></code><span leaf="">，于是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">esp_input()</span></code><span leaf="">把一张仍然挂着文件页缓存的页误判成普通网络缓冲区，最后在原地解密时把数据写回了页缓存。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001628" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c245d7ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT9BsAlcic3F292p9sQQshL0daUMliaRh4eIaj8lEyFMdga1WicrxNicrdMg3IOhbNhP77BO9xSRpkbouLRo05ok9AXSLMq8uJRtDnE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">从NVD的变更记录看，这也不是单点失误，而是一组frag-transfer helper在转移frag描述符时都可能把共享标记弄丢；DirtyClone公开利用的是其中最直接的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">__pskb_copy_fclone()</span></code><span leaf="">克隆路径。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="6" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">文件页缓存</span><br/><span leaf="">  -&gt; TEE/dup to local克隆</span><br/><span leaf="">  -&gt; `__pskb_copy_fclone()`</span><br/><span leaf="">  -&gt; `SKBFL_SHARED_FRAG`丢失</span><br/><span leaf="">  -&gt; `esp_input()`</span><br/><span leaf="">  -&gt; 原地decrypt</span><br/><span leaf="">  -&gt; 页缓存被改写</span></code></pre><h2 data-line="16" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">1 漏洞成因</span></h2><p data-line="18" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">DirtyFrag原本已经补过一次：只要</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb</span></code><span leaf="">带着外部共享页，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">esp_input()</span></code><span leaf="">就应该先走</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb_cow_data()</span></code><span leaf="">，再做解密。DirtyClone的问题在于，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">__pskb_copy_fclone()</span></code><span leaf="">先复制frag描述符，再把剩余的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">shinfo</span></code><span leaf="">交给</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb_copy_header()</span></code><span leaf="">，但后者只处理gso相关字段，不会把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb_shinfo()-&gt;flags</span></code><span leaf="">里的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SKBFL_SHARED_FRAG</span></code><span leaf="">带过去。结果是，页还在，标记没了，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">skb_has_shared_frag()</span></code><span leaf="">就会返回false。</span></p><p data-line="20" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">再往下看，问题就变成了典型的“看起来不共享，实际上还共享”。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">esp_input()</span></code><span leaf="">依据错误的标记跳过COW，后续的IPsec原地解密直接落在页缓存页上。磁盘文件本身没有被改，改动只停在内存里的page cache里，所以文件完整性监控和重启后的磁盘校验都看不见这个状态。</span></p><h2 data-line="22" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">2 利用链</span></h2><p data-line="24" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">DirtyClone的PoC没有重新发明写原语，而是把DirtyFrag里已经验证过的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">seq_hi</span></code><span leaf="">控字节技巧接了回来。大致流程是：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="26" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">只读打开`/usr/bin/su`</span><br/><span leaf="">  -&gt; 把目标页塞进ESP包</span><br/><span leaf="">  -&gt; 用`TEE`或等价的`nft dup to local`在内核里复制该包</span><br/><span leaf="">  -&gt; 复制后的`skb`丢标记</span><br/><span leaf="">  -&gt; `esp_input()`原地写回</span><br/><span leaf="">  -&gt; 反复48次，覆盖`su`前192字节</span><br/><span leaf="">  -&gt; 执行被污染的`su`得到root</span></code></pre><p data-line="36" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这里真正可控的是每个4字节word。PoC通过XFRM状态里的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">seq_hi</span></code><span leaf="">携带目标word，再配合AES-CBC的IV和封装方式，让解密结果写成想要的字节。目标文件通常选</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/usr/bin/su</span></code><span leaf="">，因为只要把它的前192字节换成一个极小的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">setuid(0)+execve(&#34;/bin/sh&#34;)</span></code><span leaf="">ELF，下一次执行时就能拿到root。</span></p><p data-line="38" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">PoC里用的是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">TEE</span></code><span leaf="">，本质上只要能走到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">nf_dup_ipv4()</span></code><span leaf="">并触发</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">__pskb_copy_fclone()</span></code><span leaf="">，思路就成立。</span></p><h2 data-line="40" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">3 Ubuntu24.04上的现实约束</span></h2><p data-line="42" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Ubuntu24.04和更高版本默认启用了AppArmor对非特权user namespace的限制。也就是说，标准的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">unshare(CLONE_NEWUSER|CLONE_NEWNET)</span></code><span leaf="">起手式不再像Debian、Fedora那样顺手，PoC想拿到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CAP_NET_ADMIN</span></code><span leaf="">会被默认策略卡住。JFrog公开的代码也明确提到，在Ubuntu上需要放开</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel.apparmor_restrict_unprivileged_userns</span></code><span leaf="">，或者让目标进程落在允许</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">userns</span></code><span leaf="">的AppArmor配置里。</span></p><p data-line="44" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所以，Ubuntu24.04不是“没有这个洞”，而是默认把最常见的利用起点收紧了。对普通本地用户来说，它更像是把标准打法从“开箱即用”变成了“还得先过一层系统策略”。</span></p><h2 data-line="46" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">4 补丁与缓解</span></h2><p data-line="48" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">主线修复在2026年5月21日合入，首个修复标签是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">v7.1-rc5</span></code><span leaf="">。真正稳妥的处理只有升级内核，并确认发行版回补链路完整。临时缓解只能缩小面：保留Ubuntu的userns限制，尽量别让普通用户获得</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CAP_NET_ADMIN</span></code><span leaf="">，同时避免</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">xt_TEE</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">esp4</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">esp6</span></code><span leaf="">这类触发面自动加载。</span></p><h2 data-line="50" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">参考资料</span></h2><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">JFrog Security Research：<a href="https://research.jfrog.com/post/dissecting-and-exploiting-linux-lpe-variant-dirtyclone-cve-2026-43503/" target="_blank">https://research.jfrog.com/post/dissecting-and-exploiting-linux-lpe-variant-dirtyclone-cve-2026-43503/</a></span></p></li><li><p><span leaf="">DirtyClone PoC仓库：<a href="https://github.com/rafaeldtinoco/security/tree/main/exploits/dirtyclone" target="_blank">https://github.com/rafaeldtinoco/security/tree/main/exploits/dirtyclone</a></span></p></li><li><p><span leaf="">TheHackerNews报道：<a href="https://thehackernews.com/2026/06/new-dirtyclone-linux-kernel-flaw-lets.html" target="_blank">https://thehackernews.com/2026/06/new-dirtyclone-linux-kernel-flaw-lets.html</a></span></p></li><li><p><span leaf="">Ubuntu24.04发行说明：<a href="https://documentation.ubuntu.com/release-notes/24.04/" target="_blank">https://documentation.ubuntu.com/release-notes/24.04/</a></span></p></li><li><p><span leaf="">Ubuntu AppArmor user namespace说明：<a href="https://discourse.ubuntu.com/t/understanding-apparmor-user-namespace-restriction/58007" target="_blank">https://discourse.ubuntu.com/t/understanding-apparmor-user-namespace-restriction/58007</a></span></p></li><li><p><span leaf="">NVD变更记录：<a href="https://nvd.nist.gov/vuln/detail/CVE-2026-43503/change-record?changeRecordedOn=05%2F23%2F2026T10%3A16%3A43.350-0400" target="_blank">https://nvd.nist.gov/vuln/detail/CVE-2026-43503/change-record?changeRecordedOn=05%2F23%2F2026T10%3A16%3A43.350-0400</a></span></p></li></ul><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=70d0bbe4&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485280%26idx%3D1%26sn%3D1fcdc3c1ef0b8299952a470ef99300d9">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 27 Jun 2026 13:04:00 +0800</pubDate>
    </item>
    <item>
      <title>618活动！公众号粉丝课程半价福利，错过再等一年！</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485275&amp;idx=1&amp;sn=a0bb00c5be4de8c5c3a47f0013ead5a3</link>
      <description>618活动！公众号粉丝课程半价福利，错过再等一年！</description>
      <content:encoded><![CDATA[<p><span>非虫</span> <span>2026-06-18 08:23</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a181b9bb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeTibHxGjWwbzK0q4rKsjicH6Sjr32ic3yWUbKVW7CYsicjpve1qKS4icyEiaz3wAbOSOLBF3MN7BAn5GJH0yfFS0vESeQSQmuicibK6IWLQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>618活动！公众号粉丝课程半价福利，错过再等一年！</p>
  <p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;" data-pm-slice="0 0 []"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">一年一度的618来了！</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">618今天公众号粉丝福利：</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">安卓软件开发与逆向分析全四阶段课程8折，送隐私探针课一套与软件安全知识星球一年，相当于半价！</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">eBPF安全攻防课程全六季课程5折。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">Frida源码分析课程全三季课程5折。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">安卓系统ROM云手机开发定制</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">全三季</span><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">课程5折。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px 24px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC NEW&#34;, system-ui, -apple-system, &#34;system-ui&#34;, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">安卓隐私探针全三季课程5折。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001624" data-ratio="2.415810629745422" data-s="300,640" type="block" data-type="png" data-w="4478" src="https://wechat2rss.xlab.app/img-proxy/?k=b7ca7463&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTibubMvX3ZTr8LnvoZ9rTdZ2oibdpsfVVAQZ5ddxO59aia7ecBppF2YewNVKH9XxAW1hpYjbm3UEFr9n87icvjTNs3BMCkeXs8aiaoc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001622" data-ratio="1.4598324297683587" data-s="300,640" type="block" data-type="png" data-w="4058" src="https://wechat2rss.xlab.app/img-proxy/?k=4f58fa38&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT9xN1DIsAsvczz6A74l6W1JkZicXdjq8ib8gl7ic4WqKd4c3eWMeb4NvicYrAKWEfibYxPgCMbeRAzP04ETLt3wibCUdT0v5ZP9QzLAA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001619" data-ratio="1.1169154228855722" data-s="300,640" type="block" data-type="png" data-w="3216" src="https://wechat2rss.xlab.app/img-proxy/?k=2836a51d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT9RJhgMkPlWOmOd6xWrW68nM7PxiaydltfTyRiaBZEOJ7k0S8RXqjPt7EAA9l5Y0hbw0YUo69RVIoyqtfO7GYOjNLhHv3iaq3aya4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001620" data-ratio="0.8309178743961353" data-s="300,640" type="block" data-type="png" data-w="4140" src="https://wechat2rss.xlab.app/img-proxy/?k=c80a66ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTicutxrw8xFtKNfjyticX0P1icy6c9IsLxibdX2oIA2PsbgKZCIJxamDLx7S7DBLCWBVEXFuvYYqyDEnmQIWSBr3WRIXRBquNP6O6U%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=ad458e6c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485275%26idx%3D1%26sn%3Da0bb00c5be4de8c5c3a47f0013ead5a3">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 18 Jun 2026 08:23:00 +0800</pubDate>
    </item>
    <item>
      <title>618倒计时！公众号粉丝课程半价福利，错过再等一年！</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485259&amp;idx=1&amp;sn=0239ffca806016a1894dfaf983a56d2f</link>
      <description>618倒计时！课程半价福利</description>
      <content:encoded><![CDATA[<p><span>非虫</span> <span>2026-06-16 20:24</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=e8efa162&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT9ibeicoZCDgJVPFuRSLSkKicDJib3Y4Kmicp0EtYZB9GwJVg5fQupjiaCKPTpunkp9ibOQXhIHh0btAichAcmLljibJLUIJWtibImmsBOAA%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>618倒计时！课程半价福利</p>
  <p><span leaf="">一年一度的618来了！</span></p><p><span leaf="">618当天公众号粉丝福利：</span></p><p><span leaf="">安卓软件开发与逆向分析全四阶段课程8折，送隐私探针课一套与软件安全知识星球一年，相当于半价！</span></p><p><span leaf="">eBPF安全攻防课程全六季课程5折。</span></p><p><span leaf="">Frida源码分析课程全三季课程5折。</span></p><p><span leaf="">安卓系统ROM云手机开发定制</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,null]">全三季</span><span leaf="">课程5折。</span></p><p><span leaf="">安卓隐私探针全三季课程5折。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001608" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=38388d60&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTibydMUS3zmCDNPCoy14r47UJJ52mL5gSELicv60JAw62AvsOQPfDaYGYcibz6HvyUzYAw8nZfLt0KNhXpLBtwyedticicdV7FDp5GM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b407eed6&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485259%26idx%3D1%26sn%3D0239ffca806016a1894dfaf983a56d2f">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 16 Jun 2026 20:24:00 +0800</pubDate>
    </item>
    <item>
      <title>Frida17.12.0的功能与变化</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485254&amp;idx=1&amp;sn=32ca95e377824e9841fd305f7a77e2aa</link>
      <description>Frida17.12.0发布于2026年6月10日</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-06-12 16:14</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=023efc04&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT94hPSDdKumJvkC4e26KKZc1SN0QwibQXnylqSMLr5sd7Fyicklos13kRuicPEGW0ZjwmxXQ48CSMW2alo7PKQowlLibYCarC1PttU%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;data-line&#34;:&#34;2&#34;,&#34;class&#34;:&#34;code-line&#34;,&#34;dir&#34;:&#34;auto&#34;,&#34;style&#34;:&#34;margin-top: 0px; margin-bottom: 16px; color: rgb(0, 0, 0); font-family: -apple-system, \&#34;system-ui\&#34;, \&#34;Segoe WPC\&#34;, \&#34;Segoe UI\&#34;, system-ui, Ubuntu, \&#34;Droid Sans\&#34;, sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">Frida17.12.0发布于2026年6月10日。官方发布说明列出的更新集中在四个方向：Gum/GumJS新增代码形状分析接口，Linux注入器调整触发点选择和agent装载路径，Interceptor增加细粒度刷新接口，Windows arm64相关的Stalker和Exceptor修复。</span></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001602" data-type="svg" src="https://wechat2rss.xlab.app/img-proxy/?k=4c4ccec2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_svg%2FQ3auHgzwzM6RlNFib1bbtdEf0r21NvIe4PjqrcGGic3jHYSLOaIcqPIVyPI4F3TojriceWzB14QFar5s4aiaLmjloMz8HLRvicQB6NHkrKKJj17Tw6BibPU7uEcw%2F640%3Fwx_fmt%3Dsvg%26from%3Dappmsg"/></span></p><h2 data-line="4" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">更新范围</span></h2><p data-line="6" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">17.12.0对应的主要提交如下。</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">子仓库</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">提交</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">更新内容</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">67a1b9c</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_process_find_function_range()</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">5e2fd31</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">GumControlFlowGraph</span></code><span leaf="">模块</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">b3273ea</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">在GumJS暴露</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Process.findFunctionRange()</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ControlFlowGraph</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f04c3e3</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">调整控制流图公开命名，例如</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">findBlockContaining()</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">capacity</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">779f9b0</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_interceptor_flush_function()</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_interceptor_flush_listener()</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">a0a8838</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">eBPF采样不可用时回退到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/&lt;pid&gt;/task/&lt;tid&gt;/syscall</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">33e5879</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">按实际bootstrap stub大小筛选触发函数</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">880f7ac</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">采样线程栈，寻找可容纳注入stub的libc调用点</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f0cc3b4</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">安装和恢复触发点时使用对称写回流程</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f51327f</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">agent通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/&lt;pid&gt;/fd/&lt;fd&gt;</span></code><span leaf="">路径装载</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">21dc508</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">捕获libbpf诊断日志并写入错误信息</span></p></td></tr></tbody></table><p data-line="22" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这些提交覆盖了两个层面。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code><span leaf="">侧增加公开API和GumJS绑定，主要供脚本和嵌入式使用；</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code><span leaf="">侧调整Linux注入实现，主要影响</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-server</span></code><span leaf="">、attach和注入稳定性。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001603" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=69e05e8d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT9vHaho87lZcLVbOic0SG5psmwywHqCj9tg5iavx9P02pIpSWHKj5O3gGDe4ZY6Jk1uHUvYHgYDunwkQJk5jtPgicrPLcIniacu4Yc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-line="24" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">函数范围定位</span></h2><p data-line="26" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">67a1b9c</span></code><span leaf="">新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_process_find_function_range()</span></code><span leaf="">，用于根据函数内部地址查找该地址所在函数的连续代码范围。</span></p><p data-line="28" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">头文件中的声明如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="30" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">GUM_API gboolean </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_process_find_function_range</span></span><span style="color: inherit;"><span leaf="">(gconstpointer address,</span><br/><span leaf="">    GumMemoryRange * range)</span></span><span leaf="">;</span></code></pre><p data-line="35" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">该接口不要求目标二进制保留符号。实现侧会优先读取平台的unwind信息：POSIX平台通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">_Unwind_Find_FDE</span></code><span leaf="">并解析FDE编码，Windows平台通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">RtlLookupFunctionEntry</span></code><span leaf="">查询运行时函数表。若unwind信息不可用，则退回到符号边界查询。</span></p><p data-line="37" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">GumJS侧对应接口是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Process.findFunctionRange()</span></code><span leaf="">。它接收一个</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">NativePointer</span></code><span leaf="">，返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">{ base, size }</span></code><span leaf="">形式的内存范围；如果无法定位函数范围，则返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">null</span></code><span leaf="">。</span></p><p data-line="39" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">官方测试中的调用方式如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="41" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> f = ptr.</span><span style="color: rgb(128, 128, 128);"><span leaf="">strip</span></span><span leaf="">();</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> range = </span><span style="color: rgb(128, 128, 128);"><span leaf="">Process</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">findFunctionRange</span></span><span leaf="">(f);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(range !== </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(range.</span><span><span leaf="">base</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">compare</span></span><span leaf="">(f) &lt;= </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf=""> &amp;&amp;</span><br/><span leaf="">    f.</span><span style="color: rgb(128, 128, 128);"><span leaf="">compare</span></span><span leaf="">(range.</span><span><span leaf="">base</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">add</span></span><span leaf="">(range.</span><span><span leaf="">size</span></span><span leaf="">)) &lt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">);</span></code></pre><p data-line="49" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在实际脚本中，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ptr</span></code><span leaf="">可以替换为某个导出函数地址、符号地址，或者任意落在目标函数内部的指令地址。例如：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="51" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> openPtr = </span><span style="color: rgb(128, 128, 128);"><span leaf="">Module</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">getGlobalExportByName</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;open&#39;</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> range = </span><span style="color: rgb(128, 128, 128);"><span leaf="">Process</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">findFunctionRange</span></span><span leaf="">(openPtr);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (range !== </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;base=&#39;</span></span><span leaf=""> + range.</span><span><span leaf="">base</span></span><span leaf=""> + </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;, size=&#39;</span></span><span leaf=""> + range.</span><span><span leaf="">size</span></span><span leaf="">);</span><br/><span leaf="">}</span></code></pre><p data-line="60" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">该接口可用于确定函数边界、检查某个Hook点是否位于同一函数内，或者在指令重定位前获取可分析范围。</span></p><h2 data-line="62" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">控制流图接口</span></h2><p data-line="64" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">5e2fd31</span></code><span leaf="">新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">GumControlFlowGraph</span></code><span leaf="">。该模块基于Capstone反汇编函数代码，构建基本块、前驱、后继和支配关系。提交说明中提到，它使用resolver定位函数范围，并通过直接分支发现多段函数，例如热路径和冷路径分离的函数片段。</span></p><p data-line="66" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">公开头文件中的主要接口如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="68" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">typedef</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">gboolean</span></span><span style="color: inherit;"><span leaf="">(* GumControlFlowGraphFindRangeFunc)</span></span><span style="color: inherit;"><span leaf="">(gconstpointer address,</span><br/><span leaf="">    GumMemoryRange * range, gpointer user_data)</span></span><span leaf="">;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">typedef</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">gboolean</span></span><span style="color: inherit;"><span leaf="">(* GumFoundDominatingSiteFunc)</span></span><span style="color: inherit;"><span leaf="">(gconstpointer site,</span><br/><span leaf="">    gsize capacity, gpointer user_data)</span></span><span leaf="">;</span><br/><span leaf="">GUM_API GumControlFlowGraph * </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_control_flow_graph_new</span></span><span style="color: inherit;"><span leaf="">(gconstpointer entry,</span><br/><span leaf="">    cs_arch arch, cs_mode mode, GumControlFlowGraphFindRangeFunc find_range,</span><br/><span leaf="">    gpointer user_data)</span></span><span leaf="">;</span><br/><span leaf="">GUM_API GumControlFlowGraph * </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_control_flow_graph_new_for_function</span></span><span style="color: inherit;"><span leaf="">(</span><br/><span leaf="">    gconstpointer entry_point)</span></span><span leaf="">;</span><br/><span leaf="">GUM_API gboolean </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_control_flow_graph_dominates</span></span><span style="color: inherit;"><span leaf="">(GumControlFlowGraph * self,</span><br/><span leaf="">    gconstpointer a, gconstpointer b)</span></span><span leaf="">;</span><br/><span leaf="">GUM_API </span><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_control_flow_graph_enumerate_dominating_sites</span></span><span style="color: inherit;"><span leaf="">(</span><br/><span leaf="">    GumControlFlowGraph * self, gconstpointer target,</span><br/><span leaf="">    GumFoundDominatingSiteFunc func, gpointer user_data)</span></span><span leaf="">;</span></code></pre><p data-line="87" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">其中</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_control_flow_graph_dominates()</span></code><span leaf="">用于判断地址</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">a</span></code><span leaf="">是否支配地址</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">b</span></code><span leaf="">。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_control_flow_graph_enumerate_dominating_sites()</span></code><span leaf="">会枚举支配目标地址的可写入位置，并给出</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">capacity</span></code><span leaf="">，表示从该位置开始、不会被其它控制流边落入的连续字节数。</span></p><p data-line="89" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">测试用例中构造了一个类似</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">start_thread</span></code><span leaf="">的短函数，用来验证支配关系和可写入位置。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="91" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">TESTCASE (single_range_dominators_and_sites)</span><br/><span leaf="">{</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span leaf=""> guint8 code[] = {</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">0x48</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x85</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xc0</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x74</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x04</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xff</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xd0</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xeb</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x03</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xff</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xd0</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x90</span></span><span leaf="">,</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">0xc3</span></span><span leaf="">,</span><br/><span leaf="">  };</span><br/><span leaf="">  GumTestCode layout = { code, </span><span style="color: rgb(0, 0, 255);"><span leaf="">sizeof</span></span><span leaf=""> (code), </span><span style="color: rgb(163, 21, 21);"><span leaf="">NULL</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf=""> };</span><br/><span leaf="">  GumControlFlowGraph * cfg;</span><br/><span leaf="">  GumCollectedSites sites = { { </span><span style="color: rgb(163, 21, 21);"><span leaf="">NULL</span></span><span leaf="">, }, };</span><br/><span leaf="">  cs_arch_register_x86 ();</span><br/><span leaf="">  cfg = gum_control_flow_graph_new (code, CS_ARCH_X86, CS_MODE_64,</span><br/><span leaf="">      gum_test_find_range, &amp;layout);</span><br/><span leaf="">  g_assert_true (</span><br/><span leaf="">      gum_control_flow_graph_dominates (cfg, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x09</span></span><span leaf="">));</span><br/><span leaf="">  g_assert_true (</span><br/><span leaf="">      gum_control_flow_graph_dominates (cfg, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x03</span></span><span leaf="">, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x09</span></span><span leaf="">));</span><br/><span leaf="">  g_assert_false (</span><br/><span leaf="">      gum_control_flow_graph_dominates (cfg, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x05</span></span><span leaf="">, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x09</span></span><span leaf="">));</span><br/><span leaf="">  gum_control_flow_graph_enumerate_dominating_sites (cfg, code + </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x09</span></span><span leaf="">,</span><br/><span leaf="">      gum_test_collect_site, &amp;sites);</span><br/><span leaf="">}</span></code></pre><p data-line="119" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这段测试说明了接口的判定语义：只有位于所有到达目标路径上的指令才算支配目标；被条件分支绕过的指令不会被当作支配点。</span></p><h2 data-line="121" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">GumJS控制流图用法</span></h2><p data-line="123" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">b3273ea</span></code><span leaf="">把控制流图接口暴露到GumJS。17.12.0最终公开的JS对象包括</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ControlFlowGraph</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">BasicBlock</span></code><span leaf="">。</span></p><p data-line="125" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">官方测试中的调用方式如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="127" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> cfg = </span><span style="color: rgb(0, 0, 255);"><span leaf="">new</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">ControlFlowGraph</span></span><span leaf="">(ptr);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> entry = cfg.</span><span><span leaf="">entryBlock</span></span><span leaf="">;</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(entry !== </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(cfg.</span><span><span leaf="">blocks</span></span><span leaf="">.</span><span><span leaf="">length</span></span><span leaf=""> &gt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(cfg.</span><span style="color: rgb(128, 128, 128);"><span leaf="">findBlockContaining</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">).</span><span><span leaf="">start</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">equals</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">));</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(cfg.</span><span style="color: rgb(128, 128, 128);"><span leaf="">dominates</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">, entry.</span><span><span leaf="">start</span></span><span leaf="">));</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> insns = entry.</span><span><span leaf="">instructions</span></span><span leaf="">;</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(insns.</span><span><span leaf="">length</span></span><span leaf=""> &gt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(insns[</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">].</span><span><span leaf="">address</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">equals</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">));</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(</span><span style="color: rgb(128, 128, 128);"><span leaf="">Array</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">isArray</span></span><span leaf="">(entry.</span><span><span leaf="">successors</span></span><span leaf="">));</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(</span><span style="color: rgb(128, 128, 128);"><span leaf="">Array</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">isArray</span></span><span leaf="">(entry.</span><span><span leaf="">predecessors</span></span><span leaf="">));</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> sites = cfg.</span><span style="color: rgb(128, 128, 128);"><span leaf="">enumerateDominatingSites</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(sites.</span><span><span leaf="">length</span></span><span leaf=""> &gt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">);</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(sites[</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">].</span><span><span leaf="">address</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">equals</span></span><span leaf="">(entry.</span><span><span leaf="">start</span></span><span leaf="">));</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">send</span></span><span leaf="">(</span><span style="color: rgb(0, 0, 255);"><span leaf="">typeof</span></span><span leaf=""> sites[</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">].</span><span><span leaf="">capacity</span></span><span leaf=""> === </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;number&#39;</span></span><span leaf="">);</span></code></pre><p data-line="148" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实际使用时，可以先取一个函数地址，再构建控制流图：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="150" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> target = </span><span style="color: rgb(128, 128, 128);"><span leaf="">Module</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">getGlobalExportByName</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;pthread_create&#39;</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> cfg = </span><span style="color: rgb(0, 0, 255);"><span leaf="">new</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">ControlFlowGraph</span></span><span leaf="">(target);</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;block count=&#39;</span></span><span leaf=""> + cfg.</span><span><span leaf="">blocks</span></span><span leaf="">.</span><span><span leaf="">length</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> site </span><span style="color: rgb(0, 0, 255);"><span leaf="">of</span></span><span leaf=""> cfg.</span><span style="color: rgb(128, 128, 128);"><span leaf="">enumerateDominatingSites</span></span><span leaf="">(target)) {</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;site=&#39;</span></span><span leaf=""> + site.</span><span><span leaf="">address</span></span><span leaf=""> + </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;, capacity=&#39;</span></span><span leaf=""> + site.</span><span><span leaf="">capacity</span></span><span leaf="">);</span><br/><span leaf="">}</span></code></pre><p data-line="161" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果脚本需要检查某个地址属于哪个基本块，可以使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">findBlockContaining()</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="163" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> block = cfg.</span><span style="color: rgb(128, 128, 128);"><span leaf="">findBlockContaining</span></span><span leaf="">(target);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (block !== </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;block start=&#39;</span></span><span leaf=""> + block.</span><span><span leaf="">start</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;block end=&#39;</span></span><span leaf=""> + block.</span><span><span leaf="">end</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">console</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">log</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;instruction count=&#39;</span></span><span leaf=""> + block.</span><span><span leaf="">instructions</span></span><span leaf="">.</span><span><span leaf="">length</span></span><span leaf="">);</span><br/><span leaf="">}</span></code></pre><p data-line="173" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这组接口可用于Hook点筛选、函数内控制流查看、基本块粒度分析等场景。</span></p><h2 data-line="175" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">C层控制流图用法</span></h2><p data-line="177" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">嵌入Gum或开发原生组件时，可直接使用C接口。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="179" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span leaf=""> gboolean</span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">on_site</span></span><span style="color: inherit;"><span leaf="">(gconstpointer site, gsize capacity, gpointer user_data)</span></span><br/><span leaf="">{</span><br/><span leaf="">  g_print (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;site=%p capacity=%zu\n&#34;</span></span><span leaf="">, site, capacity);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> TRUE;</span><br/><span leaf="">}</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">inspect_target</span></span><span style="color: inherit;"><span leaf="">(gconstpointer target)</span></span><br/><span leaf="">{</span><br/><span leaf="">  GumControlFlowGraph * cfg;</span><br/><span leaf="">  cfg = gum_control_flow_graph_new_for_function (target);</span><br/><span leaf="">  gum_control_flow_graph_enumerate_dominating_sites (cfg, target, on_site, </span><span style="color: rgb(163, 21, 21);"><span leaf="">NULL</span></span><span leaf="">);</span><br/><span leaf="">  gum_control_flow_graph_free (cfg);</span><br/><span leaf="">}</span></code></pre><p data-line="198" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果只查询函数范围，可直接使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_process_find_function_range()</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="200" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">GumMemoryRange range;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (gum_process_find_function_range (target, &amp;range))</span><br/><span leaf="">{</span><br/><span leaf="">  g_print (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;function range: %p - %p\n&#34;</span></span><span leaf="">,</span><br/><span leaf="">      (</span><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><span leaf=""> *) range.base_address,</span><br/><span leaf="">      (</span><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><span leaf=""> *) (range.base_address + range.size));</span><br/><span leaf="">}</span></code></pre><h2 data-line="211" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Linux注入器触发点采样</span></h2><p data-line="213" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">17.12.0中，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code><span leaf="">对Linux的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">proc-mem</span></code><span leaf="">注入链路做了多处修改。相关代码位于</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">src/linux/proc-mem-injector.vala</span></code><span leaf="">。</span></p><p data-line="215" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">a0a8838</span></code><span leaf="">增加了采样回退逻辑。优先使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ActivitySampler</span></code><span leaf="">采样；如果eBPF或perf因为权限限制不可用，则读取</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/&lt;pid&gt;/task/&lt;tid&gt;/syscall</span></code><span leaf="">。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="217" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">private</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">async</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> discover_trigger (ProcMapsSnapshot maps, RegionLayout region, StackRendezvous rendezvous,</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> mmap_impl, </span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> exclude, Cancellable? cancellable) throws Error, IOError {</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">Gee</span></span><span leaf="">.List&lt;SampledStack&gt; stacks;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">var</span></span><span leaf=""> sampler = </span><span style="color: rgb(0, 0, 255);"><span leaf="">new</span></span><span leaf=""> ActivitySampler (pid);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">try</span></span><span leaf=""> {</span><br/><span leaf="">    sampler.start ();</span><br/><span leaf="">    yield sleep_ms (SAMPLE_WINDOW_MS);</span><br/><span leaf="">    sampler.stop ();</span><br/><span leaf="">    stacks = sampler.stacks;</span><br/><span leaf="">  } </span><span style="color: rgb(0, 0, 255);"><span leaf="">catch</span></span><span leaf=""> (Error e) {</span><br/><span leaf="">    stacks = yield sample_threads_via_proc (maps, cancellable);</span><br/><span leaf="">  }</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> hottest_libc_function (maps, region, rendezvous, mmap_impl, stacks, exclude);</span><br/><span leaf="">}</span></code></pre><p data-line="236" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">880f7ac</span></code><span leaf="">扩展</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc</span></code><span leaf="">路径的采样内容。修改前只读取线程当前PC；修改后还会读取栈指针附近的若干栈字，形成候选调用帧。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="238" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">private</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">[] read_thread_frames (ProcMapsSnapshot maps, </span><span style="color: rgb(0, 0, 255);"><span leaf="">uint</span></span><span leaf=""> tid) throws Error {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">string</span></span><span leaf=""> contents;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">try</span></span><span leaf=""> {</span><br/><span leaf="">    FileUtils.get_contents (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/proc/%u/task/%u/syscall&#34;</span></span><span leaf="">.printf (pid, tid), out contents);</span><br/><span leaf="">  } </span><span style="color: rgb(0, 0, 255);"><span leaf="">catch</span></span><span leaf=""> (FileError e) {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> {};</span><br/><span leaf="">  }</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">string</span></span><span leaf="">[] fields = contents.strip ().split (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34; &#34;</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (fields.length &lt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">2</span></span><span leaf="">)</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> {};</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> pc;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">.try_parse (fields[fields.length - </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">], out pc, </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) || pc == </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">)</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> {};</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> sp;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">var</span></span><span leaf=""> stack = (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">.try_parse (fields[fields.length - </span><span style="color: rgb(0, 128, 0);"><span leaf="">2</span></span><span leaf="">], out sp, </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) &amp;&amp; sp != </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">)</span><br/><span leaf="">    ? maps.find_mapping (sp)</span><br/><span leaf="">    : </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (stack == </span><span style="color: rgb(163, 21, 21);"><span leaf="">null</span></span><span leaf="">)</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">new</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">[] { pc };</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint</span></span><span leaf=""> depth = </span><span style="color: rgb(0, 0, 255);"><span leaf="">uint</span></span><span leaf="">.min (STACK_SCAN_DEPTH, (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint</span></span><span leaf="">) ((stack.end - sp) / </span><span style="color: rgb(0, 128, 0);"><span leaf="">8</span></span><span leaf="">));</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">var</span></span><span leaf=""> frames = </span><span style="color: rgb(0, 0, 255);"><span leaf="">new</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">[</span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf=""> + depth];</span><br/><span leaf="">  frames[</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">] = pc;</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint</span></span><span leaf=""> i = </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">; i != depth; i++)</span><br/><span leaf="">    frames[</span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf=""> + i] = mem.read_pointer (sp + (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf="">) i * </span><span style="color: rgb(0, 128, 0);"><span leaf="">8</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> frames;</span><br/><span leaf="">}</span></code></pre><p data-line="271" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这段逻辑用于处理多线程目标中的一种情况：线程可能停在很短的syscall wrapper里，当前PC所在函数空间不足以写入bootstrap stub。读取栈上的返回地址后，注入器可在调用链中查找可容纳stub的libc函数作为触发点。</span></p><p data-line="273" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">33e5879</span></code><span leaf="">调整了触发函数大小判定方式。修改前使用固定最小长度；修改后先构造实际要写入的stub，再用实际长度筛选候选函数。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="275" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">private</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> trigger_stub_footprint (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> sample_target, RegionLayout region, StackRendezvous rendezvous,</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> mmap_impl) throws Error {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">uint8</span></span><span leaf="">[] stub = build_trigger_stub (sample_target, rendezvous.cas, mmap_impl, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, region.total,</span><br/><span leaf="">    region.entry_offset);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> BOOTSTRAP_OFFSET + stub.length;</span><br/><span leaf="">}</span></code></pre><h2 data-line="284" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">触发点写入与恢复</span></h2><p data-line="286" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f0cc3b4</span></code><span leaf="">调整了触发函数恢复过程。恢复时先让调用者停在触发点入口，再写回stub覆盖区域，最后恢复函数前导指令。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="288" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">private</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">async</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">void</span></span><span leaf=""> restore_trigger (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> target, </span><span style="color: rgb(0, 0, 255);"><span leaf="">uint8</span></span><span leaf="">[] original) throws Error, IOError {</span><br/><span leaf="">  block_callers (target);</span><br/><span leaf="">  yield sleep_ms (DRAIN_MS);</span><br/><span leaf="">  mem.write_memory (target + BOOTSTRAP_OFFSET, original[BOOTSTRAP_OFFSET:original.length]);</span><br/><span leaf="">  restore_prologue (target, original);</span><br/><span leaf="">}</span></code></pre><p data-line="297" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">对应的安装流程也先调用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">block_callers()</span></code><span leaf="">，等待短时间后再写入bootstrap。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="299" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">private</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">async</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">void</span></span><span leaf=""> install_bootstrap (</span><span style="color: rgb(0, 0, 255);"><span leaf="">uint64</span></span><span leaf=""> target, </span><span style="color: rgb(0, 0, 255);"><span leaf="">uint8</span></span><span leaf="">[] stub) throws Error, IOError {</span><br/><span leaf="">  block_callers (target);</span><br/><span leaf="">  yield sleep_ms (DRAIN_MS);</span><br/><span leaf="">  mem.write_memory (target + BOOTSTRAP_OFFSET, stub);</span><br/><span leaf="">  release_callers (target);</span><br/><span leaf="">}</span></code></pre><p data-line="308" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">该修改针对的是多线程进程中触发函数正在被其它线程执行的情况，避免恢复过程中出现半写入的函数前导区域。</span></p><h2 data-line="310" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Agent装载路径</span></h2><p data-line="312" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f51327f</span></code><span leaf="">修改了Linux loader中agent的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">dlopen()</span></code><span leaf="">路径。旧路径使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/self/fd/&lt;fd&gt;</span></code><span leaf="">，新路径改为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/&lt;pid&gt;/fd/&lt;fd&gt;</span></code><span leaf="">。</span></p><p data-line="314" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">补丁中的核心代码如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="316" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">pid_t</span></span><br/><span style="color: rgb(128, 128, 128);"><span leaf="">frida_getpid</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><span leaf="">)</span></span><br/><span leaf="">{</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> frida_syscall_0 (SYS_getpid);</span><br/><span leaf="">}</span></code></pre><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="324" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">libc-&gt;</span><span style="color: rgb(0, 122, 204);"><span leaf="">sprintf</span></span><span leaf=""> (agent_path, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/proc/%d/fd/%d&#34;</span></span><span leaf="">, frida_getpid (), agent_codefd);</span><br/><span leaf="">ctx-&gt;agent_handle = libc-&gt;dlopen (agent_path, libc-&gt;dlopen_flags, pretend_caller_addr);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (ctx-&gt;agent_handle == </span><span style="color: rgb(163, 21, 21);"><span leaf="">NULL</span></span><span leaf="">)</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">goto</span></span><span leaf=""> dlopen_failed;</span></code></pre><p data-line="332" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交说明指出，附加调试器会在动态链接器的库加载事件中读取</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">dlopen()</span></code><span leaf="">传入的路径。若路径是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/self/fd/&lt;fd&gt;</span></code><span leaf="">，调试器侧解析到的是调试器自己的fd表，而不是目标进程的fd表，可能导致读取失败并让加载线程停在动态链接器断点处。改成</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/&lt;pid&gt;/fd/&lt;fd&gt;</span></code><span leaf="">后，目标进程内部和外部观察者解析到同一个对象路径。</span></p><h2 data-line="334" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">libbpf诊断信息</span></h2><p data-line="336" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">21dc508</span></code><span leaf="">修改了libbpf错误日志处理方式。此前libbpf诊断信息可能直接输出到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">stderr</span></code><span leaf="">，这次改为捕获日志并写入抛出的错误信息中。</span></p><p data-line="338" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">该修改主要影响失败场景的可观测性。eBPF加载失败时，调用方可从异常消息中看到verifier或权限相关信息，而不是只能依赖外部标准错误输出。</span></p><h2 data-line="340" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Interceptor刷新接口</span></h2><p data-line="342" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">779f9b0</span></code><span leaf="">给</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">GumInterceptor</span></code><span leaf="">新增两个刷新接口。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="344" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">GUM_API gboolean </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_interceptor_flush_function</span></span><span style="color: inherit;"><span leaf="">(GumInterceptor * self,</span><br/><span leaf="">    gconstpointer function_address)</span></span><span leaf="">;</span><br/><span leaf="">GUM_API gboolean </span><span style="color: rgb(128, 128, 128);"><span leaf="">gum_interceptor_flush_listener</span></span><span style="color: inherit;"><span leaf="">(GumInterceptor * self,</span><br/><span leaf="">    GumInvocationListener * listener)</span></span><span leaf="">;</span></code></pre><p data-line="351" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_interceptor_flush()</span></code><span leaf="">是全局刷新；新增的两个接口分别按函数地址和监听器刷新。源码中的实现会检查当前transaction状态和待销毁任务，只在指定函数或指定listener相关任务仍未完成时返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FALSE</span></code><span leaf="">。</span></p><p data-line="353" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最小调用方式如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="355" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!gum_interceptor_flush_function (interceptor, target))</span><br/><span leaf="">  g_print (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;target still busy\n&#34;</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!gum_interceptor_flush_listener (interceptor, listener))</span><br/><span leaf="">  g_print (</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;listener still busy\n&#34;</span></span><span leaf="">);</span></code></pre><p data-line="363" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">该接口可供原生Gum使用者在卸载单个Hook或释放某个listener前确认相关调用已结束。</span></p><h2 data-line="365" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Windows arm64修复</span></h2><p data-line="367" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">17.12.0还包含多项Windows arm64相关修复。发布说明中列出的主要内容包括：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">stalker-arm64</span></code><p><span leaf="">修复远距离backpatch epilog丢失</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">BL</span></code><span leaf="">的问题。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">stalker</span></code><p><span leaf="">在Windows上检测线程退出，避免继续跟踪进入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ntdll</span></code><span leaf="">线程清理路径。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">exceptor</span></code><p><span leaf="">在Windows arm64上改用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">RtlRestoreContext()</span></code><span leaf="">恢复上下文，避免</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">longjmp()</span></code><span leaf="">处理合成栈帧时终止进程。</span></p></li><li><p><span leaf="">CI增加Windows arm64原生任务。</span></p></li></ol><p data-line="374" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这些修改集中在稳定性修复，不涉及新的脚本API。</span></p><h2 data-line="376" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">公共API文档</span></h2><p data-line="378" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">17.12.0还补充了Gum和Core的公开API文档。发布说明中列出的Gum文档对象包括</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Interceptor</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Stalker</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Exceptor</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Module</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ModuleMap</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ModuleRegistry</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MemoryMap</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MemoryAccessMonitor</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DarwinGrafter</span></code><span leaf="">。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code><span leaf="">侧也新增了Vala文档注释注入GIR的相关提交。</span></p><p data-line="380" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这部分更新主要影响文档生成、GObject introspection数据和下游绑定维护。</span></p><h2 data-line="382" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总结</span></h2><p data-line="384" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Frida17.12.0的更新包括以下几类：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">Gum新增函数范围定位和控制流图接口，GumJS增加对应的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Process.findFunctionRange()</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ControlFlowGraph</span></code><span leaf="">。</span></p></li><li><p><span leaf="">Linux注入器调整触发点采样、触发函数大小判断、触发点恢复和agent装载路径。</span></p></li><li><p><span leaf="">Interceptor增加按函数和按listener刷新的接口。</span></p></li><li><p><span leaf="">Windows arm64相关的Stalker、Exceptor和CI配置得到修复和补充。</span></p></li><li><p><span leaf="">Gum和Core补充公开API文档和GObject introspection发布流程。</span></p></li></ol><p data-line="392" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">对脚本使用者来说，直接可用的新接口是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Process.findFunctionRange()</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ControlFlowGraph</span></code><span leaf="">。对嵌入Gum或维护Frida集成的人来说，相关接口包括</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_process_find_function_range()</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gum_control_flow_graph_*()</span></code><span leaf="">和新的Interceptor刷新接口。Linux注入器相关修改属于内部实现调整，主要体现在attach和注入失败场景的行为变化。</span></p><h2 data-line="394" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">参考</span></h2><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">Frida新闻页：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a href="https://frida.re/news/" target="_blank">https://frida.re/news/</a></span></code></p></li><li><p><span leaf="">Frida17.12.0发布页：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a href="https://frida.re/news/2026/06/10/frida-17-12-0-released/" target="_blank">https://frida.re/news/2026/06/10/frida-17-12-0-released/</a></span></code></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-gum</span></code><p><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">67a1b9c</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">5e2fd31</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">b3273ea</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f04c3e3</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">779f9b0</span></code></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">frida-core</span></code><p><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">a0a8838</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">33e5879</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">880f7ac</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f0cc3b4</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">f51327f</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">21dc508</span></code></p></li></ol><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=aebb448b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485254%26idx%3D1%26sn%3D32ca95e377824e9841fd305f7a77e2aa">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 12 Jun 2026 16:14:00 +0800</pubDate>
    </item>
    <item>
      <title>gbl_root_canoe隐藏BL状态原理分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485248&amp;idx=1&amp;sn=e754a3facd703701ea34858afd6e024d</link>
      <description>gbl_root_canoe隐藏BL状态原理分析</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-06-11 18:31</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=2c7f13c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT8jzCmckQf00Urr5aLDEa5IeiazygM0pqaxQiakiaWtWuia6JB6XgKiaSma06RG40L9Ke5LwloPZheia3iaAVYlnL5QgswST6AIFicsIYE%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <h1 data-line="0" dir="auto" style="margin-top: 0px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 2em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" data-pm-slice="0 0 []"><span leaf="">gbl_root_canoe隐藏BL状态原理分析</span></h1><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">高通骁龙8Gen5（内部代号 Sun/Canoe）平台的Android设备获取Root权限需要先解锁Bootloader（BL）。解锁BL后，TEE（Trusted Execution Environment）会将设备永久标记为不可信状态，导致银行类应用、支付应用及完整性检测机制（SafetyNet/Play Integrity）识别到设备已解锁而拒绝运行。</span></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">gbl_root_canoe实现BL解锁与TEE状态隐藏、在获得Root权限的前提下，利用GBL（Generic Bootloader）加载机制中的一个行为漏洞，将经过精准二进制修补的ABL（Android Bootloader，即高通UEFI启动应用）注入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">efisp</span></code><span leaf="">分区，使设备在启动链的早期就切换到「假回锁」状态，让TEE、内核及Android框架层均认为BL处于已锁状态，从而绕过完整性检测，同时保留通过SuperFastboot进行刷写的能力。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001597" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=34ad9f12&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTicCajDCtDcGYWxK89KoLXGmPuI6VL2KtaY7V8E9cicNiaJtv2ia9Xgib7fVZgta7AUnYqJdPWjonDLAicl4ibiapD3HbdzPtZSfGzOc6w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="47" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">高通ABL启动链基础</span></h2><p data-line="49" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在骁龙8Gen5平台上，设备上电后的启动顺序大致如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="51" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">PBL（片上只读）</span><br/><span leaf="">  └──&gt; XBL / SBL（一次性可编程，高度受保护）</span><br/><span leaf="">         └──&gt; ABL（efisp 分区，UEFI 应用层）</span><br/><span leaf="">                └──&gt; Linux Kernel</span></code></pre><p data-line="58" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ABL是整个链条中唯一同时满足「可被刷写替换」与「可访问 Verified Boot 决策逻辑」两个条件的组件。高通将 ABL 以 UEFI Firmware Volume（FV）格式打包，内部包含若干 PE32 格式的 EFI 应用，其中最核心的是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf="">，负责执行 AVB（Android Verified Boot）校验、决定 BootState，并最终引导内核。</span></p><p data-line="60" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ABL的验证由 GBL 负责。GBL 会从 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">efisp</span></code><span leaf=""> 分区读取并校验 ABL。这里存在一个关键行为：GBL 读取的分区名是通过一个可写的 UTF-16 字符串 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;efisp&#34;</span></code><span leaf=""> 指定的。这个字符串位于 ABL 二进制的数据段，可以在 PC 端修改——这就是本方案漏洞利用的起点。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="64" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">efisp分区名替换</span></h2><p data-line="66" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">patch_abl_gbl</span></code><span leaf="">是整个方案中最简洁的一步：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="68" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">patch_abl_gbl</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf="">* buffer, </span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> size)</span></span><span leaf=""> {</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> target[]      = { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;e&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;f&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;i&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;s&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;p&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf=""> };</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> replacement[] = { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;n&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;u&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;l&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;l&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;s&#39;</span></span><span leaf="">,</span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf=""> };</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> target_len = </span><span style="color: rgb(0, 0, 255);"><span leaf="">sizeof</span></span><span leaf="">(target);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> i = </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">; i &lt; size - target_len; ++i) {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: rgb(0, 122, 204);"><span leaf="">memcmp</span></span><span leaf="">(buffer + i, target, target_len) == </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 122, 204);"><span leaf="">memcpy</span></span><span leaf="">(buffer + i, replacement, target_len);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">;</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(0, 128, 0);"><span leaf="">-1</span></span><span leaf="">;</span><br/><span leaf="">}</span></code></pre><p data-line="83" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这段代码在ABL二进制中扫描 UTF-16 编码的字符串</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;efisp&#34;</span></code><span leaf="">，将其就地替换为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;nulls&#34;</span></code><span leaf="">。</span></p><p data-line="85" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">作用</span></strong><span leaf="">：修补后的ABL被刷入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">efisp</span></code><span leaf="">分区。当这个被修改过的 ABL 在运行时试图按照原来的逻辑从 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">efisp</span></code><span leaf=""> 分区加载「下一个 EFI」时，它会因找不到名为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;nulls&#34;</span></code><span leaf=""> 的分区而静默跳过，从而阻止原始 ABL被递归再次加载，避免了加载链的无限循环。</span></p><p data-line="87" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一补丁之所以可行，根本原因在于GBL对ABL的完整性校验发生在加载阶段，而不是在ABL运行期间对其自身数据段进行持续校验。一旦GBL完成校验并将控制权移交给被修改的 ABL，后者就能自由运行，包括引导一个与原始执行路径完全不同的自定义EFI载荷。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="91" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ABL 二进制的提取：从镜像到 PE32</span></h2><p data-line="93" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在对ABL进行修补之前，需要从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">abl.img</span></code><span leaf="">（或运行中设备的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">abl_a</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">abl_b</span></code><span leaf=""> 分区）中提取出可操作的 PE32 二进制。这项工作由</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">extractfv</span></code><span leaf="">完成。</span></p><p data-line="95" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">extractfv</span></code><span leaf=""> 实现了一个递归多层扫描器，逻辑如下：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="97" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">abl.img（原始 flash 镜像）</span><br/><span leaf="">  └── deep_scan()</span><br/><span leaf="">        ├── 扫描 MZ 头 → 提取 PE32 文件</span><br/><span leaf="">        ├── 扫描 BMP 图片（可选）</span><br/><span leaf="">        ├── 扫描 LZMA 压缩块（0x5D 0x00 0x00 魔数）→ 解压后递归 deep_scan()</span><br/><span leaf="">        └── 扫描 EFI Firmware Volume（_FVH 签名）→ 递归进入 FV 解析</span></code></pre><p data-line="106" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">其中最关键的是 FV 解析路径。高通 ABL 将核心 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf=""> 封装在一个标准 UEFI Firmware Volume 内，该 FV 内部包含若干 FFS（Firmware File System）文件，PE32 节（EFI_SECTION_PE32）可能直接存在，也可能经过 LZMA 压缩封装在 EFI_SECTION_COMPRESSION 中。</span></p><p data-line="108" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">extractfv</span></code><span leaf=""> 能够处理所有这些变体：</span></p><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">try_lzma_decompress()</span></code><p><span leaf="">：使用 liblzma 解压 LZMA 压缩块</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">calc_pe_real_size()</span></code><p><span leaf="">：通过解析 PE 头部的节表精确计算真实文件大小，避免提取多余数据</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">parse_pe_info()</span></code><p><span leaf="">：识别 ARM64 架构与 EFI_APP/EFI_DRIVER 子系统，用于过滤</span></p></li></ul><p data-line="114" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">默认模式下，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">extractfv</span></code><span leaf=""> 提取最大的 PE32 文件，输出为 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf="">，这就是后续 ABL 修补的输入。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="118" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">修补AVB验证绕过</span></h2><p data-line="120" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">提取出</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf="">后，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">patch_abl</span></code><span leaf="">工具对其进行一系列精确的二进制修补。所有修补逻辑都在 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">PatchBuffer()</span></code><span leaf="">中协调执行，目标是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">VerifiedBoot.c</span></code><span leaf="">中的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LoadImageAndAuthVB2</span></code><span leaf=""> 函数的编译产物。</span></p><p data-line="122" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个修补分为以下几个层次。</span></p><h3 data-line="124" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">启动状态锚点定位（补丁3）</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="126" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">int16_t</span></span><span leaf=""> Original[] = {</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x34</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x28</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x80</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x52</span></span><span leaf="">,</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">0x06</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x14</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xE8</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x40</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xF9</span></span><span leaf="">,</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x40</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x1F</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x71</span></span><span leaf="">,</span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">0xE8</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x07</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x9F</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x1A</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x79</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x1F</span></span><span leaf="">, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0x53</span></span><br/><span leaf="">};</span></code></pre><p data-line="135" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这是一个包含 8 条 ARM64 指令的字节序列，对应源码中以下逻辑的编译产物：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="137" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// VerifiedBoot.c 约 1887 行</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (AllowVerificationError) {</span><br/><span leaf="">    BootState = ORANGE;  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// CBZ + MOVZ <a class="wx_topic_link" topic-id="mq9cucvy-j9mvzr" style="color: #576B95 !important;" data-topic="1" data-recommend="">#0x28</a></span></span><br/><span leaf="">} </span><span style="color: rgb(0, 0, 255);"><span leaf="">else</span></span><span leaf=""> {</span><br/><span leaf="">    BootState = GREEN;   </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// B + (其他赋值)</span></span><br/><span leaf="">}</span></code></pre><p data-line="146" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">模式中的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-1</span></code><span leaf=""> 表示该字节是通配符（随编译版本变化的寄存器编号）。匹配到这个模式后：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">从第一个字节的低 5 位提取锁状态寄存器编号（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lock_register_num</span></code><span leaf="">）</span></p></li><li><p><span leaf="">记录该模式在文件中的偏移（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">anchor_offset</span></code><span leaf="">）</span></p></li><li><p><span leaf="">对匹配到的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">CBZ Wn, &lt;label&gt;</span></code><span leaf=""> 指令进行修补：将其目标寄存器替换为 WZR（寄存器 31，零寄存器），使分支永远不成立，从而跳过 ORANGE 路径</span></p></li></ol><p data-line="152" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一步是后续所有数据流追踪的基础锚点。</span></p><h3 data-line="154" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">反向数据流追踪（补丁4）</span></h3><p data-line="156" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">定位到锚点后，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">find_ldrB_instructio_reverse</span></code><span leaf=""> 从锚点地址向前反向扫描，追踪 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lock_register_num</span></code><span leaf=""> 寄存器值的来源：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="158" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 从锚点向前追踪，最多 8 次寄存器-栈溢出弹跳</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">while</span></span><span leaf=""> (now_offset &gt;= </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) {</span><br/><span leaf="">    DecodedInst d = decode_at(buffer, now_offset);</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (d.type == INST_PACIASP) </span><span style="color: rgb(0, 0, 255);"><span leaf="">break</span></span><span leaf="">; </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 遇到函数边界，停止</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 处理 64 位栈溢出：LDR Xt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-glik1b" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>] → 追踪对应的 STR</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (d.type == INST_LDR_X_IMM &amp;&amp; d.rn == </span><span style="color: rgb(0, 128, 0);"><span leaf="">31</span></span><span leaf=""> &amp;&amp; d.rt == current_target) { ... }</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 处理字节级栈溢出：LDRB Wt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-ms7wea" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>] → 追踪对应的 STRB</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (d.type == INST_LDRB_IMM &amp;&amp; d.rn == </span><span style="color: rgb(0, 128, 0);"><span leaf="">31</span></span><span leaf=""> &amp;&amp; d.rt == current_target) { ... }</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 找到真正的数据来源：LDRB Wt,[Xn,<a class="wx_topic_link" topic-id="mq9cucvy-edd0oq" style="color: #576B95 !important;" data-topic="1" data-recommend="">#off</a>]（从全局变量加载）</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (d.type == INST_LDRB_IMM &amp;&amp; d.rt == current_target &amp;&amp; d.rn != </span><span style="color: rgb(0, 128, 0);"><span leaf="">31</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 找到了！触发 source_callback</span></span><br/><span leaf="">    }</span><br/><span leaf="">}</span></code></pre><p data-line="178" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">找到源头 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LDRB Wt, [Xn, <a class="wx_topic_link" topic-id="mq9cucvy-ain03g" style="color: #576B95 !important;" data-topic="1" data-recommend="">#off</a>]</span></code><span leaf="">（即 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">AllowVerificationError = IsUnlocked()</span></code><span leaf="">）后，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">source_callback</span></code><span leaf=""> 将其改写为：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="180" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">write_instr(buffer, now_offset, encode_movz_w(current_target, </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">));</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 原: LDRB Wt, [Xn, <a class="wx_topic_link" topic-id="mq9cucvy-3uml5x" style="color: #576B95 !important;" data-topic="1" data-recommend="">#off</a>]   ← 读取 IsUnlocked() 返回值</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 改: MOV Wt, <a class="wx_topic_link" topic-id="mq9cucvy-x1w6is" style="color: #576B95 !important;" data-topic="1" data-recommend="">#1</a>             ← 硬编码 AllowVerificationError = TRUE</span></span></code></pre><p data-line="186" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一修改的深层含义：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">AllowVerificationError = TRUE</span></code><span leaf=""> 不仅跳过了 AVB 校验失败时的拒绝启动逻辑，还阻止了 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">UpdateRollbackIndex</span></code><span leaf=""> 标志被置位。由于回滚版本更新（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">TZ_UPDATE_ROLLBACK_VERSION</span></code><span leaf="">）和 TZ 软熔断（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">TZ_BLOW_SW_FUSE_ID</span></code><span leaf="">）都只在 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">UpdateRollbackIndex == TRUE</span></code><span leaf=""> 时执行，这一补丁同时防止了 TZ 对设备的永久性标记。</span></p><h3 data-line="188" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">正向数据流追踪（补丁5）</span></h3><p data-line="190" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">找到源头后，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">track_forward_patch_strb</span></code><span leaf=""> 从该源指令向后正向扫描，追踪寄存器值的消费点。追踪引擎使用 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LocSet</span></code><span leaf=""> 数据结构维护一个「活跃数据位置集合」，处理寄存器间拷贝、32/64 位栈溢出与重载：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="192" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// LocSet 追踪的操作类型：</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// - LOC_REG:   当前在某个寄存器中</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// - LOC_STK64: 已溢出到栈上（64 位）</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// - LOC_STK8:  已溢出到栈上（8 位）</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 当发现 STRB Wt, [Xn, <a class="wx_topic_link" topic-id="mq9cucvy-l1ged0" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>]，且 Wt 在 LocSet 中时：</span></span><br/><span leaf="">write_instr(buffer, off, strb_with_reg(d.raw, </span><span style="color: rgb(0, 128, 0);"><span leaf="">31</span></span><span leaf="">));</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 原: STRB Wt, [Xbase, <a class="wx_topic_link" topic-id="mq9cucvy-sba2j6" style="color: #576B95 !important;" data-topic="1" data-recommend="">#off</a>]   ← 写入 Data.IsUnlocked = AllowVerificationError</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 改: STRB WZR, [Xbase, <a class="wx_topic_link" topic-id="mq9cucvy-vlu5fy" style="color: #576B95 !important;" data-topic="1" data-recommend="">#off</a>]  ← 强制写入 0</span></span></code></pre><p data-line="204" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Data.IsUnlocked</span></code><span leaf=""> 是 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KMRotAndBootState</span></code><span leaf=""> 结构体的成员，该结构体通过 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KeyMasterSetRotAndBootState()</span></code><span leaf=""> 传递给 TEE。TEE 用 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">IsUnlocked</span></code><span leaf=""> 的值参与 ROT（Root of Trust）摘要计算：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="206" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">RotDigest = SHA256(PublicKey || IsUnlocked)</span></code></pre><p data-line="210" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">IsUnlocked = 1</span></code><span leaf=""> 到达 TEE，TEE 的 ROT 与出厂预期不符，会拒绝释放 FBE（File-Based Encryption）数据加密密钥，导致用户数据完全不可访问。补丁 5 强制写入 0，确保 TEE 收到的 ROT 信息与未解锁状态一致，数据分区正常解密。</span></p><h3 data-line="212" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">cmdline状态字符串修补（补丁2）</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="214" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">patch_adrl_unlocked_to_locked</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf="">* buffer, </span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> size, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint64_t</span></span><span leaf=""> load_base)</span></span><span leaf=""> {</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 在二进制中定位 ADRP+ADD 指令对序列</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 第一对加载 &#34;unlocked&#34; 字符串地址</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 第二对加载 &#34;locked&#34; 字符串地址</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 第三对加载 &#34;androidboot.vbmeta.device_state&#34; 字符串（确认上下文）</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 将第一对 ADRP+ADD 的目标寄存器改为第二对的寄存器</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 效果：两者都指向 &#34;locked&#34;</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> new_adrp = adrp_with_rd(b0.raw, xa);</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> new_add  = add_with_reg(b1.raw, xa);</span><br/><span leaf="">    write_instr(buffer, i,     new_adrp);</span><br/><span leaf="">    write_instr(buffer, i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">4</span></span><span leaf="">, new_add);</span><br/><span leaf="">}</span></code></pre><p data-line="230" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这一补丁修改内核启动参数中 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">androidboot.vbmeta.device_state</span></code><span leaf=""> 的值，从 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">unlocked</span></code><span leaf=""> 改为 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">locked</span></code><span leaf="">。Android 框架层（如 Google Play Services、SafetyNet/Play Integrity）通过读取这个属性判断 BL 状态，如果不修改该字符串，即便 TEE 认为设备已锁，Android 层面仍会探测到解锁状态，银行类应用等将无法运行。</span></p><p data-line="232" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">定位方式完全依赖编译器保留的字符串：通过 ADRP+ADD 指令对（高通 AARCH64 ABI 下加载页对齐全局地址的标准方式）来找到加载目标字符串的代码位置，无需知道任何固定偏移。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="236" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">OPPO/OnePlus警告屏去除定制补丁</span></h2><p data-line="238" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">针对OPPO/一加设备，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">patch_warning</span></code><span leaf="">负责去除开机时的「橙色状态」警告界面：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="240" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">bool</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">patch_warning</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf="">* buffer, </span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> size, </span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> global_var_offset)</span></span><span leaf=""> {</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 1. 通过字符串 &#34;Orange State\n&#34; 定位警告代码</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> warn_off = find_warning_offset(buffer, size, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">);</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 2. 向上搜索控制是否显示警告的 CBZ 指令</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(163, 21, 21);"><span leaf="">int32_t</span></span><span leaf=""> i = warn_off - </span><span style="color: rgb(0, 128, 0);"><span leaf="">4</span></span><span leaf="">; i &gt;= max_search_range; i -= </span><span style="color: rgb(0, 128, 0);"><span leaf="">4</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (d.type == INST_CBZ_W) {</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 3. 反向追踪该 CBZ 的判断值来源</span></span><br/><span leaf="">            find_ldrB_instructio_reverse(buffer, size, i, d.rt, &amp;offset, empty_source_callback);</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 4. 确认来源是锁状态全局变量（与前面记录的 global_var_offset 匹配）</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (offset != global_var_offset) </span><span style="color: rgb(0, 0, 255);"><span leaf="">continue</span></span><span leaf="">;</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 5. 将 CBZ Wt 改为 CBZ WZR（永远不成立，跳过警告显示）</span></span><br/><span leaf="">            write_instr(buffer, i, change_rt(&amp;d, </span><span style="color: rgb(0, 128, 0);"><span leaf="">31</span></span><span leaf="">));</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">}</span></code></pre><p data-line="261" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">关键点在于第4步的确认：只对来源是「锁状态全局变量」的 CBZ 进行修改，不盲目 NOP 掉所有 CBZ，从而避免破坏其他功能逻辑。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="265" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ARM64 指令引擎</span></h2><p data-line="267" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">上述所有修补逻辑都依赖一个轻量级的ARM64指令解码与编码引擎，支持 20+ 种指令类型：</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">指令类别</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">覆盖类型</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">内存访问</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">LDRB/STRB（立即数/前索引/后索引）、LDR/STR（32/64 位）</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">寄存器操作</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">MOV X/W、MOVZ W</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">地址计算</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ADRP、ADD X（含 LSL<a class="wx_topic_link" topic-id="mq9cucvy-d3rup7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#12</a>）</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">条件分支</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CBZ/CBNZ（32/64 位）、B.cond</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">无条件跳转</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">B、BL</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">特殊指令</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">PACIASP（函数边界标记）、NOP、RET</span></p></td></tr></tbody></table><p data-line="278" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">所有指令使用统一的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DecodedInst</span></code><span leaf=""> 结构表示，解码采用优先级表（priority table）驱动，避免编码空间重叠带来的歧义。编码辅助函数支持原地修改：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="280" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">adrp_with_rd</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> raw, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint8_t</span></span><span leaf=""> new_rd)</span></span><span leaf="">;  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 替换 ADRP 的目标寄存器</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">add_with_reg</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> raw, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint8_t</span></span><span leaf=""> new_reg)</span></span><span leaf="">;  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 替换 ADD 的 Rd 和 Rn</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">strb_with_reg</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> raw, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint8_t</span></span><span leaf=""> new_rt)</span></span><span leaf="">;  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 替换 STRB 的 Rt</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">encode_movz_w</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uint8_t</span></span><span leaf=""> rd, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint16_t</span></span><span leaf=""> imm16)</span></span><span leaf="">;    </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 构造 MOVZ Wd, <a class="wx_topic_link" topic-id="mq9cucvy-yuc6es" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm16</a></span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">change_rt</span></span><span style="color: inherit;"><span leaf="">(DecodedInst* inst, </span><span style="color: rgb(163, 21, 21);"><span leaf="">uint8_t</span></span><span leaf=""> new_rt)</span></span><span leaf="">; </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 通用 Rt 替换</span></span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">change_to_b</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uint32_t</span></span><span leaf=""> raw)</span></span><span leaf="">;                    </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// CBZ/CBNZ 转为无条件 B</span></span><br/></code></pre><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="291" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">自定义SuperFastboot</span></h2><p data-line="293" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">修补后的ABL在efisp分区加载自身时不再递归加载原始</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">efisp</span></code><span leaf="">，而是执行项目自带的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf="">（即 SuperFastboot 载荷）。</span></p><h3 data-line="295" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">ELF注入机制</span></h3><p data-line="297" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">elf_inject</span></code><span leaf="">工具将修补后的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ABL.efi</span></code><span leaf=""> 嵌入 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">loader.elf</span></code><span leaf="">（SuperFastboot 的未链接 ELF 二进制）中：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="299" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// loader.elf 中预留了一个占位符节区</span></span><br/><span leaf="">__attribute__((section(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;.abl_placeholder&#34;</span></span><span leaf="">), used))</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">unsigned</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">int</span></span><span leaf=""> dist_ABL_efi_len = </span><span style="color: rgb(0, 128, 0);"><span leaf="">16</span></span><span leaf="">;</span><br/><span leaf="">__attribute__((section(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;.abl_placeholder&#34;</span></span><span leaf="">), used))</span><br/><span style="color: rgb(163, 21, 21);"><span leaf="">unsigned</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> dist_ABL_efi[] = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ABL_PLACEHOLDER!&#34;</span></span><span leaf="">;</span></code></pre><p data-line="307" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">elf_inject</span></code><span leaf=""> 扫描 ELF 的节表，找到包含 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;ABL_PLACEHOLDER!&#34;</span></code><span leaf=""> 的节区，将其替换为实际的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ABL.efi</span></code><span leaf=""> 数据，同时正确更新节大小、程序头（Phdr）的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FileSiz</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MemSiz</span></code><span leaf=""> 字段以及节表偏移（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">e_shoff</span></code><span leaf="">），确保输出的 ELF 结构合法。</span></p><h3 data-line="309" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">运行时启动逻辑</span></h3><p data-line="311" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoader.efi</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LinuxLoaderEntry</span></code><span leaf=""> 启动入口实现了以下决策树：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="313" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">LinuxLoaderEntry()</span><br/><span leaf="">  ├── ReadAllowUnlockValue() → 检测 OEM Unlock 开关</span><br/><span leaf="">  │     └── 若未开启（或读取失败）→ 直接加载内嵌的 ABL.efi，普通启动</span><br/><span leaf="">  ├── WaitForVolumeDownKey(3000ms) → 等待音量减键</span><br/><span leaf="">  │     ├── 按下音量减 → 进入 SuperFastboot 模式</span><br/><span leaf="">  │     ├── 按下音量加 → 进入 Recovery（扩展功能）</span><br/><span leaf="">  │     └── 超时无输入 → 加载内嵌 ABL.efi，普通启动</span><br/><span leaf="">  └── FastbootInitialize() → 启动 Fastboot 服务</span></code></pre><p data-line="324" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">BootEfiImage()</span></code><span leaf=""> 通过标准的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gBS-&gt;LoadImage()</span></code><span leaf=""> + </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">gBS-&gt;StartImage()</span></code><span leaf=""> UEFI 调用链式启动内嵌的 ABL.efi。这意味着整个引导链实际上是：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="326" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">GBL → 修补后的 ABL（SuperFastboot 壳）</span><br/><span leaf="">         └──[用户无操作]──&gt; 原始 ABL.efi（内嵌于壳中，继续正常引导）</span><br/><span leaf="">         └──[按音量减]────&gt; Fastboot 服务（SuperFastboot 模式）</span></code></pre><h3 data-line="332" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SuperFastboot 的关键能力</span></h3><p data-line="334" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">SuperFastboot 基于高通 QcomModulePkg 的 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FastbootLib</span></code><span leaf="">，在假回锁状态下提供了原生 Fastboot 所不具备的能力：</span></p><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fastboot flashing unlock</span></code><p><span leaf=""> / </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">unlock_critical</span></code><span leaf="">：BL 解锁操作，</span><strong><span leaf="">不触发数据清除</span></strong></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fastboot flashing lock</span></code><p><span leaf="">：重新锁定 BL，触发数据清除</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fastboot flash &lt;partition&gt; &lt;file&gt;</span></code><p><span leaf="">：全分区刷写</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fastboot boot xxx.efi</span></code><p><span leaf="">：临时启动任意 EFI 文件（无需刷写）</span></p></li></ul><p data-line="341" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fastboot flashing unlock</span></code><span leaf=""> 不触发数据清除的原因：高通 ABL 在处理解锁命令时会检查当前 BootState。由于此时 ABL 已被修补（BootState=GREEN，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">IsUnlocked=0</span></code><span leaf="">），设备表现为已锁状态，执行解锁操作时不满足触发数据清除的条件判断，因此跳过了清除流程。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="345" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">工具链与构建流程</span></h2><p data-line="347" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整个方案由多个独立工具组成，通过 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">make</span></code><span leaf=""> 驱动的构建系统统一编排：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="349" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">gbl_root_canoe/</span><br/><span leaf="">├── submodules/</span><br/><span leaf="">│   ├── ablfvextractor/   extractfv — ABL 固件卷解包工具（C，依赖 liblzma）</span><br/><span leaf="">│   ├── patcher/          patch_abl — ABL 二进制修补工具（C，无依赖）</span><br/><span leaf="">│   ├── elflinker/        elf_inject — ELF 载荷注入工具（C）</span><br/><span leaf="">│   └── uefi/edk2/        LinuxLoader.efi — SuperFastboot 载荷（UEFI/EDK2）</span><br/><span leaf="">└── targets/</span><br/><span leaf="">    ├── toolkit_linux/    Linux PC 工具包构建目标</span><br/><span leaf="">    ├── toolkit_windows/  Windows PC 工具包构建目标（MinGW 交叉编译）</span><br/><span leaf="">    └── magisk_module/    Magisk 模块构建目标（Android NDK 交叉编译）</span></code></pre><h2 data-line="362" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">使用方法</span></h2><p data-line="364" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在PC电脑上依次执行：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 2.89352px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="366" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">1. extractfv abl.img -o ./build/</span><br/><span leaf="">        → 提取 LinuxLoader.efi（ABL 核心 PE32）</span><br/><span leaf="">2. patch_abl LinuxLoader.efi ABL.efi</span><br/><span leaf="">        → 执行所有补丁，输出修补后的 ABL.efi</span><br/><span leaf="">3. elf_inject loader.elf ABL.efi ABL_with_superfastboot.efi</span><br/><span leaf="">        → 将修补后的 ABL 嵌入 SuperFastboot 壳，输出最终文件</span><br/><span leaf="">4. fastboot flash efisp ABL_with_superfastboot.efi</span><br/><span leaf="">        → 刷入 efisp 分区</span></code></pre><p data-line="380" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Magisk模块版本将以上步骤封装为设备端脚本，在已Root的设备上通过Root管理器（KernelSU/Magisk/APatch）直接执行，免去PC操作。</span></p><hr style="border-width: 0px 0px 1px;border-style: none none solid;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"/><h2 data-line="384" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整体效果</span></h2><p data-line="386" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">方案在几个层面保证了跨设备、跨 ABL 版本的鲁棒性：</span></p><p data-line="388" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">字符串锚定而非地址硬编码</span></strong><span leaf=""> 所有代码位置均通过编译器保留的字符串常量（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;unlocked&#34;</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;locked&#34;</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;androidboot.vbmeta.device_state&#34;</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;Orange State\n&#34;</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">&#34;Your device has been unlocked&#34;</span></code><span leaf="">）动态定位。字符串在 ABL 重编译后地址会变化，但内容不会变化，ADRP+ADD 寻址模式也不会变化。</span></p><p data-line="391" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">指令模式匹配而非固定字节序列</span></strong><span leaf=""> 启动状态锚点（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Original[]</span></code><span leaf="">）使用带通配符的模式而非精确字节序列，通配符覆盖随编译器寄存器分配变化的字段（低 5 位寄存器编号），只匹配控制流结构固定的部分。</span></p><p data-line="394" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">数据流追踪适应编译器优化</span></strong><span leaf=""> 补丁 4/5 的反向/正向追踪引擎能够跟踪寄存器值经过多层栈溢出（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">STR Xt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-519mgv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>]</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LDR Xt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-dy94bb" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>]</span></code><span leaf="">）和字节溢出（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">STRB Wt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-97xrlr" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>]</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">LDRB Wt,[SP,<a class="wx_topic_link" topic-id="mq9cucvy-2tyloz" style="color: #576B95 !important;" data-topic="1" data-recommend="">#imm</a>]</span></code><span leaf="">）之后的最终位置，最多支持 8 次「弹跳」，应对编译器激进优化下的寄存器重用和溢出重排。</span></p><p data-line="397" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">函数边界保护</span></strong><span leaf=""> 所有追踪都以 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">PACIASP</span></code><span leaf="">（ARM 指针认证指令，同时也是高通 ABL 中标记函数入口的约定）作为硬性停止条件，防止追踪越过函数边界误改其他函数的代码。</span></p><p data-line="400" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">分级失败处理</span></strong><span leaf=""> 补丁分为「关键」（失败则中止并返回 false）、「重要但非关键」（失败打印警告继续）、「可选」（失败静默忽略）三个级别。这确保了在 cmdline 字符串补丁失败的 ABL 版本上，设备仍能正常启动，只是状态字符串暴露，不会因补丁失败导致砖机。</span></p><p data-line="403" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">经过以上所有补丁和载荷注入后，设备的状态：</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">项目</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">状态</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">TEE BootState</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GREEN（已锁，TEE 正常释放 FBE 密钥）</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">androidboot.vbmeta.device_state</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">locked</span></code></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">用户数据</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整可访问</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SafetyNet / Play Integrity</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">基础级别通过（取决于设备其他因素）</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Fastboot 能力</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整，含解锁/锁定/刷写/临时启动</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OTA 兼容性</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">需 OTA 前降级 ABL 版本，或模块脚本自动处理</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">BL 解锁状态</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">维持未解锁（物理意义上），或可通过 SuperFastboot 二次解锁</span></p></td></tr></tbody></table><p data-line="415" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本方案的本质是：在 GBL 校验之后、内核启动之前的 UEFI 空间内，通过精确的二进制修补让 ABL 的安全状态决策输出与未解锁状态保持一致，从而在不触碰 xBL 及 TEE 的前提下，实现了对 AVB 和设备状态上报机制的完全控制。</span></p><p data-line="417" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当然，这种补丁方式已经有了更优雅的升级版本，基于GBL启动链Hook技术勾住每一个需要补丁的地方，动态补丁兼容性更好。</span></p><p data-line="417" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf=""><span textstyle="" style="font-weight: bold;">具体细节与使用方法点击阅读原文下载：高通8Gen5的gbl解锁隐藏技术实现原理分析.pdf</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="https://t.zsxq.com/n4XWk">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=5c0d7cab&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485248%26idx%3D1%26sn%3De754a3facd703701ea34858afd6e024d">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 11 Jun 2026 18:31:00 +0800</pubDate>
    </item>
    <item>
      <title>横跨近半年的高通8Gen5漏洞利用时间线</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485242&amp;idx=1&amp;sn=f04c9172f016a16174e7b9f6cca6c4b1</link>
      <description>高通GBL漏洞利用从本年2月底公开后，利用手法与工具也在不但更新变化。</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-06-10 15:56</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=548058e1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeTibkh86XibpQnhW6Hoowqu0ibNZ5PNwyUwQNhpZeIwFOTCZA3fKwEFL2CJvLkxrtGny078BccFsr9FNHRVlVEKOMiaRRqg5hmKoSpk%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">高通GBL漏洞利用从本年2月底公开后，利用手法与工具也在不但更新变化。当前3月就录制了这个漏洞的两集视频，这次录制相关视频第3集时，整理了全部的时间线给大家。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001591" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=7e919c95&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT9cSn5j1Zs2WVgbxXlaMeCf4N0cCO3TPT7u7CEuGNg94dajyYuxuegSWf0VE8sFibIIicJwK5D6QdJutWOeGyBQFibpnkVdF7ia8uA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">知识星球我也传一份高清的。</span></p><p><span leaf=""><a href="https://t.zsxq.com/5VaKz" target="_blank">https://t.zsxq.com/5VaKz</a></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d35a8327&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485242%26idx%3D1%26sn%3Df04c9172f016a16174e7b9f6cca6c4b1">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 10 Jun 2026 15:56:00 +0800</pubDate>
    </item>
    <item>
      <title>使用木鱼沙箱跟踪分析kpm与ko模块</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485237&amp;idx=1&amp;sn=61044ac4cc7070f7e4984a2326a9a905</link>
      <description>木鱼沙箱一个全网独有的功能，就是支持参KernelPatch的KPM模块，与安卓GKI内核的ko模块进行动态跟踪</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-06-09 11:33</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=2a69fbac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeT8Qficqg82z5MYVHZW3ALECTQmibsCgAzHucOc9jkmgCuArUdV06LmyneuvrTdrsV4aBas82akQNu2YcPYwW5dBwdDGUT1Led1tk%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">木鱼沙箱一个全网独有的功能，就是支持参KernelPatch的KPM模块，与<span textstyle="" style="font-weight: bold;">安卓GKI内核的ko模块进行动态跟踪分析</span>。并生成指令级别的日志跟踪记录。主打攻破闭源与OLLVM混淆的内核模块。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001582" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=044d9d5e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTicumr2VhqbtB4sWpveNK0HA8jxqZ1DBBagDibh3EicJGIWvLdQCOaPTufmNiaRN0iaMwrS3tRa230Z0M0dibxSq8rpvkEqZAvjux1Eo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">PDF报告中带了trace日志，方便手动分析与接入AI分析。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001583" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d9417757&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT9t4truoTgp0bqxVSV4ChG9gwJ8v7hW19Ak1RgmNStxicG0HmZzJkwFh0RK1uCesz6Z7FzVKfTUJfKe1SOToUYTxCyeKrL8ZwJk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">下面是ko模块的。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001584" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=875bc725&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT9icCFwBa0ZteoN7rxoiczibRrgJ1vsUc7zBEdKD41uFMNFx9BHDhrJB8AOBTMzPZpDHCrssk41sfb39gtq7pAM6XNL9HS8ic6OnA0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">下面是ko的trace日志。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001585" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a4ea596e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT8cnH6undsAwrznSOpot2OQdRB3n1DeFdYeB25gKm9gDBCDPCSHW9KXYk3RskUP9ibNRNtkefHrKYt13sTXlnfVv2DybWJ26E70%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001586" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b6d435f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTibcAS4Wxb9fvxVmqjCpuF5wRlI1bGh8rqRicYfhDm6biaKahuXBGKE9U5j3Q3feSJNQGbVaQslYYaboC7eQibERXlCPxO5UYZJJy4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">目前木鱼沙箱限安卓软件开发与逆向分析全阶段学员内部免费使用。</span></span></p><p><span leaf=""><span textstyle="" style="color: #f00;">点击阅读原文下载wuwa ko的PDF报告。</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="https://t.zsxq.com/0SKYp">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=36462bdd&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485237%26idx%3D1%26sn%3D61044ac4cc7070f7e4984a2326a9a905">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 09 Jun 2026 11:33:00 +0800</pubDate>
    </item>
    <item>
      <title>木鱼沙箱软件分析平台全新开启内测</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485228&amp;idx=1&amp;sn=f944f8c1869663aa2746f888ec286963</link>
      <description>木鱼分析沙箱新版本重磅内测来袭</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-05-30 14:43</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=556c9aa8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeT8QTqmWQNO9ict7mRiawkmJMcEUdEm57AVWLcw8PRXdefv0ic7rycsboxuMElKiax3u9KskgpHxfVxd8cnjj6z2hVPGwGXUyOAXN6I%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485019&amp;idx=1&amp;sn=70c07de1f8d3c5e9caeb468936a8e994&amp;scene=21#wechat_redirect" textvalue="木鱼分析沙箱新版本重磅内测来袭" data-itemshowtype="0" linktype="text" data-linktype="2">木鱼分析沙箱新版本重磅内测来袭</a></span></p><p><span leaf="">木鱼的目标是对安卓与iOS移动系统软件实现全方位的穿透分析，做安全分析从业员样本分析路上的瑞士军刀。</span></p><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: 600;line-height: 1.25;border-bottom: 1px solid rgba(209, 217, 224, 0.7);padding-bottom: 0.3em;" data-pm-slice="0 0 []"><span leaf="">沙箱功能</span></h2><p><svg data-component="Octicon" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></p><ol style="box-sizing: border-box;margin-top: 0px;margin-bottom: 16px;padding-left: 2em;color: rgb(31, 35, 40);font-family: &#34;Mona Sans VF&#34;, -apple-system, &#34;system-ui&#34;, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf="">APK静态与动态分析</span></p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf="">XAPK静态与动态分析</span></p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf="">自动化逆向分析</span></p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf="">APP网络协议分析</span></p></li><li style="box-sizing: border-box;margin-top: 0.25em;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf="">APP威胁分析平台</span></p></li></ol><h2 tabindex="-1" dir="auto" style="box-sizing: border-box;margin-top: 24px;margin-bottom: 16px;font-size: 1.5em;font-weight: 600;line-height: 1.25;border-bottom: 1px solid rgba(209, 217, 224, 0.7);padding-bottom: 0.3em;" data-pm-slice="0 0 []"><span leaf="">沙箱报告</span></h2><p><svg data-component="Octicon" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></p><ul style="box-sizing: border-box;margin-top: 0px;margin-bottom: 0px !important;padding-left: 2em;color: rgb(31, 35, 40);font-family: &#34;Mona Sans VF&#34;, -apple-system, &#34;system-ui&#34;, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li style="box-sizing: border-box;list-style-type: none;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP基本信息</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP风险打分</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP证书信息</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP概要信息</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP权限</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP组件信息</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP第三方SDK与壳信息</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP第三方SDK密钥提取</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> JAVA API调用分析</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 系统调用分析</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 运行时截图</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Native进程执行流程图</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 运行时行为规则</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> APP标签与识别</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 网络请求识别</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 威胁分析分布（domain, email, mobile）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析环境打包与部署</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Linux Docker环境部署支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析报告支持主题样式</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析报告支持pdf</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析报告支持html</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> L1规则引擎</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> L2规则引擎</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> L3规则引擎（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> L4规则引擎（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 脱壳功能（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 隐私合规检测规则（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 风控SDK识别与行为分析（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 32位app支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 样本图云功能</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析环境支持制作ROM包刷机</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 自动抓HTTPS包</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Flutter动态分析支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Hiddern API检测</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> MITRE检测支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> CVE检测支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 支持所有OLLVM混淆识别</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> XPosed插件Hook点分析支持(正在测试更多样本)</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> LSPosed插件Hook点分析支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Zygisk插件Hook点分析支持(部分支持，正在完善)</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Native代码Hook点分析支持(正在完善)</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Native代码presets</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Golang开发的APP支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> C<a class="wx_topic_link" topic-id="mprza8en-zwkfcs" style="color: #576B95 !important;" data-topic="1" data-recommend="">#开发的APP支持</a>（目前部分）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> H5/Web开发的APP支持（目前部分）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 网络地图炮（目前部分）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 活动名对应截图</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 分析环境设备信息修改与模拟（正在完善）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 跟踪分析ko功能（正在接入）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 跟踪分析kpm功能（正在接入）</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> Flutter抓包支持</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 威胁情报平台对接</span></p></li><li style="box-sizing: border-box;list-style-type: none;margin-top: 4px;"><p dir="auto" style="box-sizing: border-box;margin-top: 16px;margin-bottom: 16px;"><span leaf=""> 火焰图支持</span></p></li></ul><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001575" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ef90b2ef&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT9ER6nOScGUEcFCp8zTcu6zVPTRDFC5hIobaHIiaSKkavsibnibd1EJsNJZ3DLK7fwOtsgoj83sm7eTWpAficCtsUicwClXCartUia1Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001576" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e0975942&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTibadW2H8iaOpoMCoGtCCdAkMftT1RwJSngM04sXtQUMpde4liaCiaibGk7UawUK83rQcYIQCLS0qRGZHF3V6VBjpdPUObUDWibaPXro%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001577" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e55b04c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTicKKVXpj0RJAaxDdpoWIicVo9oslzkg4xrlZ4Qe52cSsON6B9l6QtDwr1BDCxEBzyLCUbhqZzErbyEbhSE30iavtWTmAFOlK2R0w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">目前限定<span textstyle="" style="font-weight: bold;">安卓软件安全开发与逆向分析全阶段学员</span>内测。后期也没有公开免费卷国内安全从业者同行的打算。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=7df64d83&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485228%26idx%3D1%26sn%3Df944f8c1869663aa2746f888ec286963">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 30 May 2026 14:43:00 +0800</pubDate>
    </item>
    <item>
      <title>解决一个安卓15/16调试APK运行adb jdwp无输出的问题</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485221&amp;idx=1&amp;sn=896b232e993d35f05c40f2d4f54cdb3b</link>
      <description>解决一个安卓15/16调试APK运行adb jdwp无输出的问题</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-05-14 15:35</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=26a27cb1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT9APTwTdt7AmJuDcvrIdMAHSE9eKq2pK3ntDAkHYNZeNP5Nq6AN5pnyEgOswv5pDqwIsAbw6ZWcqg79tq2Yq84pibUEamyKZsSo%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>解决一个安卓15/16调试APK运行adb jdwp无输出的问题</p>
  <p><span leaf="">这个问题的起源是一个安卓学员发现在一台Pixel6的安卓16设备上，调试debugable的APK程序时，adb jdwp无输出的问题。不能打印jdwp端口，就没办法adb forward转发后开IDA的调试。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001566" data-ratio="1.1943734015345269" data-s="300,640" type="block" data-type="png" data-w="782" src="https://wechat2rss.xlab.app/img-proxy/?k=4e6f6a65&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT8uclD0Y3RGvibibfVBe076R51sibxPKLuhvjRyaguq2I42RNzNdMiccjsdn8tWJJVRUGl1YdJXnibu1fhEFAqx65oFK7QLcRKgeuU8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"></ul><pre class="code-snippet__js" data-lang="powershell"><code><span leaf="">指令流程</span></code><br/><code><span leaf="">	adb install app<span class="code-snippet__literal">-release</span>.apk</span></code><br/><code><span leaf="">	adb shell am <span class="code-snippet__built_in">start</span> <span class="code-snippet__literal">-D</span> <span class="code-snippet__literal">-n</span> com.example.ctf/.MainActivity</span></code><br/><code><span leaf="">	adb shell <span class="code-snippet__built_in">ps</span> <span class="code-snippet__literal">-A</span> | grep com.example</span></code><br/><code><span leaf="">	adb jdwp</span></code><br/></pre></p><p><span leaf="">奇怪点在于16这台不行，小米的又可以。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001567" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=8000edda&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeTicqO9c0dIUYvpxkg0aGMmZ65861rwATTEP7tfT67yfS7YLv1MWREbdDgUibczqdblgv3wO5EiaCSPkLbwCV5pVaXtsBmP9f2CjmE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">我本地测试一加ACE 3Pro的安卓15，同样是没有输出。然后，我就让他使用LLDB在安卓Termux上直接调试会更简单。</span></p><p><span leaf="">但是他还是想弄清楚这个问题的底层原理，于是他经过一翻摸索，找到了原因。并把方案告诉了我。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001568" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3b497d42&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT9v12jhCz9s5dXKytJniaHt2wlicd2NjSf21BDic0lozV8x0z12njpfuichnqn6vibc58OKna7y5iaicUEubn9YicuJ4vtnbWBiaQMr8QmI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001569" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ec443c86&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT8zdUvpmCk9xrmRvc6r1KGbKq0NU0pLrDLP0ocpaJTF7hx8BQ9EwXnZ0g9vKq8gAXn9a6u2SCXZ8jFLmNFnTPuATvOOM60PUX8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><a href="https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/android15-s1-release/libs/adbconnection/adbconnection_client.cpp" target="_blank">https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/android15-s1-release/libs/adbconnection/adbconnection_client.cpp</a></span></p><p><span leaf="">我本机看了下，果然有安装类似的插件，并且adbd是stopped。不过我没卸载插件，只是让adbd起来。然后测试，发现成功了！</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001570" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=95d673db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeT87SMfsx9iaS0aYgRnpd9GBGhgp0giaKCXUibXPJAepVgbBpVkv0ecZGRIxPDs4Nz5NcfqwPK1JicA3Ca2cKYyyyObURhIcsXtMFicY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">不错！在此给这位学员点赞！</span></p><p><span leaf="">希望大家在遇到技术问题尝试解决时，不是像我这样第一时间考虑换方案，而是能够像他一样保持探索的精神。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e237cc26&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485221%26idx%3D1%26sn%3D896b232e993d35f05c40f2d4f54cdb3b">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 14 May 2026 15:35:00 +0800</pubDate>
    </item>
    <item>
      <title>有意思的官方杀同人安卓投屏多窗口融合模式</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485211&amp;idx=1&amp;sn=de7f359c8d7861e8b1124667a40341b6</link>
      <description>有意思的官方杀同人安卓投屏多窗口融合模式</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-05-13 15:42</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=c0ef6b27&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FSq4BUsrXeTibkicFG0PFOoJ1iaWsVgkG2gczXLDxic5yK2cEUElyrU6flMB75WmtibGYyvzVibz60P1gzwRFHB82smH59PoEWQcCNicGIPYkE8a3Rw%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>有意思的官方杀同人安卓投屏多窗口融合模式</p>
  <blockquote style=" background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 242, 242);border-color: rgba(0, 122, 204, 0.5);margin: 0px;padding: 0px 16px 0px 10px;border-left-width: 5px;border-left-style: solid;border-radius: 2px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><p data-line="2" dir="auto" style=" margin-top: 0px;margin-bottom: 16px;  "><span leaf="">上一篇《iOS虚拟手机可以玩窗口化融合的越狱插件》在结尾留过一个尾巴，顺手提到安卓平台现在也有了类似的工具，会单独写一篇。这一篇就来还这个愿，只是故事比预想中还要戏剧一点。</span></p></blockquote><p data-line="6" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">事情是这样的：X上一个的开发者推主先发了一条推，说自己刚搞完一个&#34;融合模式&#34;的安卓投屏工具，预计下周上线，欢迎大家来玩。结果没过几天，朋友告诉他scrcpy刚发布的4.0版本里加了一个几乎完全一样的功能，叫flex display。一查commit，scrcpy这边的提交功能的时间正在他发推的完不久。</span></p><p data-line="6" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这其实是同人圈很熟悉的桥段，&#34;刚做完发完安利，官方就出了一模一样的东西&#34;。只不过这次的&#34;官方&#34;是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Genymobile</span></code><span leaf="">这个团队，他们手里那把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">scrcpy</span></code><span leaf="">，已经是安卓投屏事实上的标准。整件事看下来，又好笑又值得复盘，所以才有了这一篇。</span></p><h2 data-line="8" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18); color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">同人作品AndDrive</span></h2><p data-line="10" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">先聊推主@1ittlecup搞的这个安卓投屏工具，从他给出的截图大致能拼出全貌。</span></p><p data-line="12" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">工具叫</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">AndDrive(D)</span></code><span leaf="">，介绍写得很直白，无缝连接你的Mac和Android设备。界面上有两个Tab，一个叫&#34;设备管理&#34;，一个叫&#34;应用列表&#34;，当前选中的是一台</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Pixel 8</span></code><span leaf="">，右上角有一个特别醒目的&#34;融合模式&#34;开关。下方搜索框旁边的应用列表里，显示着</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">povo2.0</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">QQ</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Shadowsocks</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Shizuku</span></code><span leaf="">这一类常用app的图标。</span></p><p data-line="12" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001558" data-ratio="0.670490093847758" data-s="300,640" type="block" data-type="gif" data-w="959" src="https://wechat2rss.xlab.app/img-proxy/?k=0796eb1c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_gif%2FSq4BUsrXeTicbRGgicfukYnbJPCAJghMZMjo7fMhwD4ibI4mhBiaKeMCS4BS2U2HXPC8TeMvwIvZMwpZib7DumK2KaiaBsfc03fEJFic97ANljDQ3M%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></span></p><p data-line="14" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">也就是说，它要做的并不是把整个Android手机屏幕投到Mac上那种传统方案，而是把单个app以独立窗口的形态投出来。每个app就是一个Mac原生外观的窗口，可以拖、可以摆、可以叠，和iOS那边</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">的窗口化思路精神上是一致的，只是平台从越狱iOS换成了原生安卓。</span></p><p data-line="16" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">按推主的说法，这个工具基本已经做好，准备下周公开发布。从功能反推实现链路，基本可以猜到他在做这几件事：</span></p><ol style=" margin-top: 0px;margin-bottom: 0.7em; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; " class="list-paddingleft-1"><li style=""><p><span leaf="">通过adb或者类似通道在手机端启动一个server，接收来自Mac的指令。</span></p></li><li style=""><p><span leaf="">在Android侧创建虚拟显示，把目标app拉起到虚拟display上，再截取这一块surface的画面。</span></p></li><li style=""><p><span leaf="">把surface流编码后回传到Mac端，每个虚拟display对应一个Mac窗口。</span></p></li><li style=""><p><span leaf="">反向把鼠标、键盘、剪贴板事件转发回Android侧，作用到对应的虚拟display。</span></p></li><li style=""><p><span leaf="">同步Mac窗口的尺寸变化，让虚拟display的尺寸跟着实时调整，做到所见即所得。</span></p></li></ol><p data-line="24" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这五件事，前四件是经典投屏方案的常规操作，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">scrcpy</span></code><span leaf="">过去几年里基本都做过。真正卡住所有同类工具的是第五件，让虚拟display的尺寸跟着客户端窗口动态调整，而不是开始一次就锁死，这条路在Android上并不平坦。</span></p><h2 data-line="26" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18); color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">scrcpy版本4.0</span></h2><p data-line="28" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">scrcpy v4.0是2026年5月12日发布的，作者是Genymobile的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rom1v</span></code><span leaf="">。这一版的changelog长得吓人，从SDL2迁移到SDL3、加了相机变焦和手电筒控制、加了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--keep-active</span></code><span leaf="">、修了一大堆Meta Quest闪烁问题。但站在这次故事的视角，里面最关键的一句只是这一行：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="30" dir="auto" style=" font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;  "><span leaf="">Add flex display support (<a class="wx_topic_link" topic-id="mp3qqckd-8xmzod" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6772</a>)</span></code></pre><p data-line="34" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">按官方说法，虚拟display现在可以打上&#34;flex&#34;标记，使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--flex-display</span></code><span leaf="">或者短选项</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-x</span></code><span leaf="">开启，开启之后虚拟display就能随着客户端窗口的大小动态resize。再配合</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--start-app</span></code><span leaf="">这一类参数，就能直接把单个Android app拉起到一个可以自由缩放的桌面窗口里。</span></p><p data-line="36" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">官方的demo命令本身就很有代表性：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="38" dir="auto" style=" font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;  "><span leaf="">scrcpy --new-display=/192 -x --start-app=org.mozilla.firefox --keep-active --no-vd-system-decorations</span></code></pre><p data-line="42" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这一行命令做的事情是，创建一个dpi为192的新虚拟display，启用flex模式，在这个display上拉起Firefox，保持设备活跃，并且不绘制虚拟display的系统装饰。最终效果就是Mac桌面上多出一个看起来就像原生窗口的Firefox for Android，可以随便拖、随便缩。</span></p><p data-line="44" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">官方文档里给出的其他玩法也都简单直接：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="46" dir="auto" style=" font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;  "><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 启动安卓系统设置,固定初始尺寸为1024x768、dpi 160</span></span><br/><span leaf="">scrcpy --new-display=1024x768/160 --start-app=com.android.settings --flex-display</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 默认尺寸是1280x960,dpi是160</span></span><br/><span leaf="">scrcpy --new-display --start-app=com.android.settings --flex-display</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 配合h265和高码率,大窗口下保持画质</span></span><br/><span leaf="">scrcpy --new-display -x --video-codec=h265 -b16M</span></code></pre><p data-line="57" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">也就是说，推主那一套设备管理面板加应用列表的GUI壳子，如果只看核心能力，scrcpy 4.0用一行命令就能搞出大致一样的效果。这才是这次故事真正的痛点，不是scrcpy出了竞品，是scrcpy把这件事的核心能力以官方姿态一次性给齐了。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001560" data-ratio="0.7171189979123174" data-s="300,640" type="block" data-type="gif" data-w="958" src="https://wechat2rss.xlab.app/img-proxy/?k=08e0c242&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FSq4BUsrXeT9fABdzofCxD45ibicu30lRUuSsohIlR4ic1YjscwicCSEic2JpocfM7w9ayiaicT3icm4T7MNt8yGlRzo4ibyx1mVSLdBibMECaSibrEcRj4%2F640%3Fwx_fmt%3Dgif%26from%3Dappmsg"/></p><h2 data-line="59" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18); color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">flex display核心能力</span></h2><p data-line="61" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">flex display在用户视角上的表现，可以拆成几个要点。</span></p><p data-line="63" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第一，每个flex display都是一个虚拟display，不是手机主屏的镜像。也就是说，给它装哪个app、装多大、按多少dpi渲染，完全和真机的物理屏幕脱钩，这本身就是窗口化所需要的前提。</span></p><p data-line="65" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第二，尺寸可以随客户端窗口动态变化，而不是开始时锁死。这是它和过去</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--new-display</span></code><span leaf="">的最大区别。过去也能在投屏链路里再开一个虚拟display，但开多大就只能多大，要变只能关掉重开。</span></p><p data-line="67" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第三，可以指定初始尺寸和dpi。如果不指定，默认是1280x960、dpi 160。这两个值不是从主机屏幕推导出来的，而是写死的合理默认，理由很简单，做成自适应主机屏幕需要更多代码，并且会延后第一帧的时间，得不偿失。</span></p><p data-line="69" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第四，渲染策略和普通投屏不一样。普通投屏会把帧居中按比例铺满窗口，flex display下默认是1:1渲染到窗口左上角。这是为了让&#34;客户端窗口大小&#34;和&#34;虚拟display大小&#34;在视觉上严格对齐，而不是用缩放遮掩两者的不一致。</span></p><p data-line="71" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第五，会和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--keep-active</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--video-codec=h265</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-bN</span></code><span leaf="">这一类参数配合得很好。要让窗口长时间不锁屏，要让大窗口下保持画质，都有现成的开关。</span></p><p data-line="73" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这几条加起来就足以说明，flex display并不是一个临时拍脑袋加的小功能，它是scrcpy这一代版本里被刻意构造出来的&#34;窗口化投屏&#34;基础能力。</span></p><h2 data-line="75" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18); color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">PR 6772的实现关键</span></h2><p data-line="77" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">scrcpy这次的flex display并不是一次性写完的，对应的PR是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-5biotz" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6772</a></span></code><span leaf="">，从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">flex-display.1</span></code><span leaf="">一路改到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">flex-display.18</span></code><span leaf="">，反复打磨了十八轮。看完PR描述就会明白，这个功能远比&#34;加个resize调用&#34;复杂得多。</span></p><p data-line="79" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">最核心的能力，就是Android系统里这一个方法：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="81" dir="auto" style=" font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;  "><span leaf="">android.hardware.display.VirtualDisplay.resize(int, int, int)</span></code></pre><p data-line="85" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这是个看起来再简单不过的接口，传宽、高、dpi三个参数就能改变虚拟display的尺寸。但要让它在投屏链路里稳定工作，需要解决一连串异步问题。</span></p><p data-line="87" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第一个问题是resize请求的合并。客户端在拖拽窗口的过程中会触发大量resize事件，如果每一次都老老实实发到设备，Android侧会内部把这些请求积压起来，最后渲染卡顿。scrcpy的做法是，客户端只保留最新一次值往下发，服务端也只在最终目标尺寸或旋转方向与当前不一致时，才重置capture和encoding会话。</span></p><p data-line="89" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第二个问题是resize事件的归因。一个虚拟display的尺寸可以因为两种原因变化，一种是客户端拖窗口主动让它变，一种是Android自己变，比如</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Alt+r</span></code><span leaf="">触发的旋转。两者在服务端</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DeviceMonitor</span></code><span leaf="">看来都是同一个display change事件，但只有后者需要重置capture/encoding。PR的解法是引入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DisplayPropertiesTracker</span></code><span leaf="">，把&#34;客户端触发&#34;和&#34;系统自发&#34;两种事件区分开，并通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-b46zge" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6159</a></span></code><span leaf="">里加入的session元数据走线下发到客户端，告诉客户端这一帧的尺寸变化是不是它自己请求的结果。</span></p><p data-line="91" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第三个问题是闭环抖动。客户端发resize请求，设备异步给出新尺寸的帧，客户端再用这个帧反过来调整窗口，这条链路如果不加抑制，会陷入&#34;客户端微调窗口，设备给新帧，新帧又触发客户端微调&#34;的循环。这就是为什么客户端必须知道某一帧的尺寸变化是不是它自己引起的，是则不再调整窗口，不是才需要自适应。</span></p><p data-line="93" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第四个问题是渲染策略。在resize请求到帧实际变化之间存在一段无法消除的异步窗口，scrcpy引入了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--render-fit</span></code><span leaf="">选项，flex模式下把帧以1:1的方式渲染到窗口左上角。这段异步窗口里，客户端会临时看到黑边或者裁剪，这是物理上的延迟，只能尽量缩短。</span></p><p data-line="95" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">第五个问题是resize过程中的画面glitch。PR描述里直接承认了这一点，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">virtualDisplay.resize()</span></code><span leaf="">、虚拟display实际resize完成、系统派发display change事件、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">virtualDisplay.setSurface()</span></code><span leaf="">这四件事跨多个Android进程，根本无法原子化。在resize瞬间，系统可能用旧尺寸往新surface上画，也可能用新尺寸往旧surface上画，这就是所谓&#34;resize撕裂&#34;的来源。</span></p><p data-line="97" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">为了让这些细节稳得住，PR还把另外几个准备工作的小PR一起做了，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-ior4t7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6746</a></span></code><span leaf="">引入了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">--min-size-alignment</span></code><span leaf="">，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-cyrkgd" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6758</a></span></code><span leaf="">处理encoder尺寸约束，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-gnyrwu" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6766</a></span></code><span leaf="">遵守视频capability上限，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-n3k8su" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6770</a></span></code><span leaf="">修了方形display的旋转问题，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-gf70tn" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6771</a></span></code><span leaf="">对齐虚拟display尺寸。这一串铺垫加上十八轮主PR迭代，才把flex display做到能进4.0正式版的程度。</span></p><h2 data-line="99" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18); color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">同人和官方的位置</span></h2><p data-line="101" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">回到开头那个故事。AndDrive(D)和scrcpy的flex display在能力上确实重叠很多，但定位还是有差别的。</span></p><p data-line="103" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">scrcpy一直走的是命令行风格，功能强大，选项多到一个屏幕装不下，对普通用户来说门槛并不低。AndDrive(D)从截图看是一个标准的Mac GUI应用，有设备列表、应用列表、一键开关融合模式，这一套交互恰好是scrcpy多年都没有补上的短板。如果AndDrive(D)继续打磨，它完全有机会以&#34;scrcpy GUI壳&#34;的姿态在桌面端站住脚。这一类壳子在GitHub上已经有过很多前辈，有的甚至比scrcpy本体还火。</span></p><p data-line="105" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">但前提是要先承认一个事实，在投屏这条路上，scrcpy就是事实标准。任何同类项目要么基于它，要么至少在技术细节上参考它。这次&#34;官方杀同人&#34;看起来戏剧，实际上是因为flex display这种功能本来就不是一个新点子。scrcpy的issue里相关讨论可以追溯到很久之前，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-qrsaej" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6350</a></span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-04fynf" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6351</a></span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-b16855" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6705</a></span></code><span leaf="">都是被这次PR取代的旧分支，最后由</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp3qqckd-p69dq2" style="color: #576B95 !important;" data-topic="1" data-recommend="">#6772</a></span></code><span leaf="">一锤定音。从某种角度看，这反而说明这条路上的所有人都在朝同一个方向走。</span></p><p data-line="107" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">至于推主自己那句&#34;做了东西先过审再发帖&#34;，倒是适用于任何一个开源生态的参与者。你不发，可能官方半年都不一定挪窝。你一发，官方也许第二天就把版本号往上跳一位。这两种风险都真实存在，只不过这次正好撞上了后一种。</span></p><p data-line="109" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">写到这里就先收尾。如果有读者已经动手试了scrcpy 4.0的flex display，或者抢先体验到了AndDrive(D)的预览版，欢迎在评论里聊一聊各自的使用体验。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=39b1e155&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485211%26idx%3D1%26sn%3Dde7f359c8d7861e8b1124667a40341b6">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 13 May 2026 15:42:00 +0800</pubDate>
    </item>
    <item>
      <title>三大Root框架通杀检测与反检测方法分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485204&amp;idx=1&amp;sn=0cf8c32c11363b3fab82419058605ad5</link>
      <description>最近比较流行通杀！前面讲过两篇Linux的通杀漏洞，这次轮到安卓了。</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-05-12 12:21</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=50ccc9fc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeT8bvtdKNeGP4OThv6Mib0lXZdECD7uBsbQfic7XuOmDRfibb6FpicUAatTvkRwXv6HRDAD6UPuZ6fQiaMttDuyibwjX474WpKoBRprWk%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100001553" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e75c6829&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FSq4BUsrXeT8BoABO5G8ZnCPZpouCtP2Hbb3fSosKpNmJ73KDCAziafLtccNk2apTwwgib9qvgRExUd8Mp1Ssia6Y0bDOmfEzUeiasCbvYfT5SRg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><blockquote style="background: none 0% 0% / auto repeat scroll padding-box border-box rgb(242, 242, 242);border-color: rgba(0, 122, 204, 0.5);margin: 0px;padding: 0px 16px 0px 10px;border-left-width: 5px;border-left-style: solid;border-radius: 2px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">最近比较流行通杀！前面讲过两篇Linux的通杀漏洞，</span></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">这次轮到安卓了。这一次又是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><span leaf="">在搞事，老版本这个检测器C语言编写的，现在新版本使用C++重构开源了，挺值得学习的。</span></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">Duck这次公开了一个检测方法。可用于全版本</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Magisk</span></code><span leaf="">检测，实际它也可以用于对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">的检测。随后LSPosed沿用同一思路，整理出更精简的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">检测器。</span></p><p data-line="2" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">与此同时，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">社区也亮出了反检测的思路与代码。接下来，本篇主要介绍一下这个通杀检测的原理，以及三种过这个检测的方法。</span></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">文章作者：非虫（fei_cong@hotmail.com）</span></p></blockquote><h2 data-line="6" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Duck-Detector检测原理</span></h2><p data-line="8" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这次检测的核心思路，是把探针下沉到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">进程，借助它对SELinux策略的查询能力，跳过传统的包名、进程名与文件路径扫描，直接向内核发问两件事：目标上下文是否存在、目标访问是否被放行。前者通过写入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/context</span></code><span leaf="">完成，后者则依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">android.os.SELinux.checkSELinuxAccess</span></code><span leaf="">接口。</span></p><p data-line="10" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">预加载类是整条检测链路的起点。当</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">currentUid</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">appInfo.uid</span></code><span leaf="">不一致，或Native库未能加载时，探针会直接产出一份可解析的失败快照，把&#34;载体失效&#34;与&#34;发现Root痕迹&#34;严格区分开来，避免环境异常被误判为命中。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="12" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">class</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">AppZygotePreload</span></span><span leaf=""> : </span><span style="color: rgb(163, 21, 21);"><span leaf="">ZygotePreload</span></span><span leaf=""> {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">override</span></span><span style="color: inherit;"><span style="color: rgb(0, 0, 255);"><span leaf="">fun</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">doPreload</span></span><span style="color: inherit;"><span leaf="">(appInfo: </span><span style="color: rgb(163, 21, 21);"><span leaf="">ApplicationInfo</span></span><span leaf="">)</span></span></span><span leaf=""> {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">val</span></span><span leaf=""> result = runCatching {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">val</span></span><span leaf=""> currentUid = Os.getuid()</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (currentUid != appInfo.uid) {</span><span leaf=""><br/></span><span leaf="">                fallbackPayload(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;UID mismatch: </span><span style="color: rgb(0, 128, 0);"><span leaf="">$currentUid</span></span><span leaf=""> != app uid </span><span style="color: rgb(43, 145, 175);"><span leaf="">${appInfo.uid}</span></span><span leaf="">.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            } </span><span style="color: rgb(0, 0, 255);"><span leaf="">else</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!SelinuxContextValidityBridge.isNativeLibraryLoaded) {</span><span leaf=""><br/></span><span leaf="">                fallbackPayload(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;SELinux native library unavailable.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            } </span><span style="color: rgb(0, 0, 255);"><span leaf="">else</span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf="">                SelinuxContextValidityBridge.nativeCollectContextValiditySnapshot()</span><span leaf=""><br/></span><span leaf="">                    .ifBlank { fallbackPayload(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;SELinux native snapshot payload was empty.&#34;</span></span><span leaf="">) }</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }.getOrElse { throwable -&gt;</span><span leaf=""><br/></span><span leaf="">            fallbackPayload(throwable.message ?: </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;SELinux app zygote preload failed.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        SelinuxContextValidityBridge.setPreloadedRawData(result)</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="33" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Native层首先声明被检测的上下文与控制组。其中</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">u:r:ksu:s0</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">u:object_r:ksu_file:s0</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">u:object_r:magisk_file:s0</span></code><span leaf="">是Root相关类型，剩余四个上下文则用于自检oracle的可信度。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="35" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kSelinuxContextPath = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/sys/fs/selinux/context&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kExpectedCarrierType = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;app_zygote&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kKsuContext = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:ksu:s0&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kKsuFileContext = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:ksu_file:s0&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *magiskFileContext = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:magisk_file:s0&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kNegativeControlContext = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:duckdetector_context_oracle_sentinel:s0&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kStockFileControlContext = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:system_data_file:s0&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">constexpr</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *kNegativeFileControlContext =</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:duckdetector_context_oracle_sentinel_file:s0&#34;</span></span><span leaf="">;</span></code></pre><p data-line="47" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/context</span></code><span leaf="">的职责是将输入上下文转换为内核</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sid</span></code><span leaf="">。只要当前策略认可目标type，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">write()</span></code><span leaf="">便会返回非负值，这正是判定&#34;上下文存在&#34;的唯一信号。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="49" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: inherit;"><span leaf="">ContextCheckResult </span><span style="color: rgb(128, 128, 128);"><span leaf="">check_context_validity</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *context)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    ContextCheckResult result;</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">int</span></span><span leaf=""> fd = </span><span style="color: rgb(0, 122, 204);"><span leaf="">open</span></span><span leaf="">(kSelinuxContextPath, O_RDWR | O_CLOEXEC);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (fd &lt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">        result.valid = </span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        result.note = std::</span><span style="color: rgb(0, 122, 204);"><span leaf="">string</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;Unavailable: &#34;</span></span><span leaf="">) + context + </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34; errno=&#34;</span></span><span leaf=""> + </span><span style="color: rgb(0, 122, 204);"><span leaf="">strerror</span></span><span leaf="">(errno);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> result;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ssize_t</span></span><span leaf=""> written = </span><span style="color: rgb(0, 122, 204);"><span leaf="">write</span></span><span leaf="">(fd, context, std::</span><span style="color: rgb(0, 122, 204);"><span leaf="">strlen</span></span><span leaf="">(context) + </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">int</span></span><span leaf=""> error = errno;</span><span leaf=""><br/></span><span style="color: rgb(0, 122, 204);"><span leaf="">close</span></span><span leaf="">(fd);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (written &gt;= </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">        result.valid = </span><span style="color: rgb(163, 21, 21);"><span leaf="">true</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> result;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    result.valid = </span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    result.note = std::</span><span style="color: rgb(0, 122, 204);"><span leaf="">string</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;Unavailable: &#34;</span></span><span leaf="">) + context + </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34; errno=&#34;</span></span><span leaf=""> + </span><span style="color: rgb(0, 122, 204);"><span leaf="">strerror</span></span><span leaf="">(error);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> result;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="71" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">为防止偶然误判，检测链路对每个Root相关上下文都重复查询两次。只要两次结果不一致即进入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">UNSTABLE_RESULTS</span></code><span leaf="">状态，这样即便Root管理器只拦截一次、或在不同入口给出不同答案，依然能够被识别。控制组中&#34;正常上下文应通过、哨兵上下文应失败&#34;四组判定全部符合预期之后，Root相关结果才会被采信；否则视为自检失败，所有KSU结论降级为附加信息。</span></p><p data-line="73" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">checkSELinuxAccess</span></code><span leaf="">走的则是访问向量计算的路径。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><span leaf="">以</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">的身份充当查询者，覆盖以下四组访问关系：</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">检测点</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">source</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">target</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">class</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">perm</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">严重级</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">通用脏策略</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">system_server</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">system_server</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">process</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">execmem</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">WARNING</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Magisk binder</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">untrusted_app</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">magisk</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">binder</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">call</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">WARNING</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">KernelSU binder</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">untrusted_app</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ksu</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">binder</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">call</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">WARNING</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">LSPosed file read</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">untrusted_app</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">lsposed_file</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">file</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">read</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">DANGER</span></p></td></tr></tbody></table><p data-line="82" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">正向控制（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">isolated_app</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">process dyntransition</span></code><span leaf="">）与反向控制（到哨兵文件类型）同样会做两次稳定性确认。其中</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Magisk</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">binder call</span></code><span leaf="">属于辅助证据，而</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lsposed_file</span></code><span leaf="">的读权限才是LSPosed残留的直接证据。Native快照只负责生产数据，展示层不再重新查询策略。</span></p><h2 data-line="84" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">DirtySepolicy独立PoC</span></h2><p data-line="86" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">将同一检测入口浓缩为一个最小化的App。它舍弃了Duck的完整展示层与Native快照包装，重点是证明</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">可以直接调用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SELinux.checkSELinuxAccess</span></code><span leaf="">查询全局策略。配置层面，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">isolatedProcess</span></code><span leaf="">配合</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">useAppZygote</span></code><span leaf="">会触发应用私有的Zygote，再由</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">zygotePreloadName</span></code><span leaf="">指定预加载类，载体便稳稳落在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">之上。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="88" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">&lt;</span><span style="color: rgb(0, 0, 255);"><span leaf="">application</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">android:zygotePreloadName</span></span><span leaf="">=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;org.lsposed.dirtysepolicy.AppZygote&#34;</span></span><span leaf="">&gt;</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">&lt;</span><span style="color: rgb(0, 0, 255);"><span leaf="">service</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">android:name</span></span><span leaf="">=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;.DirtySepolicyService&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">android:isolatedProcess</span></span><span leaf="">=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;true&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">android:useAppZygote</span></span><span leaf="">=</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;true&#34;</span></span><span leaf=""> /&gt;</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">&lt;/</span><span style="color: rgb(0, 0, 255);"><span leaf="">application</span></span><span leaf="">&gt;</span></span></code></pre><p data-line="98" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">与Duck一样，PoC也把载体可信性的校验置于检测之前：先确认UID未被换掉、当前上下文确实是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">，并验证</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">getContext()</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">getPidContext()</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/self</span></code><span leaf="">三处文件上下文完全一致。自检通过之后，再直接调用Framework API完成查询。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="100" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:system_server:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:system_server:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;process&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;execmem&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;system_server can execmem; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:fsck_untrusted:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:fsck_untrusted:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;capability&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;sys_admin&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;neverallow violated; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (Build.TYPE.equals(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;user&#34;</span></span><span leaf="">) &amp;&amp; SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:shell:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:su:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;process&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;transition&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found AOSP su in user build; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:adbd:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:adbroot:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;binder&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;call&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found adb_root; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:untrusted_app:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:magisk:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;binder&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;call&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found Magisk; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:untrusted_app:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:ksu_file:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found KernelSU; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:untrusted_app:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:lsposed_file:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found LSPosed; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:untrusted_app:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:xposed_data:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found Xposed; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (SELinux.checkSELinuxAccess(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:r:zygote:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;u:object_r:adb_data_file:s0&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;dir&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;search&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span leaf="">    sb.append(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;found ZygiskNext; &#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="130" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">相比Duck，PoC的查询面更宽，涵盖了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">fsck_untrusted</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sys_admin</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">shell</span></code><span leaf="">到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">su</span></code><span leaf="">的迁移、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">adbd</span></code><span leaf="">到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">adbroot</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">binder call</span></code><span leaf="">，以及Xposed与ZygiskNext的残留特征。它真正的价值并不在UI，而是揭示了一个事实：只要</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">能向内核问到当前策略，脏规则便会化作可读信号，用户态进程根本绕不开这道查询口。</span></p><h2 data-line="132" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KernelSU运行时过检测</span></h2><p data-line="134" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KernelSU上游新增</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code><span leaf="">之后，过检测的思路便从&#34;清掉策略&#34;演变为&#34;给应用UID呈现另一份备份策略&#34;。当前策略仍然保留Root所需的全部规则，但应用态的查询入口被悄悄转向注入之前的策略副本。</span></p><p data-line="136" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">在KernelSU追加自身域与文件类型之前便已生成。如此一来，后续隐藏逻辑无需伪造任何字符串，只需拿一张真实的旧策略表重新计算答案。</span></p><p data-line="138" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">系统UID仍然走原始的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">context</span></code><span leaf="">写入口，应用UID则改走</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">。当检测器提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">u:r:ksu:s0</span></code><span leaf="">或</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">u:object_r:ksu_file:s0</span></code><span leaf="">时，旧策略里并不存在对应类型，转换随即失败，检测侧看到的便是&#34;上下文不存在&#34;。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="140" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ssize_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">my_write_context</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> file *file, </span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *buf, </span><span style="color: rgb(163, 21, 21);"><span leaf="">size_t</span></span><span leaf=""> size)</span></span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (likely(current_uid().val &lt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">10000</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> orig_context_write(file, buf, size);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *canon = </span><span style="color: rgb(163, 21, 21);"><span leaf="">NULL</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    u32 sid, len;</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">ssize_t</span></span><span leaf=""> length;</span><span leaf=""><br/></span><span leaf="">    length = security_context_to_sid_with_policy(backup_sepolicy, buf, size, &amp;sid, SECSID_NULL, GFP_KERNEL);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (length)</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">goto</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span leaf="">    length = security_sid_to_context_with_policy(backup_sepolicy, sid, &amp;canon, &amp;len);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (length)</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">goto</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span style="color: rgb(0, 122, 204);"><span leaf="">memcpy</span></span><span leaf="">(buf, canon, len);</span><span leaf=""><br/></span><span leaf="">    length = len;</span><span leaf=""><br/></span><span leaf="">out:</span><span leaf=""><br/></span><span leaf="">    kfree(canon);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> length;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="164" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">checkSELinuxAccess</span></code><span leaf="">最终触发的是访问向量计算。应用UID的输入被引导至</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">重新计算，因此</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">untrusted_app</span></code><span leaf="">到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">binder call</span></code><span leaf="">，以及</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">untrusted_app</span></code><span leaf="">到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_file</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">file read</span></code><span leaf="">，不再按当前策略给出结果。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="166" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">ssize_t</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">my_write_access</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> file *file, </span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *buf, </span><span style="color: rgb(163, 21, 21);"><span leaf="">size_t</span></span><span leaf=""> size)</span></span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (likely(current_uid().val &lt; </span><span style="color: rgb(0, 128, 0);"><span leaf="">10000</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> orig_access_write(file, buf, size);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">/* 省略参数解析与错误处理 */</span></span><span leaf=""><br/></span><span leaf="">    length = security_context_to_sid_with_policy(backup_sepolicy, scon, </span><span style="color: rgb(0, 122, 204);"><span leaf="">strlen</span></span><span leaf="">(scon),</span><span leaf=""><br/></span><span leaf="">                                                 &amp;ssid, SECSID_NULL, GFP_KERNEL);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (length) </span><span style="color: rgb(0, 0, 255);"><span leaf="">goto</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span leaf="">    length = security_context_to_sid_with_policy(backup_sepolicy, tcon, </span><span style="color: rgb(0, 122, 204);"><span leaf="">strlen</span></span><span leaf="">(tcon),</span><span leaf=""><br/></span><span leaf="">                                                 &amp;tsid, SECSID_NULL, GFP_KERNEL);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (length) </span><span style="color: rgb(0, 0, 255);"><span leaf="">goto</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span leaf="">    security_compute_av_user_with_policy(backup_sepolicy, ssid, tsid, tclass, &amp;avd);</span><span leaf=""><br/></span><span leaf="">    length = scnprintf(buf, SIMPLE_TRANSACTION_LIMIT, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;%x %x %x %x %u %x&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">                       avd.allowed, </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xffffffff</span></span><span leaf="">, avd.auditallow,</span><span leaf=""><br/></span><span leaf="">                       avd.auditdeny, avd.seqno, avd.flags);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> length;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="189" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">除此之外，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">setprocattr current</span></code><span leaf="">入口同样被纳入隐藏面，目标上下文统一交由</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">解析，以防检测器从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/self/attr/current</span></code><span leaf="">一侧绕开</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">查询。</span></p><p data-line="191" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">运行时方案的优势在于不必修改设备内核源码。具体做法是：通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kallsyms_lookup_name(&#34;write_op&#34;)</span></code><span leaf="">定位</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">的写操作表，再用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_patch_text</span></code><span leaf="">将</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_CONTEXT</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_ACCESS</span></code><span leaf="">两个槽位替换为自定义函数，同时挂上</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_setprocattr</span></code><span leaf="">的LSM hook。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="193" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">selinux_write_op = kallsyms_lookup_name(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;write_op&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">context_write = &amp;selinux_write_op[SEL_CONTEXT];</span><span leaf=""><br/></span><span leaf="">orig_context_write = *context_write;</span><span leaf=""><br/></span><span leaf="">ksu_patch_text(context_write, &amp;my_write_context, </span><span style="color: rgb(0, 0, 255);"><span leaf="">sizeof</span></span><span leaf="">(my_write_context),</span><span leaf=""><br/></span><span leaf="">               KSU_PATCH_TEXT_FLUSH_DCACHE);</span><span leaf=""><br/></span><span leaf="">access_write = &amp;selinux_write_op[SEL_ACCESS];</span><span leaf=""><br/></span><span leaf="">orig_access_write = *access_write;</span><span leaf=""><br/></span><span leaf="">ksu_patch_text(access_write, &amp;my_write_access, </span><span style="color: rgb(0, 0, 255);"><span leaf="">sizeof</span></span><span leaf="">(my_write_access),</span><span leaf=""><br/></span><span leaf="">               KSU_PATCH_TEXT_FLUSH_DCACHE);</span><span leaf=""><br/></span><span leaf="">ksu_lsm_hook(&amp;selinux_setprocattr_hook);</span></code></pre><p data-line="208" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">管理器侧的&#34;隐藏SELinux修改&#34;开关最终对应到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KSU_FEATURE_SELINUX_HIDE</span></code><span leaf="">这一特性位。开启之后，应用UID所见即为备份策略的答案；关闭之后，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">入口回归原始实现。截图中Duck的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Danger</span></code><span leaf="">显示为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">0</span></code><span leaf="">，恰好与该功能的工作面相互印证。</span></p><h2 data-line="210" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">内核源码级过检测补丁</span></h2><p data-line="212" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">Andrea仓库里的补丁直接动了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security/selinux/ss/services.c</span></code><span leaf="">。如果说运行时方案改的是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">入口，那么源码级方案改的便是SELinux服务函数本身：上下文解析与访问向量计算，统统在内核源码层被过滤。</span></p><p data-line="214" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">补丁优先使用KernelSU上游已经暴露的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">；若该符号不存在，则回退到静态规则表与隐藏type表。静态表所覆盖的，恰好正是DirtySepolicy与Duck所查询的访问关系。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="216" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">extern</span></span><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_policy</span></span><span leaf=""> *</span><span style="color: rgb(128, 128, 128);"><span leaf="">backup_sepolicy</span></span><span leaf=""> __</span><span style="color: rgb(128, 128, 128);"><span leaf="">attribute__</span></span><span leaf="">((</span><span style="color: rgb(128, 128, 128);"><span leaf="">weak</span></span><span leaf="">));</span></span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_hidden_av_rule</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_hidden_av_rules</span></span><span leaf="">[] =</span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;system_server&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;system_server&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;process&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;execmem&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;fsck_untrusted&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;fsck_untrusted&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;capability&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;sys_admin&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;shell&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;su&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;process&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;transition&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;adbd&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;adbroot&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;binder&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;call&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;untrusted_app&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;magisk&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;binder&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;call&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;untrusted_app&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ksu&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;binder&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;call&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;untrusted_app&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ksu_file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;untrusted_app&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;lsposed_file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;untrusted_app&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;xposed_data&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;read&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">    { </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;zygote&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;adb_data_file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;dir&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;search&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span leaf="">};</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> * </span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span leaf=""> selinux_hidden_context_types[] = {</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;su&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;adbroot&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ksu&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;ksu_file&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;magisk&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;magisk_file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;lsposed_file&#34;</span></span><span leaf="">, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;xposed_data&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">};</span></code></pre><p data-line="238" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">过滤逻辑只对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">生效。系统服务与内核内部的正常计算依旧沿用原策略，从而将对系统运行的影响降到最低；检测器恰好倚仗</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">，因此正好落入过滤分支。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="240" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">bool</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_hidden_av_query_caller</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> policydb *policydb,</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> sidtab *sidtab)</span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">context</span></span><span leaf=""> *</span><span style="color: rgb(128, 128, 128);"><span leaf="">ccontext</span></span><span leaf="">;</span></span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *ctype;</span><span leaf=""><br/></span><span leaf="">    ccontext = sidtab_search(sidtab, current_sid());</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!ccontext)</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    ctype = sym_name(policydb, SYM_TYPES, ccontext-&gt;type - </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> ctype &amp;&amp; !</span><span style="color: rgb(0, 122, 204);"><span leaf="">strcmp</span></span><span leaf="">(ctype, </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;app_zygote&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="255" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">当</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">提交</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk_file</span></code><span leaf="">等隐藏type时，补丁会让</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_context_to_sid_core</span></code><span leaf="">提前返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-EINVAL</span></code><span leaf="">，Duck的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/context</span></code><span leaf="">检测因此只能得到&#34;上下文无效&#34;的回应。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="257" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(163, 21, 21);"><span leaf="">static</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">bool</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_hide_context_validity_query</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> policydb *policydb,</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span leaf=""> sidtab *sidtab,</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">char</span></span><span leaf=""> *scontext,</span><span leaf=""><br/></span><span leaf="">                                                u32 scontext_len)</span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">unsigned</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">int</span></span><span leaf=""> i;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!selinux_hidden_av_query_caller(policydb, sidtab))</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (selinux_hide_context_query_with_backup(scontext, scontext_len))</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">true</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (i = </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">; i &lt; ARRAY_SIZE(selinux_hidden_context_types); i++) {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (selinux_hidden_context_has_type(scontext, scontext_len,</span><span leaf=""><br/></span><span leaf="">                                            selinux_hidden_context_types[i]))</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">true</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="278" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">至于访问向量计算，则视</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">是否可用分作两条路径：可用时将源、目标上下文映射到备份策略，重新计算</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">av_decision</span></code><span leaf="">；不可用时则按静态规则表清掉命中的permission位，核心逻辑仅有寥寥数行。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="280" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (i = </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">; i &lt; ARRAY_SIZE(selinux_hidden_av_rules); i++) {</span><span leaf=""><br/></span><span style="color: rgb(163, 21, 21);"><span leaf="">const</span></span><span style="color: rgb(0, 128, 0);"><span style="color: rgb(0, 0, 255);"><span leaf="">struct</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">selinux_hidden_av_rule</span></span><span leaf=""> *</span><span style="color: rgb(128, 128, 128);"><span leaf="">rule</span></span><span leaf=""> =</span></span><span leaf=""> &amp;selinux_hidden_av_rules[i];</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: rgb(0, 122, 204);"><span leaf="">strcmp</span></span><span leaf="">(rule-&gt;stype, stype) || </span><span style="color: rgb(0, 122, 204);"><span leaf="">strcmp</span></span><span leaf="">(rule-&gt;ttype, ttype) ||</span><span leaf=""><br/></span><span style="color: rgb(0, 122, 204);"><span leaf="">strcmp</span></span><span leaf="">(rule-&gt;tclass, tclass_name))</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">continue</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    perm = selinux_perm_to_av(tclass_datum, rule-&gt;perm);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!perm)</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">continue</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    avd-&gt;allowed &amp;= ~perm;</span><span leaf=""><br/></span><span leaf="">    avd-&gt;auditallow &amp;= ~perm;</span><span leaf=""><br/></span><span leaf="">    avd-&gt;auditdeny |= perm;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="295" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这段代码被插入到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_compute_av_user()</span></code><span leaf="">之中。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">checkSELinuxAccess</span></code><span leaf="">底层一旦计算完成，结果会被立刻过滤，应用态最终拿到的，只能是处理之后的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">av_decision</span></code><span leaf="">。该路径与KernelSU运行时方案如出一辙：不删当前策略，只把查询结果改写成旧策略本应给出的答案。</span></p><h2 data-line="297" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KPM运行时补丁方案</span></h2><p data-line="299" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">社区给出的反检测方案，是一份名为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_magisk_access_filter</span></code><span leaf="">的KPM（kernel patch module）。它与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">上游</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code><span leaf="">同属&#34;运行时挂钩&#34;路线，但走的是KPM框架的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">hook_wrap</span></code><span leaf="">，无需重编内核，也无需依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">这一上游符号。</span></p><p data-line="301" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">整体思路可以浓缩为一句话：先在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SELinux</span></code><span leaf="">就绪时悄悄抓取一份干净策略，再在应用UID走到查询入口时，让它看到那份干净策略的回答。</span></p><p data-line="303" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KPM在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">init</span></code><span leaf="">阶段一次性挂上10个</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">与SELinux服务函数的钩子，覆盖检测器可能用到的所有入口。各目标的角色如下：</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">目标符号</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">作用</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">给应用UID返回干净policy副本，绕开当前dirty策略</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_load_policy</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">标记&#34;外部load&#34;以识别脏策略加载</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_load</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">计数</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/load</span></code><span leaf="">写入次数</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_access</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">拦截</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/access</span></code><span leaf="">，命中Root类型即返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-EINVAL</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_context</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">拦截</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/context</span></code><span leaf="">，未在干净策略中出现即返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-EINVAL</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_setprocattr</span></code><p><span leaf="">或</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_setprocattr</span></code></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">过滤</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">procattr current</span></code><span leaf="">一侧，防止从</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/self/attr/current</span></code><span leaf="">绕开</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">context_struct_compute_av</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">把应用UID的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">policydb</span></code><span leaf="">参数替换成干净副本</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">string_to_context_struct</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">同上，用于上下文字符串到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">context_struct</span></code><span leaf="">的转换</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_complete_init</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SELinux首次就绪时触发干净策略快照</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_policy_commit</span></code></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">每次新策略生效后维护</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">first_policy</span></code><span leaf="">并刷新快照</span></p></td></tr></tbody></table><p data-line="318" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">辅助符号则按需通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kallsyms_lookup_name</span></code><span leaf="">解析，包括</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">vmalloc</span></code><span leaf="">/</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">vmalloc_noprof</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">vfree</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">copy_from_kernel_nofault</span></code><span leaf="">（旧内核退化为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">probe_kernel_read</span></code><span leaf="">）、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_context_to_sid</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_policy_cancel</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sidtab_cancel_convert</span></code><span leaf="">。任一关键符号缺失时，对应的过检测路径会安全降级而非崩溃。</span></p><p data-line="320" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">干净策略的采集时机是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_complete_init</span></code><span leaf="">或</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_policy_commit</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">after</span></code><span leaf="">回调，对应SELinux首次就绪和后续每次新策略落地。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">snapshot_clean_policy</span></code><span leaf="">会调用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">复制出一份原始blob，并在blob中扫描</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MAGISK</span></code><span leaf="">字样以标记</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_clean_policy_has_magisk</span></code><span leaf="">。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="322" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">rc = g_security_read_policy(&amp;blob, &amp;len);</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (rc || !blob || !len)</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">for</span></span><span leaf=""> (i = </span><span style="color: rgb(0, 128, 0);"><span leaf="">0</span></span><span leaf="">; i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">6</span></span><span leaf=""> &lt;= len; i++) {</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> ((p[i] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;M&#39;</span></span><span leaf=""> &amp;&amp; (p[i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;A&#39;</span></span><span leaf=""> &amp;&amp;</span><span leaf=""><br/></span><span leaf="">        (p[i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">2</span></span><span leaf="">] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;G&#39;</span></span><span leaf=""> &amp;&amp; (p[i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">3</span></span><span leaf="">] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;I&#39;</span></span><span leaf=""> &amp;&amp;</span><span leaf=""><br/></span><span leaf="">        (p[i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">4</span></span><span leaf="">] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;S&#39;</span></span><span leaf=""> &amp;&amp; (p[i + </span><span style="color: rgb(0, 128, 0);"><span leaf="">5</span></span><span leaf="">] &amp; </span><span style="color: rgb(0, 128, 0);"><span leaf="">0xDF</span></span><span leaf="">) == </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;K&#39;</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">        magisk_seen = </span><span style="color: rgb(163, 21, 21);"><span leaf="">true</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">g_clean_policy_blob = blob;</span><span leaf=""><br/></span><span leaf="">g_clean_policy_len = len;</span></code></pre><p data-line="340" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">随后用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_load_policy</span></code><span leaf="">把这份blob反序列化成内部</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">load_state</span></code><span leaf="">，作为应用态查询的备用引擎。需要注意的是，这次内部load是合法的&#34;副本load&#34;，因此KPM用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_internal_policy_load_depth</span></code><span leaf="">计数把它与外部的脏策略load区分开来——只有计数为0的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_load_policy</span></code><span leaf="">调用，才会被</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_dirty_policy_seen</span></code><span leaf="">标记。</span></p><p data-line="342" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_context</span></code><span leaf="">钩子的核心，是用前面采集的干净blob反向校验当前查询样本是否合法。判定规则极简：把上下文按冒号切片，取最后一段type名，到干净blob里做字节比对。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="344" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (!g_clean_load_state_ready || !g_clean_policy_blob ||</span><span leaf=""><br/></span><span leaf="">    clean_context_exists(sample)) {</span><span leaf=""><br/></span><span leaf="">    args-&gt;local.data0 = </span><span style="color: rgb(0, 128, 0);"><span leaf="">3</span></span><span leaf="">;        </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">/* 放行 */</span></span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">args-&gt;skip_origin = </span><span style="color: rgb(0, 128, 0);"><span leaf="">1</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">args-&gt;local.data0 = </span><span style="color: rgb(0, 128, 0);"><span leaf="">2</span></span><span leaf="">;            </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">/* 拦截 */</span></span><span leaf=""><br/></span><span leaf="">args-&gt;ret = (u64)(-EINVAL);</span></code></pre><p data-line="356" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_access</span></code><span leaf="">的处理类似，只是要把&#34;scontext tcontext tclass&#34;中的前两段都校验一遍，任一段在干净策略中找不到，便直接</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">-EINVAL</span></code><span leaf="">返回。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">context_struct_compute_av</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">string_to_context_struct</span></code><span leaf="">两个钩子则更进一步：它们把传入的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">policydb</span></code><span leaf="">第一参数替换为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_clean_policydb</span></code><span leaf="">，这样即便检测器绕过了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinuxfs</span></code><span leaf="">字符接口直接走Framework调用，最终的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">av_decision</span></code><span leaf="">仍然由干净策略计算得出。</span></p><p data-line="358" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本方案与KernelSU方案的对照：</span></p><table style="border-collapse: collapse;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><thead><tr><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">维度</span></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">KernelSU</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code></p></th><th style="text-align: left;border-bottom: 1px solid rgba(0, 0, 0, 0.69);padding: 5px 10px;border-top-color: rgba(0, 0, 0, 0.69);border-right-color: rgba(0, 0, 0, 0.69);border-left-color: rgba(0, 0, 0, 0.69);"><p><span leaf="">APatch KPM</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">入口替换方式</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kallsyms_lookup_name(&#34;write_op&#34;)</span></code><p><span leaf="">+</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_patch_text</span></code></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">KPM框架的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">hook_wrap</span></code></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">备份策略来源</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">内核内部</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">，构造时机早于Root域追加</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">+</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_load_policy</span></code><span leaf="">运行时重建</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">覆盖入口</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_CONTEXT</span></code><p><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_ACCESS</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">setprocattr current</span></code></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">同上，并额外覆盖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">compute_av</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">string_to_context</span></code><span leaf="">等更深层入口</span></p></td></tr><tr><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">适用平台</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">与KernelSU一同合入</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">任何能加载KPM的内核，无需源码改动</span></p></td></tr></tbody></table><p data-line="367" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总体上，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">的KPM思路与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">运行时方案同源——都是&#34;让应用UID看到一份不含Root类型的旧策略&#34;。只是它把这件事完全放到模块层来做，连</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">这一上游符号都可以舍弃，靠运行时再生成一份等价的&#34;干净策略&#34;来支撑后续所有查询路径。</span></p><h3 data-line="369" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.25em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KPM方案的限制</span></h3><p data-line="371" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">把上述思路真正落到产品级使用时，KPM方案有几条无法回避的限制需要正视。</span></p><p data-line="373" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制一：加载时机必须早于Root域追加。</span></strong></p><p data-line="375" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KPM的干净策略来自</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">运行时读取，而不是像</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">那样在编译期就备份。一旦KPM加载晚于Root域注入，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">snapshot_clean_policy</span></code><span leaf="">抓到的blob里就已经包含</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk_file</span></code><span leaf="">等Root相关type，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">clean_context_exists(&#34;u:r:ksu:s0&#34;)</span></code><span leaf="">随即返回</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">true</span></code><span leaf="">，KPM不仅不会拦截，反而会</span><strong><span leaf="">主动放行</span></strong><span leaf="">，检测器写入成功后直接判定</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_domain_valid=true</span></code><span leaf="">命中。因此该KPM</span><strong><span leaf="">不适合热加载</span></strong><span leaf="">，必须由</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">bootkernel</span></code><span leaf="">加载链在SELinux初始化之前就将其驻留到内核。</span></p><p data-line="377" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制二：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">compute_av</span></code><span leaf="">深层入口实际并未做策略重定向。</span></strong></p><p data-line="379" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">虽然KPM挂上了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">context_struct_compute_av</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">string_to_context_struct</span></code><span leaf="">两个钩子，但其</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">before_policydb_arg0</span></code><span leaf="">回调中真正替换</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">policydb</span></code><span leaf="">参数的条件是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_clean_eval_depth &gt; 0</span></code><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="381" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> (g_clean_eval_depth &amp;&amp; clean_db &amp;&amp; incoming) {</span><span leaf=""><br/></span><span leaf="">    args-&gt;arg0 = (u64)(</span><span style="color: rgb(163, 21, 21);"><span leaf="">uintptr_t</span></span><span leaf="">)clean_db;</span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-line="388" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_clean_eval_depth</span></code><span leaf="">只有在KPM自己调用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_security_context_to_sid</span></code><span leaf="">做内部清洁评估时才会临时大于零；对</span><strong><span leaf="">外部直接调用</span></strong><span leaf="">这两个函数的情况，本钩子退化为观察者，只负责检测脏策略并触发快照，并不实际改写计算输入。这与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">my_write_access</span></code><span leaf="">把应用UID的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">av_decision</span></code><span leaf="">计算彻底引导到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">不同。</span></p><p data-line="390" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">实战中这个不等效之所以</span><strong><span leaf="">没有暴露</span></strong><span leaf="">，是因为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">走的都是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/access</span></code><span leaf="">这一用户态写入路径，被前面的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sel_write_access</span></code><span leaf="">钩子提前拦截了；一旦未来出现绕过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/access</span></code><span leaf="">、直接经</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">compute_av</span></code><span leaf="">系内核内部入口探测的检测器，本KPM将失守，而</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">仍可拦截。</span></p><p data-line="392" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制三：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">clean_context_token_exists</span></code><span leaf="">基于字节子串匹配。</span></strong></p><p data-line="394" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">走的是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_context_to_sid_with_policy(backup_sepolicy, ...)</span></code><span leaf="">，由内核策略引擎给出标准答案；而本KPM则是在blob里做ASCII子串扫描，匹配的是&#34;</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">:</span></code><span leaf="">后到行尾的最后一段type名&#34;。这意味着若干净策略里恰好出现某Root相关字符串作为其他type名的子串，存在理论上的误判风险。实践中Root相关type名（</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lsposed_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">xposed_data</span></code><span leaf="">）通常是独立token，干净策略里不存在与之构成部分匹配的合法type，故误判概率极低，但仍是潜在脆弱点。</span></p><p data-line="396" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制四：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">双ABI不兼容。</span></strong></p><p data-line="398" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本KPM对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">只按&#34;无state参数&#34;的2参形态调用：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="400" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span style="color: rgb(0, 0, 255);"><span leaf="">typedef</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">int</span></span><span style="color: inherit;"><span leaf="">(*</span><span style="color: rgb(163, 21, 21);"><span leaf="">security_read_policy_t</span></span><span leaf="">)</span></span><span style="color: inherit;"><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">void</span></span><span leaf=""> **data, </span><span style="color: rgb(163, 21, 21);"><span leaf="">size_t</span></span><span leaf=""> *len)</span></span><span leaf="">;</span></code></pre><p data-line="404" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">而Android 13/14对应的5.15内核里，该函数仍是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">int security_read_policy(struct selinux_state *, void **, size_t *)</span></code><span leaf="">三参形态。在那类内核上直接以2参签名调用会因参数错位而</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">提前失败，整个干净策略快照流程便走不下去，KPM也就退化为纯观察者。如要兼容旧内核，需要额外按</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kver</span></code><span leaf="">分支选择正确的调用约定。</span></p><p data-line="406" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制五：依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kallsyms_lookup_name</span></code><span leaf="">解析符号。</span></strong></p><p data-line="408" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">KPM挂钩的10个目标和7个辅助函数全部依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kallsyms_lookup_name</span></code><span leaf="">返回有效地址。在</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/proc/kallsyms</span></code><span leaf="">被禁用或符号被剥离的发行版内核上，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">security_read_policy</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sidtab_cancel_convert</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">copy_from_kernel_nofault</span></code><span leaf="">等任一关键符号缺失，对应钩子就会被跳过，相关检测路径不再被拦截。KPM加载日志中需要逐项确认这些符号是否解析成功。</span></p><p data-line="410" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><strong><span leaf="">限制六：策略热更新场景下的快照陈旧问题。</span></strong></p><p data-line="412" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">若运行期间策略以外部方式被合法更新（例如系统OTA后</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">init</span></code><span leaf="">重新加载policy），</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">before_security_load_policy</span></code><span leaf="">会把这次load标记为</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">g_dirty_policy_seen=true</span></code><span leaf="">，从此</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">snapshot_clean_policy</span></code><span leaf="">不再刷新副本。这虽然能避免把脏策略当成干净副本，但也意味着干净blob会一直停留在最早那次快照的版本，长期运行后可能与系统真实策略产生越来越大的偏差，进而拦截到一些本应放行的合法上下文。</span></p><p data-line="414" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总之一句话，目前kpm的实现还有一些提升的空间，期待后续的完善。</span></p><p data-line="416" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后，希望</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">APatch</span></code><span leaf="">快快提供代码方式来补丁，这样就不用折腾插件了。</span></p><h2 data-line="418" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总结</span></h2><p data-line="420" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">的检测点都依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">所拥有的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SELinux</span></code><span leaf="">查询能力。一边用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/sys/fs/selinux/context</span></code><span leaf="">询问上下文是否存在，另一边用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">checkSELinuxAccess</span></code><span leaf="">询问访问是否放行，两者皆从策略层一举绕开包名隐藏、进程名隐藏与文件路径伪装。</span></p><p data-line="422" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">KernelSU</span></code><span leaf="">上游的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code><span leaf="">，处理面已覆盖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_CONTEXT</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SEL_ACCESS</span></code><span leaf="">与</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">setprocattr current</span></code><span leaf="">，对当前</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">的检测路径而言已经具备过检测能力。Andrea的内核源码补丁则把同一思路落到</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">services.c</span></code><span leaf="">之中，对定制内核而言更为直接，无需依赖运行时对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">write_op</span></code><span leaf="">的patch。</span></p><p data-line="424" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">至于</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Magisk</span></code><span leaf="">，目前在其官方公开代码中尚未见到同级别的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote</span></code><span leaf="">策略查询隐藏层。只要目标设备仍然把</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk</span></code><span leaf="">或</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk_file</span></code><span leaf="">暴露在当前策略之中，Duck的上下文检测以及</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><span leaf="">式的访问检测，仍会轻易命中。</span></p><p data-line="426" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">若未启用任何隐藏措施，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">ksu_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magisk_file</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">lsposed_file</span></code><span leaf="">这些类型都会被策略oracle一一读出。一旦开启KernelSU的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code><span leaf="">，或将源码级隐藏补丁合入内核，检测器虽然仍在调用同一份API，但返回值已经接近一份干净策略，命中率自然随之下降。</span></p><h2 data-line="428" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">参考资料</span></h2><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><p><span leaf="">PR</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf=""><a class="wx_topic_link" topic-id="mp24cg3s-607ic1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#22</a></span></code><span leaf="">：<a href="https://github.com/eltavine/Duck-Detector-Refactoring/pull/22" target="_blank">https://github.com/eltavine/Duck-Detector-Refactoring/pull/22</a></span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><p><span leaf="">最新实现：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app/src/main/cpp/selinux/context_validity_probe.cpp</span></code></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><p><span leaf="">预加载：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app/src/main/java/com/eltavine/duckdetector/features/selinux/data/service/AppZygotePreload.kt</span></code></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Duck-Detector</span></code><p><span leaf="">LSPosed信号：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app/src/main/java/com/eltavine/duckdetector/features/lsposed/data/probes/LSPosedDirtyPolicyProbe.kt</span></code></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><p><span leaf="">：<a href="https://github.com/LSPosed/DirtySepolicy" target="_blank">https://github.com/LSPosed/DirtySepolicy</a></span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">DirtySepolicy</span></code><p><span leaf="">核心实现：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app/src/main/java/org/lsposed/dirtysepolicy/AppZygote.java</span></code></p></li><li><p><span leaf="">AOSP</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">app_zygote.te</span></code><span leaf="">：<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/private/app_zygote.te" target="_blank">https://android.googlesource.com/platform/system/sepolicy/+/master/private/app_zygote.te</a></span></p></li><li><p><span leaf="">KernelSU</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_hide</span></code><span leaf="">：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel/feature/selinux_hide.c</span></code></p></li><li><p><span leaf="">KernelSU</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">backup_sepolicy</span></code><span leaf="">：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kernel/selinux/rules.c</span></code></p></li><li><p><span leaf="">KernelSU功能开关：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">uapi/feature.h</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">manager/app/src/main/cpp/ksu.cc</span></code></p></li><li><p><span leaf="">Andrea内核源码级补丁：<a href="https://github.com/Andrea-lyz/oppo_oplus_realme_sm8750/commit/db4883d7d243a9fc6ed8ea4071acce2e0be7b460" target="_blank">https://github.com/Andrea-lyz/oppo_oplus_realme_sm8750/commit/db4883d7d243a9fc6ed8ea4071acce2e0be7b460</a></span></p></li><li><p><span leaf="">Andrea补丁文件：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">other_patch/70_selinux_hide_policy_query.patch</span></code></p></li><li><p><span leaf="">APatch KPM样例还原：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kpms/selinux_hook/selinux_hook.c</span></code><span leaf="">（基于</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">selinux_magisk_access_filter v1.0.4</span></code><span leaf="">反编译还原）</span></p></li><li><p><span leaf="">KPM框架</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">hook_wrap</span></code><span leaf="">接口：</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">kpms/kpm/kernel/include/hook.h</span></code></p></li><li><p><span leaf="">Magisk</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">magiskpolicy</span></code><span leaf="">说明：<a href="https://github.com/topjohnwu/Magisk/blob/master/docs/tools.md" target="_blank">https://github.com/topjohnwu/Magisk/blob/master/docs/tools.md</a></span></p></li></ul><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=32c0c6ca&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485204%26idx%3D1%26sn%3D0cf8c32c11363b3fab82419058605ad5">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 12 May 2026 12:21:00 +0800</pubDate>
    </item>
    <item>
      <title>iOS虚拟手机可以玩窗口化融合的越狱插件</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzU3MTY5MzQxMA==&amp;mid=2247485193&amp;idx=1&amp;sn=5b53423ee611f250baca7a2181283108</link>
      <description>iOS虚拟手机可以玩窗口化融合的越狱插件</description>
      <content:encoded><![CDATA[<p>原创 <span>非虫</span> <span>2026-05-09 12:11</span> <span style="display: inline-block;">湖北</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=67c77378&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FSq4BUsrXeTibCV0ibEicAkpdh1ib52ic5cbrfdHqPMjswoOU4E8eaItInoxpwsvHlEY7aTM1cv2Blv25LeEKm76knrhQTzgjQicia3WxDzialUFBeBA%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>iOS虚拟手机可以玩窗口化融合的越狱插件</p>
  <p><span leaf="">上一篇《iOS虚拟手机实现能力现状》已经把虚拟手机能跑、能装、能控、能切换环境这几件事讲清楚了。既然底座已经能稳定越狱、能保留状态、还能做自动化。所有的准备工作做好后，下一步要问的，肯定就是有什么好玩的插件？怎么给虚拟手机安装越狱插件？不要急，这一篇就讲这个。</span></p><p data-line="4" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">本篇介绍的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">是iOS上一个集多窗口和窗口缩放能力于一体的越狱tweak。它支持在同一块屏幕上，可以同时打开多个App窗口，而不是只能在虚拟手机屏幕的前台、后台和分屏之间来回切换。</span></p><p data-line="6" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">顺便提一嘴，安卓设备现在也有了类似的工具，有机会我也会在后面的公众号文章中介绍，大家拭目以待吧。</span></p><h2 data-line="8" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">项目介绍</span></h2><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.9398148148148148" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100001535" src="https://wechat2rss.xlab.app/img-proxy/?k=6788de95&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FSq4BUsrXeTicpam90A0r7OzBKnho07kic6wgPoZXjbubdgphoYeCyR72SJdIpYroksA6TPtEUsX5OJicAuzsZ03kEyjm2Xyo9bcJ6TXcjRTCYU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-line="10" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">先看仓库本身。</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="12" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf=""><a href="https://github.com/34306/MilkyWayReborn" target="_blank">https://github.com/34306/MilkyWayReborn</a></span></code></pre><p data-line="16" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这个仓库是一个越狱插件，包名是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">com.milkyway.reborn</span></code><span leaf="">。仓库文档描述它是一个用于在同一屏幕上同时使用多个App的多任务tweak。查看它的control文件，定义是给iOS18和26用的窗口化多任务插件，也是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWay2</span></code><span leaf="">的现代重写版。这个版本范围对于安卓研究设备的版本号来说，够宽泛也够用了。</span></p><p data-line="18" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">从工程结构看，它是典型的rootless的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Theos</span></code><span leaf="">包，</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Makefile</span></code><span leaf="">里明确写了</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">THEOS_PACKAGE_SCHEME = rootless</span></code><span leaf="">，目标架构是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">arm64</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">arm64e</span></code><span leaf="">。这意味着它不是传统老式越狱时代那种随便往系统目录里塞文件的玩法，而是按现代rootless越狱的布局来做的。</span></p><p data-line="20" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">功能源码主干由这几个模块组成：</span></p><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Tweak.x</span></code><p><span leaf="">：负责hook系统和场景流程。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWWindowView.m</span></code><p><span leaf="">：负责窗口外壳、按钮和拖拽缩放。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWBackgrounderManager</span></code><p><span leaf="">：负责管理哪些App要保持前台状态。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWSceneHelper</span></code><p><span leaf="">：负责场景唤醒、休眠和查找。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWPassthroughWindow</span></code><p><span leaf="">：负责把内容挂到合适的透传窗口里。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWThemeManager</span></code><p><span leaf="">：负责窗口样式和控件外观。</span></p></li></ul><p data-line="29" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">基本能看出，它是直接插进</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SpringBoard</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Scene</span></code><span leaf="">系统里，把App变成可以拖来拖去的窗口。</span></p><h2 data-line="31" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">iOS虚拟手机越狱</span></h2><p data-line="33" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">要让这个插件跑起来，前提不是安装包，而是先把iOS虚拟手机搞成越狱状态。</span></p><p data-line="35" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">在前一篇文章里，iOS虚拟手机的越狱路线已经讲过了，核心思路就是走</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">vphone-cli</span></code><span leaf="">的</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Jailbreak</span></code><span leaf="">变体，而不是在系统起来以后再单独找一套传统越狱方案。这个路线会把系统、启动链、用户态工具和bootstrap一起准备好，最后给你一个已经具备</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/var/jb</span></code><span leaf="">布局、能装包、能加载</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Substrate</span></code><span leaf="">插件的虚拟iPhone。</span></p><p data-line="37" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果你沿用前一篇的虚拟手机构建链，通常就是直接选</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">JB=1</span></code><span leaf="">这条路：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(0, 0, 0);border-style: none;border-width: 0px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;color: rgb(0, 0, 0);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code data-line="39" dir="auto" style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(0, 0, 0);background: none;padding: 0px;border-radius: 4px;font-size: 1em;line-height: 1.357em;display: inline-block;tab-size: 4;"><span leaf="">make setup_machine JB=1</span></code></pre><p data-line="43" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">简单的讲，虚拟手机越狱后，在安装插件之前，先确认这几件事：</span></p><ol style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Sileo</span></code><p><span leaf="">或者等价的包管理器能正常打开。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mobilesubstrate</span></code><p><span leaf="">已经在系统里。</span></p></li><li><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/var/jb</span></code><p><span leaf="">存在，说明是rootless布局。</span></p></li><li><p><span leaf="">SpringBoard重启后不会把越狱环境打回原形。</span></p></li><li><p><span leaf="">你能在虚拟机里装一个最简单的tweak并让它生效。</span></p></li></ol><p data-line="51" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果这几步没问题，说明虚拟手机已经具备安装</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">的基础条件了。</span></p><h2 data-line="53" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安装越狱插件</span></h2><p data-line="55" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">的安装方式很标准，就是越狱插件的那一套。因为它依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mobilesubstrate</span></code><span leaf="">，所以本质上是一个要被注入</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SpringBoard</span></code><span leaf="">和目标App的动态tweak。</span></p><p data-line="57" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">make package</span></code><span leaf="">先生成</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">.deb</span></code><span leaf="">包。然后把编译好的包通过SSH丢进虚拟手机，接着使用</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Sileo</span></code><span leaf="">或者</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">dpkg -i</span></code><span leaf="">安装，装完后respring一次，让</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SpringBoard</span></code><span leaf="">重新加载注入链。对于rootless环境来说，这种方式最稳。</span></p><p data-line="59" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">安装完成后，重启一次</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SpringBoard</span></code><span leaf="">。再用一个简单App测试，长按图标菜单里有没有</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Open in Window</span></code><span leaf="">。如果这个入口出现了，说明插件已经注入成功了。</span></p><h2 data-line="61" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">App窗口化技术</span></h2><p data-line="63" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">的核心不是“加个小浮窗”，而是把一个App真的变成窗口。</span></p><p data-line="65" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">它在主屏图标上挂了一个快捷动作，名字就是</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Open in Window</span></code><span leaf="">。也就是说，你长按某个App图标时，不只是打开或者卸载，还能直接让这个App以窗口形态启动。这个入口很适合iOS虚拟手机，因为虚拟手机本来就强调可重复、可自动化的操作流程，少一次手动切换，体验就完整很多。</span></p><p data-line="67" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">窗口本体也做得很完整。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWWindowView</span></code><span leaf="">里能看到标题栏、关闭按钮、最小化按钮、最大化按钮和右下角缩放手柄。窗口可以拖动，缩放手柄可以拖拽改变大小，双击缩放手柄可以把窗口恢复到内容视图的原始比例，长按缩放手柄还会按当前设备方向做一次旋转校正。</span></p><p data-line="69" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">插件最难的部分，不是画窗口，而是让窗口里的App别被系统赶回后台。</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">在这里下了很重的功夫。源码里能看到它对</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">FBScene</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">UIMutableApplicationSceneSettings</span></code><span leaf="">、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">_UISceneHostingActivationStateHostComponent</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SBApplication</span></code><span leaf="">都做了处理，目标很明确：只要这个App被标记为窗口化，就尽量维持它的foreground状态，避免Scene系统和RunningBoard把它当成普通后台应用处理掉。</span></p><p data-line="71" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">更具体一点，它会做这些事：</span></p><ul style="margin-top: 0px;margin-bottom: 0.7em;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;" class="list-paddingleft-1"><li><p><span leaf="">记录需要保持前台的bundle ID和scene ID。</span></p></li><li><p><span leaf="">在场景更新时强制foreground。</span></p></li><li><p><span leaf="">在deactivationReasons变化时把退出理由压住。</span></p></li><li><p><span leaf="">在应用退出时清理状态，但不让残留assertion拖垮系统。</span></p></li><li><p><span leaf="">通过</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">RBSAssertion</span></code><span leaf="">和</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">BKSProcessAssertion</span></code><span leaf="">维持进程活性。</span></p></li><li><p><span leaf="">必要时再做一次</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">task_resume</span></code><span leaf="">或者</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SIGCONT</span></code><span leaf="">补救。</span></p></li></ul><p data-line="80" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">Tweak.x</span></code><span leaf="">里有一个很关键的入口：它会从图标快捷菜单启动目标App，等Scene真正起来以后，再把Scene包进</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWWindowView</span></code><span leaf="">，最后挂到主机窗口上。这样一来，多个App都可以各自拥有自己的窗口外壳，互不遮挡时就像并排桌面窗口，叠起来时又能靠拖拽切换前后层级。</span></p><p data-line="82" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MWBackgrounderManager</span></code><span leaf="">在这里也很关键，它专门维护哪些bundle ID和scene ID应该被视为foreground。换句话说，这不是单个窗口的静态UI，而是一套可以持续追踪多个App状态的管理器。</span></p><p data-line="84" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">这也是为什么它在iOS虚拟手机上特别合适。虚拟手机本来就适合反复回滚、反复验证和批量测试，一旦再加上这种窗口化能力，很多原本要来回切App的操作，就可以在一屏里完成。</span></p><h2 data-line="86" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 1.5em;padding-bottom: 0.3em;border-bottom: 1px solid rgba(0, 0, 0, 0.18);border-top-color: rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">总结</span></h2><p data-line="88" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">不是系统级分屏方案，它是越狱插件，靠的是Scene、</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">SpringBoard</span></code><span leaf="">和私有API。换系统版本以后，相关hook点很容易漂移出现不兼容的问题。</span></p><p data-line="90" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">另外，它依赖</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">mobilesubstrate</span></code><span leaf="">和rootless越狱布局。如果虚拟手机没越狱，或者bootstrap不完整，插件都不会起来。</span></p><p data-line="92" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">还有一点很重要：它追求的是窗口化体验，不是多开沙盒隔离。也就是说，App本身的数据边界和系统限制并没有被重写，只是交互形态被改了。这个区别要分清，不然很容易把“窗口化”误解成“多开”。</span></p><p data-line="94" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">如果把iOS虚拟手机看成一台研究机，那么</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">MilkyWayReborn</span></code><span leaf="">做的事情，就是给这台研究机补上一层桌面化交互能力。但关于App控制的玩法远不止如此，相信后面社区还会有更多这样优秀的插件诞生。</span></p><p data-line="96" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">前一篇文章讲了“虚拟手机能不能稳定跑起来，能不能越狱，能不能自动化”。这一篇讲的是“既然能跑起来，能不能把它变成一台可以同时跑多个App的窗口机器”。那下一篇讲什么好呢？</span></p><p data-line="98" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">最后，抛出一个问题：既然能控制App的启动与窗口化，那是否可以实现安卓系统上那样的“多开”功能？欢迎大家在评论区讨论。</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="https://github.com/34306/MilkyWayReborn">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e2dbfe3f&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU3MTY5MzQxMA%3D%3D%26mid%3D2247485193%26idx%3D1%26sn%3D5b53423ee611f250baca7a2181283108">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 09 May 2026 12:11:00 +0800</pubDate>
    </item>
  </channel>
</rss>