手把手教你打造微信PC端-消息防撤销
liebian365 2024-10-20 10:00 20 浏览 0 评论
0x1. 写在前面
不知道大家有没有遇到过这种情况,微信收到消息,但是没有及时查看,然后闲暇时去看的时候,消息被撤销了,撤销了!
那时肯定是无比无语,挠心挠肺,究竟发了什么?
有没有一种神器可以防消息撤销呢,有的!其实移动端和mac上已经有人做了相关的插件,但是PC端貌似没人来啃这块骨头。
当然也可能是我没找到,不过不管怎样,对我来说就是没有。
既然如此,小生来!
0x2. 技术分析
先理一下思路:
1.对方发送消息之后,我收到消息并在消息窗口显示
2.然后对方点击菜单选择撤销
3.我会收到发来的撤销通知,然后删除消息窗口显示的消息
所以分析方向就基本定为两个方向了:
1.一个是通过分析网络消息找到撤销消息,然后拦截该消息阻止消息被撤销
2.另一个是找到撤销消息的界面操作,patch掉这个撤销消息的操作即可
开始之前,先了解一下微信主要模块都实现什么功能。
模块功能WeChat.exe主程序,初始化操作,加载WeChatWin.dllWeChatWin.dll主要功能模块,包括界面、网络、功能wechatresource.dll保存资源的模块,包括界面资源
主要分析目标就是WeChatWin.dll,其实很早之前就想分析这个东西了,但是那时候的老版本vmp壳加的更严重(映像中是,无法考证),所以搁置很久。
当前我分析的版本应该是最新的2.6.5.38,目前来看加壳程度还行,基本都是比较好分析的代码,没有经过加壳处理,不过听说核心代码还是处理过的。
1. 界面入手
首先试试从界面入手,都知道微信界面使用duilib实现的,所以可以从它的某些特征入手分析,比如字符串click等,可以快速找到功能函数。
想的是通过click找到整个窗口响应函数,然后再分析找到撤销操作的代码位置。
确实很快就看到了窗口响应函数,不过大概有119个相关函数,所以无奈放弃。
换一个方向,通过菜单入手,搜索menu找到menuCmdDelete,menuCmdRevoke等字符串,menuCmdRevoke就是撤销菜单对应的名字。有29个相关函数,还行。结合调试,尝试了几个函数,果然找到了删除、撤销对应的响应函数。然后想通过删除菜单来找到删除界面消息的代码,而被撤销消息其实也是删除界面消息,不过折腾了一圈未果。
2. 网络入手
通过recv回溯到接收网络消息的函数中,40个,有点多。找了个tcp抓包工具,想抓到撤销消息的调用堆栈,结果一直被其他消息干扰,无果。
3. 取巧
函数太多,分析很费实践,想看看有没有其他路可以走。在字符串中搜索revoke发现很多看起来有用的调试信息,不过也有79条之多。然后通过筛选和调试确认,找到了On RevokeMsg svrId : %d,然后回溯到撤销消息处理的函数中。
if ( sub_10247BF0((wchar_t *)v258, (int)v259, (int)v260, v261) ) { // 撤销消息 *(_OWORD *)&v259 = xmmword_10E6A278; v257 = xmmword_10E6A278; v256 = xmmword_10E6A278; v255 = xmmword_10E6A278; *(_OWORD *)&v251 = xmmword_10E6A278; sub_1007E090(&v247, v353, SHIDWORD(v353)); f_log_10471580( (int)"02_manager\\SyncMgr.cpp", 2, 1357, (int)"SyncMgr::doAddMsg", (int)"SyncMgr", "On RevokeMsg svrId : %d",
经过调试发现sub_10247BF0返回1则进入撤销消息处理中,消息被撤销,跳过此段代码,消息不会被撤销,所以patch掉sub_10247BF0这个函数的返回值使其一直为0即可完成防撤销的功能。
当然也不能太随意了,还是看看这个函数大概做了些什么处理吧。关键参数第一个,调试中发现值如下:
<sysmsg type="revokemsg"> <revokemsg> <session>wxid_0811111140112</session> <msgid>1111000048</msgid> <newmsgid>11411701182813217</newmsgid> <replacemsg><![CDATA["xxx" 撤回了一条消息]]></replacemsg> </revokemsg> </sysmsg>
sub_10247BF0解析发现type="revokemsg"即判断为撤销消息操作,返回1,很明了。
小结:此次分析运气较好,通过revoke找到关键代码,少花了很多时间,其实通过网络方向堆栈筛选确认应该也是可以找到这段代码的,但是通过结果去看,发现有近10层调用栈,肯定会花成倍的时间才能找到关键代码。
0x3. 实现
分析是为了最后能够用起来,所以用上一篇文章《一种通用Dll劫持技术》写了一个简单的包含patch代码(没有用hook)的dll模块,劫持微信的WeChatResource.dll来完成加载。
关键代码如下所示,patch了sub_10247BF0返回值所在代码,让其eax永远为0。
bool FakeRevokeMsg() { if (!IsSupportedWxVersion()) { return false; } //33 C0 xor eax,eax BYTE code[] = { 0x33, 0xc0, 0x90 }; HMODULE hMod = GetModuleHandle(WECHATWINDLL); DWORD offset = 0x247EF1;//返回值处 if (!hMod) { return false; } PVOID addr = (BYTE*)hMod + offset; Patch(addr, 3, code); return true; }
最后惯例,放上github地址:https://github.com/anhkgg/multi_wechat_pc
本文作者:by anhkgg
相关推荐
- C++零基础入门学习指南(中篇)
-
目标:像拼装乐高一样理解程序模块,掌握内存管理核心技能...
- Linux下跨语言调用C++实践
-
不同的开发语言适合不同的领域,例如Python适合做数据分析,C++适合做系统的底层开发,假如它们需要用到相同功能的基础组件,组件使用多种语言分别开发的话,不仅增加了开发和维护成本,而且不能确保多种语...
- 输入格式控制:C++程序中的数据接收与处理技巧
-
在C++编程中,输入输出是非常基本且重要的操作。尤其是输入部分,程序员通常需要从用户那里获取数据,并根据不同的输入格式进行处理。然而,用户的输入往往是多样化的,如何有效地控制输入格式,确保程序正确接收...
- 常见读写excel文件的库/类
-
在C++语言中读写EXCEL表格,有这几种方法:COM方式、ODBC方式、OLE方式、纯底层格式分析方式。Basicexcel使用方法:https://www.cnblogs.com/paullam/...
- C++文档识别接口如何实现 高效办公
-
数字化信息爆炸时代,办公效率的提升成为企业和个人的迫切需求。人工智能技术的飞速发展,为我们带来了前所未有的便利,翔云文档识别接口便是其中之一。 与传统的人工手动录入相比,文档识别接口优势显著。人...
- 超实用C++学习指南:语法要点、经典书籍、实战案例全汇总!
-
以下是为您整理的C++学习指南,综合了语法要点、资源推荐及实战方向,结合搜索结果和经典知识体系,帮助您系统学习:一、C++基础语法学习指南1.核心概念oC++是静态类型、编译式语言,支持面向对象和...
- 掌握C++文件读写,让代码更灵动!
-
文章改写指令通常涉及对原有文本进行调整、重组或重新表达,以保持或增强信息的准确性和可读性,同时可能改变风格、语气或目标受众。以下是一些具体的文章改写指令示例:·2.简化语言:→指令:将文章中的复杂词汇...
- 闲置宽带能换钱?P2P CDN、无线宝、赚钱宝到底靠不靠谱
-
无线宝类产品其实由来已久,无线宝类产品即与支付宝、余额宝、余利宝等货币基金毫无干系,与区块链“挖币”更存在本质的不同,而是一种利用家庭中的闲置宽带,通过流量来换取佣金的产品。无线宝类产品其实在过去几年...
- 攻略什么?闲置宽带还可以赚钱?
-
现在很多朋友在使用10Mbps、50Mbps甚至100Mbps的高速宽带,不过普通用户并不是长时间都需要这么高速的宽带。比如对于100Mbps的宽带用户,在日常浏览网页时,基本上2Mbps左右的带宽即...
- 明日学业水平考试开始报名 详细步骤都在这里
-
点击上面蓝字关注我们哦~日前,山东省教育考试院发布了《山东省2019年夏季学业水平考试报名考生操作说明》(点击文末阅读原文查看),明天就到了报名的时候了,详细的报名步骤、网上缴费流程、追加报考科目等...
- 瞄准用户上传带宽:HiWiFi 极路由 联合 迅雷 推出 “极赚钱”套餐
-
上次总理谈到宽带降价问题时,很多网友除了吐槽网速慢费用贵,还反映宽带网络的上下行速度不对等。比如说以前ADSL2M的宽带只有512Kbps的上行速度,现在升级到光纤网络之后,按理说技术上实现上下行...
- 揭秘P2P平台刷数据:交易额从100万到1200万
-
(作者:峰岭、刘珺、周娜)从默默无闻到万众瞩目,从“零数据”到“大数据”,从小众投资到大众理财,从个人借贷到企业借款,从个人信用到车、房、资产抵押……近两年来P2P行业以迅雷之速快速爆发,P2P平台也...
- 运营商让我签这个宽带违规使用告知函,我懵逼了
-
特么的是爱奇艺迅雷自己上传的p2p数据,btpt也会上传,直播也会上传,监控也会,传文件也会,到底他么的运营商你要干个啥啊,我不仅没捞着一分好处,夹在中间两头受气!真特么晦气这特么是谁弄的函?完全没搞...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)