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