当前位置: 首页 > news >正文

逆向工程深度解析:如何通过二进制补丁实现微信QQ消息防撤回

逆向工程深度解析:如何通过二进制补丁实现微信QQ消息防撤回

【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher

RevokeMsgPatcher 是一款基于逆向工程和二进制补丁技术的Windows平台防撤回工具,通过修改微信的WeChatWin.dll和QQ/TIM的IM.dll文件,巧妙绕过消息撤回检测机制。该工具采用模块化架构设计,支持多版本兼容性处理,为技术爱好者提供了一套完整的二进制修改解决方案。

消息撤回机制的技术挑战

在即时通讯软件中,消息撤回功能通常通过客户端与服务器协同实现。当用户撤回消息时,客户端会执行特定逻辑来隐藏或删除已发送的消息。对于微信和QQ这类闭源软件,实现防撤回功能需要深入分析其二进制文件,定位关键代码段并进行修改。

传统的手动逆向分析过程复杂且容易出错,需要开发者在每次软件更新后重新分析二进制文件。RevokeMsgPatcher通过自动化的二进制模式匹配技术,解决了版本兼容性和维护成本的问题。

二进制补丁技术实现原理

核心修改机制

防撤回功能的核心在于修改条件跳转指令。在x86/x64汇编中,条件跳转指令如JE(Jump if Equal)和JMP(Unconditional Jump)的区别在于前者仅在特定条件满足时跳转,而后者总是跳转。

// 在 RevokeMsgPatcher/Model/ReplacePattern.cs 中定义的替换模式 public class ReplacePattern { public byte[] Search { get; set; } // 搜索的字节模式 public byte[] Replace { get; set; } // 替换的字节模式 public string Category { get; set; } // 功能分类:防撤回/多开 }

以微信WeChatWin.dll为例,典型的防撤回修改是将0x74(JE指令)替换为0xEB(JMP指令),将条件跳转变更为无条件跳转,从而绕过撤回检测逻辑。

使用x32dbg调试器分析微信WeChatWin.dll中的revokemsg相关字符串

版本兼容性数据库

RevokeMsgPatcher通过详细的版本数据库支持多版本兼容。在 RevokeMsgPatcher.Assistant/Data/ 目录中,每个版本都有对应的补丁配置文件:

{ "Name": "WeChatWin.dll", "Version": "3.3.5.25", "SHA1Before": "3e94753ccbc2799d98f3c741377e99bdae33b4cf", "SHA1After": "ab98f83fc16674ac4911380882c79c3ca4c2fd71", "Changes": [ {"Position": 3413977, "Content": [235]}, {"Position": 12159591, "Content": [235]} ] }

每个补丁记录包含文件哈希验证、修改位置和替换内容,确保补丁的精确性和安全性。

架构设计与模块实现

核心修改器模块

项目的核心修改器位于 RevokeMsgPatcher/Modifier/ 目录,采用面向对象设计:

  • WechatModifier.cs- 微信防撤回实现
  • QQModifier.cs- QQ防撤回实现
  • TIMModifier.cs- TIM防撤回实现
  • FileHexEditor.cs- 二进制文件编辑器基类

每个修改器继承自AppModifier基类,实现了统一的文件验证、补丁应用和版本检测接口。

x32dbg补丁窗口显示具体的二进制指令修改

模式匹配算法

在 RevokeMsgPatcher/Matcher/ 目录中,BoyerMooreMatcher.csFuzzyMatcher.cs实现了高效的二进制模式匹配算法:

// Boyer-Moore算法优化搜索性能 public static int IndexOf(byte[] source, byte[] pattern) { // 预处理坏字符表 int[] badCharSkip = new int[256]; for (int i = 0; i < 256; i++) badCharSkip[i] = pattern.Length; for (int i = 0; i < pattern.Length - 1; i++) badCharSkip[pattern[i]] = pattern.Length - i - 1; // 执行搜索 int offset = 0; while (offset <= source.Length - pattern.Length) { // 从后向前匹配 int j = pattern.Length - 1; while (j >= 0 && pattern[j] == source[offset + j]) j--; if (j < 0) return offset; // 找到匹配 offset += Math.Max(1, badCharSkip[source[offset + j]] - (pattern.Length - 1 - j)); } return -1; }

数据模型设计

项目的核心数据模型在 RevokeMsgPatcher/Model/ 目录中定义:

  • ModifyInfo.cs- 精确版本补丁信息
  • CommonModifyInfo.cs- 通用版本范围补丁信息
  • ReplacePattern.cs- 字节模式替换规则
  • Change.cs- 具体修改位置和内容

这种设计支持两种补丁方式:基于精确版本SHA1校验的精确补丁和基于字节模式匹配的通用补丁。

逆向工程实践步骤

1. 字符串定位与分析

首先使用逆向工具(如x32dbg、IDA Pro)搜索关键字符串如"revokemsg"、"撤回消息"等,定位相关函数:

x32dbg调试器附加到QQ进程进行逆向分析

2. 二进制模式提取

分析找到的函数,识别关键的条件跳转指令。例如,在消息撤回检测函数中通常会有类似以下模式的代码:

cmp eax, 0 ; 比较返回值 je 撤回处理函数 ; 如果相等则跳转到撤回处理

对应的二进制模式可能是83F800 740A(比较eax与0,如果等于则跳转10字节)。

3. 补丁规则定义

将识别出的模式转换为ReplacePattern对象:

var antiRecallPattern = new ReplacePattern { Search = new byte[] { 0x83, 0xF8, 0x00, 0x74, 0x0A }, // cmp eax,0; je +10 Replace = new byte[] { 0x83, 0xF8, 0x00, 0xEB, 0x0A }, // cmp eax,0; jmp +10 Category = "防撤回" };

4. 多版本兼容性处理

通过分析不同版本的二进制文件,建立版本范围与补丁规则的映射关系:

{ "Name": "WeChatWin.dll", "StartVersion": "3.9.0.0", "EndVersion": "3.9.2.0", "ReplacePatterns": [ { "Search": [133,192,116,50,185,63,63,63,63,138], "Replace": [133,192,235,50,185,63,63,63,63,138], "Category": "防撤回(老)" } ] }

技术实现细节

文件哈希验证机制

在应用补丁前,工具会计算目标文件的SHA1哈希值,与预定义的SHA1Before值比对,确保文件未被篡改:

public bool VerifyFileIntegrity(string filePath, string expectedSHA1) { using (var sha1 = SHA1.Create()) using (var stream = File.OpenRead(filePath)) { byte[] hash = sha1.ComputeHash(stream); string actualSHA1 = BitConverter.ToString(hash).Replace("-", ""); return actualSHA1.Equals(expectedSHA1, StringComparison.OrdinalIgnoreCase); } }

安全备份与恢复

工具在修改前会自动备份原始文件,备份文件以.bak后缀保存。如果补丁失败或用户需要恢复,可以通过备份还原功能恢复原始文件。

将JE指令修改为JMP指令实现无条件跳转

多开功能实现

除了防撤回,工具还提供微信多开功能。这是通过修改互斥体检查逻辑实现的:

{ "Search": [85,86,87,83,72,129,236,63,63,63,63], "Replace": [195,86,87,83,72,129,236,63,63,63,63], "Category": "多开" }

将函数入口的PUSH EBP(0x55)改为RET(0xC3),使互斥体检查函数直接返回,绕过单实例限制。

项目架构优势

模块化设计

项目采用清晰的模块分离:

  • 核心修改器:处理不同应用的特定逻辑
  • 匹配算法:提供高效的二进制搜索
  • 数据管理:维护版本兼容性数据库
  • 用户界面:提供友好的图形化操作

可扩展性

通过配置文件驱动的设计,新版本的补丁可以通过更新JSON配置文件实现,无需修改核心代码。这种设计使得社区贡献和维护变得更加容易。

安全性考虑

  1. 哈希验证:确保目标文件未被篡改
  2. 备份机制:提供安全的回滚选项
  3. 版本检测:避免不兼容的补丁应用
  4. 权限控制:需要管理员权限运行,确保文件访问安全

技术挑战与解决方案

版本碎片化问题

微信和QQ频繁更新导致版本碎片化严重。解决方案是建立详细的版本数据库,支持从旧版本到最新版本的连续补丁链。

二进制差异处理

不同编译环境可能产生微小的二进制差异。工具使用模糊匹配算法,支持通配符(0x3F)匹配任意字节,提高匹配成功率。

性能优化

对大文件(如WeChatWin.dll超过100MB)进行二进制搜索需要高效算法。Boyer-Moore算法将搜索复杂度从O(n*m)优化到O(n/m),显著提升性能。

总结与展望

RevokeMsgPatcher展示了逆向工程和二进制补丁技术的实际应用,为Windows平台即时通讯软件的定制化修改提供了完整解决方案。通过模块化架构、版本兼容性管理和安全的补丁机制,该项目在技术深度和工程实践上都达到了较高水平。

RevokeMsgPatcher图形化界面,支持微信、QQ、TIM的防撤回和多开功能

对于技术爱好者而言,该项目不仅是实用的工具,更是学习逆向工程、二进制分析和Windows平台开发的优秀案例。通过分析其源码和实现原理,可以深入理解现代软件保护机制和相应的绕过技术。

随着即时通讯软件安全机制的不断加强,防撤回技术也需要持续演进。未来的发展方向可能包括更智能的模式识别、云端补丁数据库同步以及对新架构(如ARM64)的支持。

【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.zskr.cn/news/1450162.html

相关文章:

  • 终极暗黑2重制版多开神器:3分钟搞定4账号自动启动
  • Arduino呼吸灯夜灯制作:从PWM原理到智能光控的实践指南
  • 告别QuickPlot!用Matlab+Surfer搞定Delft3D FM网格图,科研出图效率翻倍
  • 2026年音转文字工具选择指南:从免费到付费,一文带你找到最适合的方案
  • 2026磁轴键盘推荐|硬核电竞首选,内有四款大牌键盘实测
  • 从HTTP到HSTP:空间网络协议如何打破Web3数据孤岛
  • 2026年手机电脑音频转文字怎么做?免费工具详细教程一看就会
  • 别再拍脑袋设限了!Sentinel QPS和线程数阈值到底设多少?实战调优指南
  • DIY智能陪伴机器人:用智能音箱改造玩具,低成本实现AI交互
  • 大连母婴除甲醛CMA甲醛检测治理公司2026深度测评:森氧家环保稳居榜首 - 金诚回收
  • DIY回流焊加热板制作指南:从原理到实践,实现精准温控焊接
  • C/C++后端学习与练习深入
  • SRE团队最后的护城河:当AIOps平台拒绝接入你的旧日志系统(附兼容性迁移checklist v2.3)
  • 别再全网找安装包了!一个关键设置让VMware Converter 6.2在老旧Win7系统上离线运行
  • 大连母婴除甲醛CMA甲醛检测治理公司深度测评:清醛卫士稳居榜首 - 金诚回收
  • 终极魔兽争霸III体验指南:WarcraftHelper插件让你的经典游戏焕然一新
  • WaveTools鸣潮工具箱:从卡顿到丝滑,解锁120帧极致体验的完整方案
  • 当大模型开始生成伪造告警日志——AI安防系统面临的新型对抗样本攻击(附MITRE Engage实战检测矩阵)
  • Kinaxis任命Kristin Russel为首席营销官
  • 基于树莓派与MODEP构建开源吉他效果器:从硬件选型到音色设计全攻略
  • 别再只抄代码了!微信小程序获取手机号,这3个后端细节(C#/.NET)新手必看
  • Driver Store Explorer:Windows驱动管理的终极解决方案,能帮你释放多少GB空间?
  • 小红书视频怎么下载?2026免费下载到手机相册完整教程 - 科技大爆炸
  • 基于Arduino与Polargraph的墙面绘图机:从硬件搭建到软件配置全解析
  • 图片格式快速转换技巧,日常修图必备简易操作方法 - 软件工具教程方法
  • 清宫表测算神器合集 轻量化微信小程序工具一览 - 软件工具教程方法
  • 展锐平台Sensor Hub驱动开发实战:从源码编译到内存Overlay的完整避坑指南
  • 别再硬编码了!用PFC2D 5.0模拟滑坡,这份参数调试与结果分析指南请收好
  • 基于Micro:bit与MakeCode的无线遥控小车:从无线通信到电机控制的嵌入式实践
  • 别再搞混了!一文讲透GaussDB/openGauss中UTF8与SQL_ASCII字符集的真实区别与选型建议