WeChatPlugin-MacOS 微信小助手完整安装指南:一键脚本、手动安装与源码重编译
WeChatPlugin-MacOS 微信小助手完整安装指南:一键脚本、手动安装与源码重编译
导读
WeChatPlugin-MacOS(微信小助手)是一款基于 dylib 注入技术为 macOS 版微信扩展能力的开源插件,支持消息防撤回、自动回复、远程控制、微信多开等能力。本文以仓库根目录的 Install.md 为骨架,系统讲解该插件的三种安装方式(Oh My WeChat 一键安装、普通拖拽安装、源码重编译)、底层安装脚本原理与卸载方法,并结合仓库内的安装脚本与配置源码给出可验证的依据,帮助你在自己的 Mac 上安全、正确地完成安装、升级与卸载。
一、安装原理与前置条件
1.1 插件是如何注入微信的
从仓库源码看,整个安装过程本质上是把编译好的 WeChatPlugin.framework 拷贝进微信 App 的二进制目录,并通过 insert_dylib 工具给微信的可执行文件写入一条动态库加载命令,让微信在启动时自动加载插件框架。
具体链路如下:
- Other/Install.sh 将
Products/Debug/WeChatPlugin.framework复制到/Applications/WeChat.app/Contents/MacOS/目录; - 调用 Other/insert_dylib 在微信可执行文件中插入
WeChatPlugin.framework/WeChatPlugin的 LC_LOAD_DYLIB 加载命令; - 微信启动加载框架后,框架内的 WeChatPlugin/main.mm 中声明的
__attribute__((constructor))构造函数会被自动执行,进而调用各 Hook 模块(hookWeChat、hookMMChatsTableCellView等)完成功能注入。
这也是“第一次安装需要输入密码,仅是为了获取写入微信文件夹的权限”这一说明的由来:微信的 App 目录默认属于 root 用户,普通用户无法写入,安装脚本需要借助 sudo chown 临时把所有权转移给当前用户。
1.2 前置条件
- 一台 macOS 设备,微信已安装且未被移动或重命名到非标准位置;
- 默认安装路径为
/Applications/WeChat.app,脚本同时兼容中文名路径/Applications/微信.app; - 安装脚本会自动探测两种路径,两者都找不到时会直接提示"应用程序文件夹中未发现微信"并退出(见 Other/Install.sh 第 5-13 行);
- 安装、升级、卸载均需在“应用程序-实用工具-Terminal(终端)”中操作。
注意:使用插件存在账号与数据安全风险,README 中的免责声明明确提示“使用插件有风险,使用需谨慎”,建议仅用于个人学习与体验场景。
二、方式一:懒癌版安装与升级(Oh My WeChat)
这是文档推荐的最省心方式,通过开源工具 Oh My WeChat 完成安装与后续升级,适合不想接触脚本细节的用户。
2.1 安装 Oh My WeChat
打开应用程序 → 实用工具 → Terminal(终端),执行:
curl -o- -L https://raw.githubusercontent.com/lmk123/oh-my-wechat/master/install.sh | bash -s
该命令从 Oh My WeChat 项目拉取安装脚本并立即执行,完成工具本身的安装。
2.2 安装与升级小助手
安装完成后,在终端运行:
omw
按提示操作即可完成微信小助手的安装;后续需要升级时同样执行 omw,它会自动拉取最新版本并覆盖安装。
2.3 与仓库脚本的关系
从仓库结构看,omw 最终执行的仍是本仓库 Other/Install.sh 这套安装逻辑,只是把“下载仓库 → 执行安装脚本”的流程封装成了命令行工具。若想了解其每一步做了什么,可直接阅读下一节的脚本源码解析。
三、方式二:普通安装(拖拽脚本法)
不依赖 Git 和命令行习惯的最直接方式,全程只需要三个动作:下载解压、打开终端、拖拽脚本回车。
3.1 下载并解压
点击仓库页面的 clone or download 按钮下载 WeChatPlugin 源码压缩包并解压:
3.2 打开终端
从应用程序 → 实用工具中打开 Terminal(终端):
3.3 拖拽 Install.sh 并回车
将解压后 Other 文件夹中的 Install.sh 文件直接拖入终端窗口,回车执行:
执行过程中会提示输入密码(仅用于获取写入微信文件夹的权限)。若此前已安装过小助手,脚本还会询问是否覆盖(输入 y 确认,或使用 --force 参数强制覆盖,详见下文脚本解析)。
3.4 验证安装成功
重启微信,若在菜单栏中看到微信小助手即表示安装成功:
提示:微信必须在
/Applications下以标准方式安装,若曾重命名或移动过微信,脚本将无法定位 App 路径而退出。
四、Install.sh 安装脚本逐段解析(源码级)
为了让你对“拖一下脚本就装好”的流程心中有数,这里结合 Other/Install.sh 的完整逻辑逐段拆解:
4.1 微信路径探测
wechat_path="/Applications/WeChat.app"
if [ ! -d "$wechat_path" ]
then
wechat_path="/Applications/微信.app"
if [ ! -d "$wechat_path" ]
then
echo -e "\n\n应用程序文件夹中未发现微信,请检查微信是否有重命名或者移动路径位置"
exit
fi
fi
优先检查英文名路径,找不到再回退到中文名路径,两者皆无则直接退出,避免后续 cp、insert_dylib 操作写错位置。
4.2 写入权限处理
if [ ! -w "$wechat_path" ]
then
echo -e "\n\n为了将小助手写入微信, 请输入密码 : "
sudo chown -R $(whoami) "$wechat_path"
fi
仅当当前用户对微信目录不可写时才请求密码,执行 sudo chown -R $(whoami) 将微信 App 的所有者临时改为当前用户——这就是“第一次安装需要输入密码”的真正目的。
4.3 备份与覆盖逻辑
if [ ! -f "$app_executable_backup_path" ] || [ -n "$1" -a "$1" = "--force" ]
then
cp "$app_executable_path" "$app_executable_backup_path"
result="y"
else
read -t 150 -p "已安装微信小助手,是否覆盖?[y/n]:" result
fi
- 首次安装(不存在
WeChat_backup)时自动备份原始可执行文件,无需询问; - 已安装过时,交互式询问是否覆盖,15 秒内未响应则跳过;
- 传入
--force参数(即./Install.sh --force)可强制覆盖,跳过询问。
原始可执行文件被备份为 WeChat_backup,这是后续卸载时能够“还原微信”的关键。
4.4 框架拷贝与注入
if [[ "$result" == 'y' ]]; then
cp -r "${shell_path}/Products/Debug/${framework_name}.framework" ${app_bundle_path}
${shell_path}/insert_dylib --all-yes "${framework_path}/${framework_name}" "$app_executable_backup_path" "$app_executable_path"
fi
确认覆盖后:
- 将编译产物
WeChatPlugin.framework递归复制到微信的Contents/MacOS目录; - 以备份的原始可执行文件为输入,用
insert_dylib --all-yes注入动态库加载命令,输出覆盖微信当前可执行文件。
注入完成后,微信每次启动都会先加载 WeChatPlugin 框架,框架构造函数随即执行各模块的 Hook 注册(见 WeChatPlugin/main.mm)。框架运行时所需的资源目录固定为 /Applications/WeChat.app/Contents/MacOS/WeChatPlugin.framework/Resources/,这在 WeChatPlugin/Sources/Config/TKWeChatPluginConfig.m 的 kTKWeChatResourcesPath 常量中可以看到。
五、方式三:修改源码 & 重编译(需要 Cocoapods)
如果你希望阅读、修改插件源码或适配新版本微信,需要本地重编译。此方式要求 macOS 已安装 CocoaPods 与 Xcode。
5.1 赋予微信目录写入权限
源码重编译需要把编译产物写入微信 App 目录,因此同样要先改 owner:
sudo chown -R $(whoami) /Applications/WeChat.app
否则会出现类似 Permission denied 的错误。
5.2 安装依赖并生成工程
下载 WeChatPlugin 仓库后,进入仓库根目录执行:
pod install
仓库的 Podfile 内容如下:
platform :osx, '10.12'
inhibit_all_warnings!
target 'WeChatPlugin' do
pod 'GCDWebServer', '~> 3.4.2'
end
- 最低支持 macOS 10.12;
- 唯一第三方依赖是 GCDWebServer(用于远程控制等需要本地 HTTP 服务的功能),版本锁定在
~> 3.4.2; - 依赖
fishhook以源码形式内置于仓库的 WeChatPlugin/Sources/Vendor/fishhook.c,无需额外安装。
执行后会用 WeChatPlugin.xcworkspace 工作区打开工程(仓库同时保留了 WeChatPlugin.xcodeproj 工程文件)。
5.3 配置 Scheme 以 Debug 模式启动微信
用 Xcode 打开工程后,编辑 Scheme(Product → Scheme → Edit Scheme),将 Run 阶段的启动方式配置为在 Debug 模式下直接启动微信:
- Executable 选择微信本体(
/Applications/WeChat.app/Contents/MacOS/WeChat); - 调试器附加方式按 Xcode 默认配置即可。
之后直接 Run(command + R),Xcode 会编译插件框架并通过 Debug 启动微信,此时插件注入完成,微信菜单栏会出现微信小助手。
5.4 常见编译错误处理
- 找不到 Framework(Error: Framework not found):先单独执行一次 Build(
command + B),确保WeChatPlugin.framework产物生成后再 Run; - 环境配置问题(证书、签名、开发环境等):属于 macOS 逆向开发常见的环境类问题,需按本地 Xcode 与系统环境逐一排查(如代码签名、App Transport Security、沙盒权限等),原文档此处指向作者博客,这里不再展开外部内容。
六、升级插件
6.1 懒癌版升级
已通过 Oh My WeChat 安装的用户,再次运行 omw 即可自动拉取最新版本并完成覆盖升级。
6.2 脚本式升级(Update.sh)
仓库 Other 目录下还提供了独立的 Other/Update.sh,其核心逻辑与安装脚本一致(备份 → 拷贝 framework → insert_dylib 注入),并在最后多执行一步:
${shell_path}/UpdateRemoteControlCommandsPlist.py
该 Python 脚本(Other/UpdateRemoteControlCommandsPlist.py)的作用是为老用户自动同步远程控制的指令列表 plist:以 Products/Debug/WeChatPlugin.framework/Resources/TKRemoteControlCommands.plist 为模板,对微信沙盒目录 ~/Library/Containers/com.tencent.xinWeChat/Data/Documents/TKWeChatPlugin/ 下每个用户已有的 TKRemoteControlCommands.plist 做合并——保留用户已存在的指令配置(按 function 字段匹配),只补充新增指令,避免升级后用户自定义的远程指令配置丢失。
七、卸载
7.1 一键卸载
打开 Terminal(终端),将解压后 Other 文件夹中的 Uninstall.sh 拖入终端回车即可。
7.2 卸载脚本逻辑
Other/Uninstall.sh 的核心逻辑如下:
if [ -f "$app_executable_backup_path" ]
then
rm "$app_executable_path"
rm -rf "$framework_path"
mv "$app_executable_backup_path" "$app_executable_path"
...
else
echo "\n\t未发现微信小助手"
fi
即:删除被注入的微信可执行文件与 WeChatPlugin.framework,再将安装时备份的 WeChat_backup 还原为原始微信可执行文件,实现完整回滚。若检测不到备份文件,则提示“未发现微信小助手”。
7.3 手动兜底卸载
若卸载脚本失败,脚本会提示手动操作路径:到 /Applications/WeChat.app/Contents/MacOS 目录下,删除 WeChatPlugin.framework 与 WeChat 两个文件,并将 WeChat_backup 重命名为 WeChat,微信即恢复原状。
八、常见问题排查
| 现象 | 原因 | 处理方式 |
|---|---|---|
Permission denied(无权限) |
微信目录属于 root,当前用户不可写 | 执行 sudo chown -R $(whoami) /Applications/WeChat.app(README 中亦有 sudo chmod -R 777 的备选方案) |
| 提示“应用程序文件夹中未发现微信” | 微信被重命名或移动到非标准路径 | 将微信恢复到 /Applications/WeChat.app(或中文名 /Applications/微信.app)后重试 |
| 已安装过,询问是否覆盖 | 检测到存在 WeChat_backup 备份 |
输入 y 覆盖,或改用 ./Install.sh --force 强制覆盖 |
| 重编译后 Run 报找不到 Framework | 插件框架产物尚未生成 | 先 Build(command + B)生成 WeChatPlugin.framework 再 Run |
| 菜单栏看不到微信小助手 | 安装未生效或微信未重启 | 完全退出微信后重新启动,确认菜单栏出现“微信小助手” |
九、结语
无论你选择 omw 一键安装、拖拽 Other/Install.sh 的普通安装,还是基于 Podfile + Xcode Scheme 的源码重编译,其本质都是“备份微信可执行文件 → 注入 WeChatPlugin 动态库”这一套流程。理解 Other/Install.sh 与 Other/Uninstall.sh 的备份/回滚机制后,你既能放心安装,也能在需要时完整还原微信。仓库内 Install.md、README.md 还提供了功能使用(自动回复、远程控制、Alfred 集成等)与更新日志的更多信息,可继续深入阅读。



