wechat-use
GitHubBlog

指南 / Guides

读消息与媒体

从你本机那个已登录的真微信里读会话、联系人、历史、图片、语音、收藏 —— 用 init 取出的真 key 本地解密 SQLCipher 库,读取默认走离线,不挂进程、不碰 UI。

下面所有查询命令默认输出 YAML(给人看),加 --json 切成机器可解析的 JSON(给 agent 用)。前提:WeChat 正在运行,且已跑过一次 wechat-use init 提取库 key(每次微信重启后要重跑)。想知道 key 是怎么取出来的,看 它是怎么做到的

查会话 · sessions

最近的会话列表,支持按类型过滤。

bash
$ wechat sessions # 最近会话(默认 YAML)
$ wechat sessions -n 20 --brief # 取 20 条、精简字段
$ wechat sessions --filter group # 只看群(group/private/official_account/folded/other)
$ wechat unread # 只列有未读的会话
$ wechat new-messages -n 10 --json # 上次游标之后的增量(游标存在 ~/.wx-rs/cursor.json)
📝 增量游标
new-messages 会记住上次读到哪,只吐新的;要从头再来加 --reset。适合 agent 轮询「有没有新消息」。

查联系人 · contacts

列出或模糊搜索联系人(备注 / 昵称 / alias 都能匹配)。

bash
$ wechat contacts --query 张三 # 模糊搜
$ wechat contacts --brief -n 50
$ wechat members "项目群" # 列某个群的成员

查历史 · history

拉某个会话的聊天记录,私聊或群都行。<CHAT> 可以是 wxid、群 id、alias,或直接写备注/昵称让它模糊解析。

bash
$ wechat history 张三 -n 50 # 最近 50 条
$ wechat history "项目群" --since 昨天 --order asc # 时间窗 + 正序
$ wechat history 张三 --since 2026-07-01 --until 2026-07-04 --json
$ wechat search 发票 --in "项目群" --context 5m --report out.html # 全库 FTS5 搜索,导自包含 HTML 报告

history 输出里每条消息带 local_idserver_id —— 前者用来取图片,后者用来取语音,见下文。语音消息默认会自动转写(不想转写加 --no-transcribe)。其它读取:stats <CHAT> 看消息量/类型/时段分布,export <CHAT> 导 Markdown/JSON,digest <CHAT> 出给 LLM 预处理用的紧凑时间线,recalled 查撤回并从 shadow archive 里捞回原文。

取图片 · image get

微信 4.0+ 的图片存成加密的 V2 .datimage get 帮你解密并写出真图,默认 --from auto,它会按顺序尝试三条路,优先离线、最后才走网络:

路 1 —— 本地 .dat 解密(离线,不碰进程)

这是首选路径,纯本地文件运算,不挂微信进程、不碰 TCC、不联网。AES key 是从本机账号信息推导出来的(不是逆向、不是抓进程):从 kvcomm 目录读出 uin,拼上账号名做 MD5 就得到 key,再拿本地缩略图自校验命中 JPEG/PNG magic 即确认。多账号时按目标 bundle 容器解析,不会误读默认安装的 uin。原理细节在 它是怎么做到的 · 图片 .dat 解密

路 2 —— heap scan(在线,读运行中进程内存)

如果本地 .dat 不在或解不出(比如只在别的设备看过、本机没落盘缩略图),auto 会退到 heap scan:通过 daemon 用 Mach 接口 mach_vm_read 直接扫正在运行的微信进程堆内存 —— 你在微信里显示过的图,明文就躺在 heap 里,几秒钟一次性扫出来。这条路需要微信在跑、需要 daemon。

路 3 —— CDN 回源

前两条都没有时,最后从微信 CDN 拉。

bash
$ wechat image get 12345 --chat "项目群" # local_id 来自 history 输出;默认 --from auto
$ wechat image get 12345 --chat 张三 --from heap # 强制走 heap scan(在线)
$ wechat image get 12345 --chat 张三 --from cdn --out ~/pic.jpg
$ wechat image inspect 12345 --chat 张三 # 只看 CDN 元数据,不泄 key/url
✅ 缓存位置
解出来的图写到 ~/.wechat/media-cache/<md5>.jpg(权限 600)。--from auto 是最省事的默认:能离线就离线,不行才在线,再不行才联网。

取语音 · audio

语音消息是 SILK_V3 编码,<SVR_ID> 就是 history 里的 server_id。取原始字节是纯 DB 读;要文字先跑一次 audio setup 装好 ffmpeg / whisper.cpp / silk 解码器和模型,之后 audio transcribe 一条龙(取字节 → silk → ffmpeg → whisper)。

bash
$ wechat audio setup --model small # 一次性装依赖 + 模型
$ wechat audio get 7788990011 # 原始 SILK_V3 → ~/.wechat/audio-cache/<svr_id>.silk
$ wechat audio transcribe 7788990011 --language zh --include-transcript

其实大多数时候你不用手动调 audio —— historydigest 遇到语音会自动转写内联进结果里。

查收藏与公众号 · favorites / biz-articles

bash
$ wechat favorites --query 合同 # 搜收藏,可加 --type 过滤
$ wechat biz-articles --json # 公众号推文列表(只读)
📝 为什么读取这么安全
读命令走的都是从真进程取出的真 key 做本地解密,默认离线;连图片的首选路都不碰进程。只有 heap scan 和 CDN 回源才需要微信在跑。整条链路不激活窗口、不模拟点击、不重新登录 —— 完整机制见 它是怎么做到的