前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在微信撤回,别逗我了

在微信撤回,别逗我了

作者头像
用户1907613
发布2018-07-20 14:38:38
2.5K0
发布2018-07-20 14:38:38
举报
文章被收录于专栏:Android群英传Android群英传

前言

在何老师的微信里,就没有『撤回』这两个字!

首先声明,这绝不是接锅,只是因为防撤回的原作者(fkzhang)不更新了,而我又非常需要防撤回,某些开车群总是喜欢开后撤回,于是…

在我决定做防撤回之前,我仔细研究了 fkzhang 开源的源码,只可惜他那份源码已经年久失修,我特地下载了他最后支持的微信 6.3.13 版本,发现与现在所使用的 6.5.3 版本之间,代码上的差距不是一星半点,这直接让我断了在他的源码上进行维护的念头。


既然不再想维护,那必然是要自己起一套了,按之前折腾 mac 版微信的经验,我决定先找到revoke字样所对应的代码,很幸运的,搜索结果并不多,大概 10 多个类会涉及到 revoke,而经过分析,大部分的类都是在写 log,真正执行 revoke 操作的是 com.tencent.mm.model.bo,截取关键代码如下:

看起来是不是觉得很乱并且看不出逻辑?没关系,我们在这里需要做的只是取出数据而已,一开始的逻辑很明确的告诉了我们,如果str变量的值是revokemsg,那么就会走下面真实的撤回的代码。

另一方面,通过抓取微信/data/data/com.tencent.mm内的数据库,经分析可知,微信的撤回的原理是修改数据库,将原本的信息改为『撤回了一条消息』。所以我们要做的,是在发生撤回的时候,先保持原先那条数据不被删除,并插入一条『撤回被阻止』的信息。

好了,那么继续分析代码,首先要知道str变量的值是怎么来的,往上翻一下可以看到以下代码:

很明显我们应当跟踪bf.q这个方法,看一下这个方法里做了什么:

好了,里头逻辑做了些啥不需要管了,只需要管它的返回值,结合上面的代码,我们很容易能知道,在这个返回的map内包含以下数据:

那么,只需要将.sysmsg.$type.sysmsg.revokemsg.replacemsg的内容改掉就行了,把这个过程变成以下步骤:

下面的代码完成了这一系列步骤:

当然这里还有一个数据库操作的问题,我们必须有办法得到微信内的数据库,然后才能进行操作,此时需要在微信内找到数据库相关的类,还需要知道库的结构,当然库结构是非常容易得到的。具体如何查找的不再赘述,直接看代码:

这样就可以得到一个数据库对象,凡是遇到数据库操作,都可以从这个对象里进行方法的调用。

到此为止,微信的防撤回就基本上完成了,再补上一些基础代码,挂到 Xposed 框架就可以成功运行。


新的防撤回已完成并且已开源,请大家移步至我的 Github,欢迎关注这个项目,我将持续更新。觉得有用的话,给个 Star 怎么样?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 群英传 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档