Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

微信聊天记录解密 · 导出 · 深度分析流水线

面向个人本机数据的微信 4.x(Weixin.exe)聊天记录解密、全量导出与多维/深度分析工具集。 全程本地处理,不上传任何数据;仅限备份/分析你自己登录账号的聊天记录。

Platform WeChat Python License

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。

能力矩阵

基础统计(analyze.py

维度 输出
会话排行 Top 60:消息数 / 我方占比 / 活跃区间(最早~最近)
群成员 全群文本发言 Top 80
时间 年度 / 月度 / 24 小时 / 时段 / 星期分布
内容 消息类型分布(文本/图片/语音/视频/链接…)
可信度 各维度 Counter 合计 == 总消息数,自动校验

单群深挖(analyze.py --group "群名"

成员排行(含首次/最近发言)、月度/年度/小时/星期曲线、最活跃日 Top 30、最长沉默期检测(识别群的休眠-复活节奏)。

深度挖掘(deep_analyze.py,jieba 分词)

模块 回答的问题
关系演化矩阵 每段关系活跃了几年?是终身连续还是阶段性的?(Top N 单聊 × 年度交叉表)
星期×小时热力图 一周里什么时候消息最密集?(OCR 友好的文本热力图)
关键词指纹 对方发的文本高频词——每段关系的"话题签名"
链接域名 Top 分发什么内容?(网盘/电商/文档协作一目了然)
@图谱 群里谁在 @ 谁?社交枢纽是谁?
回复时延 双方中位回复速度——关系亲疏的量化信号
夜猫子检测 凌晨消息集中在哪些会话?
单日爆发 日均 N 倍的爆发日(项目节点/大促)

Excel 报告(build_report.py

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]
Loading

目录结构

├── 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 History

如果这个项目对你有帮助,欢迎 Star / Fork / Issue。

Star History Chart

About

Decrypt, export & deep-analyze your own WeChat 4.x chat history - local-only pipeline with relationship evolution, keyword fingerprint & heatmap analytics

Topics

Resources

Stars

12 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages