4.2 KiB
4.2 KiB
页面连接 Mac 微信(v0.2,实验性)
在安装微信的目标 Mac 上更新代码,重新启动 python3 run.py,浏览器打开本机地址,进入“连接 Mac 微信”。此后无需手动运行诊断或逐个导出数据库。
页面操作
- 扫描本机微信:发现
xwechat_files/<账号>/db_storage,显示消息分片、联系人库与密钥匹配数量。自定义位置点“选择数据文件夹”。旧版 3.x 数据不会自动混入。 - 读取本机密钥:先登录微信并打开目标聊天,再点击读取。普通权限失败时,可主动点击管理员按钮,使用 macOS 系统密码框授权;工具不保存密码。系统仍可能拒绝访问,授权并不保证成功。已有密钥时可选择本机 JSON 文件。
- 安装文本解压支持:需要 Zstandard 压缩正文时点击。通过 pip 从 PyPI 安装固定版本
zstandard==0.23.0wheel 到data/mac_deps,不全局安装、不发送聊天;需要网络和可用的 pip。 - 备份并导入:先正常退出微信,保持知微运行,再点击。工具将所需数据库、WAL/SHM 复制到
data/mac_sources/<任务>/backup,可读库保存在同任务readable。请预留至少约四倍所选数据库大小的磁盘空间。 - 成功后进入“发现知识需求”,选择时间段、全部会话或指定群聊/私聊。业务消息分片默认不导入,需要时单独勾选。
浏览器与本地服务须运行在安装微信的同一台 Mac;Windows 页面不能读取另一台 Mac 的微信。不需要向开发者上传数据库、聊天或密钥。
实际边界
尚未通过 Intel Mac 微信 4.1.0.18 的实机验收。 开发环境是 Windows;合成数据库与模拟测试无法证明真实微信版本可用。
- 密钥扫描通过 macOS Mach 只读接口,验证目标进程路径为
WeChat.app/Contents/MacOS/WeChat。最多扫描 45 秒/2 GiB 的可读可写非执行内存,仅筛选 SQLCipher 格式的 64/96 位十六进制候选,不保存内存转储。 - 默认普通用户读取;只有用户点击管理员按钮才触发系统授权。微信签名与 macOS 保护仍可能拒绝附加。工具不重签微信、不注入代码、不关闭 SIP,也不保证取得密钥。失败在页面说明,可导入已有本地密钥继续。
- 密钥只在进程内存,状态 API 只返回匹配数量,不回传密钥;重启后需重新读取/导入。密钥不进入模型请求、日志、Git 或发布包。
- 加密读取仅支持 SQLCipher 4 常见 raw AES-256 key、4096 字节页、80 字节保留区、SHA512 页认证与 little-endian 页编号。其他参数明确失败,不跳过认证。
- 逐页验证 HMAC 后解密;WAL 校验头、salt 与滚动校验和,仅回放到最后一次提交,不回放已校验但未提交的事务。截断、损坏或格式不匹配会停止;可读输出还会通过 SQLite
quick_check。 - 解析支持
Msg_<MD5>/Chat_<MD5>、Name2Id、常见联系人字段,和create_time/message_content/local_type/real_sender_id结构。支持 UTF-8、可选 Zstandard 与部分 XML 引用,不保证覆盖所有版本变体。 - 无法关联会话或发送人时整次停止。消息先写独立 staging 库,全部解析成功后才用单次事务并入主库,不保留半次导入。副本保留用于本机排查。
- 图片/附件仅保留类型与可读描述,不自动 OCR 或转写。搜索索引、资源库和旧版库不当作消息正文重复导入。
- 本地副本和可读库是敏感文件,保存在受限数据目录并被 Git 忽略。任务状态和密钥均在内存;退出 Python 会中断任务,不自动恢复或重试管理员操作。
实现参考
实现为本项目原创代码,使用本机加密与进程 API,不依赖已下架的微信提取工具。