diff --git a/README.md b/README.md index 39db2b2..7f1b656 100644 --- a/README.md +++ b/README.md @@ -1,153 +1,136 @@ # WeChatIntercept -macOS 微信防撤回工具,持续更新,欢迎共建和 star。 - -## 最新版本 - -**支持微信 4.1.x 系列**,适配微信全新 C++ 架构,通过 DYLD 运行时注入实现防撤回。内置**特征码自动寻址**机制,应对微信动态更新。 - -### 功能 - -- **对方撤回的消息保留可见**,弹出 macOS 系统通知告诉你撤回的消息内容: - - 文本消息:`拦截到「张三」撤回了一条消息:你好` - - 非文本:`拦截到「张三」撤回了一条消息:[图片] / [视频] / [文件] / [语音] / [红包] / ...` - - 拿不到原文时降级为:`拦截到「张三」撤回了一条消息` -- 微信动态更新后自动适配(特征码搜索) - -### 适用范围 - -- macOS 微信 4.1.x 系列(4.1.9 / 4.1.10 已验证,更新版本依赖运行时自动寻址) -- Apple Silicon(arm64)及 Intel(x86_64) -- macOS Sequoia / Sonoma / Ventura / Tahoe 等 - -### 依赖 - -macOS 系统自带工具,无需额外安装: - -- clang(Xcode Command Line Tools) -- python3 -- codesign -- lldb(仅消息原文功能需要;Xcode CLT 自带) - -如未安装 Xcode Command Line Tools,运行:`xcode-select --install` +macOS 微信防撤回工具,支持微信 4.1.x 系列,欢迎共建和 star。 --- -## 使用 +## 功能 -### 基础安装(防撤回) +| 功能 | 说明 | +| -------- | ------------------------------------------------------------------------ | +| 防撤回 | 对方撤回的消息保留可见,自己撤回正常工作 | +| 撤回通知 | 弹出 macOS 系统通知,显示谁撤回了什么内容 | +| 消息原文 | 通知中展示被撤回的原始消息(消息内容文本 / [图片] / [视频] / [文件] 等) | +| 自动适配 | 内置特征码搜索,微信小版本更新后无需手动操作 | + +通知效果: + +- `拦截到「张三」撤回了一条消息:你好` +- `拦截到「张三」撤回了一条消息:[图片]` +- 拿不到原文时降级:`拦截到「张三」撤回了一条消息` + +--- + +## 快速开始 ```bash -chmod +x patch.sh # 添加可执行权限 -./patch.sh # 安装防撤回 -./patch.sh --uninstall # 卸载防撤回 -./patch.sh --help # 查看所有命令 +# 1. 安装防撤回(必须) +chmod +x patch.sh +./patch.sh + +# 2. 安装消息监听(可选,撤回通知带原文) +./patch.sh --monitor-install ``` -首次运行可能需要约 30 秒(自动解除系统文件保护并重签名)。 +完成。微信会自动重启,之后对方撤回消息时你会收到系统通知。 -### 可选:启用"撤回通知带原文" +--- -完成基础安装后,安装消息监听服务,撤回通知就会带上原文(当前只支持私聊,群聊暂不支持)。 +## 命令一览 + +| 命令 | 作用 | +| -------------------------------- | -------------------------------------- | +| `./patch.sh` | 安装防撤回 | +| `./patch.sh --monitor-install` | 安装消息监听(后台自动运行,开机自启) | +| `./patch.sh --monitor-status` | 查看监听状态 | +| `./patch.sh --monitor-uninstall` | 卸载消息监听 | +| `./patch.sh --uninstall` | 卸载防撤回 | +| `./patch.sh --help` | 查看帮助 | + +--- + +## 适用范围 + +- macOS 微信 4.1.x(4.1.9 / 4.1.10 已验证) +- Apple Silicon(arm64)+ Intel(x86_64) +- macOS Sequoia / Sonoma / Ventura / Tahoe + +--- + +## 依赖 + +macOS 系统自带,无需额外安装: + +- clang / python3 / codesign / lldb(Xcode Command Line Tools) + +如未安装:`xcode-select --install` + +--- + +## 注意事项 + +1. **首次运行**约需 30 秒(解除系统文件保护 + 重签名) +2. **通知权限**:需给「脚本编辑器」开启通知权限,否则看不到弹窗 + image +3. **微信动态更新**:微信存在动态更新机制,版本号不变,但方法地址会变,重新运行`./patch.sh`即可,脚本会自动寻址 +4. **消息原文覆盖率**:私聊 + 大部分群聊可正常获取;部分群聊因对象结构差异会降级为不带原文(后续优化) + +--- + +## 排查 + +防撤回不生效时: ```bash -./patch.sh --monitor-install # 安装(后台自动运行,开机自启) -./patch.sh --monitor-status # 查看状态 -./patch.sh --monitor-uninstall # 卸载 +cat /tmp/antirevoke_debug.log # 查看 hook 安装日志 +cat /tmp/wechat_monitor_daemon.log # 查看消息监听日志 +./patch.sh --monitor-status # 查看监听状态 ``` -安装后无需手动操作。微信启动时自动开始监听消息、微信关闭后自动收尾、下次启动再次跟随。 +关键日志含义: -不安装也不影响防撤回主功能,撤回通知降级为不带原文。 +- `快速路径命中` / `特征码搜索找到` → hook 安装成功 +- `hook 安装失败` → 微信版本变化较大,需更新脚本 -> **已知限制**:部分群聊消息因内部对象结构差异,可能无法缓存原文,撤回时会降级为不带原文的通知。私聊消息和大部分群聊消息可正常获取原文。 +提交 issue 时请附带微信版本和日志文件。 -> **注意**:需要给脚本编辑器打开通知权限! -> image +--- -### 调试模式(仅开发用) +## 卸载 ```bash -./patch.sh --debug # 不装 hook,仅签名允许 lldb attach -./patch.sh --monitor # 前台运行消息监听(调试用,Ctrl+C 退出) -cat /tmp/antirevoke_debug.log # 防撤回日志 -cat /tmp/wechat_monitor_daemon.log # 监听 daemon 日志 -cat /tmp/wechat_msg_cache.tsv # 消息缓存 +./patch.sh --monitor-uninstall # 卸载消息监听(如安装过) +./patch.sh --uninstall # 卸载防撤回,恢复原始微信 ``` --- -### 排查步骤 +## 调试(开发者) -如果防撤回功能不生效: - -1. 查看运行时日志:`cat /tmp/antirevoke_debug.log` -2. 关键日志: - - `[已适配]` / `[未适配]` — build 号识别情况 - - `快速路径命中` / `特征码搜索找到` — hook 安装路径 - - `hook 安装失败` — 需要更新脚本,请前往 GitHub 检查最新版本或提交 issue -3. 提交 issue 时附带: - - 微信版本:`defaults read /Applications/WeChat.app/Contents/Info.plist CFBundleShortVersionString` 与 `CFBundleVersion` - - 调试日志:`/tmp/antirevoke_debug.log` +```bash +./patch.sh --debug # 仅签名允许 lldb attach,不装 hook +./patch.sh --monitor # 前台运行消息监听(Ctrl+C 退出) +``` --- -## 已知限制 - -- **聊天框内无撤回提示**:由于微信 4.x 的架构限制(C++ 实现 + 符号 strip + 数据库加密),无法在聊天界面内插入系统消息。替代方案为 macOS 系统通知。 - -- **撤回通知原文需 monitor 服务运行**:通过 `./patch.sh --monitor-install` 安装后自动后台运行。未安装时撤回通知降级为不带原文。 - -- **monitor 运行时微信会被 lldb attach**:性能影响极小(每条消息触发约 1ms 断点回调)。如果不需要原文功能,不安装 monitor 即可。 - ---- - -## 旧版本 - -支持微信 3.7.0 及更早版本,基于 DYLD 注入 + Method Swizzling,支持撤回提示和自定义前缀。 - -### 功能 - -1. 防撤回(支持聊天框内拦截提示) -2. 免认证登录 -3. 拦截提示语自定义前缀 - -image - -### 微信 v3.7.0 下载 - -[微信 v3.7.0 版本](https://dldir1.qq.com/weixin/mac/WeChatMac.dmg) - -### 使用方法 - -- **安装**:cd 到 WeChatIntercept 文件夹,将 `Install.sh` 拖到终端,输入密码回车,重启微信。 -- **卸载**:将 `Uninstall.sh` 拖到终端回车。 -- **自定义前缀**:安装成功后重启微信,屏幕左上角微信菜单栏有个小助手菜单,修改后点击关闭即可。 - ---- - -## 常见问题 - -1. **无法打开 "insert_dylib",因为无法验证开发者** - - 在系统安全性与隐私处点击允许。 - -2. **截屏无法使用,已添加屏幕录制权限仍不行** - - 在系统安全性与隐私中删除微信,重新添加,重启微信即可。(感谢 [Kylelkh](https://github.com/Kylelkh)) - -3. **M1 芯片怎么使用** - - 安装 Rosetta,在微信属性中勾选"使用 Rosetta 打开"。(感谢 [Mercury2699](https://github.com/Mercury2699)、[bolosea](https://github.com/bolosea)) - -4. **微信版本号没变,但防撤回失效** - - 微信存在动态更新机制,版本号不变,但方法地址会有变化,重新运行`./patch.sh`即可 - ## 风险说明 -1. 微信每次升级后,地址、结构体字段、运行时行为都可能变化,补丁可能立即失效。脚本内置特征码自动寻址机制可应对函数地址变化,但无法应对函数实现/消息对象结构的根本变化。 +1. 微信升级后补丁可能失效,脚本内置自动寻址尽力兼容,但无法应对函数实现的根本变化 +2. 仅承诺已验证版本(4.1.9 / 4.1.10),其他 build 号尽力支持 +3. 仅用于技术研究,请自行承担使用风险 -2. 本项目仅承诺仓库内标明的已验证版本(4.1.9 / 4.1.10);4.1.x 系列其他 build 号通过运行时自动寻址尽力支持,但不保证 100% 兼容。 +--- -3. 本项目仅用于技术研究与兼容性分析,请自行承担使用风险。 +## 旧版本(微信 3.7.0) + +支持微信 3.7.0 及更早版本,基于 Method Swizzling,支持聊天框内撤回提示 + 自定义前缀。 + +image + +```bash +# 安装:将 Install.sh 拖到终端执行 +# 卸载:将 Uninstall.sh 拖到终端执行 +``` + +[微信 v3.7.0 下载](https://dldir1.qq.com/weixin/mac/WeChatMac.dmg)