6.9 KiB
6.9 KiB
页面连接 Mac 微信(v0.4,实验性)
在安装微信的目标 Mac 上更新代码,重新启动 python3 run.py,浏览器打开本机地址,进入“连接 Mac 微信”。此后无需手动运行诊断或逐个导出数据库。
页面操作
- 扫描本机微信:发现
xwechat_files/<账号>/db_storage,显示消息分片、联系人库与密钥匹配数量。自定义位置点“选择数据文件夹”。旧版 3.x 数据不会自动混入。 - 检查签名与权限 / 读取本机密钥:先登录微信并打开目标聊天。权限诊断显示强化运行时、允许调试与系统拒绝码;管理员按钮的结果也会保留这些信息,不再只显示通用失败。已有密钥时可选择本机 JSON 文件。
- 安装文本解压支持:需要 Zstandard 压缩正文时点击。通过 pip 从 PyPI 安装固定版本
zstandard==0.23.0wheel 到data/mac_deps,不全局安装、不发送聊天;需要网络和可用的 pip。 - 备份并导入:先正常退出微信,保持知微运行,再点击。工具将所需数据库、WAL/SHM 复制到
data/mac_sources/<任务>/backup,可读库保存在同任务readable。请预留至少约四倍所选数据库大小的磁盘空间。 - 成功后进入“发现知识需求”,选择时间段、全部会话或指定群聊/私聊。业务消息分片默认不导入,需要时单独勾选。
浏览器与本地服务须运行在安装微信的同一台 Mac;Windows 页面不能读取另一台 Mac 的微信。不需要向开发者上传数据库、聊天或密钥。
管理员授权仍被拒绝时
签名的调试限制和管理员身份是不同的检查。Apple 文档说明,调试工具对第三方应用取得任务端口还取决于目标是否允许调试。管理员按钮并不自动改变目标签名;因此反复输入密码可能一直失败。
如果看到“尚未尝试”,这只是签名检查,不是一次实际读取失败。新版会显示“检查完成,等待选择读取方式”和“尝试读取一次”按钮;限制提示采用待处理样式,不显示绿色成功。普通读取实际被拒后,可主动点管理员读取一次;管理员也被签名拒绝时,主按钮改为预览副本。已有副本时会引导启动,不要求重复创建。检查本身不会创建副本、提升权限或自动修改签名。
页面新增可选的临时调试副本流程:
- 选择账号,点击“预览临时副本方案”,查看原版位置、副本位置、完整备份位置、空间估计与影响。这一步不会修改微信。
- 阅读影响,正常退出所有微信,勾选同意后点击“同意并备份、创建临时副本”。预览有效 30 分钟,一次性使用,切换账号必须重新预览。API 也会检查同意字段和预览令牌。
- 工具先完整复制所选账号目录和
all_users登录配置,再创建独立WeChat.app副本。账号包含图片/附件时备份可能较大。文件清单、大小或源文件状态变化会中止,不签名、不启动。 - 只对副本添加
com.apple.security.get-task-allow,使用本机codesign重新签名并验证。原版应用不重签,SIP、系统开发者策略和隔离属性不修改。应用符号链接越界、原版变化或签名检查失败会中止。 - 准备成功后,点击“启动已准备的临时副本”,按 macOS 提示打开并登录。副本保留同一应用标识,可能使用或更新同一账号本地数据,也可能要求重新登录或系统授权,因此必须先备份。不要在副本中发消息、升级或作为日常客户端使用。
- 在副本中打开目标聊天,再点击读取密钥;必要时由你主动选择管理员读取。取得匹配密钥后,退出副本,点击备份并导入。完成后退出副本、恢复原版使用。
此路径仍未在你的 Intel Mac 4.1.0.18 上实测,不保证副本启动、登录、原账号数据访问或密钥读取成功。 系统拦截时不会自动绕过;失败保留备份,不自动恢复、覆盖或删除用户数据。副本具有更宽的调试权限,使用前需在页面明确同意,不会因为普通读取失败就自动创建。
实际边界
尚未通过 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,不依赖已下架的微信提取工具。