面向个人本机数据的微信 4.x(Weixin.exe)聊天记录解密、全量导出与多维/深度分析工具集。 全程本地处理,不上传任何数据;仅限备份/分析你自己登录账号的聊天记录。
2026-09 更新:已在微信最新版 4.1.13.12 上完成全链路验证。密钥提取首选只读内存扫描(无注入、无调试器、不封号),主账号实测 9.4 秒命中;调试器方案降级为备选。
微信 PC 4.x 将本地聊天库全面升级为 SQLCipher 4(AES-256-CBC + HMAC-SHA512,PBKDF2 256000 轮)加密,主流导出工具(PyWxDump 3.x / chatlog / wechat-dump-rs)相继失效或被 DMCA 下架。本项目提供一条 2026 年可复现的完整流水线:
解密密钥提取 ──► 全量导出(JSON/HTML) ──► 多维统计 ──► 深度挖掘 ──► Excel 报告
▲ ▲
断点捕获+HMAC校验 9个分析脚本维度
在真实环境验证:微信最新版 4.1.13.12(2026-09-02 全链路实测)、自定义安装路径(D 盘)、双账号(每账号独立密钥),单账号 757,728 条消息(2015→2026 近 11 年)、3,339 个会话全量导出,全部统计通过一致性校验。
| 路径 | 方式 | 风险 | 适用 |
|---|---|---|---|
| A. 只读内存扫描(首选) | 静态提取 XOR key → YARA 只读扫描登录态内存 → PBKDF2/HMAC 校验 | 无注入、无调试器、不封号 | 微信 4.1.x,主账号(聊天库较大)实测 9.4 秒命中 |
| B. 调试器捕获(备选) | 以调试器启动微信,登录瞬间 INT3 断点捕获 key-set 参数 | 一次性本地调试,需手机确认登录 | 扫描 0 命中时(小号/空账号) |
实测发现:只读扫描能否命中与账号数据量相关——主账号(contact.db 26MB,数据库频繁打开)密钥常驻内存,扫描必中;小号(message_0.db 不足 200KB)可能因密钥未驻留而 0 命中,此时换主账号先跑通流程,或走路径 B。
| 维度 | 输出 |
|---|---|
| 会话排行 | Top 60:消息数 / 我方占比 / 活跃区间(最早~最近) |
| 群成员 | 全群文本发言 Top 80 |
| 时间 | 年度 / 月度 / 24 小时 / 时段 / 星期分布 |
| 内容 | 消息类型分布(文本/图片/语音/视频/链接…) |
| 可信度 | 各维度 Counter 合计 == 总消息数,自动校验 |
成员排行(含首次/最近发言)、月度/年度/小时/星期曲线、最活跃日 Top 30、最长沉默期检测(识别群的休眠-复活节奏)。
| 模块 | 回答的问题 |
|---|---|
| 关系演化矩阵 | 每段关系活跃了几年?是终身连续还是阶段性的?(Top N 单聊 × 年度交叉表) |
| 星期×小时热力图 | 一周里什么时候消息最密集?(OCR 友好的文本热力图) |
| 关键词指纹 | 对方发的文本高频词——每段关系的"话题签名" |
| 链接域名 Top | 分发什么内容?(网盘/电商/文档协作一目了然) |
| @图谱 | 群里谁在 @ 谁?社交枢纽是谁? |
| 回复时延 | 双方中位回复速度——关系亲疏的量化信号 |
| 夜猫子检测 | 凌晨消息集中在哪些会话? |
| 单日爆发 | 日均 N 倍的爆发日(项目节点/大促) |
openpyxl 原生多表 + 柱状/折线/饼图,明细表带冻结窗格与筛选器;支持全账号与单群两种报告。
前提:Windows 10/11、Python 3.10+、已在本机登录你自己的微信。
pip install -r requirements.txt
pip install pycryptodome pymem yara-python pefile # 路径A 密钥扫描依赖
# 1) 下载并校验 chatlog-keeper(解密导出的核心工具)
powershell -ExecutionPolicy Bypass -File scripts/download_tool.ps1
# ===== 密钥提取(二选一,优先路径 A)=====
# 路径 A|只读内存扫描(首选,无需退出微信,不封号)
# 微信保持登录运行,取主进程 PID(任务管理器中内存最大的 Weixin.exe):
python tools/run_recovery_generic.py <PID> "<微信安装目录>/<版本号>/Weixin.dll" "<数据目录>/xwechat_files/<账号目录>/db_storage"
# 成功后生成 recovered_key.txt,final 行即密钥;再注入:
printf '%s' '<final密钥>' | chatlog-keeper.exe set-key --source wechat --key-stdin
# (run_recovery_generic.py / scan.py / key_v4.py 来自 WeChatDataAnalysis,
# GitHub 搜 LifeArchiveProject/WeChatDataAnalysis)
# 路径 B|调试器捕获(路径 A 报 0 命中时使用,需完全退出微信,手机确认登录)
powershell -ExecutionPolicy Bypass -File scripts/get_key.ps1 -DataRoot "D:\xwechat_files" -AccountDir "wxid_xxxxxx"
# ===== 导出与分析 =====
# 2) 导出全部聊天记录(--days 拉满 = 全量;默认只导最近 7 天)
chatlog-keeper.exe wechat --days 36500 --out .\export --data-root "<xwechat_files目录>" --account "<账号目录全名>"
# 3) 基础统计(7 维 + 一致性校验)
python scripts/analyze.py --json .\export\wechat_messages.json --outdir .\analysis
# 4) 深度挖掘(关系演化/热力图/关键词/链接/@图谱/回复时延…)
python scripts/deep_analyze.py --json .\export\wechat_messages.json --outdir .\deep --self-name "我的昵称"
# 5) Excel 报告
python scripts/build_report.py --analysis .\analysis --out 报告.xlsx
python scripts/build_report.py --group-analysis .\analysis\group_xxx --out 群报告.xlsx- 微信 4.x 用 WCDB(SQLCipher 4 定制)加密每个 SQLite 库;每个账号一个主密钥(passphrase),每个库独立 salt——passphrase 需对各库 salt 做 PBKDF2-HMAC-SHA512(256000 轮)派生库密钥。
- 路径 A(只读扫描,首选):从
Weixin.dll的 .text 段静态特征提取 XOR key(mov rdx,imm64×4 +test rax,rax签名)→ 用 YARA 规则只读扫描登录态进程内存(ReadProcessMemory,不写不注入不 attach)→ 候选 32 字节经 XOR 还原为 passphrase → 立即用目标库第一页做 HMAC 校验。4.1.13.12 主账号实测 9.4 秒命中。 - 路径 B(调试器捕获,备选):以调试器启动微信子进程,在 WCDB cipher-config 函数(版本稳定特征定位 RVA)下 INT3 断点,登录瞬间捕获 key-set 调用参数(32 字节主密钥)并 HMAC 校验。适用于路径 A 0 命中(小号/空账号,密钥未驻留内存)的情况。
- 密钥是账号级的:A 的密钥解不开 B 的库(实测)。密钥可长期缓存复用,跨小版本升级(4.1.12→4.1.13.12)实测指纹不变。
flowchart LR
A[微信登录运行] --> B{密钥路径}
B -->|路径A 首选| C[静态提取XOR key + 只读内存扫描]
B -->|路径A 0命中| D[调试器启动 + 手机确认登录 + 断点捕获]
C --> E[HMAC校验 passphrase]
D --> E
E --> F[密钥本地缓存]
F --> G[chatlog-keeper 解密导出]
G --> H[JSON / HTML]
H --> I[基础统计 + 深度挖掘]
I --> J[Excel 报告 + CSV]
├── tools/ # 密钥恢复脚本(路径 A,来自 WeChatDataAnalysis)
│ ├── scan.py # 静态提取 XOR key(扫描 Weixin.dll .text 段)
│ ├── key_v4.py # YARA 只读内存扫描 + PBKDF2/HMAC 校验
│ └── run_recovery_generic.py # 一键驱动:静态提取→内存扫描→校验→写密钥
├── scripts/
│ ├── download_tool.ps1 # 下载 chatlog-keeper 并校验 SHA256
│ ├── get_key.ps1 # 路径 B:调试器密钥提取编排(D盘安装/多账号 oracle 定位)
│ ├── export.ps1 # 全量/按账号导出
│ ├── analyze.py # 基础统计(全账号 & 单群两种模式)
│ ├── deep_analyze.py # 深度挖掘(9 模块,jieba 分词)
│ └── build_report.py # openpyxl 多表 Excel 报告(含图表)
├── docs/
│ ├── pitfalls.md # 踩坑全记录(核心价值之一)
│ └── design.md # 架构与安全设计
└── requirements.txt
在 75.7 万条真实数据上,深度挖掘能回答的问题:
- 关系演化:11 年里只有 1 段关系(家人)全程连续,其余每 2-3 年随职业阶段整体换血
- 时间生物钟:工作日上午 10 点是隐藏最强节拍(超过午休与晚间)
- 语言指纹:同一账号可清晰分辨"妈妈/管理者/运营中枢"三重身份,几乎不串词
- 社交枢纽:@ 图谱暴露客服体系是最大信息分流节点
- 仅用于备份/分析你自己的账号数据,全程本地,无网络上传、无对腾讯服务器的异常交互。
- 路径 A(只读扫描):仅
ReadProcessMemory只读读取登录态内存,不写内存、不注入 DLL、不 attach 调试器,风险极低。 - 路径 B(调试器):一次性本地调试行为,需手机确认登录;主流工具长期实践未见账号处罚报告,但请自行评估。
- 导出数据包含个人隐私,请妥善保管;勿将密钥、导出数据提交到任何仓库或网盘(
tools/仅含通用脚本,不含任何真实密钥;发布前请跑正则扫描,见 docs/design.md)。 - 请遵守当地法律法规与微信用户协议;本项目仅供学习研究。
- WeChatDataAnalysis —— 路径 A 的静态 XOR key 提取(scan.py)与只读内存扫描校验(key_v4.py),4.1.13.12 实测可用
- chatlog-keeper —— 当前对微信 4.1.10.31+ 兼容最好的开源解密导出工具(路径 B 调试脚本与导出能力来自该项目)
- 0xlane/wechat-dump-rs(已归档)、sjzar/chatlog(已归档)—— 前辈项目的公开分析奠定方向
- jieba —— 中文分词
- 看雪论坛对 WCDB cipher-config 函数定位的公开分析
如果这个项目对你有帮助,欢迎 Star / Fork / Issue。