吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 24921|回复: 112
收起左侧

[原创] 微信PC端技术研究-消息防撤销

  [复制链接]
anhkgg 发表于 2018-11-30 23:28
本帖最后由 anhkgg 于 2018-12-28 13:42 编辑

微信PC端技术研究-消息防撤销
by anhkgg
2018年11月30日

0x1. 写在前面

不知道大家有没有遇到过这种情况,微信收到消息,但是没有及时查看,然后闲暇时去看的时候,消息被撤销了,撤销了!

那时肯定是无比无语,挠心挠肺,究竟发了什么?

有没有一种神器可以防消息撤销呢,有的!其实移动端和mac上已经有人做了相关的插件,但是PC端貌似没人来啃这块骨头。

当然也可能是我没找到,不过不管怎样,对我来说就是没有。

既然如此,小生来!

0x2. 技术分析

先理一下思路:

1.对方发送消息之后,我收到消息并在消息窗口显示<br/>
2.然后对方点击菜单选择撤销<br/>
3.我会收到发来的撤销通知,然后删除消息窗口显示的消息

所以分析方向就基本定为两个方向了:

1.一个是通过分析网络消息找到撤销消息,然后拦截该消息阻止消息被撤销<br/>
2.另一个是找到撤销消息的界面操作,patch掉这个撤销消息的操作即可

开始之前,先了解一下微信主要模块都实现什么功能。

模块 功能
WeChat.exe 主程序,初始化操作,加载WeChatWin.dll
WeChatWin.dll 主要功能模块,包括界面、网络、功能
wechatresource.dll 保存资源的模块,包括界面资源

主要分析目标就是WeChatWin.dll,其实很早之前就想分析这个东西了,但是那时候的老版本vmp壳加的更严重(映像中是,无法考证),所以搁置很久。

当前我分析的版本应该是最新的2.6.5.38,目前来看加壳程度还行,基本都是比较好分析的代码,没有经过加壳处理,不过听说核心代码还是处理过的。

1. 界面入手

首先试试从界面入手,都知道微信界面使用duilib实现的,所以可以从它的某些特征入手分析,比如字符串click等,可以快速找到功能函数。

想的是通过click找到整个窗口响应函数,然后再分析找到撤销操作的代码位置。

确实很快就看到了窗口响应函数,不过大概有119个相关函数,所以无奈放弃。

换一个方向,通过菜单入手,搜索menu找到menuCmdDeletemenuCmdRevoke等字符串,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



更新:
鉴于有些吐槽我放github的,我这里补一个网盘地址,不过要去github给我点星星哦
已经支持最新版2.6.6.28(https://github.com/anhkgg/SuperWeChatPC/releases/tag/v1.1.2
链接: https://pan.baidu.com/s/1S4UdcPOORdmzE69TzD-eRA 提取码: ry4g(已更新)

免费评分

参与人数 25威望 +1 吾爱币 +30 热心值 +22 收起 理由
itjesse + 1 谢谢@Thanks!
BananaProject + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
战之都 + 1 + 1 热心回复!
asong + 1 + 1 谢谢@Thanks!
boy666 + 1 + 1 谢谢@Thanks!
我爱飞 + 1 + 1 热心回复!
首席鉴婊师 + 1 谢谢@Thanks!
Hmily + 1 + 8 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
一日就是一天 + 1 + 1 哇哈哈哈,谢谢补链接,我来补CB了~
笙若 + 1 + 1 谢谢@Thanks!
黄金体验 + 1 + 1 热心回复!
kingdiao + 1 热心回复!
cr7890 + 1 + 1 谢谢@Thanks!
yoling100 + 1 + 1 能实现收款语音播报的话会很赞!!!!!
chenjingyes + 1 + 1 热心回复!
无痕软件 + 1 + 1 用心讨论,共获提升!
cndmad + 1 + 1 谢谢@Thanks!
KJ12930 + 1 + 1 谢谢@Thanks!
小小学生 + 1 + 1 用心讨论,共获提升!
wel89160 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
lookerJ + 1 用心讨论,共获提升!
hostclsecho + 1 我很赞同!
alccc + 1 + 1 用心讨论,共获提升!
sszzss + 1 + 1 鼓励转贴优秀软件安全工具和文档!
MMing + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

一日就是一天 发表于 2018-12-2 08:56
首先感谢作者的开发。其次吐槽一下作者的不人性化了!大家都习惯网盘百度或者蓝奏,你发这个,反正我是第一次遇到。。我上了20年网不知道是不是白上了。反正瞬间我是不知道怎么下载,也不知道怎么去使用。。所以飘过算了……
MMing 发表于 2018-11-30 23:43
中天华哥 发表于 2018-11-30 23:45
 楼主| anhkgg 发表于 2018-11-30 23:46
MMing 发表于 2018-11-30 23:43
好高端的样子,但是小白想用成品。。

去github看,有的
sszzss 发表于 2018-11-30 23:52
支持楼主,手机端和mac端用好久了,奈何我也没找到pc端的,不过我不会写
sszzss 发表于 2018-12-1 00:03
我是丢到微信的安装目录,双击或者管理员运行WeChat多开(防撤销).exe都没用啊,是我使用方法不对?
 楼主| anhkgg 发表于 2018-12-1 00:09
sszzss 发表于 2018-12-1 00:03
我是丢到微信的安装目录,双击或者管理员运行WeChat多开(防撤销).exe都没用啊,是我使用方法不对?

我能说很坑吗,刚写完,更新2.6了,正在更新
不存在的会员 发表于 2018-12-1 00:33
厉害  大神
5679997 发表于 2018-12-1 06:34
停车坐爱枫林晚,顺道过来吾爱玩。
weiyangz 发表于 2018-12-1 06:39
谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 05:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表