<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[y11han's icu]]></title><description><![CDATA[分享病情的地方]]></description><link>https://blog.y11han.top</link><image><url>https://blog.y11han.top/favicon.jpg</url><title>y11han&apos;s icu</title><link>https://blog.y11han.top</link></image><generator>Shiro (https://github.com/Innei/Shiro)</generator><lastBuildDate>Wed, 14 Oct 2026 19:08:21 GMT</lastBuildDate><atom:link href="https://blog.y11han.top/feed" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Oct 2026 19:08:21 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[首先感谢某家订阅能路由到4o]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/143">https://blog.y11han.top/notes/143</a></blockquote><div><p>首先感谢某家订阅能路由到4o</p><p>每次内耗以后才会彻底通透，真正释怀。通透从来不是想出来的，类似于0跃迁到1。</p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/143#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/143</link><guid isPermaLink="true">https://blog.y11han.top/notes/143</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Sun, 11 Oct 2026 04:47:24 GMT</pubDate></item><item><title><![CDATA[选择舞萌就是选择成功]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/142">https://blog.y11han.top/notes/142</a></blockquote><div><p>选择舞萌就是选择成功</p><p>现在流行的大水理论和薄肌理论我总是感觉到熟悉
来到机厅之后发现在舞萌机面前，人人都拿着大水，做着有氧，原来现在流行的理论早早就被舞萌痴们融会贯通用于实践
我恍然大悟，原来舞萌痴才是真正的领先于版本</p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/142#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/142</link><guid isPermaLink="true">https://blog.y11han.top/notes/142</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Sat, 10 Oct 2026 04:59:16 GMT</pubDate></item><item><title><![CDATA[大学里最快判断一个人认知水平的方式，就是直接问他平时用什么AI。]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/141">https://blog.y11han.top/notes/141</a></blockquote><p>大学里最快判断一个人认知水平的方式，就是直接问他平时用什么AI。
如果他说他平时用 Codex、Claude Code、Grok，那听我的，小组作业一定要和他一组，这种人你跟着他干就行了。
如果他说他用豆包、DeepSeek，那你可能还得再斟酌一下，先观察观察这个人到底什么水平。
但如果他说他平时用的是舞萌DX，中二节奏，太鼓达人、音乐魔方，这种人已经不是简单的认知水平高了，他已经完全跳出了正常大学生的AI使用框架。别人还在研究提示词、工作流、模型参数，他已经开始研究怎么让w6，17学长替他解决人生问题了。
这种人你一定要认识，一定要跟他耍起来。
你可能找到的不是一个普通同学，而是你大学四年乃至未来几年宝藏级别的贵人。</p><p style="text-align:right"><a href="https://blog.y11han.top/notes/141#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/141</link><guid isPermaLink="true">https://blog.y11han.top/notes/141</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Sat, 10 Oct 2026 04:59:16 GMT</pubDate></item><item><title><![CDATA[汉王黄金屋3 (F6C) 破解 Writeup]]></title><description><![CDATA[<link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261003181848553.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006151638427.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006152859006.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006153123806.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261007133631711.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261007133541239.png"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/44d5faad3fadbb983e92f96329432450_720.jpg"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/posts/default/f6c-hack">https://blog.y11han.top/posts/default/f6c-hack</a></blockquote><div><blockquote><p>设备：汉王黄金屋3 电纸书 (F6C)，君正 Ingenic MIPS SoC(板型 mensa)，Android 2.2.1 (FRG83) eng 固件 
目标：装第三方桌面、开 adb、解除5分钟锁屏限制，把机器变成可折腾状态<br/>结果：<strong>达成</strong>。全程未拆机、未刷机、零变砖风险</p></blockquote>
<p>::: warning
我对「折腾『教程』」的态度同 <a href="https://blog.y11han.top/posts/default/letv-c1-armbian-guide">乐视 CI 移植 Armbian</a> 这篇文章：
好的教程应当提供思路、启发读者，而不是直接丢出一个现成的刷机包。因此你在这里得不到任何懒人包（AI 时代，找点没甲的随便一跑就出来了），但你能一定能找到灵感。
:::</p><h2 id="">一、设备与固件概况</h2><p>从 <a href="https://www.hw99.com/index.php?m=content&amp;c=index&amp;a=lists&amp;catid=46">官方升级包</a> 和实际设备 dump 交叉确认:</p><table><thead><tr><th>项</th><th>值</th></tr></thead><tbody><tr><td>平台</td><td>Ingenic MIPS，产品代号 <code>mensa</code>，eng/test-keys 编译</td></tr><tr><td>分区</td><td>mmcblk0p1=system(ext4，500MB 原始镜像直写) p2=cache p3=data p4=内部存储(vfat，MTP 可见)</td></tr><tr><td>系统应用</td><td>hvLauncher60(桌面)、hvSettings(设置)、hvUsbConnectApp60、Term、Development、SpareParts 等</td></tr><tr><td>adb 设计态</td><td><code>ro.secure=0</code>、<code>persist.service.adb.enable=1</code>，开机 <code>usb_gadget.sh</code> 加载 android.ko 并重启 adbd，<strong>adbd 以 root 运行</strong></td></tr><tr><td>recovery</td><td>自制 recovery(非 AOSP 原版)，<code>inand_write_raw</code> 按分区名直写镜像，adbd 同样开启</td></tr></tbody></table><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261003181848553.png" width="50%"/><p>实测联机无法直接获得ADB权限。汉王桌面内设 <strong>系统升级</strong> 和 <strong>资源更新</strong> 两条可能实现破解的途径。系统更新会读 p4 内部存储根目录的 <code>update.zip</code>，资源更新会读 p4 内部存储根目录的<code>hvResources.zip</code>。</p><hr/><h2 id="-updatezip-">二、走不通的 update.zip 路线</h2><blockquote><p><strong>TL; DR</strong>
没有私钥，任何改过的 update.zip 都会被 recovery 拒绝。此路永久关闭。</p></blockquote>
<p>官方升级包是标准 SignApk <strong>整包签名</strong>(签名块在 zip comment，recovery 的 <code>verify_file</code> 校验):</p><ol start="1"><li>包内证书 <code>META-INF/CERT.RSA</code> 的 DN 伪装成 AOSP testkey(<code>CN=Android， android@android.com</code>)，但 RSA 模数 <code>FB6BD7A1…</code> 与公网 testkey(<code>D6931904…</code>)<strong>不符</strong>，是厂商自生成密钥对。</li></ol><p>::: note
   <code>update.zip</code>中的模数：
    <img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006151638427.png" height="963" width="1495"/>
   AOSP 公开证书文件 <code>testkey.x509.pem</code>：
   <img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006152859006.png"/>
   得到 AOSP 公开证书文件的 RSA 模数：
   <img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261006153123806.png"/>
:::</p><ol start="3"><li><p>解 recovery ramdisk，<code>/res/keys</code> 里<strong>只有一把 key</strong>，模数与该证书完全一致。V1.49(2015)与 2018 版包共用同一把私钥。
::: note
<img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261007133631711.png"/><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/image-20261007133541239.png"/>
:::</p></li><li><p>反汇编 recovery(MIPS32 静态链接，objdump + 自写脚本按指令编码定位字符串引用):安装流程中 <code>verify_file</code> 返回值直接门控，失败即 <code>signature verification failed</code> 中止，<strong>无旁路、无条件跳过</strong>。验签发生在任何写入之前，所以试刷坏包不会变砖。</p></li></ol><hr/><h2 id="-hvresourceszip-">三、完全不验签的 hvResources.zip 路线</h2><blockquote><p>TL; DR
关键突破，用官方资源更新机制自构造 payload、dump 出系统固件 build.prop、传入 apk。</p></blockquote>
<p>逆向 <code>hvSettings.apk</code>(system uid 运行，<code>sharedUserId=&quot;android.uid.system&quot;</code>)发现:</p><p><strong>系统设置里的&quot;资源更新&quot;按钮</strong>(<code>btnUpdateResources</code>)逻辑:</p><ol start="1"><li>查找 <code>/mnt/flash/hvResources.zip</code> 或 <code>/sdcard/hvResources.zip</code></li><li><code>XZip.upZipFile()</code> 解压到 <code>/mnt/flash/hwsys/temp/</code>(文件名还过一道 8859_1→GB2312 转码)</li><li>解析 <code>temp/hvResources/HvResources.xml</code>，按 <code>&lt;operation type=&quot;add|del|update&quot;&gt;</code> 执行<strong>任意路径文件复制/删除</strong>——以 <strong>system 权限</strong>，<strong>无任何签名校验</strong></li></ol><p>这是汉王自己的资源(字体/词典)更新机制，等于一个官方后门。我们用它构造了三种 payload:</p><pre class="language-xml lang-xml"><code class="language-xml lang-xml">&lt;resources&gt;
  &lt;operation type=&quot;add&quot;&gt;
    &lt;item&gt;&lt;srcpath&gt;/mnt/flash/hwsys/temp/hvResources/ADWLauncher.apk&lt;/srcpath&gt;
          &lt;dstpath&gt;/data/app&lt;/dstpath&gt;&lt;/item&gt;
  &lt;/operation&gt;
&lt;/resources&gt;</code></pre><table><thead><tr><th>payload</th><th style="text-align:left">用途</th></tr></thead><tbody><tr><td>安装包</td><td style="text-align:left">把 Holo/ADW/aLogcat 的 apk 复制进 <code>/data/app</code>，PMS 的目录监听自动完成安装</td></tr><tr><td>dump 包</td><td style="text-align:left"><code>srcpath</code> 填系统路径、<code>dstpath</code> 填 MTP 可见的 <code>/mnt/flash/hwdump</code>，把<strong>真实固件</strong>的 build.prop、hvSettings.apk、<code>/data/system/dropbox</code> 等全部拷出来——<strong>不需要 adb 就能任意读设备文件</strong></td></tr><tr><td>回滚包</td><td style="text-align:left"><code>type=&quot;del&quot;</code> 删掉 <code>/data/app</code> 里塞进去的 apk，随时恢复原状</td></tr></tbody></table><hr/><h2 id="">四、装了两个桌面，两个全爆了</h2><p>因为是 Android 2.2.3 的上古产物，必须找到支持 API = 8 的系统桌面。</p><p>一番搜索后，选择了 Holo Launcher 和 ADW Launcher。然后它们都不工作。</p><ol start="1"><li><p>很抱歉！进程com.holoxxxxx意外终止。<br/>这个所谓 froyo 专版(3.1.2， minAPI8)实际引用了 Android 3.0 (API 11) 才有的 <code>View.setLayerType()</code>，在 2.2.1 上必抛 <code>NoSuchMethodError</code>。后用逐 API 引用扫描验证。换用 ADW Launcher 1.3.6(minSdk 5，零高版本引用)后复活。</p></li><li><p>很抱歉！android.proccess.acore意外终止 。<br/>这是一个复制安装的权限陷阱。资源更新通道用 <code>FileOutputStream</code> 落地，进程 umask 导致文件权限为 <code>-rw------- system system</code>。PMS(system uid)自己能读，所以安装、图标、HOME 选择器全部正常;但<strong>应用进程(uid 10xxx)读不到自己的 apk</strong>，PathClassLoader 加载 dex 失败:</p><pre class=""><code class="">java.lang.ClassNotFoundException: ... in loader dalvik.system.PathClassLoader[/data/app/ADWLauncher.apk]</code></pre><p>(ADW 的 Application 声明跑在 <code>android.process.acore</code>，所以 FC 弹窗显示的是 acore，一度误导排查方向。崩溃堆栈由 DropBox 持久化在 <code>/data/system/dropbox/</code>，用 dump 包拷出来后真相大白)。 <code>chmod 644 /data/app/*.apk</code> 后复活。</p></li></ol><hr/><h2 id="-adb-">五、你这 adb 保真吗</h2><ul><li>recovery 里 adbd 开启，但验签失败后<strong>几秒内自动重启</strong>，窗口极短。</li><li>正常系统 adb 同样开启(root!)，但<strong>进入汉王桌面几秒后 adb 消失</strong>，此时 Windows 只认到 MTP——推测是 MTP/存储守护进程启动后把 USB gadget 从 adb 模式抢走(属性并未被关，抓到窗口时 <code>persist.service.adb.enable=1</code>)。也可能与自动休眠有关。</li><li>对策：PC 端看门狗脚本 <code>race_adb.sh</code>，死循环盯 <code>adb devices</code>，设备一出现立刻抢进去执行修复(chmod、写 persist 属性、拿 wake_lock、抓 <code>ps</code>/<code>lsmod</code> 诊断)。</li><li>另一进 recovery 的方法：系统升级按钮的预检只检查 update.zip <strong>存在性 + zip 内 version 文件的 HWV 记录与机型匹配</strong>(version 文件结构:1024 字节一条记录，<code>HWV\x042.23</code> @1024、<code>SYV\x04x.xx</code> @2048)，放入带真 version 文件的假包即可走到确认框并重启进 recovery。所有塞入应用，随时回到原厂状态。</li></ul><hr/><h2 id="">六、锁屏的两层机制与彻底禁用</h2><p>我计划让该设备做为时钟/台历类似物，因此必须停用恼人的5分钟自动锁屏。</p><p>设备的锁屏/休眠<strong>完全不走 Android 电源管理</strong>，所以 <code>screen_off_timeout</code>、<code>svc power stayon</code>、<code>FLAG_KEEP_SCREEN_ON</code> 全部无效。实际是三层：</p><p><strong>第 1 层 —— poweroffserver(关机编排服务)</strong>
init.rc 里的 root 服务，注册 binder <code>android.os.IPowerOffService</code>:负责关机前清场(遍历 /proc 杀占用进程、umount /data /cache /sdcard、sync、reboot)。<code>stop poweroffserver</code> 无副作用且<strong>adb 断连问题随之消失</strong>(此前 adb 只有开机几秒窗口，就是它把整机挂起导致 USB 断电)。</p><p><strong>第 2 层 —— HvLockScreenService(自动锁屏调度)</strong>
<code>com/android/server/HvLockScreenService</code>(services.odex，baksmali 可读)，核心逻辑:</p><pre class="language-java lang-java"><code class="language-java lang-java">goToLockScreenAtDefaultTime():
    if SystemProperties.get(&quot;sys.eink.hvlockscreen.autolock&quot;， &quot;1&quot;) == &quot;1&quot;:
        t = 300000;  // 硬编码默认 5 分钟
        try { t = Settings.System.getInt(&quot;hanvon_lockscreen_timeout&quot;); } catch {}
        设置 RTC_WAKEUP 闹钟 now + t → 到点弹锁屏界面
    else:
        取消闹钟</code></pre><p>关键结论:</p><ul><li><strong><code>hanvon_lockscreen_timeout</code></strong>(Settings.System，毫秒)是官方锁屏时间配置项，每次调度都现读——改成 <code>2147483647</code>(约 68 年)即永久不锁;</li><li><code>autolock</code> 属性<strong>只在调度入口被读一次</strong>，中途 setprop 0 无法取消已排程的闹钟(这就是中途设 0 无效的原因);</li><li>取消当前闹钟可走 binder:<code>service call hvlockscreen 3 i32 -1</code>。</li></ul><p><strong>binder 接口 <code>android.os.IHvLockScreenService</code>(服务名 <code>hvlockscreen</code>)交易码:</strong></p><table><thead><tr><th>code</th><th>方法</th><th>说明</th></tr></thead><tbody><tr><td>1</td><td>setHvLockScreentime(int)</td><td>只写内存静态变量，不持久，基本无用</td></tr><tr><td>2</td><td>goToLockScreenAtDefaultTime()</td><td>按 autolock + 设置键重新调度</td></tr><tr><td>3</td><td>goToLockScreenAtDefinedTime(int)</td><td>传 -1 = 取消闹钟;50 = 用户手动锁(userlock 门控)</td></tr></tbody></table><p><strong>最终修复命令(adb 内执行):</strong></p><pre class="language-bash lang-bash"><code class="language-bash lang-bash">adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db \
  &quot;insert into system (name，value) select &#x27;hanvon_lockscreen_timeout&#x27;，&#x27;2147483647&#x27; where (select count(*) from system where name=&#x27;hanvon_lockscreen_timeout&#x27;)=0;&quot;
adb shell sqlite3 /data/data/com.android.providers.settings/databases/settings.db \
  &quot;update system set value=&#x27;2147483647&#x27; where name=&#x27;hanvon_lockscreen_timeout&#x27;;&quot;
adb shell service call hvlockscreen 3 i32 -1
adb shell stop poweroffserver   # 每次开机一次，或 remount 后改名固化</code></pre><hr/><h2 id="enjoy-yourself-">七：enjoy yourself !</h2><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/44d5faad3fadbb983e92f96329432450_720.jpg" alt="44d5faad3fadbb983e92f96329432450_720"/></p></div><p style="text-align:right"><a href="https://blog.y11han.top/posts/default/f6c-hack#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/posts/default/f6c-hack</link><guid isPermaLink="true">https://blog.y11han.top/posts/default/f6c-hack</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Thu, 08 Oct 2026 07:18:46 GMT</pubDate></item><item><title><![CDATA[背景：总之我之前拼车在用的claude max账号（23年注册+订阅大半年+美国大银行信用卡）拉了一个mac用户后被封了，而且封禁原因是不支持的国家，非常少见…]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/140">https://blog.y11han.top/notes/140</a></blockquote><div><p>背景：总之我之前拼车在用的claude max账号（23年注册+订阅大半年+美国大银行信用卡）拉了一个mac用户后被封了，而且封禁原因是不支持的国家，非常少见，很生气。要知道这个号体质好到一次登七八个设备十几个ip乱跳，用户横跨十几个时区都没事。于是中秋节后开始琢磨着分析claude各个应用的遥测
一言以蔽之，我觉得 A\ 确实是在拿中国人负载均衡。因为如果它真的不想给中国人用，那基本上就没有中国人能用
简单说一下最关键最省流的发现：</p><p>安卓app（1.260930.20）
以下上传都发生在从play商店下载下来，打开的一瞬间。上传目标 <a href="https://api3.siftscience.com">https://api3.siftscience.com</a> （大陆可直连访问）。不需要登录，不需要点同意隐私政策（实际上也没这个）：</p><p>• ANDROID_ID. 系统级标记，原样上传。该值需要root才能访问和编辑，否则需要切换设备用户或恢复出厂设置。也就是说，跨账号跨卸载重装不变，基本相当于直接追踪设备
别家厂商收集设备指纹，你达里奥叔叔直接收集设备 😁
• 真实IPv6地址。这个不是服务端收集请求的IP地址，而是扫本机网卡地址。由于IPv6不nat，你的设备网卡上是有你的公网IPv6地址的。换句话说，只要你的手机能用IPv6上网，打开app的一瞬间A就知道你是老中了，管你是公司内网还是开了tun clash
• SIM卡国家代码和当前注册网络运营商。不多解释。要注意的是插海外卡在国内漫游，上传的注册网络运营商依然是国内三大运营商之一
• anthropic_device_id. 好消息，这个卸载重装app会变；坏消息，一起上传的是android_id。达里奥叔叔上传这个干什么用我暂且蒙在古里，，，</p><p>不难发现A的小巧思：老中没有外卡-&gt;老中下载手机app通过google play支付-&gt;老中被抓到-&gt;老中被负载均衡 😉 另外sift这个遥测可以直连，所以 GFW 不能帮你挡住。还有一些杂七杂八的，相比上面几条懒得写了。值得一提的是，抓包实测时还发现了一个遥测bug，会让检测设备是否root的部分遥测路径失效 🤣</p><p>claude code cli（2.1.283）
第三方api域名。也就是说，ANTHROPIC_BASE_URL的内容都和device_id（.claude.json里）一起原样上传到 api.anthropic.com，不是第三方遥测。不过如果开着ccswitch之类软件的本地代理，上传的就只有一个本地地址。该遥测可关（CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1或者DISABLE_GROWTHBOOK=1）
目测不直接上传时区，比如Asia/Shanghai这些。总的来说cli其实很好反遥测</p><p>claude desktop（MacOS 2.9939.2，未实测）
有请第二位重量级嘉宾
• 同样上传byok的第三方api域名，带着安装id（后面称ant-did，Mac上在~/Library/Application Support/Claude/ant-did）一起原样上传至 claude.ai 。不过desktop byok改模型名使用的话需要开本地代理，所以大概率上传的是个本地地址。如果是anyrouter这些不用改模型名的Claude中转站......考虑到之前A会在Claude code里通过提示词标记用户是否使用前沿模型实验室url和黑名单中转站，我合理怀疑A风控因素包括这个，并且权重不低
• 上传遥测信息，包括且不限于TZ=Asia/Shanghai、LANG=zh_CN，同样带着ant-did。上传目标地址 o1158394.ingest.us.sentry.io （可直连访问）。除此之外还有CPU、屏幕、显卡、内存、机型、平台这些各种设备指纹</p><p>简单总结，在mac app上使用过的claude模型中转站和当时的电脑时区，都会通过ant-did绑定在一起。如果某天忘开代理直接启动了desktop，你的ant-did就和你的大陆IP出口一起送到 sentry 的服务器上。达里奥这小子阴的很，知道GFW能拦住自己遥测就摇了俩帮手 😁 假如A或者snetry的服务器存的时间够长，可以轻松秋后算账。</p><p>先写这些吧。后面可能还会分析ios app，解密ipa dump完放好几天了。完整的分析报告见 <a href="https://github.com/B1anYu/claude-telemetry-audit（施工中，有可能删库/重新上传）。ai">https://github.com/B1anYu/claude-telemetry-audit（施工中，有可能删库/重新上传）。ai</a> slop比较严重（因为我写不过来这么复杂的报告、、、），强烈建议agent辅助阅读。出于一些考虑，仓库ignore了逆向的源码。我在agents.md里写了复现指引，如果发现不能复现和报告口径一致的源码，尽管私聊。</p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/140#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/140</link><guid isPermaLink="true">https://blog.y11han.top/notes/140</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Thu, 08 Oct 2026 05:11:32 GMT</pubDate></item><item><title><![CDATA[Untitled vacation]]></title><description><![CDATA[<link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/ud9temjgq2wu11h867.jpg"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/2h579osanfpewvlkk8.jpg"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/gzciivaqv2rakhrxr8.jpg"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/139">https://blog.y11han.top/notes/139</a></blockquote><div><p>无比繁忙的假期，处处都发生非预期或突发状况。</p>
<p>我的计划队列要么被阻塞要么被直接丢弃。</p><p>生活已经炸了，但我必须自己处理这些 panic 😇。</p><pre class="language-rust lang-rust"><code class="language-rust lang-rust">#![no_std]

assert_eq!(life_is_shit(), false);

#[panic_handler]
fn panic(_: &amp;PanicInfo) -&gt; ! {
    loop {}
}</code></pre><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/ud9temjgq2wu11h867.jpg" height="1561" width="2560"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/2h579osanfpewvlkk8.jpg"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/10/06/gzciivaqv2rakhrxr8.jpg"/></p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/139#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/139</link><guid isPermaLink="true">https://blog.y11han.top/notes/139</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:20:09 GMT</pubDate></item><item><title><![CDATA[优雅地使用 WireGuard：从“能用”到“好用”]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/posts/default/using-wg-elegantly">https://blog.y11han.top/posts/default/using-wg-elegantly</a></blockquote><div><p>众所周知，南邮的<a href="http://jwglxt.njupt.edu.cn">新教务系统</a> 和<a href="https://njupt.smartclass.cn">录播课堂</a> 都会限制校外 IP 访问。以校外 IP 访问，前者会得到 Empty reply，后者则拿不到播放器的媒体地址。</p><p>飞书 <a href="https://njupt-sast.feishu.cn/wiki/G7qHwG01gin4jvkUksPcueulnXg?from=from_copylink">WireGuard 组网</a> 文档已经列出了 Allowed IPs，你应当在配置的 <code>[peer]</code> 中添加它们，而不是默认 <code>0.0.0.0/0</code>，否则所有流量都会被 TUN 转发回学校。</p><p>但实际使用过程中还存在一些问题。截至 2026~2027 秋季学期，你至少需要进行以下配置，才能比较舒服地用好 wg。</p><h2 id="-wg--mihomo">方案一：将 WG 节点写入 mihomo</h2><p>如果你的代理核心（以 mihomo 为例，其他核心请自行查阅文档）支持 WireGuard 节点，那么直接参考 <a href="https://wiki.metacubex.one/config/proxies/wg/"><strong>本地 JavaScript 覆写</strong></a> 方案。</p><pre class="language-js lang-js"><code class="language-js lang-js">function main(config) {
  const nodeName = &#x27;SASTv6-outer-net&#x27;;
  const alternateName = &#x27;SAST-school-local&#x27;;
  const directName = &#x27;Direct&#x27;;
  const groupName = &#x27;校园网络&#x27;;
  const testUrl = &#x27;http://jwglxt.njupt.edu.cn/xtgl/login_slogin.html&#x27;;
  const privateKey = &#x27;REPLACE_PRIVATE_KEY&#x27;;
  const publicKey = &#x27;REPLACE_SERVER_PUBLIC_KEY&#x27;;
  const presharedKey = &#x27;REPLACE_PRESHARED_KEY&#x27;;
  if ([privateKey, publicKey, presharedKey].some(k =&gt; k.startsWith(&#x27;REPLACE_&#x27;))) {
    throw new Error(&#x27;请先在本机填入 WireGuard 三项密钥，再启用此覆写&#x27;);
  }
  const prefixes = [
    &#x27;172.16.0.0/24&#x27;, &#x27;192.168.101.0/24&#x27;, &#x27;192.168.114.0/24&#x27;,
    &#x27;10.0.0.0/8&#x27;, &#x27;202.119.224.0/20&#x27;, &#x27;103.244.235.63/32&#x27;,
    &#x27;115.28.139.59/32&#x27;, &#x27;180.209.99.28/32&#x27;
  ];
  const node = {
    name: nodeName, type: &#x27;wireguard&#x27;, ip: &#x27;172.16.0.21&#x27;,
    &#x27;private-key&#x27;: privateKey,
    peers: [{
      server: &#x27;wg6.sast.fun&#x27;, port: 61820,
      &#x27;public-key&#x27;: publicKey, &#x27;pre-shared-key&#x27;: presharedKey,
      &#x27;allowed-ips&#x27;: prefixes
    }],
    &#x27;persistent-keepalive&#x27;: 15, mtu: 1400, udp: true,
    &#x27;remote-dns-resolve&#x27;: true, dns: [&#x27;192.168.114.1&#x27;]
  };
  const alternateNode = {
    ...node, name: alternateName,
    peers: node.peers.map(peer =&gt; ({...peer, server: &#x27;wg.sast.fun&#x27;}))
  };
  config.proxies = [
    ...(config.proxies || []).filter(p =&gt; ![nodeName, alternateName, directName].includes(p.name)),
    node, alternateNode, {name: directName, type: &#x27;direct&#x27;, udp: true}
  ];
  const groups = (config[&#x27;proxy-groups&#x27;] || []).filter(g =&gt; g.name !== groupName);
  // 避免将来订阅改成自动纳入全部节点后，把校园 WG 混入国外测速组。
  for (const g of groups) {
    if (g[&#x27;include-all&#x27;] || g[&#x27;include-all-proxies&#x27;]) {
      const old = g[&#x27;exclude-filter&#x27;];
      if (!old || !old.includes(&#x27;^SAST-WG$&#x27;)) {
        g[&#x27;exclude-filter&#x27;] = old ? `(${old})|^SAST-WG$` : &#x27;^SAST-WG$&#x27;;
      }
      if (!g[&#x27;exclude-filter&#x27;].includes(&#x27;^SAST-直连$&#x27;)) {
        g[&#x27;exclude-filter&#x27;] += &#x27;|^SAST-直连$&#x27;;
      }
      if (!g[&#x27;exclude-filter&#x27;].includes(&#x27;^SAST-WG-wg$&#x27;)) {
        g[&#x27;exclude-filter&#x27;] += &#x27;|^SAST-WG-wg$&#x27;;
      }
    }
  }
  config[&#x27;proxy-groups&#x27;] = [...groups, {
    name: groupName, type: &#x27;select&#x27;, proxies: [nodeName, alternateName, directName],
    url: testUrl, interval: 300, lazy: true
  }];
  const rules = [
    &#x27;DOMAIN,wg6.sast.fun,DIRECT&#x27;,
    &#x27;DOMAIN,wg.sast.fun,DIRECT&#x27;,
    `DOMAIN,jwglxt.njupt.edu.cn,${groupName}`,
    `DOMAIN-SUFFIX,smartclass.cn,${groupName}`,
    ...prefixes.map(p =&gt; `IP-CIDR,${p},${groupName},no-resolve`)
  ];
  config.rules = [...rules, ...(config.rules || []).filter(r =&gt; !rules.includes(r))];
  return config;
}</code></pre><p>:::warning
如果你不使用共存方案，请不要为校园网段添加 TUN 排除项。
:::</p><p>---</p><h2 id="">方案二：共存</h2><h3 id="">与代理软件共存</h3><p>我使用 Sparkle（mihomo 核心）作为主力代理软件，使用习惯是：System Proxy + TUN 常开。
而 wg 工作方式也是 TUN，且 mihomo 的 Tun 网卡的跃点为 1。很有可能所有流量都直接走 mihomo 代理，WireGuard 形同虚设（系统先比较路由前缀长度，再比较相同前缀的代价）。</p><p><strong>解决方法 1：</strong> 短暂关闭 Sparkle 的 TUN。但这一点也不优雅。
<strong>解决方法 2：</strong> 在 Sparkle TUN 设置中排除自定义网段：</p><pre class="language-yaml lang-yaml"><code class="language-yaml lang-yaml">tun:
  route-exclude-address:
    - 172.16.0.0/24
    - 192.168.101.0/24
    - 192.168.114.0/24
    - 10.0.0.0/8
    - 202.119.224.0/20
    - 103.244.235.63/32
    - 115.28.139.59/32        # smartclass
    - 180.209.99.28/32        # 校内DNS解析的新版教务</code></pre><p>在系统代理 - 绕过列表 / DNS FakeIP 过滤列表</p><pre class="language-plaintext lang-plaintext"><code class="language-plaintext lang-plaintext">jwglxt.njupt.edu.cn
njupt.smartclass.cn</code></pre><h3 id="-app-">与易安连 App 共存</h3><p>南邮信息办给出的<a href="https://xxb.njupt.edu.cn/_upload/article/files/c6/30/4181af574b44bf62092998eaa010/7b70c157-f3ec-4f37-8c05-43e96f3ac78d.pdf">校外巡课流程</a>本身也是先连接易安联的 ENLINK CASB，再访问 <code>njupt.smartclass.cn</code>。所以 SmartClass 与易安联本身并不冲突，真正打架的是 <strong>易安联和 WireGuard 同时建立隧道后，对同一批校内地址产生重叠路由</strong>。</p><p>:::tip
Windows / macOS 上两个隧道可以同时存在，但命中同一个目标地址时，最终走哪个接口取决于系统路由；iOS 上只允许一个 Packet Tunnel 接管系统流量，WireGuard 和易安联 App 必有一个被强制关闭。
:::</p><p>因此使用 WireGuard 时保持易安联断开，反之亦然。这样比改双方的默认路由、metric 或强行套两层 TUN 稳定得多。（加上 mihomo，你的电脑里有三个 TUN Be like）</p><h3 id="smartclass">smartclass</h3><p>前文已提。
wg config 中追加：
<code>ini
[Peer]
AllowedIPs = ..., 115.28.139.59/32</code></p><p>mihomo TUN 排除：<code>115.28.139.59/32</code> ，System Proxy 绕过列表和 DNS FakeIP 过滤列表：<code>njupt.smartclass.cn</code></p><p>近期发现，教师账号所用校园网出口被 smartclass 限制，原因未知。建议切换 CMCC 或 CHINANET 出口或使用易安连 App。</p><h3 id="">新版教务系统</h3><p>前文已提。</p><pre class="language-plaintext lang-plaintext"><code class="language-plaintext lang-plaintext">[Peer]
AllowedIPs = ..., 180.209.99.28/32</code></pre><p>System Proxy 绕过列表和 DNS FakeIP 过滤列表： <code>jwglxt.njupt.edu.cn</code></p><hr/><p>至此，实际需要处理的是三层互不相干的问题：WireGuard 的 <code>AllowedIPs</code> 决定哪些目的地址回学校；mihomo 的 TUN / System Proxy 决定这些流量会不会在到达 WireGuard 之前被代理截走；易安联则是另一套 VPN，使用时不要和 WireGuard 重复接管同一批校内资源。</p></div><p style="text-align:right"><a href="https://blog.y11han.top/posts/default/using-wg-elegantly#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/posts/default/using-wg-elegantly</link><guid isPermaLink="true">https://blog.y11han.top/posts/default/using-wg-elegantly</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Mon, 28 Sep 2026 06:37:44 GMT</pubDate></item><item><title><![CDATA[现代科研指北]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/138">https://blog.y11han.top/notes/138</a></blockquote><div><p>现代科研指北
<a href="https://bookdown.org/yufree/sciguide/">https://bookdown.org/yufree/sciguide/</a>
于淼</p><p>本书初稿写作于我处于学生与独立科研人员或转行的过渡期，也就是博士后阶段。在这一阶段身处海外的我意识到了现代科研的一些趋势与这个年龄段科研人员的种种迷茫，为了铭记，也为了启迪，我将这一阶段对于现代科研的一些思考整合为一本书。这本书是开源的，在初稿完成后开放协作，我也鼓励科研人员能记录自己的成长经历，如果实在不知从哪下手，可以参考这本书来整理。是否认可本书观点并不重要，但没有自己的科研思考过程对于科研人员是一种悲哀。</p><p>本书的出发点是 Jeef Leek How to be a modern scientist与 Phillip J. Guo 的The Ph.D Grind 读后感，前者介绍了当前科研过程中的一些趋势而后者完整给出了个人读博士成长的经历，本书则更像是两者的结合体。由于文化差异与技术进步，当2017年我整理前一本书笔记时发现有些内容已经需要更新了。这样我开始是保留其框架然后填上新的内容，有的内容直接是其他书的笔记，如同忒修斯的船一样，当零件换到一定程度结构也就需要重新调整，调到最后已经看不出跟原书有多大关系了，整体思路收敛到了我的个人经验上，此时就更像是后一本书了。</p><p>没错，这本书的一个重要来源就是我从事科研工作十年的实际感受。我非常重视从源头思考或第一推动原理，希望找到科学问题的最原始的出发点去探索，过程中会对比其他人的思路去验证或优化。这个重复造轮子的过程虽然效率不高，但会保证思路的清晰与独立性，在不断试错中步步为营，扎实推进。与之对比的是简单模仿前人的做法，这样虽然比较快，但一方面会失去探索乐趣，另一方面很难产生新洞见。很多章节我倾向于在给出解决方案前阐述这样做的原因，科研需要黑箱模型，但思路不能单纯照搬别人黑箱。这部分内容在第二章现代科研、第四章思维工具和第五章实验上有所体现。</p>
<p>之所以带上“现代”，是因为科研走到今天变化非常快而多数人对现代性理解不足。很多看法现在看或者是刻板印象，或者已被取代，这类关于科研的偏见不仅仅存在于非科研人员，甚至科研人员自己也会把某些“约定俗成”的说法看作科研特性。此外，加上现代就说明我们也面对很多之前科研进程不具备的一些新问题新趋势，这里面最严重的可能要数可重复性危机与开放科学的兴起：如果我们不解决可重复性危机，大量的研究资源会被浪费在无意义的项目上；如果我们不了解开放科学，学术交流的效率就会明显落后于时代。这部分内容在第三章科研现状概览有所体现。</p><p>另一个现代化问题则是技术进步带来的，现代科研使用大量信息技术进步带来的软硬件及标准操作流程，熟悉这些技术与管理理念有利于提高科研效率，这在本书第六章数据处理、第七章文献与第八章学术生活中有所体现。这部分是研究生或初级科研人员最需要知道但教育体系目前没有很好覆盖的知识。本书最后一章介绍科研外就业问题，为科研人员提供一点出圈的思路。</p><p>本书有三个附录，第一个附录是科研工具软件的选择与推荐，第二个附录是我理想中全栈科学家的一套自测题，第三个则是一些科研俚语，希望读者永远不要忘记幽默。
本书涉及的主题是我这些年体会到的比较重要的问题，但并不是说别的主题不重要，只是我个人经验覆盖不到。同时，能力有限，即便我所覆盖的部分只是我了解的部分，肯定带有偏见，一定时刻存疑，当你开始思考这些问题就会有收获。</p><p>虽然这本书关注的是科研，但科研不过是生活的一部分，希望读者不要被职业固化生活，去看日出，也去看日落；上得了高山，也下得了盆地；去经历风雨，也能闲观虹霓…充分感受每一过程中的冲突、意外、美丑，科学只是一个视角但人要有更大的视野。</p><p>本书框架如下：
第一章前言。
第二章介绍现代科研的知识背景与认识框架。
第三章介绍现代社会及现代科研趋势与问题。
第四章介绍科研思维。
第五章介绍实验。
第六章介绍数据分析。
第七章介绍文献管理。
第八章介绍学术生活。
第九章介绍离开学术界的就业途径。
附录一 现代科研工具包。
附录二 检验本书阅读效果的试题。
附录三 调侃风格的科研版词典。</p><p>文中会涉及编程，均使用R语言展示并提供代码。</p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/138#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/138</link><guid isPermaLink="true">https://blog.y11han.top/notes/138</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Wed, 23 Sep 2026 03:55:53 GMT</pubDate></item><item><title><![CDATA[转眼间，新生入学了，变老登了啊。]]></title><description><![CDATA[<link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/wvbbmq3he8rtfk4hf8"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/zdsb6w241tfsk4k7xy"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/r3bjjnpoyf4922lqqm"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/vlb4gqiws5sl7eawfm"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/137">https://blog.y11han.top/notes/137</a></blockquote><div><p>转眼间，新生入学了，变老登了啊。</p><p>图三带娃开会
现在被迫停工了，原因是macbook neo没有键盘背光，我无法在黑暗的床上打字😇</p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/wvbbmq3he8rtfk4hf8" alt="图片" height="2125" width="2560"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/zdsb6w241tfsk4k7xy" alt="图片"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/r3bjjnpoyf4922lqqm" alt="图片"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/09/05/vlb4gqiws5sl7eawfm" alt="图片"/></p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/137#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/137</link><guid isPermaLink="true">https://blog.y11han.top/notes/137</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Sat, 05 Sep 2026 03:36:01 GMT</pubDate></item><item><title><![CDATA[以身份认同为壁垒，以群体归属为诱惑，以排他性为粘合剂的亚文化结构]]></title><description><![CDATA[<link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/mjrpmyevsuqiwmfzvb"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/5yl1few3au3frp0g71"/><link rel="preload" as="image" href="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/0qu4x1mjtk48wjdu2j"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="https://blog.y11han.top/notes/135">https://blog.y11han.top/notes/135</a></blockquote><div><p>以身份认同为壁垒，以群体归属为诱惑，以排他性为粘合剂的亚文化结构</p><p>圈子一旦形成就会不可避免的催生一系列异化行为：
无脑跟风以获取群体认同，攀比炫耀以确立内部层级，扣帽子党争以维护话语霸权</p><p>这些行为与爱好本身的的价值毫无关系，却恰恰构成了圈子的日常</p>
<p>实际上，任何亚文化想要获得长久的生命力，必须先完成社会化</p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/mjrpmyevsuqiwmfzvb" alt="图片" height="2125" width="2560"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/5yl1few3au3frp0g71" alt="图片"/></p><p><img src="https://pub-48617792005b4ba3acf721d0626eae2f.r2.dev/blog/2026/08/19/0qu4x1mjtk48wjdu2j" alt="图片"/></p></div><p style="text-align:right"><a href="https://blog.y11han.top/notes/135#comments">看完了？说点什么呢</a></p></div>]]></description><link>https://blog.y11han.top/notes/135</link><guid isPermaLink="true">https://blog.y11han.top/notes/135</guid><dc:creator><![CDATA[Y11Han]]></dc:creator><pubDate>Wed, 19 Aug 2026 01:23:31 GMT</pubDate></item></channel></rss>