概述
•存储方式:
微信聊天记录保存在本地加密的SQLCipher数据库文件中,基于腾讯的WCDB项目。
SQLCipher 以 10-15% 的性能开销,100% 加密 SQLite 文件,并提供与 SQLite 相同的 API。
每个账户、每台设备的数据库加密密钥不同,且密钥更换频率较低(通常在微信大版本更新时)。
•加密方式对比:
平台 | 版本 | 加密方式 | 加密参数 | 备注 |
Windows | 3.x | SQLCipher v3 | Page Size 4096 / KDF 迭代 64000 / HMAC SHA-1 / KDF SHA-1 | |
Windows | 4.0 | SQLCipher v4 | Page Size 4096 / KDF 迭代 256000 / HMAC SHA-256 / KDF SHA-256 | SQLCipher v4 默认配置 |
macOS | 3.x | SQLCipher v3 | Page Size 1024 / HMAC SHA-1 | 直接使用原始密钥,较为特殊 |
macOS | 4.0 | SQLCipher v4 | Page Size 4096 / KDF 迭代 256000 / HMAC SHA-256 / KDF SHA-256 | 与 Windows 4.0 一致 |
•数据结构差异:
Windows 3.x:
聊天记录按时间分库,保存在多个 db 文件中,最新记录在一张大表内。
macOS 3.x:按聊天对象分表,每个对象单独一张表,分配到多个 db 文件,部分对象记录较多导致对应 db 文件较大。
4.0 版本:结合时间分库与对象分表,Windows 和 macOS 数据结构统一。
特殊点:
macOS 3.x 版本中群聊称为Group
(其他版本为ChatRoom
)。
macOS 3.x 的群成员信息独立维护(其他版本在Contact
表中)。为兼容 macOS 3.x,chatlog
项目做了大量适配工作。
本地数据库解密
•解密流程:主流方式:从微信进程内存中获取密钥,解密数据库后查询数据。
Windows:通过 Windows API 读取内存,获取密钥耗时约20-30ms。
macOS:受安全机制限制,需关闭 SIP(系统完整性保护),获取密钥耗时约 20秒。
•解密方案对比:内存基址偏移计算(如 PyWxDump):
优点:速度快。
缺点:需手动维护每个微信小版本的内存基址。
内存暴力搜索(如wechat-dump-rs):
通过数据特征缩小扫描范围,效率较高。chatlog
采用此方案,风险低(不涉及微信 API 请求)。
Hook 方案:
通过注入动态库调用微信函数获取密钥,常用于功能魔改(如防撤回、抢红包)。封号风险最高。
项目地址
https://github.com/sjzar/chatlog
采用内存暴力搜索方案,Windows 下快速获取密钥,macOS 下稍慢但仍可行。解密后操作与微信进程无关,安全性较高。
仅限交流学习使用,如您在使用本工具或代码的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。“如侵权请私聊公众号删文”。
原文始发于微信公众号(柠檬赏金猎人):chatlog轻松使用你的微信聊天记录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论