do_not_break.md 3.02 KB

WeChatHook — DO NOT BREAK 清单

当前状态(2026-07-04 已验证)

已安装 APK: com.example.wechathook (versionCode=1) 签名: ~/.android/debug.keystore (CN=Android Debug,O=Android,C=US) APK 路径: /data/app/~~UUcd24uZ9ch3W7ZmJpIxlQ==/com.example.wechathook-Jns-UMdjPSZgIGeeIqFAwQ==/base.apk LSPosed DB: mid=42, scope=(42, com.tencent.mm, 0), enabled=1 功能: 微信平板登录 + WCDB hook + gm0.j1.g hook + w11.r0 hook

绝对禁止事项

1. 不要用 XposedBridgeApi.jar 重新编译

LSPosed Vector 运行时用的是自己混淆的 XposedHelpers,标准 XposedBridgeApi.jar 编译出来的 APK 所有 findAndHookMethod 调用全部 NoSuchMethodError。

必须用的 JAR: /tmp/LSPosed/legacy/build/intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar (在 Mac 上,Pixel 上没有这个 JAR)

如果 Mac 上没有这个 JAR,不要重新编译。只改 Java 源码而不重编是可以的(改 /sdcard/wechathook/WeChatHook.java),但必须用正确 JAR 编译才能安装新版本。

2. APK 必须包含 assets/xposed_init

打包时必须: zip APK.apk assets/xposed_init ...(注意 assets/ 子目录层级) 文件内容: com.example.wechathook.WeChatHook

LSPosed daemon 每次启动都验证这个文件。缺失 → 自动从 DB 删除模块 → 平板登录消失。

根目录的 xposed_init(不在 assets/ 下)不够,daemon 不认。

3. 不要换 keystore 签名

当前已安装版本用 ~/.android/debug.keystore。 如果用不同 keystore 重签 → INSTALL_FAILED_UPDATE_INCOMPATIBLE → 必须先 uninstall(会丢失 LSPosed DB 注册)。

4. 不要直接改 LSPosed DB 而不做 WAL checkpoint

改完必须: PRAGMA wal_checkpoint(TRUNCATE) + 把主 DB 拷覆盖 .bak .bak2 .bak3 .bak4 四个文件。

安全测试约束(严禁违反)

只用 filehelper(文件传输助手)测试发消息,绝对不能发给真实联系人。 微信对异常行为会封号,一旦封号无法找回。

如果你需要重新安装 APK

# 1. 备份 DB(万一要恢复)
adb shell su -c 'cp /data/adb/lspd/config/modules_config.db /data/local/tmp/modules_backup.db'

# 2. 卸载旧版本
adb shell pm uninstall com.example.wechathook

# 3. 安装新版本(必须已按上面规则编译 + 打包 + 签名)
adb install --no-incremental /path/to/new.apk

# 4. 修复 DB(参考 /sdcard/wechathook/fix_lspd_final.py)
adb shell su -c '/path/to/python3 /sdcard/wechathook/fix_lspd_final.py'

# 5. 重启
adb shell su -c reboot

# 6. 验证
adb shell su -c 'grep -i "WeChatHook\|hookInTablet\|NoSuchMethod" /data/adb/lspd/log/modules_*.log'

验证钩子是否正常的命令

adb shell su -c 'grep "\[WeChatHook\]" /data/adb/lspd/log/modules_*.log | head -30'

正常输出应包含(无 NoSuchMethodError):

  • Hooked bk.B(x0) + bk.A()
  • Hooked Activity.onResume for tablet button
  • Hooked LoginPasswordUI.onCreate()
  • Hooked MobileInputUI.initView() / LoginUI.initView()
  • WCDB hook OK
  • gm0.j1.g hook OK