忘却前夜 · 唤醒分析器 —— 使用说明
============================================================

这个文件夹里的东西是什么
------------------------------------------------------------
  start-server.bat               ★★ 打开分析器（必须用它打开！见下文）
  morimens-gacha-analyzer.html   抽卡分析器本体（网页）
  ocr\                           OCR 识别引擎（本地文件，离线可用，别删，约 47MB）
  start-capture-pages.bat        ★ 自动翻页截图（一次拍完所有记录页）
  capture-pages.ps1              start-capture-pages.bat 调用的脚本，别直接动
  start-capture.bat              抓包方案（旧，已证实无效，见文末）
  capture-gacha.py               start-capture.bat 调用的脚本，别直接动
  start-sniff.bat                ★ 网络层嗅探（新，第③条路线）
  sniff-gacha.py                 start-sniff.bat 调用的脚本，别直接动
  test-morimens.mjs              自动化测试，用不到，可以不管


【最重要的一条】分析器一定要用 start-server.bat 打开
------------------------------------------------------------
不要双击 morimens-gacha-analyzer.html 直接开。

原因：用 file:// 方式打开网页时，浏览器会禁止 OCR 引擎的 Worker
      加载脚本（报 importScripts / NetworkError），
      「开始识别」必然失败 —— 和网络、截图质量都没有关系。

正确做法：双击 start-server.bat
  · 它会起一个本地小服务，并自动用
    http://127.0.0.1:8765/morimens-gacha-analyzer.html 打开分析器
  · 那个黑窗口要一直开着，它就是服务本身；用完按 Ctrl+C 关掉
  · 关掉窗口后网页还能继续看，但刷新会失效


方案一：自动翻页截图（不用装任何东西）
------------------------------------------------------------
前提：你已经可以正常打开「忘却前夜」游戏。

1. 打开文件资源管理器（按 Win + E），在顶部地址栏粘贴下面这行，
   回车，就进到本文件夹了：

   C:\Users\Administrator\WorkBuddy\2026-09-28-05-15-54

2. 先把游戏打开，进到「唤醒 → 唤醒记录」页面，先别动它。

3. 回到文件夹，【双击】start-capture-pages.bat
   （注意是双击运行，不是用编辑器打开看内容）

4. 窗口里会先用中文打出操作提示，然后问你：
   「先试拍 1 张确认截图区域？直接回车 = 拍全部，输入 1 = 只拍 1 张」
   第一次用请按 1 再回车（试拍）。

   注意：窗口顶部那几行英文（Morimens Analyzer / local server 之类）
   是启动器本身的提示，属于正常现象；真正的中文提示由后面的
   PowerShell / Python 程序输出，不会乱码。

5. 它会自动打开 shots 文件夹。看看里面的 01.png：
   - 拍到的是游戏画面 → 没问题，进入第 6 步
   - 拍出来是黑的 / 是桌面 → 把 01.png 发给助手

6. 再【双击】一次 start-capture-pages.bat，这次按 N 再回车（拍全部）。
   脚本会去点记录页底部的「下一页」箭头，每翻一页截一张图，最多 30 页；
   如果连续两张一模一样，说明已经是最后一页，会自动停下。

   （重要：游戏的记录页是【分页】的，底部是「左箭头 1 右箭头」，
     不是滚动列表 —— 所以拖拽和滚轮都没用，要的就是点那个箭头。
     脚本默认点箭头；万一箭头位置对不上，它会自动改试滚轮／拖拽／PageDown。）

7. 跑完 shots 文件夹会自动打开。把里面的图片【全选】(Ctrl+A)，
   一次性拖进分析器的「截图识别」方框里。

8. 点「开始识别」→ 等进度跑完 → 点「智能解析」→ 核对预览表 → 「确认导入」。

9. 记录页顶部有个「唤醒类型」下拉筛选，切一次筛选就换一批记录。
   想抓全的话，换个类型再跑一次脚本即可（重复的会被自动去重）。

点箭头没反应的话：
  1) 先确认游戏窗口在前台（脚本开始前有 4 秒倒计时给你点游戏画面）
  2) 仍不行就用 -NextPageAt 微调箭头位置，把下面这行粘到黑窗口回车：

  powershell -ExecutionPolicy Bypass -File "C:\Users\Administrator\WorkBuddy\2026-09-28-05-15-54\capture-pages.ps1" -Pages 30 -NextPageAt "57,84"


方案二：抓包（一次拿到全部记录，不用翻页、零识别误差）
------------------------------------------------------------
代价：要装一次根证书、要临时改系统代理。

1. 【双击】start-capture.bat，按窗口里的提示做：
   - 它会先把根证书准备好，并问你要不要自动安装（选 Y，Windows 会弹一次
     确认框，点「是」）
   - 不要再访问 http://mitm.it —— 新版 mitmproxy 打开那个页面会直接报
     "Host header is specified and is not an IP address or localhost"，
     那是它自己的保护机制，不是你设置错了。直接装本地证书文件就行。
   - 系统设置 → 网络和 Internet → 代理 → 手动设置代理
     地址 127.0.0.1  端口 8080
   - 进游戏 → 唤醒 → 唤醒记录，往下翻一两页
   - 回到黑窗口按 Ctrl+C 结束
   - 【记得把系统代理关掉】

2. 打开 capture\records.json，把内容整个复制，
   粘到分析器的「JSON 导入」页签里，点「导入 JSON」。
   （字段名不用管，程序会自动识别）


常见问题
------------------------------------------------------------
Q: 双击 .bat 弹出「Windows 已保护你的电脑」？
A: 点「更多信息」→「仍要运行」。本地生成的脚本，安全。

Q: 双击后一闪就没了？
A: 说明脚本报错了。右键 .bat → 用「记事本」打开，
   把最后一行前面的 pause 保留住即可看到报错；或直接把报错截图发给助手。

Q: 分析器 OCR 点了「开始识别」，报
   "Failed to execute 'importScripts' on 'WorkerGlobalScope'"？
A: 说明你是直接双击 html 打开的（地址栏是 file://...）。
   关掉它，改用 start-server.bat 打开（地址栏变成 http://127.0.0.1:8765/...），
   就能正常识别了。

Q: OCR 要不要联网？
A: 不需要。识别引擎（Tesseract + 中英文语言包）已经放在本目录的 ocr\ 文件夹里，
   是本地文件。只有找不到 ocr\ 时程序才会退回在线 CDN。

Q: 抓包时浏览器打开 mitm.it 报 "Host header is specified..."？
A: 别用 mitm.it。证书文件就在
   C:\Users\Administrator\.mitmproxy\mitmproxy-ca-cert.cer
   start-capture.bat 会自动问你要不要装；手装的话双击它，
   选「当前用户」→「将所有证书放入下列存储」→「受信任的根证书颁发机构」。

Q: 截图拍到了界面上的按钮文字，会不会被当成记录？
A: 不会。程序以「含日期的行」为锚点解析，且「类型=唤醒体」才算金，
   界面标签会被自动挡掉。

Q: 识别出来的名字有错别字（比如「命轮」认成「命办」）？
A: 三重手段都做了：
   ① 模型：ocr\lang 里放的是标准精度模型（chi_sim 19MB，不是省体积的 fast 版），
      中文形近字准确率高一个档次。
   ② 容错：即使「命轮」被认成「命办/命仑/命沦」，「唤醒体」被认成「唤醒休」，
      程序也能正确判出行别，不会整行变成「未识别」。
   ③ 名单纠错（最有效）：内置了灰机维基「唤醒体」62 个 +「命轮」137 个的
      完整名单。认错的名字会按名单拉回正确写法，而且**只在同类里比**——
      唤醒体行只跟唤醒体名比、命轮行只跟命轮名比，不会张冠李戴。
      例如：「25」→「24」、「艾利亚」→「戈利亚」、「职贵所在」→「职责所在」。
      纠正过的行会标「已按名单纠正」并显示原文；实在认不出的标「名称待核」，
      在预览表里直接改那个格子即可。

Q: 为什么窗口里的提示变成英文了？
A: 因为 cmd 解析含中文的 .bat 时会「行错位」（你之前看到的
   '摆' is not recognized 就是这个），所以启动器改成了纯英文。
   中文提示一律由 PowerShell / Python 输出（走 Unicode 接口，永不乱码），
   完整中文说明看本文件。

Q: 换了新版本，之前导入的错数据怎么办？
A: 记录明细右上角「清空全部」→ 重新把 shots 文件夹的图拖进「截图识别」
   → 重新识别、解析、导入。旧数据的名字是坏模型认出来的，值得重来一遍。


============================================================
【附】网络层嗅探（第③条路线）—— 已完成，结论是「读不到内容」
============================================================

start-sniff.bat + sniff-gacha.py 是干什么的
------------------------------------------------------------
它在【网络栈最底层】截获游戏的 TCP 流量（用 Windows 自带的 pktmon），
能同时看到「发出」和「返回」两个方向，用来判断：
  · 游戏到底连了哪些服务器、域名是什么
  · 哪些流是明文 HTTP、哪些是 TLS、哪些是自定义加密协议
  · 有没有残留的可读文本

怎么用（需要管理员权限，脚本会自己请求）
------------------------------------------------------------
1. 打开游戏
2. 双击 start-sniff.bat，UAC 弹窗点「是」
3. 按提示，在游戏里打开【唤醒 → 唤醒记录】并往下翻两三页
4. 等它跑完（默认 75 秒），把黑窗口里的整段输出复制给我

想看得更全，可以在抓包期间把游戏关掉再重开 ——
新建的连接才会暴露域名，已经连着的连接抓不到它的域名。


【重要】已经实测出来的结论
------------------------------------------------------------
2026-09-28 在本机实测（游戏版本 2.5.2），两次抓包，第二次是开着记录页抓的：

1. 游戏的服务器身份已全部确认（用 DNS 反查域名解析结果核对出来的）：
     p11222-log-collector.qookkagames.com -> 47.243.71.243 / 8.218.187.195
     account.qookkagames.com              -> 8.223.49.98
     34.36.56.239 (Google Cloud)          -> 没有任何 qookka 域名指向它，
                                             是独立的自定义协议网关
2. 所有连接都是加密的，一条明文 HTTP 都没有：
     *.qookkagames.com 的两台   TLS 应用数据（记录里只有密文）
     34.36.56.239:80            自定义协议：4 字节长度前缀 + 加密正文（熵 6.4）
     34.36.56.239:8443          自定义协议，熵 7.9，全加密无长度前缀
3. 开着记录页那次，游戏对 47.243.71.243 发出 266 字节、收回 520 KB
   （577 个包）—— 这一笔最大，极可能就是翻页时拉取的记录数据。
   但它是 TLS 密文，读不出来。

4. 由此得到一个对「读内存」路线有利的推论：
   这 520 KB 进了客户端之后必然被解密成明文存在进程内存里 ——
   这正是第⑤条路线（读进程内存）能捞到的东西。

5. 抓包时游戏连的都是长连接（抓包前就建好了），所以抓不到它的域名。
   想看游戏所有域名，请在抓包期间把游戏关掉再重开。

6. 顺带提醒：默认只过滤 TCP，所以抓包里会混进浏览器/系统的流量
   （Bing、msn、bilibili、腾讯等）。游戏自己的流会被单独分出来，
   不影响结论。

2. 本地那条路也封死了：
     ejoy\config.dat          加密
     ejoy\ejoysdklogv1\*      加密
     GameAssembly.dll         字符串被剥离
     global-metadata.dat      虽是明文但里面只有 Unity 框架的串，没有接口地址
     WebView2\EBWebView\      只有运行时 DLL，没有缓存

   也就是说：既没有「原神那种写在本地缓存里的 authkey」，也读不到明文流量。

3. 因此第③条路线的结论是：
     ✅ 机制上完全可行（确实抓到了双向流量、能识别域名和协议形态）
     ❌ 但内容和抽卡记录一样是加密的，嗅探器读不出来

   想真正拿到记录，只剩两条更重的路（都需要逆向级别的工作）：
     · 读游戏进程内存里已解密的数据
     · 反解客户端的加解密实现（就是异环作者干的那种活）


命令行的几个开关（一般用不到）
------------------------------------------------------------
  start-sniff.bat --seconds 120        把抓包时长改成 120 秒
  start-sniff.bat --selftest           只跑解析器自检，不抓包
  start-sniff.bat --mode raw           改用原始套接字（只能抓「发出」方向）
  start-sniff.bat --pktmon-all         不加过滤器，抓本机全部流量
  start-sniff.bat --pktmon-strict      只抓游戏端口/IP（文件小但可能漏）
  start-sniff.bat --from-pcap capture\pktmon.pcapng --ips <IP,...>
                                       不重抓，直接重新分析已保存的 pcapng

抓到的原始流会存到 capture\ 目录，文件名是
stream_<IP>_<端口>_<本机端口>_<方向>.bin，可以直接发给我做进一步判定。
（本机端口是必须的：同一个服务器的多条连接要分开，否则会混成一条。）

出金历史里看到「名称待核 / ⚠待核」是什么意思
------------------------------------------------------------
  这条出金的名字 OCR 没认出来（不在内置名单里），UP/歪 判不了。
  到「记录明细」找到这一行，点行末的 ✎，把名字改成游戏里的正确写法，
  UP/歪 判定会自动刷新。

  工具栏的「🔤 名单纠错」按钮：名单/纠错算法升级后，把旧记录里
  没认出来的名字重新纠一遍（平时不用点，页面加载时会自动跑一次）。

出金历史顶部出现「⚠ 连歪超规则」提示
------------------------------------------------------------
  同一个卡池里连续歪的次数超过了设定（角色池默认连歪 2 次必中）。
  游戏机制上这不可能，多半是某条记录的名字没认对或卡池认错了，
  按提示核对那些记录即可。换卡池会重新计数，待核的出金不计入。


【网站版（不用下载，打开就能用）】
------------------------------------------------------------
  https://morimens-gacha.app.workbuddy.host/
  · 左上角是作者署名「听雨」
  · 右上角有「📷 截图助手」（下载自动翻页截图工具给朋友用）、
    「📜 更新日志」（每个版本改了什么）
  · 打开页面会弹一次公告，勾「本次不再提示」就不会反复打扰
  · 功能和本地版完全一致；你的数据保存在你自己的浏览器里，别人看不到
  · 手机/别的电脑也能打开；OCR 引擎从网站自动加载（首次识别要多等十几秒）
  · 注意：截图助手是 Windows 程序，浏览器没法操作你的游戏窗口，
    所以需要下载到电脑上运行；网站上负责「识别」这一步

【自动翻页截图的新能力】
------------------------------------------------------------
  · 最多拍 300 张（原来是 30）
  · 中途想控制：点一下黑色命令行窗口，按 P 暂停 / 再按 P 继续，
    按 Q 立即结束（已经拍到的图全部保留）
  · 每拍一张都会检查画面里还有没有「规则说明 / 历史记录」，
    记录窗口一被关掉就自动停止并删掉那张无关截图
    —— 用 Windows 自带的 OCR 判断，不需要装 Node 或任何东西
    （Windows 10 1809+ 才有；没有则退回「连续两张相同即停」）

【抽卡榜单（需要联网）】
------------------------------------------------------------
  页面新增「🏆 抽卡榜单」：填上游戏 UID，就能把自己的唤醒分析
  上传到公开榜单，和其他守密人比一比运气。

  · 只会上传「统计结果」：总抽数、出金数、UP 命中数、欧皇度、
    平均 UP 抽数、各池汇总 —— 不会上传你的逐条抽卡记录
  · 上传后 UID 和昵称公开可见，且只能新增、不能修改也不能删除
  · 同一个 UID 重复上传时，榜单只显示最新那一条
  · 榜单按欧皇度排名，你自己那一行会高亮并标「我」
  · 用网站版最稳（云服务只对网站地址开放）：
    https://morimens-gacha.app.workbuddy.host/

【UID 校验（必须是真实玩家）】
------------------------------------------------------------
  填完 UID 会自动去 Eremora（eremora.com）核对这个玩家是否存在：

    ✓ 真实玩家：莉奥诺拉     ← 通过，并自动把游戏昵称填进「昵称」
    ✗ 没找到这个 UID        ← 查不到，检查有没有打错

  只有校验通过的 UID 才能上传到榜单；查不到的 UID 会被直接拒绝。
  同一个 UID 6 小时内只查一次，不会反复打扰服务器。

【留言板】
------------------------------------------------------------
  榜单下面还有一个留言板，任何人都能留言：

  · 最新在前，公开可见，发布后无法删除
  · 昵称可选（留空显示「匿名守密人」）；也可以填 UID，会自动校验并
    取昵称，留言下方会标出你的 UID
  · 同一台电脑 20 秒内只能发一条，防误触
  · 内容最多 300 字
