RevokeMsgPatcher 防撤回补丁:3 步让微信/QQ/TIM 撤回的消息不再消失
【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher
一条消息刚发出去就被对方撤回,聊天窗口里只剩一句"对方撤回了一条消息"。开源项目 RevokeMsgPatcher 给出的思路很直接:既然消息是被程序逻辑撤掉的,那就把这段逻辑在二进制层面改掉。这款 Windows 平台的消息撤回恢复工具(即常说的微信防撤回教程里的主角)通过修改微信、QQ、TIM 核心 DLL 中的几个字节,让撤回操作彻底失效——被撤回的内容仍留在对话框里,随时可看。
"消息已撤回"带来的麻烦
撤回功能本意是给用户纠错的机会,但对某些场景并不友好:
- 工作沟通:同事误发的敏感信息撤回后,群里的讨论依据就断了,翻记录找不到源头;
- 重要信息:对方撤回的关键内容(地址、金额、承诺)无从追溯,只能靠截图存证;
- 审计留痕:需要完整沟通记录的场景里,"消失"本身就是最大的问题。
RevokeMsgPatcher 的定位就是把这些被撤回的消息"钉"在原地。它不是一个常驻进程,而是一次性的文件修改工具——打完补丁后重启软件,防撤回能力就随 DLL 生效。
三步跑通微信防撤回补丁安装
动手前的检查清单
| 检查项 | 要求 |
|---|---|
| 操作系统 | Windows 7 及以上,不支持 XP |
| 运行环境 | .NET Framework 4.5.2 或更高(低于此版本打开程序可能无反应或直接报错) |
| 运行权限 | 以管理员身份运行 RevokeMsgPatcher |
| 目标软件 | 微信/QQ/TIM 必须完全退出,包括后台进程 |
操作顺序
- 获取工具:从 Releases 下载最新版(当前补丁库版本为 2.1),解压即用;
- 自动定位路径:安装版微信/QQ/TIM 一般能被自动从注册表读出来,绿色版需要手动指定安装目录;
- 点击"防撤回":界面可能会有一段时间无响应,属于正常现象,等它扫完字节再动。
打补丁的过程本质是改写
WeChatWin.dll或IM.dll,杀毒软件很可能弹出警告,放行即可。
打完之后的两个动作
- 重新启动目标软件,验证撤回的消息是否照常显示;
- 记住一条铁律:软件更新后必须重新打补丁,官方说明里特意加粗强调了这一点。
防撤回补丁内部到底改了什么
先找到 "revokeMsg",再改一个字节
补丁不是乱改的。以微信 4.0.3.36 为例,工具会在Weixin.dll里搜索一段特征字节:
117,33,72,184,114,101,118,111,107,101,109,115,...
其中114,101,118,111,107,101,109,115恰好就是 ASCII 字符revokeMsg——一个和"撤回"直接相关的字符串。整段特征确认位置后,只需把开头的117(0x75,一条条件跳转)替换成235(0xEB,JMP 无条件跳转):
235,33,72,184,114,101,118,111,107,101,109,115,...
条件跳转被换成无条件跳转后,"要不要执行撤回处理"的判断被绕过去了。不同版本的改法略有差异:老版本微信常把116(0x74,JZ/JE 类条件跳转)改成235,个别更老的版本(如 2.8.0.112)还会把某一处字节直接换成195(0xC3,RET 返回指令),让撤回处理函数提前退场。
动手之前,先对 SHA1
每条补丁记录都带着两个哈希值。以WeChatWin.dll3.3.5.25 为例,记录里写着:
- 修改前 SHA1:
3e94753ccbc2799d98f3c741377e99bdae33b4cf - 修改后 SHA1:
ab98f83fc16674ac4911380882c79c3ca4c2fd71
工具执行时会先计算目标文件当前的 SHA1 与SHA1Before比对,一致才允许写入;写完后再用SHA1After复核。这样能保证补丁只落在"确认无误"的文件上,改错了也一目了然。
两套版本匹配方式
补丁库里其实并存两种描述修改点的方式:
- 精确改点(老版本微信、QQ、TIM):直接指定字节偏移,例如
IM.dll9.2.3.26592 在偏移371605处写入235,9,144,144,144——前两个字节是JMP +9,后面三个144(0x90,NOP)用来把原来的调用指令填平; - 特征码搜索替换(新版本通用):给定
Search/Replace字节串,配合StartVersion/EndVersion划定版本区间,让同一份规则覆盖一片相邻版本。
匹配本身由 Matcher 模块 里的 Boyer-Moore 算法(坏字符 + 好后缀双启发式)完成,ModifyFinder.cs 还负责交叉校验:如果特征串搜不到、但替换后的串已存在,会判定"补丁已安装"并提示取消勾选对应功能,避免重复打补丁。
防撤回版本支持对照
| 软件 | 被修改的文件 | 补丁库覆盖情况(v2.1) |
|---|---|---|
| 微信 3.x | WeChatWin.dll(3.7 版本同时含WeChat.exe) | 3.1.0.00 ~ 4.0.3.0,另有 3.3.5.x、2.8.0.x 等老版本的精确改点 |
| 微信 4.x(新架构) | Weixin.dll | 4.0.0.0 起,含 4.1.12.0 等新版 |
Bin\IM.dll | 9.0.4.23786 ~ 9.2.3.26592 精确改点;9.1.6.00000 起、9.4.7.00000 起走特征码 | |
| TIM | Bin\IM.dll | 3.0.0.00000 起(含 3.4.0.00000 之后的规则) |
| QQ NT | versions\{version}\resources\app\wrapper.node | 9.8.0.19000 起(含 9.8.0.19306~19307 的规则) |
| QQ 轻聊 | Bin\IM.dll | 7.9.14308.0 / 7.9.14314.0 |
完整的修改点清单就躺在 RevokeMsgPatcher.Assistant/Data/ 目录下,从 0.7 一路排到 2.1,每个小版本一份patch.json,方便对照研究每个版本的具体改法。
除了防撤回,微信这一支还额外提供多开能力:补丁规则里用144(NOP)和233(0xE9,近跳转)替换互斥相关的指令,同一账号多实例共存。规则中甚至区分了"防撤回带提示(新)"这种保留撤回提示、只阻止内容消失的温和模式。
补丁失效排查速查
- 杀毒软件拦截/文件被恢复:工具修改的是
WeChatWin.dll、IM.dll这类核心文件,误报很常见。把工具加入信任,再确认 DLL 没被还原。 - 提示"已经安装了对应功能的补丁":说明特征串已搜不到、替换串已就位,取消勾选该功能即可,不用重复打。
- 提示"特征码匹配数不一致":通常是部分功能已被打过,或当前软件版本特征变了。先核对勾选的功能组合,是最新版且特征失效的话,等补丁库更新。
- 补丁打完、软件能开,但撤回照旧:确认用的工具是最新版、目标版本在上面的支持表里;然后重启软件再验证。
- 改了想还原:补丁会先把原文件备份成
.h.bak(见 FileHexEditor.cs 中的FileBakPath逻辑),把备份拷回去即可恢复原状。 - 软件刚更新:更新后补丁必然失效,重跑一遍流程,这是最常见的"防撤回突然没用"原因。
进阶:源码结构与配套工具
想深入的话,整个工程按职责切得很清楚:
- Modifier 模块:每个 App 一个修改器——WechatModifier.cs、WeixinModifier.cs、QQNTModifier.cs 等,负责找安装路径、组装修改点、执行写入;
- Matcher 模块:BoyerMooreMatcher.cs 与 FuzzyMatcher.cs 提供字节级搜索,ModifyFinder.cs 负责判定"该不该改、改没改过";
- Model 模块:
ModifyInfo、Change、ReplacePattern、TargetInfo定义了补丁 JSON 的完整数据结构。
仓库里还有一个独立子项目 RevokeMsgPatcher.MultiInstance/,是一个通用的微信多开工具,附带自己的进程管理逻辑(ProcessUtil.cs)。QQ NT 的补丁规则里还留有逆向笔记,比如 9.8.0.19306 规则备注了"重新定位msg_recall_worker.cc的HandleRecallSysMsg",对做逆向分析的人是一份现成的路线图。项目以 GPLv3 协议开源,早期方案源自 wechat_anti_revoke,2.1 版本 QQ NT 特征来自 NTQQAntiRecall,微信 4.0 之后的特征来自 BetterWX。
下次再看到"对方撤回了一条消息",那部分内容会安安静静留在原地——而你只需要记住:每次软件更新之后,这个补丁要重新打一遍。
【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考