From a51bad4801dccebc2e841a1a6d511f8c18b91f11 Mon Sep 17 00:00:00 2001 From: yibo Date: Wed, 8 Jul 2026 00:35:03 +0800 Subject: [PATCH] docs(wechat_pad_login): Hermes 平板登录修复 skill(first-responder 诊断+no-rebuild修复+升级判据) --- wechat_pad_login/HERMES_REPAIR_SKILL.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+), 0 deletions(-) create mode 100644 wechat_pad_login/HERMES_REPAIR_SKILL.md diff --git a/wechat_pad_login/HERMES_REPAIR_SKILL.md b/wechat_pad_login/HERMES_REPAIR_SKILL.md new file mode 100644 index 0000000..e8461df --- /dev/null +++ b/wechat_pad_login/HERMES_REPAIR_SKILL.md @@ -0,0 +1,54 @@ +--- +name: wechat-pad-login-repair +description: 微信「平板和手机同时登录」按钮不出现/平板登录失败时的诊断与修复。触发词:平板登录、以平板登录、平板登录不了、看不到平板登录按钮、副设备登录。 +version: 1.0 +category: troubleshooting +--- + +# 微信平板登录 修复 first-responder + +微信「以平板登录」靠 LSPosed 模块 `wechathook` 把这台 Pixel 伪装成三星平板(SM-X700) + 强制显示「平板和手机同时登录」按钮。坏了的时候按下面**先诊断再动手**。 + +## 背景(根因,别搞错方向) +- 平板登录被拒 = **Pixel 机型不在微信平板白名单**(`bk.B/Q` 设备型号校验 + 服务端副设备机型校验),**跟账号「体验资格」无关**(实测同一账号伪装机型后能登)。 +- 靠 4 个 hook:`hookDeviceSpoof`(伪装 Build/ro.product=SM-X700 + ro.build.characteristics=tablet)、`hookInTabletEnv`(bk.A/B→true)、`hookLoginHistoryUIInitView`/`hookLoginUIInitView`(强制按钮字段 N 可见)。**登录 UI 跑在 Tinker CL,hook 必须注册到 sTinkerCL**。 +- 「平板和手机同时登录」按钮**只在 `LoginPasswordUI`**(已保存账号、头像+密码框那页)出现。 + +## Step 1 — 诊断(全 root,只读,先跑) +```bash +# a) 微信在不在登录页?想要 LoginPasswordUI +su -c 'dumpsys activity activities | grep -iE "topResumedActivity"' +# b) 模块注入了吗 + 伪装生效吗 + 按钮 hook 触发了吗 +L=$(su -c 'ls -t /data/adb/lspd/log/modules_*.log | head -1') +su -c "grep -a WeChatHook $L | grep -aE 'Injected into WeChat|hookDeviceSpoof:|N VISIBLE|N is null' | tail -8" +# c) 当前进程内微信认为自己是什么机型(应为 SM-X700) +su -c "grep -a 'Build.MODEL now' $L | tail -1" +``` +判读: +- `Injected into WeChat` 没有 → 模块没注入(跳 Fix-1)。 +- `hookDeviceSpoof: → Samsung SM-X700` 没有 → 伪装没生效(多半模块没注入,Fix-1)。 +- 在 `LoginPasswordUI` 但**没有** `N VISIBLE`(哪怕有 `Hooked LoginPasswordUI.onCreate`)→ 按钮 hook 没触发(Fix-3 / 升级)。 +- 有 `N VISIBLE + m4 attached` → 按钮已强制显示,按钮应该在屏幕最下方;没看到就是没在 LoginPasswordUI 页(Fix-2)。 + +## Step 2 — 修复(能自己做的) +**Fix-1 模块没注入**(反复装 App/模块或重启后常见): +```bash +su -c 'svc power reboot' # 重启设备 +# 起来后: +su -c 'pm install-existing com.tencent.mm' # 非破坏性重注册,不清数据不掉登录 +``` +**Fix-2 不在登录页**:微信要停在「已保存账号、输密码」那页(LoginPasswordUI)。退出登录 / 「切换账号·登录其他账号」进去;到了页面按钮就会被 hook 强制显示。用 `am start` 或让用户手动到该页。 + +**Fix-3 在 LoginPasswordUI 但 `N VISIBLE` 不出现**:这是**代码级问题**(多半是 hook 注册在了 base CL 而登录 UI 在 Tinker CL,或微信更新后 `N`/`bk`/`LoginPasswordUI` 混淆名变了)。**别硬试,走升级**。 + +## Step 3 — 升级(Case B,Hermes 修不了的) +以下要**改 wechathook 源码 + 重编译模块 + 逆向新混淆名**,Pixel 上没有当前源码(`~/WeChatHook/` 是旧 stub)、也不该盲改。发生时**收集证据交给人/Claude 会话**: +- 微信版本:`su -c 'dumpsys package com.tencent.mm | grep versionName'` +- 上面 Step-1 的日志输出(`N is null` / 有注册无触发 / 无注入 等) +- 现象截图(在哪个登录页、有没有按钮) +修复配方(4 hook + Tinker CL 坑 + 字段名 N/bk/m4 + DEX 分布)在 Mac 仓库 `wechat_pad_login/LESSONS.md` 和 memory `wechat-pad-login-device-spoof.md`。 + +## 不要做 +- 不要以为是「账号体验资格」问题去折腾账号——是机型白名单。 +- 不要在 `~/WeChatHook/`(旧 stub) 上乱 build 覆盖线上模块——当前模块从 Mac 源码编出,盲 build 会退化。 +- Fix-1 重启前确认没有正在进行的重要登录/同步。 -- libgit2 0.21.4