[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-76147":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":12,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":27,"discoverSource":28},76147,"wechat-antirecall","fzlzjerry\u002Fwechat-antirecall","fzlzjerry","antirecall for macos wechat 4 or later",null,"Swift",237,24,2,5,0,30,104,72,86.19,false,"main",true,[],"2026-06-12 04:01:20","# wechat-antirecall\n\nmacOS 微信 4 防撤回补丁工具。工具只会处理 `patches.json` 中已知的\nWeChat 构建号；遇到未知版本会拒绝写入，避免猜地址造成损坏。\n\n> 1、使用前建议先读完“快速开始”和“恢复备份”。安装会修改\n> `\u002FApplications\u002FWeChat.app` 内的二进制并重新签名，务必先完全退出微信。\n\n> 2、遇到问题请先查看 安装故障排查(FAQ) 、使用故障排查(FAQ)、搜索 issues 解决\n\n> 3、提issues 请备注 版本号、构建号、使用环境\n\n\n## 快速开始\n\n最安全的流程是：先确认版本，再 dry-run，最后用 release 可执行文件安装。\n\n```bash\nswift run wechat-antirecall versions --app \u002FApplications\u002FWeChat.app\nswift run wechat-antirecall install --with-tip --dry-run --app \u002FApplications\u002FWeChat.app\nswift build -c release\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --app \u002FApplications\u002FWeChat.app\n```\n\n安装时会在被修改的二进制旁边自动创建备份，例如：\n\n```text\nwechat.dylib.wechat-antirecall-backup-20260505-143000\n```\n\n恢复命令见 [恢复备份](#恢复备份)。\n\n## 支持版本\n\n| 构建号 | 架构 | 支持能力 | 补丁目标 |\n| --- | --- | --- | --- |\n| 268575 | arm64 | 静默防撤回、提示模式、多开、屏蔽更新 | `Contents\u002FMacOS\u002FWeChat`、`Contents\u002FResources\u002Fwechat.dylib` |\n| 268596 | arm64 | 静默防撤回、提示模式、屏蔽更新 | `Contents\u002FResources\u002Fwechat.dylib` |\n| 268597 | arm64 | 静默防撤回、提示模式、自定义提示、屏蔽更新 | `Contents\u002FResources\u002Fwechat.dylib` |\n| 268599, 268601 | arm64 | 静默防撤回、提示模式、自定义提示、屏蔽更新 | `Contents\u002FResources\u002Fwechat.dylib` |\n\n可下载的微信 4.1.9 安装包：\n\n- [微信 4.1.9.55 (38902)][wechat-4-1-9-55]\n- [微信 4.1.9.57 (38937)][wechat-4-1-9-57]\n\n[wechat-4-1-9-55]: https:\u002F\u002Fdldir1v6.qq.com\u002Fweixin\u002FUniversal\u002FMac\u002FxWeChatMac_universal_4.1.9.55_38902.dmg\n[wechat-4-1-9-57]: https:\u002F\u002Fdldir1v6.qq.com\u002Fweixin\u002FUniversal\u002FMac\u002FxWeChatMac_universal_4.1.9.57_38937.dmg\n\n微信 4.1.9 的防撤回和屏蔽更新补丁目标在\n`Contents\u002FResources\u002Fwechat.dylib`，不是主二进制。工具会先单独重签被\npatch 的 dylib，再重签整个 app，避免运行到被修改代码页时触发\n`Code Signature Invalid`。\n\n## 选择模式\n\n- **静默防撤回**：默认模式。不显示撤回提示，原消息保留在聊天中。\n- **提示模式**：加 `--with-tip`。保留微信原本的撤回提示，同时阻止删除原消息。\n- **自定义提示**：加 `--runtime-tip`。支持构建号 `268597`、`268599`、`268601`，会安装\n  `libWeChatAntiRecallRuntime.dylib` 并注入 `LC_LOAD_DYLIB`。\n- **无限多开**：加 `--multi-instance`。当前仅（微信 4.1.9）构建号 `268575` 支持。\n- **屏蔽更新**：加 `--block-update`。如果只想屏蔽更新，不改防撤回，用\n  `--update-only`。\n\n`--runtime-tip` 会自动启用提示模式，不需要再加 `--with-tip`。\n`--update-only` 不能与 `--with-tip`、`--runtime-tip`、`--multi-instance`\n同时使用。\n\n多开安装完成后，可以用下面命令启动新实例：\n\n```bash\nopen -n \u002FApplications\u002FWeChat.app\n```\n\n也可以使用多开启动器：[WeChatMulti](https:\u002F\u002Fgithub.com\u002Floohalh\u002FWeChatMulti)。\n\n## 标准安装流程\n\n### 1. 检查当前微信\n\n```bash\n# 退出当前打开的微信\npkill -x WeChat\nswift run wechat-antirecall versions --app \u002FApplications\u002FWeChat.app\n```\n\n如果输出 `current WeChat build is not supported by patches.json`，不要继续安装。\n\n### 2. dry-run\n\ndry-run 不会改文件，用来确认补丁地址能命中。\n\n```bash\nswift run wechat-antirecall install --dry-run --app \u002FApplications\u002FWeChat.app\nswift run wechat-antirecall install --with-tip --dry-run --app \u002FApplications\u002FWeChat.app\nswift run wechat-antirecall install --with-tip --block-update --dry-run --app \u002FApplications\u002FWeChat.app\nswift run wechat-antirecall install --update-only --dry-run --app \u002FApplications\u002FWeChat.app\n```\n\n需要多开时：\n\n```bash\nswift run wechat-antirecall install --with-tip --multi-instance --dry-run --app \u002FApplications\u002FWeChat.app\nswift run wechat-antirecall install --with-tip --block-update --multi-instance --dry-run --app \u002FApplications\u002FWeChat.app\n```\n\n### 3. 安装\n\n安装前请先完全退出微信。不要在微信仍运行时写入补丁。\n\n```bash\nswift build -c release\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --app \u002FApplications\u002FWeChat.app\n```\n\n常用安装组合：\n\n```bash\nsudo .build\u002Frelease\u002Fwechat-antirecall install --app \u002FApplications\u002FWeChat.app\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --app \u002FApplications\u002FWeChat.app\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --block-update --app \u002FApplications\u002FWeChat.app\nsudo .build\u002Frelease\u002Fwechat-antirecall install --update-only --app \u002FApplications\u002FWeChat.app\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --multi-instance --app \u002FApplications\u002FWeChat.app\n```\n\n`patch` 是 `install` 的别名。完整参数可以运行：\n\n```bash\nswift run wechat-antirecall help\n```\n\n## 自定义撤回提示\n\n自定义提示由两部分组成：\n\n1. `tip-phrase` 写入当前用户的微信容器偏好配置。\n2. `install --runtime-tip` 把运行时 hook 安装进 WeChat app。\n\n`tip-phrase` 必须用普通用户执行，不要加 `sudo`。\n\n```bash\nswift run wechat-antirecall tip-phrase get\nswift run wechat-antirecall tip-phrase preview \"已拦截 {from} 于 {time} 撤回的一条消息\" --from 张三\nswift run wechat-antirecall tip-phrase set \"已拦截 {from} 于 {time} 撤回的一条消息\"\nswift run wechat-antirecall tip-phrase reset\n```\n\n短语规则：\n\n- 最长 120 个字符。\n- 不能包含换行。\n- 不能包含 CDATA 结束标记 `]]>`。\n- `{from}` 会替换成发送者备注或昵称。\n- `{time}` 会替换成撤回时间，格式为 `HH:mm`。\n- 未配置时默认显示 `已拦截一条撤回消息`。\n\n配置文件位置：\n\n```text\n~\u002FLibrary\u002FContainers\u002Fcom.tencent.xinWeChat\u002FData\u002FLibrary\u002FPreferences\u002Fcom.tencent.xinWeChat.plist\n```\n\n安装运行时 hook：\n\n```bash\nswift build -c release\n.build\u002Frelease\u002Fwechat-antirecall install --runtime-tip --dry-run --app \u002FApplications\u002FWeChat.app\nsudo .build\u002Frelease\u002Fwechat-antirecall install --runtime-tip --app \u002FApplications\u002FWeChat.app\n```\n\n`268599`、`268601` 的 runtime hook 会先确认 XML 是 `\u003Crevokemsg>` 撤回事件，\n再读取和改写撤回提示字段。视频、链接等非撤回 XML 不会进入撤回消息字段读取路径。\n\n修改短语后请完全退出并重新打开微信。已启动的 WeChat 进程可能持有旧的\n偏好缓存，重启后 runtime 会重新读取容器 plist。\n\n### 调试探针\n\n撤回调试探针默认关闭。只有在需要继续分析撤回 XML 或消息元数据时再打开。\n\n```bash\nswift run wechat-antirecall tip-phrase probe get\nswift run wechat-antirecall tip-phrase probe on\nswift run wechat-antirecall tip-phrase probe off\n```\n\n`probe on` 会把 `msgType`、`newmsgid`、撤回提示和 XML 片段写入\nmacOS Console。日志可能包含聊天相关元数据，收集完请及时关闭。\n\n## 重新安装或切换模式\n\n如果已经安装过旧补丁，想从静默模式切到提示模式，或重新安装 runtime，可以加\n`--no-backup` 覆盖当前补丁：\n\n```bash\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --app \u002FApplications\u002FWeChat.app --no-backup\nsudo .build\u002Frelease\u002Fwechat-antirecall install --runtime-tip --app \u002FApplications\u002FWeChat.app --no-backup\nsudo .build\u002Frelease\u002Fwechat-antirecall install --update-only --app \u002FApplications\u002FWeChat.app --no-backup\n```\n\n`--no-backup` 只是不再创建新备份，不能绕过权限、签名或 App Management 限制。\n\n## 验证签名\n\n微信 4.1.9 的常规防撤回或屏蔽更新：\n\n```bash\ncodesign --verify --strict --verbose=2 \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002Fwechat.dylib\ncodesign --verify --deep --strict --verbose=2 \u002FApplications\u002FWeChat.app\n```\n\n如果安装了 `--multi-instance`，还会修改主二进制，可额外检查：\n\n```bash\ncodesign --verify --strict --verbose=2 \u002FApplications\u002FWeChat.app\u002FContents\u002FMacOS\u002FWeChat\n```\n\n安装 `--runtime-tip` 后可以额外检查 runtime dylib：\n\n```bash\ncodesign --verify --strict --verbose=2 \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002FlibWeChatAntiRecallRuntime.dylib\ncodesign --verify --strict --verbose=2 \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002Fwechat.dylib\ncodesign --verify --deep --strict --verbose=2 \u002FApplications\u002FWeChat.app\n```\n\n## 恢复备份\n\n恢复前请先退出微信。\n\n```bash\nsudo .build\u002Frelease\u002Fwechat-antirecall restore \\\n  --binary Contents\u002FResources\u002Fwechat.dylib \\\n  --backup \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002Fwechat.dylib.wechat-antirecall-backup-YYYYMMDD-HHMMSS \\\n  --app \u002FApplications\u002FWeChat.app\n```\n\n如果要恢复 `--multi-instance` 涉及的主二进制备份，改用：\n\n```bash\nsudo .build\u002Frelease\u002Fwechat-antirecall restore \\\n  --binary Contents\u002FMacOS\u002FWeChat \\\n  --backup \u002FApplications\u002FWeChat.app\u002FContents\u002FMacOS\u002FWeChat.wechat-antirecall-backup-YYYYMMDD-HHMMSS \\\n  --app \u002FApplications\u002FWeChat.app\n```\n\n恢复 `wechat.dylib` 备份后，runtime 的 load command 会随备份一起消失。\n`Contents\u002FResources\u002FlibWeChatAntiRecallRuntime.dylib` 即使还在目录里，也不会再被加载。\n\n\n\n## 安装故障排查(FAQ)\n\n\n### 1、权限不足\n\n如果看到类似错误：\n\n```text\nerror: \"wechat.dylib\" couldn't be copied because you don't have permission to access \"Resources\".\n```\n\n不要直接用 `swift run ... install` 安装。请先构建 release，再用 `sudo`\n执行 `.build\u002Frelease\u002Fwechat-antirecall`。\n\n```bash\nswift build -c release\nsudo .build\u002Frelease\u002Fwechat-antirecall install --with-tip --app \u002FApplications\u002FWeChat.app\n```\n\n`--no-backup` 不能解决权限问题，后续 patch 和重签名仍然需要写入 app bundle。\n\n#### sudo 仍然写不进去\n\n先确认 `sudo` 是否真的能写目标目录：\n\n```bash\nsudo sh -c 'id -u; touch \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002F.wechat-antirecall-write-test && rm \u002FApplications\u002FWeChat.app\u002FContents\u002FResources\u002F.wechat-antirecall-write-test'\n```\n\n如果第一行输出 `0`，但 `touch` 仍然报 `Operation not permitted`，通常是\nmacOS 隐私权限拦截。到：\n\n- `System Settings -> Privacy & Security -> App Management`\n- 必要时再到 `Full Disk Access`\n\n给当前运行命令的应用授权，例如 Terminal、iTerm、VS Code、Cursor 或 Codex。\n改完后退出并重新打开终端，再重新执行安装命令。\n\n### 2、微信仍在运行\n\n工具提示 `WeChat 仍在运行` 时，请先完全退出微信再安装或恢复。这个检查是为了\n避免旧进程在执行到被修改代码页时被 macOS 以 `Code Signature Invalid` 终止。\n\n### 3、找不到 runtime dylib\n\n如果 `--runtime-tip` 提示找不到 `libWeChatAntiRecallRuntime.dylib`，先运行：\n\n```bash\nswift build -c release\n```\n\n也可以显式指定 dylib：\n\n```bash\nsudo .build\u002Frelease\u002Fwechat-antirecall install --runtime-dylib .build\u002Frelease\u002FlibWeChatAntiRecallRuntime.dylib --app \u002FApplications\u002FWeChat.app\n```\n\n## 使用故障排查(FAQ)\n\n\n### 1、打开 `微信` 频繁弹权限申请窗\n\n\n设置 - 隐私与安全性 - 完全磁盘访问权限(或者重复弹窗的对应权限)： 选择`微信`,点列表底部 `-` 删除，再点列表底部 `+` 选择 `微信`， 添加后会弹出生效提示窗，选择 `退出并重新打开` 生效\n\n\n\n## 维护 patches.json\n\n`patches.json` 来自 WeChatTweak \u002F 社区 fork 的 Mach-O patch 思路，并补充了\n微信 4 的防撤回、提示模式、多开和屏蔽更新目标。\n\n示例：\n\n```json\n{\n  \"version\": \"268596\",\n  \"targets\": [\n    {\n      \"identifier\": \"revoke\",\n      \"binary\": \"Contents\u002FResources\u002Fwechat.dylib\",\n      \"entries\": [\n        {\n          \"arch\": \"arm64\",\n          \"addr\": \"47647a0\",\n          \"expected\": \"E00F0034\",\n          \"asm\": \"7F000014\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n说明：\n\n- `binary` 省略时默认是 `Contents\u002FMacOS\u002FWeChat`。\n- `expected` 支持单个十六进制字符串或字符串数组。\n- 提示模式会同时接受原始字节和已安装静默补丁的字节，方便直接切换模式。\n- 显式请求 `--with-tip` 或 `--block-update` 时，当前构建号必须提供\n  `revoke-tip` 或 `update` 目标；工具不会静默降级。\n\n## 参考\n\n- [sunnyyoung\u002FWeChatTweak](https:\u002F\u002Fgithub.com\u002Fsunnyyoung\u002FWeChatTweak-macOS) - upstream，包含 `Block message recall` 功能\n- [tanranv5\u002FWeChatTweak](https:\u002F\u002Fgithub.com\u002Ftanranv5\u002FWeChatTweak) - 社区 fork，补充较新 x86_64 配置，引入 `binary` 字段\n- [zetaloop\u002FBetterWX](https:\u002F\u002Fgithub.com\u002Fzetaloop\u002FBetterWX) - Windows 版微信 4 的同类提示模式补丁\n- [X1a0He\u002FX1a0HeWeChatPlugin](https:\u002F\u002Fgithub.com\u002FX1a0He\u002FX1a0HeWeChatPlugin) - 自定义撤回提示短语功能参考\n- [naizhao\u002FWeChatTweak](https:\u002F\u002Fgithub.com\u002Fnaizhao\u002FWeChatTweak\u002Fblob\u002Fmaster\u002FMAINTAINING.md) - 社区 fork，维护指南\n\n## 友链\n\n- [linux.do](https:\u002F\u002Flinux.do) - 新的理想型社区\n","wechat-antirecall 是一个针对 macOS 微信 4 及以上版本的防撤回补丁工具。它通过修改微信应用程序内的二进制文件来实现消息防撤回、提示模式、自定义提示、多开以及屏蔽更新等功能，支持特定构建号的 arm64 架构版本，并在安装过程中自动创建备份以确保安全性。该工具适用于希望保留聊天记录中被撤回消息的用户，或需要在同一台 Mac 上运行多个微信实例的场景。使用前需完全退出微信并严格按照文档中的步骤操作，以避免潜在风险。","2026-06-11 03:54:39","CREATED_QUERY"]