WeChatPlugin-macOS 实战指南:微信小助手的消息防撤回、自动回复与远程控制

原创2026-10-02 12:21:111,349 阅读
文章标签:即时通讯桌面应用逆向工程

WeChatPlugin-macOS 实战指南:微信小助手的消息防撤回、自动回复与远程控制

本文以 README_EN.md 为核心,系统讲解 WeChatPlugin-macOS(微信小助手)的功能全景、安装与卸载流程、菜单栏操作方式以及底层 Hook 注入原理。读完本文,你将掌握该插件在 macOS 微信上的完整部署方法,并能理解自动回复规则、远程控制指令体系与源码级实现机制。


一、项目概览:一个注入微信的“小助手”菜单

WeChatPlugin-macOS 是一个面向 macOS 微信客户端的插件项目,通过向微信进程注入动态库(WeChatPlugin.framework),在微信菜单栏中新增一个 “微信小助手” 菜单,从而提供消息防撤回、自动回复、远程控制、微信多开等一系列增强能力。

英文版 README 标注的版本为 v1.7(支持微信 2.3.10);仓库内中文版 README.md 已更新至 v2.0,并注明支持微信 3.7.0。安装成功并重启微信后,菜单栏出现“微信小助手”即代表注入完成:

微信小助手菜单栏截图

二、功能全景

英文版 README 列出的完整功能清单如下:

  • 消息自动回复(Message auto reply)
  • 消息防撤回(Prevent message recall)
  • 远程控制,支持语音指令(Remote control, support voice control)
  • 微信多开(Multiple WeChat)
  • 自动认证登录(Auto Auth Login)
  • 会话置底(Session Sticky Bottom)
  • 微信窗口置顶(Windows Sticky Top)
  • 会话多选删除(Session multiple delete)
  • 自动登录开关(Auto Login Switch)
  • 通知中心快捷回复(Quick reply to notifications)
  • 表情包复制 / 导出(Copy or Export Sticker)
  • 插件更新(Update plugin)
  • Alfred 快捷回复 / 打开会话(需安装 wechat-alfred-workflow 依赖)
  • 全部会话一键已读(Make all session As Read)
  • 一键清除空会话(Clear all empty session)
  • 去除微信 url 转链(Remove url redirect)

远程控制指令能力

英文版 README 明确列出的远程控制能力包括:

分类 支持指令
系统 屏幕保护(Save Screen)、清空废纸篓(Empty Trash)
电源 锁屏、休眠、关机、重启(Lock Screen & Sleep & Shut Down & Restart)
应用 退出 QQ、WeChat、Chrome、Safari 等应用
网易云音乐 播放、暂停、下一首、上一首、喜欢、取消喜欢
小助手自身 获取全部指令、防撤回开关、自动回复开关、自动认证开关

权限提示(英文版原文):若想使用远程控制网易云音乐,请在「系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能」中允许微信(以及脚本编辑器)控制电脑。

三、安装与卸载

1. 方式一:Git 命令行安装(适合已安装 Git 的用户)

打开 /Applications/Utilities/Terminal.app(终端),执行:

cd ~/Downloads && rm -rf WeChatPlugin-MacOS && git clone https://gitcode.com/gh_mirrors/we/WeChatPlugin-MacOS.git --depth=1 && ./WeChatPlugin-MacOS/Other/Install.sh

执行过程中会要求输入 macOS 密码(用于获取写入微信应用目录的权限)。

2. 方式二:普通安装(无需 Git)

  1. 点击仓库的 clone or download 按钮下载项目并解压;
  2. 打开终端;
  3. 将解压目录 Other 文件夹中的 Install.sh 文件直接拖入终端窗口并回车。

若提示 Permission denied(无权限),可先执行 sudo chmod -R 777 /Applications/WeChat.app 解决。

3. 安装脚本内部逻辑(源码级解读)

Install.sh 的核心流程值得展开说明,它揭示了插件的注入原理:

  1. 定位微信:默认查找 /Applications/WeChat.app;若不存在则尝试 /Applications/微信.app,两者都找不到则提示检查微信是否被重命名或移动;
  2. 授权:若微信目录不可写,执行 sudo chown -R $(whoami) "$wechat_path" 获取写入权限;
  3. 备份可执行文件:将微信原始可执行文件 WeChat 复制为 WeChat_backup(若已存在备份且未加 --force 参数,则交互询问是否覆盖安装);
  4. 复制插件框架:将 Other/Products/Debug/WeChatPlugin.framework 复制到 /Applications/WeChat.app/Contents/MacOS/ 目录下;
  5. 注入动态库:调用 Other/insert_dylib --all-yes,把 WeChatPlugin.framework/WeChatPlugin 写入微信主程序的可执行文件(基于备份文件生成新的可执行文件)。

安装完成后重启微信,菜单栏即出现“微信小助手”。

4. 卸载

打开终端,将解压目录 Other 文件夹中的 Uninstall.sh 拖入终端并回车即可。

卸载脚本的恢复逻辑为:若检测到 WeChat_backup 备份文件,则删除被注入的 WeChat 可执行文件与 WeChatPlugin.framework,再将 WeChat_backup 重命名为 WeChat,从而完整还原微信原貌。若卸载失败,脚本会提示手动到 /Applications/WeChat.app/Contents/MacOS 目录处理这三个文件。

5. 源码修改与重编译(面向开发者)

若想修改源码重新编译,仓库内 Install.md 提供了完整指引:

  1. 先更改微信的 owner 以获取写入权限:sudo chown -R $(whoami) /Applications/WeChat.app;
  2. 下载项目后执行 Pod install;
  3. 用 Xcode 打开工程,编辑 Scheme,在 Debug 模式下启动 WeChat;
  4. 按 command + R 运行,此时插件随微信启动注入完成;
  5. 若报错提示找不到 Framework,先执行 Build。

四、使用指南:菜单栏与快捷键

所有开关功能均集中在菜单栏「微信小助手」菜单中,由 TKAssistantMenuManager.m 统一构建。从源码可以确认各菜单项与快捷键的对应关系(keyEquivalent 大写字母表示需同时按下 Shift):

1. 消息防撤回

  • 操作:点击菜单「开启消息防撤回」,或使用快捷键 command + t 切换开关;
  • 开启后,菜单下还会出现「防撤回自己」子项,用于决定是否同时拦截自己撤回的消息;
  • 底层实现位于 WeChat+hook.m,通过 tk_hookMethod 拦截微信 FFProcessReqsvrZZ 的收消息方法(FFToNameFavChatZZ:sessionMsgList: 与 syncBatchAddMsgs 对应的 hook_OnSyncBatchAddMsgs:isFirstSync:),在被撤回消息到达前缓存并拦截。

2. 消息自动回复

  • 操作:点击「开启自动回复」或使用快捷键 command + k,弹出自动回复设置窗口;
  • 配置规则(英文版未展开,来自仓库中文版 README 的详细说明,均可视化配置):
规则 说明
关键字 * 任何消息都会回复
关键字 x|y x 和 y 都触发回复
关键字或回复内容为空 该条自动回复不生效
延迟回复 可设置延迟秒数后回复
正则匹配 开启后按正则表达式匹配,需保证正则书写正确
特定联系人 开启后仅对指定联系人回复,原群聊 / 私聊回复不再生效
  • 从数据模型 TKAutoReplyModel.h 可看到自动回复条目的完整字段:enable(是否开启)、keyword(关键字)、replyContent(回复内容)、enableGroupReply(群聊回复)、enableSingleReply(私聊回复)、enableRegex(正则匹配)、enableDelay / delayTime(延迟回复与延迟秒数)、enableSpecificReply / specificContacts(特定联系人回复)。

消息自动回复演示

3. 微信多开与自动认证

  • 微信多开:点击「登录新微信」即可再开一个微信实例(根据中文版 README,快捷键为 command + shift + n);
  • 自动认证(Auto Auth):第二次登录免认证,配合多开使用体验最佳;
  • 自动认证开关状态由配置中心 TKWeChatPluginConfig 的 autoAuthEnable 字段持久化,并通过通知 NOTIFY_AUTO_AUTH_CHANGE 与菜单栏状态联动(见 TKAssistantMenuManager.m 的 addObserverWeChatConfig 方法)。

自动认证与微信多开演示

4. 远程控制

  • 操作:点击「远程控制 Mac OS」或使用快捷键 command + shift + c,打开远程控制设置窗口;
  • 重要限制(英文版原文提示):远程控制指令仅对向自己账号发送的消息生效。

指令匹配逻辑见 TKRemoteControlManager.m:文本消息采用完全相等匹配(isEqualToString),语音消息采用包含匹配(containsString,语音指令在 iOS 端转文字后发回)。指令命中后按类型分发执行:

类型(TKRemoteControlType) 执行方式
Shell(type=1) 通过 NSTask 执行 /bin/bash -c 命令,如屏幕保护、锁屏
AppleScript(type=2) 调用 osascript .../TKRemoteControlScript.scpt 脚本,如休眠、退出应用、网易云音乐控制
Plugin(type=3) 插件内部逻辑,如获取指令列表、切换防撤回 / 自动回复 / 自动认证开关

远程控制的完整指令清单定义在 TKRemoteControlCommands.plist(仓库还提供了 UpdateRemoteControlCommandsPlist.py 辅助维护该 plist)。按分组整理如下:

① Mac 系统控制

关键字 功能
ScreenSave 开启屏幕保护
LockScreen 锁屏
Sleep 休眠
Shutdown 关机
Restart 重启
EmptyTrash 清空废纸篓
Mute 静音

② 退出应用

关键字 功能
KillQQ 退出 QQ
killWeChat 退出微信
KillChrome 退出 Chrome
KillSafari 退出 Safari
killFirefox 退出 Firefox
KillAll 退出所有程序

③ 网易云音乐

关键字 功能
Toggle 播放 / 暂停
Next 下一首
Previous 上一首
VolumeUp 音量加
VolumeDown 音量减
LikeChange 喜欢 / 取消喜欢

④ 小助手自身

关键字 功能
getDirective 获取全部指令列表
PreventRevokeSwitch 切换防撤回开关
AutoReplySwitch 切换自动回复开关
AutoAuthSwitch 切换免认证登录开关

指令执行成功后,小助手会通过 TKMessageManager 向自己发送一条回执消息,并清除未读数。

远程控制演示(退出 Chrome、开启屏幕保护)

5. 会话管理

  • 会话置底:将指定会话固定在聊天列表底部(类似“置顶”的反向操作);
  • 窗口置顶:点击「微信窗口置顶」或快捷键 command + shift + d,将微信窗口层级提升到 NSNormalWindowLevel + 2(见 onWechatOnTopControl: 实现);
  • 会话多选删除:在会话列表右键/鼠标按下多选批量删除(Hook 位于 MMChatsTableCellView+hook.m,拦截 tableView:rowGotMouseDown: 等系统方法);
  • 一键已读:全部会话标记为已读;
  • 一键清除空会话:批量删除无内容的空会话。

会话多选删除、置底与清除空会话演示

6. 表情包复制与导出

在聊天窗口表情消息上右键,可复制表情或存储到本地;表情选择器中也可右键执行「存储 / 复制」。Hook 位于 MMStickerMessageCellView+hook.m 与 MMStickerPickerCell+hook.m,通过拦截系统菜单(contextMenu、rightMouseDown:)注入自定义菜单项。

7. Alfred 集成

小助手支持通过 Alfred workflow 快捷回复消息、打开聊天窗口与查看聊天记录,但必须先安装 wechat-alfred-workflow 依赖(英文版原文特别注明)。在「微信小助手 → 其他」子菜单中可打开/关闭「Alfred」开关;从源码看,开启开关会启动 TKWebServerManager 的本地 Web 服务(startServer),为 Alfred workflow 提供查询接口,关闭时停止服务(endServer)。

英文版 README 备注:若未使用 alfred,则不必打开 alfred 开关。

8. 其他开关与细节

  • 更新小助手:菜单内直接触发版本检测,有新版本时弹出提示并可一键下载更新;
  • 使用自带浏览器:快捷键 command + shift + b,控制是否用系统默认浏览器打开链接;
  • 禁止微信检测更新:针对非 App Store 版本,可关闭微信启动时的版本检测;
  • 退群监控:监控群成员退群事件并记录;
  • 去除 url 转链:去掉微信对链接的跳转拦截,实现直接打开抖音等外部链接;
  • 多语言支持:仓库内置英文、简体中文、繁体中文三套 Localizable.strings。

五、技术原理:Hook 注入与依赖体系

1. 注入链路

插件采用经典的 动态库注入(dylib injection) 方案:Install.sh 将 WeChatPlugin.framework 放入微信的 Contents/MacOS 目录,再用 Other/insert_dylib 把插件动态库写入微信可执行文件的加载列表。微信每次启动即自动加载插件,插件在 main.mm 入口完成初始化。

2. 方法 Hook 机制

插件运行时使用 fishhook(Facebook 开源的 Mach-O 符号重绑定库,源码位于 WeChatPlugin/Sources/Vendor/fishhook.h 与 fishhook.c)以及 OC 运行时方法交换(tk_hookMethod),对微信内部类进行挂钩:

3. 配置持久化

所有开关状态与用户数据(自动回复列表、远程控制指令列表、置底会话等)由单例 TKWeChatPluginConfig 统一管理,并提供 saveAutoReplyModels:、saveRemoteControlModels:、saveIgnoreSessionModels: 等方法持久化到本地。

4. 依赖清单

英文版 README 列出的第三方依赖为:

依赖 用途 仓库内对应资源
insert_dylib 将动态库注入 Mach-O 可执行文件 Other/insert_dylib
fishhook Mach-O 符号重绑定,实现 C 函数级 Hook WeChatPlugin/Sources/Vendor/fishhook.h
GCDWebServer 本地 HTTP 服务(为 Alfred 集成提供查询接口) 通过 Podfile 引入

六、注意事项

  • 仅限 macOS 微信客户端,安装前请确认微信位于 /Applications 目录;
  • 远程控制指令只对自己账号发送的消息生效,请勿向他人发送指令;
  • 网易云音乐远程控制需要在「系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能」中授权微信与脚本编辑器;
  • 使用插件存在一定风险(涉及修改微信可执行文件),请自行评估后使用;本项目定位为提升日常使用体验,请勿用于商业及其他不当用途。
登录后查看全文
WeChatPlugin-MacOS