← 返回列表

MacOS 微信 4.x 聊天记录导出指南

2026-07-06

概述与背景

在 macOS(尤其是 Apple Silicon M 系列芯片)上,微信 4.x 架构采用了全新的 SQLCipher 4 加密算法,并且对本地数据库进行了按时间分包(Sharding)处理。由于官方未提供开放接口,传统的 OCR 识别方案存在效率极低、格式易错位等问题。

本指南提供了一种基于开源工具 ylytdeng/wechat-decrypt 的硬核解决方案。该方案通过动态内存扫描提取密钥,可 100% 准确地将本地密文数据库(SQLite)转化为结构化的 JSON 格式,并支持多库自动合并以实现全量历史数据(如 2021-2026)的导出与可视化。


环境准备与依赖安装

在执行任何操作前,请确保 Mac 已安装 Xcode 命令行工具。

  1. 安装编译工具(若未安装):
xcode-select --install
  1. 克隆项目并配置 Python 虚拟环境:
git clone https://github.com/ylytdeng/wechat-decrypt.git
cd wechat-decrypt
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  1. 核心步骤:攻克 macOS 安全防御机制

由于 macOS 的系统安全保护(SIP/TCC),直接读取微信进程内存会引发 task_for_pid failed: 5 或 Operation not permitted 错误。必须严格执行以下三步放行权限:

  • 授予终端“完全磁盘访问权限”

      - 打开 Mac 的 系统设置 -> 隐私与安全性 -> 完全磁盘访问权限。
      - 找到 终端 (Terminal)(或对应的 IDE 如 Cursor/iTerm2),将右侧开关打开。
      - 彻底重启终端。
  • 剥离官方签名并进行 Ad-hoc 本地重签名

微信的某些组件(如 WeChatAppEx.app)会被系统锁死。最稳妥的重签名流水线如下:

1. 彻底关闭微信
killall WeChat
2. 清理并强制盲签(如提示 replacing existing signature 即代表成功)
sudo codesign --force --deep --sign - --options runtime /Applications/WeChat.app
  1. 提取密钥与数据库解密

内存抓取 all_keys.json,正常打开微信并登录账号。

回到终端运行编译并执行 C 语言扫描器:

cc -O2 -o find_all_keys_macos find_all_keys_macos.c -framework Foundation
sudo ./find_all_keys_macos

多库(分包)批量解密,微信将历史数据切分为了多个库(如 message_0.db 至 message_5.db)。

# 激活虚拟环境
source .venv/bin/activate
# 执行批量解密
python3 decrypt_db.py

输出日志显示 XX 成功, 0 失败 后,解密后的明文数据库将存放在 decrypted/ 文件夹中。

  1. 常见痛点:如何导出一年以前的全量历史数据?

问题现象:

首次导出的 JSON 记录可能会卡在某个特定日期(例如仅有近半年或近一年数据),缺失更早年份(如 2021 年)的记录。

根本原因:

  • 本地无缓存:更换新 Mac 或微信机制导致早期数据未同步到本地,需通过手机微信的“聊天记录迁移与备份 -> 迁移到电脑”功能,全量迁移指定联系人的历史记录。
  • 历史库未激活:早期数据存储在历史分包库中。如果微信在运行时没有读取过这些库,内存扫描器就无法抓取它们的密钥。

彻底解决方案(“激活”多库)

  • 打开 Mac 微信,进入目标联系人聊天窗口。
  • 点击 查找聊天记录(放大镜) -> 日期 或 搜索极早期高频词。
  • 随便点开几条 2021/2022 年的聊天结果,强迫微信在内存中加载出当年的历史聊天气泡。
  • 保持该画面不退出,重新运行 sudo ./find_all_keys_macos 和 python3 decrypt_db.py。此时脚本将顺利捕获历史库密钥并完整解密。
  1. 数据可视化与分析

解密完成后,运行项目自带的网页端可视化工具:

python3 monitor_web.py

打开浏览器访问 http://localhost:5678,进入“个人微信”标签页,即可:

  • 自动合并 message_0 到 message_x 的所有历史分包。
  • 精准搜索并勾选指定联系人。
  • 一键导出全量 JSON(用于二次开发/AI分析)、CSV(用于 Excel 统计)或 HTML(用于精美网页浏览)。