微信 4.1.13.x · Windows x64 · 本机离线

把你的微信聊天记录
完整导出来

针对 微信 Windows 4.1.13.x 的聊天记录导出工具 —— 自动提取数据库密钥 → 解密 SQLCipher 数据库 → 导出会话(含图片、头像、排行榜)。全程本机处理,只读取微信数据,不联网。

只读 · 不写微信数据离线 · 零网络请求HMAC 校验 · 零误报开源依赖 · 无外部 CDN
27数据库全部解密
601会话可枚举
623,634条消息实测
0.06s热启动耗时
Interface

Qt Quick 无边框窗口,微信原生的观感

自绘标题栏、圆角卡片、柔和阴影与悬浮动效;窗口拖动与缩放交给系统 (startSystemMove / startSystemResize)。启动时按 Qt Quick(QML) → PyQt5 Widgets → tkinter 顺序自动选择可用界面。

微信聊天记录导出
前端快快跑2⃣️群聊 · 166,273 条导出图片导出会话
今天 10:24
阿凯
首页那个 mock 窗口的阴影再柔一点,跟设计稿差点意思
收到,改成 0 30px 80px rgba(0,0,0,.6),顺带把外框换成渐变描边
阿凯
IMG_20260923_1024.png
这版可以了,我打包发上去
今天 11:02
鹿
小鹿
排行榜的分组筛选数据取到了,企业微信 161 个会话
好,那排行榜 CSV 也按当前范围导出
就绪 · 601 个会话100%

↑ 这是界面示意图(基于真实 GUI 结构绘制),点击左侧会话可以切换消息预览。

Capabilities

从内存里的密钥,到可读的聊天记录

整条链路都在本机完成:内存扫描取密钥 → 逐页解密数据库 → 解析消息与媒体 → 导出为多种格式。

数据库密钥自动提取

扫描微信进程内存里的 56 字节 codec 上下文,解析 salt / keyspec。针对 4.1.13 起被 32 字节 pad 循环 XOR 混淆的 keyspec,用上下文里的明文盐 现场反推 pad 还原真实密钥;每个密钥都过数据库首页 HMAC 校验,零误报。

SQLCipher 4 逐页解密

微信 4.x 的 32 字节 raw key 直接就是 AES-256 密钥(不经过 PBKDF2,PBKDF2 只用于派生 HMAC 密钥)。逐页 AES-256-CBC 解密 + 每页 HMAC-SHA512 校验,首页回写魔数与 reserved 字节。

图片消息还原

Img/*.dat 是 V2 容器(magic + aes_size + xor_size + flag)。按 PKCS7 对齐做 AES-128-ECB 解密,尾部单字节 XOR 的键值由 JPEG FFD9 / PNG AE426082 尾部标志反推。

真实头像

从解密后的 head_image.db 直接读取 image_buffer —— 它本身就是 JPEG/PNG 二进制,本机读取不联网。实测库内 2403 个头像,601 个会话命中 578 个;取不到时回退首字母色块。

聊天排行榜

按消息总数降序展示会话,含消息数、占比、最后聊天时间。顶部类型筛选 全部 / 群聊 / 个人 / 企业微信 / 公众号,占比按该范围重算,可导出 rank.csv 分文件。

磁盘缓存,秒级启动

指纹只比 stat(大小 + mtime),不读内容,-wal/-shm 不参与。微信来新消息时只有变化的 message_*.db 重新解密,其余直接复用 —— 热启动实测 0.06s

Output

一次导出,四种可用的格式

默认输出到项目根目录的 dist/,GUI 与 CLI 一致,可用 --out 指定任意目录。

WeChatExporter/dist/
dist/
├── decrypted/
│   ├── .cache/ # 指纹缓存(可删)
│   └── *.db # 解密后的数据库
├── chat_<会话名>.txt # 纯文本
├── chat_<会话名>.csv # 表格
├── chat_<会话名>.html # 微信气泡样式
├── rank.csv / rank.txt # 聊天热度排行榜
├── avatars/ # 会话头像
└── media/ # 导出的图片
TXT · 纯文本chat_<会话名>.txt,适合全文检索与二次处理。
CSV · 表格chat_<会话名>.csv,可直接导入 Excel 做统计。
HTML · 微信气泡样式chat_<会话名>.html,图片直接内嵌,单文件即可分享。
附件与排行榜avatars/ 头像、media/ 图片、rank.csv 排行榜、decrypted/ 解密库。
Get started

两条命令就能出结果

窗口打开后会自动完成「提取密钥 → 解密数据库 → 加载会话」,状态栏显示「就绪 · N 个会话」后即可预览与导出。

PowerShell / CMD
# 1) 安装依赖
$ pip install -r requirements.txt
# 2) 启动 GUI(推荐)
$ python main.py
# 打开后自动完成:提取密钥 → 解密数据库 → 加载会话
# 状态栏显示「就绪 · 601 个会话」后即可预览、导出
1确认微信已登录并运行密钥只存在于运行中的微信进程内存里,所以微信必须先开着。
2以管理员身份运行读取微信进程内存需要提权,否则扫描不到 codec 上下文。
3选中会话 → 导出左侧列表预览,右上角开关决定是否导出图片,点「导出会话」写入 dist/
前置条件
  • 微信 PC 版必须已登录并在运行中(密钥存在于进程内存)
  • 用管理员权限运行
  • 导出图片前,先在微信里点开任意一张聊天图片,让图片密钥加载进内存
Command line

GUI 之外,也支持纯命令行

适合批处理、定时任务或服务器侧的脚本化导出;参数与 GUI 行为一致。

CLI 参数速查
$ python main.py --list # 列出所有会话
$ python main.py --export 宝宝菲菲 # 按备注/昵称/wxid 导出,可多个
$ python main.py --export-all # 导出全部会话
$ python main.py --out D:\导出 # 指定输出目录
$ python main.py --no-media # 不导出图片
$ python main.py --rank --rank-kind 群聊 # 导出排行榜
$ python main.py --avatars # 导出会话头像
$ python main.py --image-key <32hex> # 手动指定图片密钥
参数说明
--list列出所有会话(名称 / 类型 / 消息数)
--export <名称...>按备注、昵称或 wxid 导出指定会话,可传多个
--export-all导出全部会话
--out <目录>指定输出目录,默认项目根 dist/
--no-media不导出图片,只出文本
--image-key <32hex>手动指定 16 字节图片 AES 密钥
--rank [--rank-kind <类型>]导出聊天排行榜,可按群聊/个人/企业微信/公众号筛选
--avatars导出会话头像到 dist/avatars/
How it works

三个环节,全部可验证

每个密钥都用数据库首页 HMAC 校验,每页解密都过 HMAC-SHA512 —— 解错了会被立刻发现,不会静默出错。

STEP 01

数据库密钥

在微信进程内存中扫描 56 字节 codec 上下文前缀,解析出 salt_ptr / keyspec_ptr。keyspec 明文形如 x'<64位hex密钥><32位hex盐>',4.1.13 起被 32 字节 pad 循环 XOR 混淆;但 keyspec 尾部就是盐的 hex,而盐在上下文中是明文,因此可现场反推 pad还原真实密钥。

STEP 02

数据库解密

逐页 AES-256-CBC 解密,每页 HMAC-SHA512 校验:首页 [0:16] 盐 · [16:4016] 密文 · [4016:4032] IV · [4032:4096] HMAC,其它页密文为 [0:4016]。首页还需手动写入魔数 SQLite format 3\0,并把页头第 20 字节 回填为 80(reserved)。

STEP 03

消息与媒体

每个会话一张表 Msg_<md5(username)>,可能分布在多个 message_N.db 分片,按 server_id 合并去重。local_type = (子类型<<32) | 基类型:1 文本 / 3 图片 / 34 语音 / 43 视频 / 47 表情 / 49 应用消息 / 10000 系统;类型 49 子类型 57 为引用回复,内容常为 zstd 压缩。

类型判定依据(username)本机实测
群聊username 以 @chatroom 结尾120 个 / 494,136 条
企业微信含 openim(@openim / @kefu.openim,含微信客服)161 个 / 4,245 条
公众号username 以 gh_ 开头0 个
联系人其它(wxid_ 等)320 个 / 125,253 条
FAQ

常见问题

16 字节图片 AES 密钥是全局密钥,但只在微信解码过图片之后才驻留内存。请先在微信里点开任意一张聊天图片查看一下, 再重新运行导出即可;也可以用 --image-key <32hex> 手动指定。

不会。全程本机处理、不联网,只读取本机当前已登录账号的微信数据;工具不发任何网络请求, 导出产物完全留在本地磁盘。

已在 微信 4.1.13.65 / Windows x64 验证:27 个数据库全部解密成功(HMAC 零错误), 601 个会话可枚举,「宝宝菲菲」会话 19603 条消息完整导出。

提取数据库密钥需要扫描微信进程(Weixin.exe)的内存空间,普通权限读不到目标进程的地址空间。

默认是项目根目录下的 dist/,GUI 与 CLI 规则一致,可用 --out 改。 解密后的数据库在 dist/decrypted/

磁盘缓存位于 dist/decrypted/.cache/decrypt.json 按源库的 大小 + mtime 指纹判定,sessions.json 按解密库指纹判定。指纹未变就跳过密钥提取与解密, 实测热启动 0.06s(原先约 1–2 分钟)。想强制刷新就删掉 .cache/ 目录。

数据是你自己的,不该被锁在数据库里

本机运行、离线处理、只读不改。跑一次,你就拿到一份可读、可检索、可归档的完整聊天记录。