WeChatPlugin-MacOS 微信小助手完整安装指南:一键脚本、手动安装与源码重编译

原创2026-10-02 09:23:081,387 阅读
文章标签:即时通讯桌面应用逆向工程

WeChatPlugin-MacOS 微信小助手完整安装指南:一键脚本、手动安装与源码重编译

导读

WeChatPlugin-MacOS(微信小助手)是一款基于 dylib 注入技术为 macOS 版微信扩展能力的开源插件,支持消息防撤回、自动回复、远程控制、微信多开等能力。本文以仓库根目录的 Install.md 为骨架,系统讲解该插件的三种安装方式(Oh My WeChat 一键安装、普通拖拽安装、源码重编译)、底层安装脚本原理与卸载方法,并结合仓库内的安装脚本与配置源码给出可验证的依据,帮助你在自己的 Mac 上安全、正确地完成安装、升级与卸载。


一、安装原理与前置条件

1.1 插件是如何注入微信的

从仓库源码看,整个安装过程本质上是把编译好的 WeChatPlugin.framework 拷贝进微信 App 的二进制目录,并通过 insert_dylib 工具给微信的可执行文件写入一条动态库加载命令,让微信在启动时自动加载插件框架。

具体链路如下:

  1. Other/Install.sh 将 Products/Debug/WeChatPlugin.framework 复制到 /Applications/WeChat.app/Contents/MacOS/ 目录;
  2. 调用 Other/insert_dylib 在微信可执行文件中插入 WeChatPlugin.framework/WeChatPlugin 的 LC_LOAD_DYLIB 加载命令;
  3. 微信启动加载框架后,框架内的 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 源码压缩包并解压:

点击 clone or download 下载仓库并解压

3.2 打开终端

从应用程序 → 实用工具中打开 Terminal(终端):

从实用工具文件夹打开终端

3.3 拖拽 Install.sh 并回车

将解压后 Other 文件夹中的 Install.sh 文件直接拖入终端窗口,回车执行:

将 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

确认覆盖后:

  1. 将编译产物 WeChatPlugin.framework 递归复制到微信的 Contents/MacOS 目录;
  2. 以备份的原始可执行文件为输入,用 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 集成等)与更新日志的更多信息,可继续深入阅读。

登录后查看全文
WeChatPlugin-MacOS