欢迎光临
我们一直在努力

wxauto 停更之后,我复刻了一个支持微信 4.x 的自动化库:wechatauto-replica

wxauto 停更后,我复刻了一个支持微信 4.x 的自动化库:wechatauto

作者:fanyuantaier | 邮箱:fanyuantaier@163.com 项目地址:https://github.com/fanyuantaier/wechatauto-replica,https://pypi.org/project/wechatauto-replica/ 当前版本:v1.0.5(2026-08-10)

一、背景:wxauto 为什么\”死\”了

如果你关注过 Python 微信自动化,一定听说过 wxauto——一个基于 Windows UIAutomation 的开源库,由 cluic 从 2020 年维护到 2025 年,巅峰时期 GitHub 7k+ Star,几乎是\”用 Python 操作微信 PC 客户端\”的唯一选择。

2025 年 10 月 28 日,项目正式归档,README 上写着 “wxauto (2021-2025),本项目于 2025-10-28 停止维护”。

原因不复杂:微信 4.x 把 UIAutomation 这条路彻底堵死了。

微信版本
UIAutomation 可用性
3.9.x ✅ 正常,控件树完整
4.0.0 – 4.0.5 ⚠️ 勉强可用
4.1.12+ ❌ 完全失效

微信 4.x 聊天区域改用 Qt 自绘渲染(窗口类 MMUIRenderSubWindow*,不同版本后缀不同,如 MMUIRenderSubWindowHW / MMUIRenderSubWindow),对 UIAutomation / MSAA 完全不暴露无障碍节点——控件树里连\”输入框\”“消息列表”\”发送按钮\”的影子都找不到。老 wxauto 的纯 UI 方案无计可施,这也是作者停更的直接原因。

老路走不通,那就换条路。这就是我复刻 wechatauto 的契机。

二、总体方案:两条技术路线

wechatauto 是上游 wxauto 的复刻版,面向微信 4.x Windows 客户端(非网页版,直接操作本机客户端)。针对\”UI 抓不到\”的现实,拆成两条互补路线:

路线
模块
用途
状态
本地数据库解密 wechatauto/db.py 读取消息、监听、历史导出、会话/联系人 ✅ 全链路验证
坐标 + OCR wechatauto/guia.py 发送文本/文件/图片、回复、@成员 ✅ 文本/文件/图片实测稳定

外加两个独立子系统:媒体下载(media.py,图片 v2 解密)、朋友圈读取(moment.py,直读 sns.db)。

一句话概括设计哲学:能直接读数据就不碰界面;必须碰界面时用视觉替代控件。

三、读取原理:本地数据库解密(核心亮点)

微信 4.x 的所有数据都存放在本地 SQLCipher 4 加密的 SQLite 数据库中:

D:\\微信文件\\xwechat_files\\<wxid>_xxxx\\db_storage\\
├── contact\\contact.db 联系人(昵称、备注)
├── session\\session.db 会话列表(未读数、摘要)
├── message\\message_0..4.db 聊天消息(按会话分表 Msg_<md5>,跨库分片)
├── message\\media_0.db 语音(VoiceInfo.voice_data,SILK 二进制)
├── message\\message_resource.db 文件原名(MessageResourceDetail.packed_info)
├── sns\\sns.db 朋友圈(SnsTimeLine,SnsDataItem XML)
└── …

每个库都是 SQLCipher 4:页大小 4096,PBKDF2-HMAC-SHA512(加密密钥迭代 256000 次),每页 IV(16) + HMAC(80)。

3.1 密钥提取:进程内存只读扫描

每个数据库有独立的 32 字节密钥,运行时保存在微信进程 com.Tencent.WCDB.Config.Cipher 配置对象中。提取流程:

  • 用 psutil 枚举 Weixin.exe 进程,取可读内存区域;
  • 定位字符串 com.Tencent.WCDB.Config.Cipher 的内存地址;
  • 从字符串地址回溯配置对象([ptr][len] 结构),读取数据块;
  • 数据块与固定掩码逐字节异或,得到明文配置 x\'<64位hex密钥><32位hex盐>\’;
  • 用 SQLCipher 4 的 HMAC 校验规则验证候选密钥(取某库首页试解);
  • 验证通过后缓存到 %TEMP%\\wechatauto_db\\<账号>\\keys.json,进程内复用。
  • 全程只读扫描、不注入不改写,微信进程无感知。

    3.2 WAL 增量合并(帧盐校验)

    微信 -wal 是预分配文件:checkpoint 时 WAL 头 salt+1 并清零写游标,但旧世代帧仍留在文件中。若合并时不过滤帧盐,会把过期页覆盖进主库,报 database disk image is malformed。

    修复方案:读取 WAL 头 salt1/salt2,仅合并 salt 与当前 WAL 头一致的帧,旧世代帧直接跳过;合并结果用 PRAGMA integrity_check 校验,失败自动回退全量重建。实测 contact.db 合并后 integrity OK,2354 个联系人全部可查。

    3.3 消息查询与监听

    • 会话名 → Md5(会话微信号) → 表名 Msg_<md5>;同一会话可能分片在多个 message_*.db,按 sort_seq 合并排序;
    • 关键列:local_type(消息类型)、real_sender_id(2=自己)、server_id、
    赞(0)
    未经允许不得转载:171主机测评 » wxauto 停更之后,我复刻了一个支持微信 4.x 的自动化库:wechatauto-replica
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址