乐于分享
好东西不私藏

凌晨三点,我让 AI 直接读我的微信

凌晨三点,我让 AI 直接读我的微信

凌晨三点,我让 AI 直接读我的微信

起因

客户在微信发来一堆图文需求,复制粘贴喂给 AI 要命。于是开始折腾:能不能让 AI 直接读我 Mac 微信的聊天记录

踩了几个小时的坑,记下来给同路人少走弯路。环境:macOS 26.2 Tahoe + Apple Silicon + 微信 4.1.8关键信息——这是 2026 年 4 月的最新组合,社区工具大多没跟上


为什么 iPhone 备份路线不香

常见教程让你:iPhone 连 Mac 备份 → WechatExporter 读备份 → 导出 HTML。

问题: - iPhone 存储几十 GB,每次备份都占等量 Mac 硬盘 - 是一次快照,新消息要重新备份 - 只能看,不能让 AI 实时查询

想要的是 AI 直接在 Claude Code 里问「帮我看和 XX 客户最近聊了啥」,一键查库。


思路:直接解密 Mac 本地数据库

微信 4.x 在 Mac 的数据库用 SQLCipher 4 加密,存放位置:

~/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/<wxid>/db_storage/ 

每个 db 有独立 salt 和 enc_key。只要能从运行中的微信进程内存里抠出 key,就能离线解密。

GitHub 上的开源项目思路大同小异: - 用 lldb 或 Mach VM API 附加到微信进程 - 扫内存找 SQLCipher 的 codec_ctx 结构体 或 PRAGMA key 字符串字面量 - 提取 32 字节 enc_key + 16 字节 salt

听起来简单,但每一步都是坑。


坑 1:chatlog 被下架

第一个搜到的项目 sjzar/chatlog,星数最多、文档最全、还有 MCP Server,简直完美。

打开仓库,只剩一个 README.md

项目移除通知 我收到了来自微信官方的函件,明确项目的核心功能存在合规风险。 为了彻底规避法律问题,决定移除本项目的全部代码与提交历史记录。 —— Sarv,2025-10-20

晴天霹雳。继续找替代。


坑 2:Thearas 的工具在 4.1.8 失效

Thearas/wechat-db-decrypt-macos 明确只在 4.1.2.241 上测过。我这是 4.1.8.28,内存布局已经变了。

跑了一遍 find_key_memscan.py

[*] Found 16 databases, 16 unique salts [+] Attached to WeChat (PID: 8576) [*] Scanning 691 memory regions (2285 MB)   [100.0%] 0/16 keys found, 76 hex patterns, 2285/2285 MB  Results: 0/16 keys found 

扫到 76 个疑似 key 的 hex 模式,但没一个能匹配。微信动了 codec_ctx 的布局或密钥派生方式。


坑 3:macOS Tahoe 的 com.apple.provenance

所有工具的 README 都让你 csrutil disable 关 SIP。我不想进恢复模式。

按 cocohahaha 的方案走——重签名微信去掉 Hardened Runtime

sudo codesign --force --deep --sign - /Applications/WeChat.app 

报错:

/Applications/WeChat.app: internal error in Code Signing subsystem (1) 

换成单独签主二进制:

Operation not permitted 

查了一下,macOS 26 Tahoe 给 /Applications 下所有可执行文件加了 com.apple.provenance 扩展属性,由 SIP 保护,sudo 都删不掉。这是 Apple 对 Launch Constraints 系统的加固。


解法:拷贝出去再签

既然 /Applications/WeChat.app 被 SIP 锁着,那我把它拷到 ~/Applications/ 呢?provenance 的 SIP 保护只挂在 /Applications 这个位置上,移到用户目录就不再受限:

# 1. 完全退出微信 pkill -9 -f "/Applications/WeChat.app"  # 2. ditto 出去(保留权限与符号链接) rm -rf ~/Applications/WeChat.app ditto /Applications/WeChat.app ~/Applications/WeChat.app  # 3. 对副本重签名 codesign --remove-signature ~/Applications/WeChat.app/Contents/MacOS/WeChat codesign --force --sign - ~/Applications/WeChat.app/Contents/MacOS/WeChat  # 4. 验证:应该看到 flags=0x2(adhoc) codesign -dv ~/Applications/WeChat.app/Contents/MacOS/WeChat 

成功!flags=0x2(adhoc),Hardened Runtime 被剥掉了。微信的用户数据在 ~/Library/Containers/com.tencent.xinWeChat 是共享的,直接 open ~/Applications/WeChat.app 打开副本登录,账号状态无缝保留。


换扫描器:ylytdeng 的字面量匹配

Thearas 的 codec_ctx 定位失效了。换 ylytdeng/wechat-decrypt 试——它用的是另一种策略

WCDB 在进程内存中缓存派生后的 raw key,格式为 x'<64hex_enc_key><32hex_salt>'(这是 SQLCipher 的 PRAGMA key 原始字符串)。扫描这个字面量再 HMAC 校验 page 1。

这种做法对版本更新更稳健——只要 WeChat 还用 SQLCipher,PRAGMA key 就会以标准格式出现在内存。

编译 + 跑:

cc -O2 -o find_all_keys_macos find_all_keys_macos.c -framework Foundation sudo ./find_all_keys_macos <WeChat_PID> 

结果:

Scan complete: 1097MB scanned, 478 regions, 24 unique keys 

24 个 key 找到了!


坑 4:TCC 挡 sudo 访问 Containers

scanner 在 stdout 打印了 24 个 (unknown) <key> <salt>,但 all_keys.json 是空的:

Matched 0/24 keys to known DBs Saved to all_keys.json 

为啥?scanner 要读 ~/Library/Containers/com.tencent.xinWeChat/... 里的 .db 文件头对比 salt。但 macOS 的 TCC 保护 ~/Library/Containers,sudo 权限不够——需要「完全磁盘访问」授权。

不想折腾 FDA,自己写一行 Python 匹配:以当前用户身份读自己的 db 文件头(不用 sudo),对着 24 个 key 的 salt 找:

import os, json  salt_to_key = {}  # 从 scanner 输出解析的 24 个 key:salt 对  BASE = os.path.expanduser("~/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files") db_dir = os.path.join(BASE, ACTIVE_WXID, "db_storage")  matched = {} for root, _, files in os.walk(db_dir):     for f in files:         if not f.endswith(".db"): continue         path = os.path.join(root, f)         with open(path, "rb") as fp:             salt_hex = fp.read(16).hex()         if salt_hex in salt_to_key:             rel = os.path.relpath(path, db_dir)             matched[rel] = {"enc_key": salt_to_key[salt_hex], "salt": salt_hex}  json.dump(matched, open("all_keys.json", "w"), indent=2) print(f"Matched {len(matched)} DBs") 

Matched 19 DBs / 24 keys。多出来的 5 个 key 是内存里残留的(其他 wxid 或临时 db),19 个能对上活跃账号。核心的 message_0.dbcontact.dbsession.db 全齐。


解密 + 接入 Claude Code

后面就顺了:

cd ~/Tools/wechat-decrypt python3 decrypt_db.py 

19 个 db 全部 HMAC OK1 GB 解密数据

解密: message/message_0.db (348.4MB) ...   HMAC OK, 89187 pages 解密: message/biz_message_0.db (325.6MB) ...   HMAC OK, 83350 pages 解密: message/message_fts.db (102.5MB) ...   HMAC OK, 26245 pages ... 结果: 19 成功, 0 失败, 共 19 个 

注册 MCP Server:

claude mcp add -s user wechat \   ~/Tools/wechat-decrypt-macos/.venv/bin/python \   ~/Tools/wechat-decrypt/mcp_server.py 

重启 Claude Code,对话里直接问:

帮我看和 XX 客户最近聊了什么

搜索微信里提到"尾款"的消息

把 ABC 群今天的消息总结一下

AI 自动调 MCP 工具查库返回。不用再复制粘贴了


总结与避坑清单

表现
解法
macOS Tahoe provenance
codesign 报 Operation not permitted
拷 app 到 ~/Applications/ 再签
Thearas 工具失效
0/16 keys found
换 ylytdeng(字面量扫描)
TCC 挡 sudo
scanner 找不到 db
自己读 db header 匹配 salt
扫描器找错 wxid
找不到数据库
按 mtime 选活跃 wxid

最关键的一条:不要关 SIP。拷到 ~/Applications/ 再签是 Tahoe 上最干净的做法。


风险提示

  • 本文方法仅用于备份和分析自己的聊天记录
  • 修改微信签名有被腾讯检测的理论风险(实测日常使用未触发)
  • 相关工具 nalzok/wechat-decipher-macos 在 2026-01 收到了 Tencent DMCA 下架通知;sjzar/chatlog 主动下架。社区工具随时可能消失,收藏一份本地备份
  • 微信自动升级会覆盖签名,要重做一次 ditto + codesign

工具清单

  • ylytdeng/wechat-decrypt — 核心解密工具,推荐
  • Thearas/wechat-db-decrypt-macos — 备选,4.1.2 及更早版本更稳
  • cocohahaha/wechat-decrypt-macos — MCP-first 设计
  • BlueMatthew/WechatExporter — iPhone 备份路线的 GUI 工具

写于凌晨三点,Apple Silicon M 系列 + macOS 26.2 Tahoe + WeChat 4.1.8.28 实测通过。