Commit a51bad4801dccebc2e841a1a6d511f8c18b91f11
1 parent
ccc32c7c
docs(wechat_pad_login): Hermes 平板登录修复 skill(first-responder 诊断+no-rebuild修复+升级判据)
已装到设备 ~/.hermes/skills/wechat-pad-login-repair/。Hermes 能做诊断(logs/dumpsys)+ no-rebuild 修复(reboot+install-existing/导航到 LoginPasswordUI)+ Case B(需重编译/逆向) 收集证据升级给人/Claude。Pixel Termux 有 d8/apksigner 但当前模块源码在 Mac,~/WeChatHook 是旧 stub,故 Hermes 不做重编译。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Showing
1 changed file
with
54 additions
and
0 deletions
wechat_pad_login/HERMES_REPAIR_SKILL.md
0 → 100644
| 1 | +--- | ||
| 2 | +name: wechat-pad-login-repair | ||
| 3 | +description: 微信「平板和手机同时登录」按钮不出现/平板登录失败时的诊断与修复。触发词:平板登录、以平板登录、平板登录不了、看不到平板登录按钮、副设备登录。 | ||
| 4 | +version: 1.0 | ||
| 5 | +category: troubleshooting | ||
| 6 | +--- | ||
| 7 | + | ||
| 8 | +# 微信平板登录 修复 first-responder | ||
| 9 | + | ||
| 10 | +微信「以平板登录」靠 LSPosed 模块 `wechathook` 把这台 Pixel 伪装成三星平板(SM-X700) + 强制显示「平板和手机同时登录」按钮。坏了的时候按下面**先诊断再动手**。 | ||
| 11 | + | ||
| 12 | +## 背景(根因,别搞错方向) | ||
| 13 | +- 平板登录被拒 = **Pixel 机型不在微信平板白名单**(`bk.B/Q` 设备型号校验 + 服务端副设备机型校验),**跟账号「体验资格」无关**(实测同一账号伪装机型后能登)。 | ||
| 14 | +- 靠 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**。 | ||
| 15 | +- 「平板和手机同时登录」按钮**只在 `LoginPasswordUI`**(已保存账号、头像+密码框那页)出现。 | ||
| 16 | + | ||
| 17 | +## Step 1 — 诊断(全 root,只读,先跑) | ||
| 18 | +```bash | ||
| 19 | +# a) 微信在不在登录页?想要 LoginPasswordUI | ||
| 20 | +su -c 'dumpsys activity activities | grep -iE "topResumedActivity"' | ||
| 21 | +# b) 模块注入了吗 + 伪装生效吗 + 按钮 hook 触发了吗 | ||
| 22 | +L=$(su -c 'ls -t /data/adb/lspd/log/modules_*.log | head -1') | ||
| 23 | +su -c "grep -a WeChatHook $L | grep -aE 'Injected into WeChat|hookDeviceSpoof:|N VISIBLE|N is null' | tail -8" | ||
| 24 | +# c) 当前进程内微信认为自己是什么机型(应为 SM-X700) | ||
| 25 | +su -c "grep -a 'Build.MODEL now' $L | tail -1" | ||
| 26 | +``` | ||
| 27 | +判读: | ||
| 28 | +- `Injected into WeChat` 没有 → 模块没注入(跳 Fix-1)。 | ||
| 29 | +- `hookDeviceSpoof: → Samsung SM-X700` 没有 → 伪装没生效(多半模块没注入,Fix-1)。 | ||
| 30 | +- 在 `LoginPasswordUI` 但**没有** `N VISIBLE`(哪怕有 `Hooked LoginPasswordUI.onCreate`)→ 按钮 hook 没触发(Fix-3 / 升级)。 | ||
| 31 | +- 有 `N VISIBLE + m4 attached` → 按钮已强制显示,按钮应该在屏幕最下方;没看到就是没在 LoginPasswordUI 页(Fix-2)。 | ||
| 32 | + | ||
| 33 | +## Step 2 — 修复(能自己做的) | ||
| 34 | +**Fix-1 模块没注入**(反复装 App/模块或重启后常见): | ||
| 35 | +```bash | ||
| 36 | +su -c 'svc power reboot' # 重启设备 | ||
| 37 | +# 起来后: | ||
| 38 | +su -c 'pm install-existing com.tencent.mm' # 非破坏性重注册,不清数据不掉登录 | ||
| 39 | +``` | ||
| 40 | +**Fix-2 不在登录页**:微信要停在「已保存账号、输密码」那页(LoginPasswordUI)。退出登录 / 「切换账号·登录其他账号」进去;到了页面按钮就会被 hook 强制显示。用 `am start` 或让用户手动到该页。 | ||
| 41 | + | ||
| 42 | +**Fix-3 在 LoginPasswordUI 但 `N VISIBLE` 不出现**:这是**代码级问题**(多半是 hook 注册在了 base CL 而登录 UI 在 Tinker CL,或微信更新后 `N`/`bk`/`LoginPasswordUI` 混淆名变了)。**别硬试,走升级**。 | ||
| 43 | + | ||
| 44 | +## Step 3 — 升级(Case B,Hermes 修不了的) | ||
| 45 | +以下要**改 wechathook 源码 + 重编译模块 + 逆向新混淆名**,Pixel 上没有当前源码(`~/WeChatHook/` 是旧 stub)、也不该盲改。发生时**收集证据交给人/Claude 会话**: | ||
| 46 | +- 微信版本:`su -c 'dumpsys package com.tencent.mm | grep versionName'` | ||
| 47 | +- 上面 Step-1 的日志输出(`N is null` / 有注册无触发 / 无注入 等) | ||
| 48 | +- 现象截图(在哪个登录页、有没有按钮) | ||
| 49 | +修复配方(4 hook + Tinker CL 坑 + 字段名 N/bk/m4 + DEX 分布)在 Mac 仓库 `wechat_pad_login/LESSONS.md` 和 memory `wechat-pad-login-device-spoof.md`。 | ||
| 50 | + | ||
| 51 | +## 不要做 | ||
| 52 | +- 不要以为是「账号体验资格」问题去折腾账号——是机型白名单。 | ||
| 53 | +- 不要在 `~/WeChatHook/`(旧 stub) 上乱 build 覆盖线上模块——当前模块从 Mac 源码编出,盲 build 会退化。 | ||
| 54 | +- Fix-1 重启前确认没有正在进行的重要登录/同步。 |