ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

微信/QQ/TIM 防撤回补丁怎么做:一个 DLL 里的 5 字节,凭什么让撤回失效

微信/QQ/TIM 防撤回补丁怎么做:一个 DLL 里的 5 字节,凭什么让撤回失效 微信/QQ/TIM 防撤回补丁怎么做一个 DLL 里的 5 字节凭什么让撤回失效【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁我已经看到了撤回也没用了项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher你有没有过这种时刻刚把重要消息发给对方对方手快一撤回聊天里只剩一行你撤回了一条消息内容再也找不回来。RevokeMsgPatcher 就是干这件事的开源防撤回补丁工具它直接对 PC 版微信/QQ/TIM 的核心 DLL 做二进制修改让对方撤回消息后这条消息依然留在你的聊天记录里。整个过程不需要你懂汇编也不需要开调试器——你只负责选路径、点按钮剩下的交给工具。先弄清补丁到底改了哪一行汇编这类工具的通用做法都是在客户端内部找到处理撤回的那段代码然后改变它的走向。用大白话说程序原本写的是如果收到撤回通知就删掉这条消息我们要把如果去掉或者干脆把这段逻辑整个跳过去。对应的汇编层面改动只有两种套路把条件跳转改成无条件跳转——指令码0x74/0x75jz/jnz换成0xEBjmp原来的判断条件被抹掉程序只走一条路在条件跳转前塞几个空操作指令0x90即 NOP让跳转的偏移算不准、跳不到删除消息那个分支上去。微信走的是套路一目标是 WeChatWin.dllQQ/TIM 走的是套路二目标是 IM.dll两者在Bin\IM.dll路径下。工具里管这块逻辑的是Modifier/目录下的一组类WechatModifier、QQModifier、TIMModifier等它们都继承自抽象基类AppModifier每个应用只需要实现怎么找安装路径和怎么读版本号两件事其余流程全部复用。给几 MB 的 DLL 找一段代码特征码匹配找到目标代码的位置是整个工具最核心的难题。DLL 动辄几 MB、几千万字节而且每次版本更新字节布局都会变不可能靠固定偏移定位。解决办法是特征码匹配找一段足够独特的字节序列像字符串搜索一样在文件里搜它。特征码写在补丁数据库里仓库RevokeMsgPatcher.Assistant/Data/下按 0.7 到 2.1 的版本目录存着一份份patch.json。以微信 3.7.0.0 起的防撤回规则为例特征码和替换码都带了一个前导零字节作用相当于锚点防止特征从半个指令中间开始误匹配// 微信 3.7.0.0 起的防撤回规则节选自 patch.json { Search: [0,133,192,116,50,185,63,63,63,63,138], Replace: [0,133,192,235,50,185,63,63,63,63,138], Category: 防撤回 } // 对比可见只有一个字节不同——116(jnz) → 235(jmp) // 条件跳转被改成无条件跳转撤回分支从此失效QQ 的规则则是插 NOP同样的套路二。真正干活的匹配器有两个。FuzzyMatcher支持通配符0x3F——逆向里常有这种情况一段特征中间夹着一两个随版本变化的字节比如相对跳转的偏移固定下来就会失配通配符把它们挖掉即可// FuzzyMatcher先取通配符之前的前缀 // 用 Boyer-Moore 快速粗筛再逐个精确验证 byte[] head GetHead(pattern); int[] indexs BoyerMooreMatcher.MatchAll(content, head); // 前缀和整串一样长 → 直接返回否则继续逐位置验证粗筛加验证的两段式设计让通配符的开销几乎可以忽略。Boyer-Moore 为什么比逐字节比对快你可能会问Array.IndexOf不就完了对几百字节的特征码来说逐字节比对的常数很小但特征码是短而独特的而搜索目标整个 DLL很长这时 Boyer-Moore 的两个技巧就派上用场匹配从模式尾部开始遇到不匹配就按坏字符表和良好后缀表一次跳过一大段而不是只挪一个字节。代码在Matcher/BoyerMooreMatcher.cs里核心循环不长// 从模式末尾开始比对不匹配时取坏字符与好后缀 // 两者中更大的位移量一次跳过尽可能多的位置 while (s (n - m)) { j m - 1; while (j 0 pattern[j] text[s j]) j--; if (j 0) { firstShift s; return true; } // 全部命中 s Max(goodSuffixShifts[j], badCharShifts[(int)text[s j]] - (m - 1) j); }ModifyFinder.FindChanges则把匹配数对不对这件容易踩坑的事管了起来每条特征都命中才算正常匹配数偏少时它反过来用替换串再搜一遍——如果原特征码没了、替换后的字节却出现了说明这个功能已经打过补丁直接抛match_already_replace避免你重复打补丁造成混乱。三种认出目标 DLL 的方式按优先级依次降级光有特征码还不够工具得先确认这个文件确实是我要改的那个版本。FileHexEditor里给每个目标文件留了三种身份验证时按优先级降级方式依据命中后意味着什么SHA1Before 校验精确版本库文件是干净的直接按库里的固定偏移替换字节SHA1After 校验精确版本库文件已打过补丁报错终止防止重复修改版本范围 特征码通用特征码库落在[StartVersion, EndVersion]区间内走上面那套匹配三者都不中且版本号都对不上才报不支持如果版本号对得上但 SHA1 不通过提示语会点明可能使用过其他补丁程序——这是很典型的手术前核对外科医生的判断顺序先验身份再动刀。补丁库里微信、QQ、TIM 各自维护一份精确版本库 通用特征码库所以同一个IM.dllQQ 和 TIM 的防撤回特征码可以各写各的互不干扰TIM 防撤回也走这条路。动手打补丁从确认路径到落盘的完整流程确认环境满足 Windows 7 和 .NET Framework 4.5.2然后按这个顺序走彻底退出微信/QQ/TIM——文件被占用就写不进去这是最容易被忽略的前置条件以管理员身份运行工具等右下角拉取到最新补丁信息补丁数据库是跟版本走的本地Data/目录里从 0.7 排到 2.1选安装路径。工具先查注册表 Uninstall 键拿InstallLocation查不到就扫各盘符的Program Files\Tencent\...绿色版则手动指定。微信还有个历史包袱3.5.0.4 之后目录结构变了WechatModifier里专门写了按修改时间倒序遍历子目录的兜底逻辑界面读出版本号后看颜色绿色支持特征防撤回就可以点红色不支持说明版本还没进库勾选防撤回落盘。内部流程在AppModifier.Patch()里写得明明白白——先备份再修改失败即回滚// AppModifier.Patch()先备份所有文件 foreach (FileHexEditor editor in editors) editor.Backup(); // 再逐个打补丁任何一步抛异常 // 已改完的文件立即用备份 Restore() 还原 try { /* editor.Patch() 循环写回目标字节 */ } catch (Exception ex) { foreach (FileHexEditor editor in done) editor.Restore(); throw ex; }备份文件是原文件路径 .h.bak比如WeChatWin.dll.h.bak且不会覆盖同版本的旧备份。还原时它还会比对备份与当前文件的版本号不一致会弹窗让你确认防止你把 A 版本的备份盖到 B 版本的文件上。打完重启客户端即可。三句要紧的话客户端自动更新后字节布局变了必须重新打补丁杀毒软件对 WeChatWin.dll 的写入报警属正常现象放行即可另外微信支持顺带勾选多开改的是互斥体检查逻辑QQ/TIM 则没有这项。出事了怎么办按提示语对症排查打补丁失败时别慌工具的报错是有分类的对号入座提示大概率原因处理特征比对匹配数和期望不一致已打过补丁 / 装过其他防撤回、多开工具 / 版本太新特征变了先取消已安装的选项确认没动过 DLL再不行就等新版本库你已经安装过此补丁SHA1 命中补丁后值无需处理说明之前打过文件校验不通过版本对得上文件被其他工具动过有.h.bak就先还原再打没有就重装干净版客户端找不到安装路径绿色版、注册表信息缺失手动指定目录还有一个容易自查的点.h.bak版本和当前文件版本对不上多半是打过补丁之后客户端又偷偷更新了此时还原会把新版盖成旧版先想清楚再动手。最后说两句边界这类工具只适合在你个人设备上、针对你本人合法使用的客户端做学习和研究改的是腾讯签名的受保护文件风险杀软误报、更新失效、账号安全自己掂量别拿去商用。顺带一提版本库 特征码库两级匹配、备份与回滚兜底这套工程模式对任何需要给闭源二进制做小修小补的场景都是可直接抄走的参考——RevokeMsgPatcher 开源在 GPLv3 协议下源码翻一遍收益比看十篇教程都大。【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁我已经看到了撤回也没用了项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表