wechat-cli_

你的微信数据,只在你的电脑上处理。
本地解密、只读查询,聊天内容不上传;初始化后可离线使用。

最新版本 0.1.4 发布于 2026-08-28 macOS · Windows · Linux 微信 4.1.8 · 4.1.13 已实测 🦀 Rust 编写 · 内存安全 🔒 本地查询 · 可离线
$ curl -fsSL https://wechat-cli.com/install.sh | sh

macOS / Linux 一行安装 · Windows 与手动下载 · 兼容性与安全说明

~ — wechat-cli-rs
# 初始化一次(需要 sudo,用来提取本地数据库密钥)
$ sudo wechat-cli-rs init
初始化完成
配置: ~/.wechat-cli/config.json
提取到 26 个数据库密钥条目

# 看最近会话
$ wechat-cli-rs sessions --limit 3 --format text
最近 3 个会话:

产品讨论组     [群聊]  3条未读   张三: 明天的评审推迟到下午
李四                            好的,收到
王五                            文件已经发你邮箱了

# 搜索聊天记录
$ wechat-cli-rs search "报销" --format text
在 全部消息 中搜索 "报销" 找到 2 条结果:

[2026-08-12 14:22] [财务群] 赵六: 本月报销单截止到 25 号
[2026-08-20 09:41] [李四] 李四: 报销流程走完了吗?

以上为示意输出

🔒 数据安全声明

#为什么用它

[·]数据不出本机

聊天记录在你自己的电脑上解密和查询,程序不会把任何聊天内容发到外部服务器。

[r]只读查询,不发消息

不发消息、不改数据库、不删记录,也不做自动操作;但 init 会读取微信进程内存,不能视为零风险。

[✈]可以断网用

装好并初始化之后,所有查询都在本地完成。拔了网线照样能查。

[{}]为脚本和 AI 设计

默认 JSON 输出、稳定的退出码,方便管道处理,也方便交给 AI Agent 调用。

[⚡]Rust 实现

单个可执行文件,没有运行时依赖,下载即用,启动快、占用小。

[⌘]三平台通用

macOS(Apple 芯片 / Intel)、Windows、Linux 都有预编译版本。

#微信版本兼容性

两条提取路径同时保留:旧版本继续扫描常驻内存,新版本在密码学调用发生时捕获瞬时密钥。

macOS 微信版本密钥提取方式实测状态
官网版 4.1.8 常驻内存扫描,直接运行 sudo wechat-cli-rs init 已验证 25/29
官网版 4.1.13 PBKDF2 / AES 调用边界瞬时捕获,再用数据库 HMAC 验真 已验证 27/29
App Store 4.1.11 重签副本会被 launchd 拒绝 不支持首次提取
4.1.8 不受影响:原有 SQL hex 扫描和 HMAC 验证路径仍保留,并有独立回归测试。 4.1.13 已通过真实数据库查询验证,但首次瞬时捕获目前仍是高级流程;安装器会同时安装 hook,具体步骤与安全边界见 macOS 密钥捕获说明。默认不会修改官方 WeChat.app。

#怎么用

先确保微信已经登录,然后初始化一次。官网版 4.1.8 可以直接运行下面的命令;官网版 4.1.13 首次使用请先按瞬时捕获说明生成并验证候选密钥。已有匹配的配置和密钥时不要重复运行 init。

$ sudo wechat-cli-rs init

# 之后就可以随便查了
$ wechat-cli-rs sessions --format text              # 最近会话
$ wechat-cli-rs contacts --query "张" --format text  # 找联系人
$ wechat-cli-rs history "张三" --format text         # 看聊天记录
$ wechat-cli-rs search "报销" --format text          # 全局搜索
$ wechat-cli-rs export "张三" --format markdown --output chat.md
每个命令都支持 --format json(多数命令的默认值)方便脚本处理, --format text 则是给人看的。加 --help 查看完整参数。

macOS 首次初始化与重签

开始前,在「系统设置 → 隐私与安全性 → 完全磁盘访问权限」中允许 Terminal、iTerm 或你使用的终端,并重启终端。推荐使用微信官网版,不推荐 Mac App Store 版。

  1. 保持官网微信已登录,先运行 sudo wechat-cli-rs init;默认不会修改 App。
  2. 如果 task_for_pid 被拒绝,程序会退出并说明风险。只有确认接受后才使用 --allow-resign,优先通过 --wechat-app 指向复制出的 App。
  3. 重签会读取原 entitlements、加入 get-task-allow,再用 codesign --force --sign - 替换所选 App 的签名。
  4. 官网版 4.1.13 首次提取还需要按瞬时捕获说明加载 hook 并通过 HMAC 验真。
当前 entitlement 解析器只会写回布尔项,字符串、数组等 entitlement 或其他签名元数据可能改变或丢失。 这是确定的客户端完整性变化。不要使用手写最小 plist 自行重签,也不要关闭 SIP、降级微信或阻止更新。
# 查看当前 entitlement
$ codesign -d --entitlements - /Applications/WeChat.app 2>/dev/null

# 官网重装后验证签名与 entitlement
$ codesign --verify --deep --strict --verbose=2 /Applications/WeChat.app
$ codesign -d --entitlements - /Applications/WeChat.app 2>/dev/null

如果你明确重签了已安装的官方 App,取完密钥后应完全退出微信,从微信 Mac 官网重新下载当前版本并覆盖安装,以恢复厂商签名。针对复制 App 的流程不会修改已安装 App。 详细背景见上游教程、Apple 的 调试 entitlement 文档和 公证问题说明。

#功能

目前全部功能完全免费,不需要激活、不需要账号。

命令说明授权
init初始化、提取数据库密钥免费
sessions最近会话列表免费
contacts联系人查询与详情免费
members群聊成员列表免费
unread未读会话免费
history读取聊天记录(支持时间/类型过滤)免费
search搜索消息内容免费
stats消息统计、发送者排行、活跃时段免费
export导出聊天记录为 Markdown / 文本免费
favorites微信收藏查询免费
new-messages自上次调用以来的新消息免费

#下载

版本 0.1.4,发布于 2026-08-28。也可以用上面的一行命令自动安装。

关于安全提示:这些文件没有做代码签名,所以 macOS 会提示「无法验证开发者」 (到「系统设置 → 隐私与安全性」点「仍要打开」),Windows 会弹 SmartScreen (点「更多信息 → 仍要运行」)。上面的一行安装命令会自动帮 macOS 处理掉这一步。

macOS 4.1.13 高级初始化组件: Apple 芯片 hook · Intel hook

#安全与隐私

账号与客户端完整性风险

本项目不能保证绝对不会被限制账号。Rust CLI 没有已知的微信网络 API 调用、发信接口或协议模拟;风险点是 init 非官方支持地读取微信进程内存;4.1.13 高级流程还会在复制 App 中加载瞬时 hook。只有显式提供 --allow-resign 才会修改所选 App 的签名和 entitlement。 微信是否能够、是否实际会通过本地完整性检查或遥测感知这些变化,以及这是否会触发账号处置,当前都未知,不能当作已证实结论。

另有一项本地隐私风险,它不是已知封号机制:~/.wechat-cli、key JSON 和 Unix 初始化会把 ~/.wechat-cli 设为 0700、配置和密钥文件设为 0600;但 /tmp/wechat-me-cache 仍跟随用户 umask,宽松配置下可能被同组本机用户读取。
平台 / 操作涉及接口风险含义
macOS inittask_for_pid、mach_vm_read、显式 codesign、复制 App 中可选 DYLD hook读取进程内存;显式重签会改变所选 App 的签名,并可能丢失非布尔 entitlement 或其他签名元数据
Windows initOpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION)、VirtualQueryEx、ReadProcessMemory以查询和只读权限读取微信进程内存,不申请写权限
Linux init/proc/<pid>/maps、/proc/<pid>/mem、root / CAP_SYS_PTRACE在系统 ptrace 权限控制下查看映射并读取进程内存
普通查询本地 AES/SQLCipher、SQLite读取实时数据库或副本,不调用微信网络 API
license activateHTTPS 请求 license.bika.ltd唯一显式业务网络请求;发送授权字段,不发送聊天内容
源码审计入口:src/commands/init.rs::run 进入密钥提取;平台进程访问及 macOS resign_wechat / parse_plist_dict 位于 src/keys.rs; 瞬时 interpose 代码位于 macos-key-hook/src/lib.rs; 解密与缓存写入位于 src/crypto.rs、src/db_cache.rs;唯一显式业务联网请求是 src/license.rs::call_activate_endpoint。

明确没有采用

最低风险工作流

  1. 已有匹配的 config.json 和 all_keys.json 时,不再运行 init。
  2. 最安全是不运行 init,只使用自己合法取得的数据库副本与密钥。
  3. 确有需要时只取一次密钥,然后完全退出微信,复制完整 db_storage 及全部 *.db-wal。
  4. macOS 优先针对复制 App 捕获;只有明确重签了已安装 App 时,才从微信官网重装当前版本恢复厂商签名。
  5. 只在可信的单用户机器运行;macOS/Linux 初始化后收紧密钥与缓存权限,Windows 使用等效的仅当前用户 ACL;不再使用时清理解密缓存。
  6. 不要关闭 SIP、降级微信或阻止客户端更新。
$ chmod 700 ~/.wechat-cli /tmp/wechat-me-cache
$ find ~/.wechat-cli /tmp/wechat-me-cache -type f -exec chmod 600 {} +
$ rm -r -- /tmp/wechat-me-cache  # 不再使用时清理;先确认精确路径

使用前请阅读腾讯政策目录、 微信软件许可及服务协议和 微信安全中心关于本地聊天记录访问工具的公告。

#给 AI Agent

命令面是按脚本和 AI 调用设计的:默认 JSON 输出,退出码稳定,不需要去解析中文提示语。

退出码含义
0成功
1找不到目标 / 一般错误
2参数用法错误
3本地数据打不开(解密失败等)

把这份纯文本说明交给 agent,它就知道该怎么调用、什么时候该停下来问用户:

$ curl -fsSL https://wechat-cli.com/SKILL.md
SKILL.md 是给机器读的 Markdown 纯文本,用浏览器打开会显示源码,属正常现象。