凌晨三点,我让 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.db、contact.db、session.db 全齐。
解密 + 接入 Claude Code
后面就顺了:
cd ~/Tools/wechat-decrypt python3 decrypt_db.py 19 个 db 全部 HMAC OK,1 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 工具查库返回。不用再复制粘贴了。
总结与避坑清单
~/Applications/ 再签 | ||
最关键的一条:不要关 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 实测通过。
夜雨聆风