微信 - 撤回分析 & patch

1

emmm 进入正题吧

在微信撤回的时候,会提示xxxx撤回了一条消息,类似下图这样,就以它为入手点吧

1571916194546

打开CE搜索这个字符串,

1571916287471

9个结果,筛选后找到了一个可用的

然后栈回溯分析了几个可疑断点

后来,,,,,,无果

但是在分析的过程中,发现了一个字符串revoke,在wechatwin.dll中

对这个模块进行字符串扫描吧:

1571916502370

1571916764067

和我们猜测的一样,只在撤回的时候断下

此地址附近的代码:

1571917012715

猜测:撤回消息和接收消息应该在前几个函数调用是相同的,会在其中一个函数中堆栈开始变化,因为执行的函数不同,这样撤回断下的堆栈和消息接受的堆栈一对比,就可以找到关键点了(不知怎么解决接收消息请看《微信 - 消息结构分析与调用》)

实践?不浪费时间了,失败了

怎么办?去刚刚找到的字符串使用的位置下断点,进行栈回溯,老老实实的一步一步分析。

经分析,上图中标注为撤回点所在的函数,在撤回消息和接收消息中都调用了,这就很明朗了,问题就在这,简单的浏览一下代码,发现在字符串使用的位置上方有一个跳转

1571917246718

跳转的位置刚刚好跳出了撤回消息调用的函数,这个跳转的判断源于一个函数的返回值,先不去看,直接patch掉,把jz修改为jmp

打开微信测试下,已经没什么问题了,撤回消息的微信正常显示,而电脑端并未显示撤回消息也没有消失

Author: YuanBi
Link: https://www.basicbit.cn/2018/11/16/2018-11-16-微信消息撤回分析/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.