| WeChatIntercept.framework | ||
| .gitignore | ||
| insert_dylib | ||
| Install.sh | ||
| LICENSE | ||
| patch.sh | ||
| README.md | ||
| Uninstall.sh | ||
| ZYCustomPrefix.data | ||
WeChatIntercept
macOS 微信防撤回工具。
最新版本(v4.1.9)
支持微信 4.1.9,适配微信全新 C++ 架构,纯二进制补丁,一键生效。
原理
修改 wechat.dylib 中的 isRevokeMessage() 函数,使其始终返回 false。微信将不再识别收到的撤回通知,原消息保持可见。不影响自己主动撤回消息。
适用范围
- macOS 微信 4.1.9(CFBundleVersion: 268602)
- Apple Silicon(arm64)及 Intel(x86_64)
使用
chmod +x patch.sh # 添加可执行权限
./patch.sh # 应用补丁
./patch.sh --status # 查看状态
./patch.sh --restore # 恢复原始
首次运行可能需要约 30 秒(自动解除系统文件保护)。
依赖
macOS 系统自带工具,无需额外安装:
- python3
- codesign
- tar
已知限制
-
无撤回提示:当前方案仅静默保留原消息,不会在聊天窗口中显示"对方撤回了一条消息"的提示。你不会知道对方曾经尝试撤回,只能注意到消息没有消失。
-
为什么不能像旧版那样在聊天框内显示提示?
旧版微信 macOS(3.x)使用 Objective-C 构建,核心逻辑暴露为 ObjC 方法,可以通过 Method Swizzling 在运行时拦截撤回处理函数,保留原消息的同时调用微信内部的消息插入 API 写入一条提示。
当前版本(4.1.9)的底层架构已完全不同:核心逻辑迁移到 C++ 实现(仅剩 65 个 ObjC 类,而代码段超过 90MB 均为 C++ 且符号已 strip)。撤回处理不再是独立的"删除旧消息"+"插入提示"两步操作,而是将整个消息对象替换为新的视图模型。在纯二进制补丁方式下,无法构造复杂的函数调用链来插入一条新消息到聊天记录中。
旧版本
支持微信 3.7.0 及更早版本,基于 DYLD 注入 + Method Swizzling,支持撤回提示和自定义前缀。
功能
- 防撤回(支持聊天框内拦截提示)
- 免认证登录
- 拦截提示语自定义前缀
微信 v3.7.0 下载
使用方法
- 安装:cd 到 WeChatIntercept 文件夹,将
Install.sh拖到终端,输入密码回车,重启微信。 - 卸载:将
Uninstall.sh拖到终端回车。 - 自定义前缀:安装成功后重启微信,屏幕左上角微信菜单栏有个小助手菜单,修改后点击关闭即可。
常见问题
-
无法打开 "insert_dylib",因为无法验证开发者
在系统安全性与隐私处点击允许。
-
截屏无法使用,已添加屏幕录制权限仍不行
在系统安全性与隐私中删除微信,重新添加,重启微信即可。(感谢 Kylelkh)
-
M1 芯片怎么使用
安装 Rosetta,在微信属性中勾选"使用 Rosetta 打开"。(感谢 Mercury2699、bolosea)
注意
- 微信更新后需重新运行对应版本的补丁
- 仅供学习研究用途