RevokeMsgPatcher架构深度解析:二进制补丁技术在现代IM软件逆向工程中的应用
RevokeMsgPatcher架构深度解析:二进制补丁技术在现代IM软件逆向工程中的应用
【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher
RevokeMsgPatcher是一款基于二进制补丁技术的即时通讯软件功能增强工具,通过精确修改Windows平台微信、QQ、TIM等软件的二进制文件,实现消息防撤回、多开等实用功能。该工具采用模块化架构设计,结合特征码匹配和精确位置替换的双重机制,为逆向工程领域提供了一个典型的技术实现案例。
技术架构与设计哲学
抽象层与实现分离的设计模式
RevokeMsgPatcher采用经典的抽象工厂模式构建其核心架构。AppModifier抽象基类定义了统一的接口规范,为不同即时通讯软件提供一致的修改框架。这种设计实现了高度解耦,每个具体的Modifier类只需关注特定软件的二进制特征和修改逻辑。
public abstract class AppModifier { protected App config; public abstract string FindInstallPath(); public abstract string GetVersion(); public abstract void AfterPatchSuccess(); public abstract void AfterPatchFail(); }系统包含多个具体实现类:WechatModifier、QQModifier、TIMModifier、WeixinModifier、QQNTModifier和QQLiteModifier。每个实现类负责处理对应软件的特定逻辑,包括安装路径检测、版本识别和文件定位。
数据驱动的补丁管理系统
补丁数据采用JSON格式存储,支持两种修改模式:精确位置替换和特征码匹配。数据存储在RevokeMsgPatcher.Assistant/Data/目录下,按版本号组织,形成了完整的补丁版本管理体系。
精确位置替换模式适用于已知版本的特定文件:
{ "Name": "WeChatWin.dll", "Version": "3.3.5.25", "SHA1Before": "3e94753ccbc2799d98f3c741377e99bdae33b4cf", "SHA1After": "ab98f83fc16674ac4911380882c79c3ca4c2fd71", "Changes": [ {"Position": 3413977, "Content": [235]}, {"Position": 12159591, "Content": [235]} ] }特征码匹配模式支持版本范围,通过字节序列模式识别实现跨版本兼容:
{ "Name": "WeChatWin.dll", "StartVersion": "3.9.11.0", "EndVersion": "4.0.3.0", "ReplacePatterns": [ { "Search": [15,31,68,0,0,73,139,80,8,72,133,210,116,63,72,199,193], "Replace": [15,31,68,0,0,73,139,80,8,72,133,210,117,63,72,199,193], "Category": "防撤回(老)" } ] }核心技术实现机制
二进制文件编辑引擎
FileHexEditor类构成了系统的核心引擎,负责执行具体的二进制文件修改操作。该引擎实现了以下关键技术:
- 文件完整性校验:通过SHA1哈希值验证文件完整性,确保补丁操作的安全性
- 备份与恢复机制:修改前自动创建
.bak备份文件,支持一键还原 - 精确字节操作:支持在指定位置进行字节级修改,精度达到单个字节
- 内存映射优化:采用内存映射文件技术提高大文件操作效率
特征码匹配算法
系统采用Boyer-Moore算法的高效实现进行特征码匹配。ModifyFinder类负责在二进制文件中搜索特定字节序列,并计算替换位置:
public static List<Change> FindChanges(string filePath, List<ReplacePattern> replacePatterns) { // 使用Boyer-Moore算法搜索特征码 // 计算相对偏移量并生成Change对象 }匹配算法支持通配符(63表示任意字节),在保证匹配精度的同时提供了一定的灵活性,能够适应不同编译版本间的微小差异。
版本兼容性管理
系统采用双重版本验证机制确保兼容性:
| 验证类型 | 验证机制 | 适用场景 | 精度 |
|---|---|---|---|
| 精确版本匹配 | 文件SHA1哈希值比对 | 已知特定版本 | 最高 |
| 版本范围匹配 | 特征码模式识别 | 版本区间支持 | 高 |
| 文件版本号验证 | PE文件版本信息提取 | 初步兼容性检查 | 中 |
版本比较算法采用语义化版本号解析,支持主版本号、次版本号、修订号和构建号的四段式比较,确保版本区间判断的准确性。
二进制补丁技术原理
指令级修改策略
RevokeMsgPatcher的核心技术在于对x86/x64指令集的精确修改。系统主要针对条件跳转指令进行修改,实现程序逻辑的定向控制:
条件跳转修改原理表
| 原始指令 | 修改后指令 | 机器码变化 | 功能影响 |
|---|---|---|---|
| JE (Jump if Equal) | JMP (Unconditional Jump) | 74 → EB | 跳过相等条件检查 |
| JZ (Jump if Zero) | JMP (Unconditional Jump) | 74 → EB | 跳过零值条件检查 |
| JNE (Jump if Not Equal) | NOP (No Operation) | 75 → 90 | 移除不相等跳转 |
| CALL (Function Call) | RET (Return) | E8 → C3 | 函数调用改为直接返回 |
内存布局与偏移计算
系统需要精确计算目标函数在二进制文件中的位置。Windows PE文件格式包含多个关键节区,补丁操作主要针对.text代码段:
PE文件结构: ┌─────────────────┐ │ DOS头 │ ├─────────────────┤ │ PE文件头 │ ├─────────────────┤ │ 节区表 │ ├─────────────────┤ │ .text (代码段) │ ← 主要修改区域 ├─────────────────┤ │ .data (数据段) │ ├─────────────────┤ │ .rsrc (资源段) │ └─────────────────┘偏移量计算需要考虑文件对齐和内存对齐的差异,系统通过Position字段直接指定文件偏移量,绕过了复杂的重定位计算。
防撤回功能实现机制
防撤回功能的核心是修改消息处理流程中的条件判断逻辑。以微信为例,系统识别包含"revokemsg"字符串的代码区域,修改相关的条件跳转指令:
通过x32dbg等调试工具可以观察到,在WeChatWin.dll中搜索"revokemsg"字符串可以定位到消息撤回处理函数。系统将原本的条件跳转指令(如JE或JZ)修改为无条件跳转(JMP),使消息撤回逻辑被绕过。
上图展示了在x32dbg中将JE指令修改为JMP指令的具体操作界面。这种修改使程序在执行到该位置时无条件跳转,绕过了原本的撤回检查逻辑。
多开功能实现原理
多开功能通过修改互斥体检查逻辑实现。Windows应用程序通常使用互斥体(Mutex)确保单实例运行,系统通过修改互斥体创建和检查的相关函数,使程序允许多个实例同时运行:
// 典型的多开补丁模式 Search: [192,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236] Replace: [192,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,195,139,236]这种修改将函数入口处的PUSH EBP指令(55)改为RET指令(C3),使互斥体检查函数立即返回,跳过实际的检查逻辑。
实践操作与技术要点
调试工具使用流程
对于需要手动调试的高级用户,系统提供了详细的逆向工程指导。使用x32dbg进行手动调试的基本流程如下:
- 进程附加:启动x32dbg后,通过"文件"→"附加"菜单选择目标进程
- 模块定位:在模块列表中找到目标DLL文件(如
WeChatWin.dll)
字符串搜索:通过搜索功能定位关键字符串和函数
指令修改:识别并修改关键的条件跳转指令
补丁应用:通过补丁功能将修改保存到文件
自动化补丁流程
系统通过三层验证确保补丁操作的安全性和准确性:
第一层:文件验证
- SHA1哈希值校验
- 文件版本号验证
- 文件大小检查
第二层:版本匹配
- 精确版本匹配(SHA1比对)
- 特征码版本范围匹配
- 回退机制支持
第三层:修改验证
- 修改前备份验证
- 修改后完整性检查
- 异常回滚机制
技术参数规格
系统要求
- 操作系统:Windows 7及以上版本
- 运行时:.NET Framework 4.5.2+
- 权限要求:管理员权限(文件修改需要)
支持软件版本范围| 软件 | 支持版本范围 | 核心文件 | 功能类型 | |------|-------------|----------|---------| | 微信 | 2.6.6.28 - 最新版 | WeChatWin.dll | 防撤回、多开 | | QQ | 9.0.4.23786 - 9.4.7+ | IM.dll | 防撤回 | | TIM | 2.3.2.21173 - 3.4.0+ | IM.dll | 防撤回 | | QQNT | 9.8.0.19000+ | wrapper.node | 群聊防撤回 |
系统架构扩展与二次开发
模块化扩展机制
系统采用插件化架构设计,支持轻松添加对新软件的支持。扩展新软件支持需要以下步骤:
- 创建Modifier类:继承
AppModifier抽象基类 - 实现核心方法:
FindInstallPath()、GetVersion()等 - 提供补丁数据:在JSON配置中添加对应的补丁信息
- 注册到系统:在主程序中添加对新软件的支持
补丁数据生成流程
对于新版本软件的补丁生成,系统提供了标准化的分析流程:
安全与稳定性保障
系统设计了多重安全机制确保操作的安全性:
- 完整性验证:修改前后SHA1校验确保文件完整性
- 版本兼容性检查:严格版本范围验证避免不兼容修改
- 备份恢复机制:自动备份和手动恢复功能
- 异常处理:完善的异常捕获和回滚机制
技术演进与未来展望
当前技术局限性
- 版本依赖性强:二进制补丁对软件版本高度敏感
- 维护成本高:每次软件更新都需要重新分析生成补丁
- 兼容性问题:不同编译选项可能导致特征码失效
技术演进方向
智能特征码识别
- 基于机器学习的模式识别算法
- 自适应特征码生成
- 跨版本兼容性预测
运行时Hook技术
- 内存注入技术替代文件修改
- 动态函数Hook实现功能扩展
- 热补丁技术减少重启需求
云补丁服务
- 中央补丁数据库
- 自动版本检测和更新
- 社区贡献机制
开源协作模式
项目采用开源协作模式,技术社区可以:
- 贡献新版本补丁数据
- 扩展对新软件的支持
- 改进核心算法和架构
- 提供多语言界面支持
总结
RevokeMsgPatcher展示了二进制补丁技术在逆向工程领域的成熟应用。通过精确的指令级修改、智能的特征码匹配和严谨的安全机制,系统为即时通讯软件的功能扩展提供了可靠的技术方案。其模块化架构设计和数据驱动的补丁管理系统为同类工具开发提供了有价值的参考。
随着软件保护技术的不断演进,二进制补丁技术也需要持续创新。未来的发展方向包括智能特征码识别、运行时Hook技术和云补丁服务等,这些技术将进一步提高工具的兼容性、安全性和易用性,为逆向工程领域带来新的技术突破。
【免费下载链接】RevokeMsgPatcher:trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了)项目地址: https://gitcode.com/GitHub_Trending/re/RevokeMsgPatcher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
