抱歉,Xposed真的可以为所欲为——6

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好吧,update调用的是**updateWithOnConflict()**方法,把参数打印出来看看?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行结果发现每接受到一条信息都会触发这个方法,连公众号信息也会调用。 (PS:Hook的时候参数的个数和顺序要对应,我一开始漏了一个string,log一直没打印,还以为 垃圾魅族的问题,没把我恶心死)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以,那么分别来看看自己发信息撤回别人发信息撤回 的两种情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不难发现,第一个参数应该是一个代表信息类型的东西,普通信息是rconversation,而撤回信息类型是message,然后是第二个参数,类型是ContentValue,这个类用于存取键值对的数据,每个键值对表示一列的列名和该列的数据,撤回类型的信息除了上面的content外还有后面一块:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们先要明确防止撤回的是别人发的信息而不是自己的,所以先要过滤掉自己的,对比两种情况得出这样的结论:

-> 判断第一个参数是否为message -> 获取第二个参数中的type判断是否等于10000(自己撤回是10002)

修改下程序,只处理别人发的信息的情况,打Log验证下,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看Log却意外发现了一个问题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是的,多了个你撤回了一条信息,出现这条信息的原因是微信整了个比较贴心的功能:

用户撤回信息的原因可能是编辑内容错误,在五分钟以内,用户点击可以通过点击重新编辑, 获得撤回的文本信息,然后进行重新编辑,五分钟过后就会变成你撤回了一条消息。

所以判断条件还要加上这个过滤条件,所以代码就变成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继续看Log:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行吧,是个聪明人都知道msgId这个字段里面有东西。

图2


2.胡乱分析第二波

图3

先从第一波跳出来,想想怎么我们到底要干嘛?信息处理简单流程是这样的:

收到信息会插入到数据库里,然后撤回就是移除数据库里对应的这条信息!

那么我们可以:

  • 1.找个东西把所有接收到的信息存起来;
  • 2.当触发了撤回操作,然后通过一个标识找到我们存起来的信息;
  • 3.把这条信息当做一个新的信息插入到数据库里;
  • 4.更改撤回的提示

强调一点,搬运,一开始我还想着去处理找个信息,然后拿点什么,加点什么。 后面发现改动的成本非常大,而且不知道会引发什么样的问题,所以拿到信息直接 传就好,不要加特技进去!

然后是找个标识,猜测是第一波分析出来的msgId,等等还需要我们验证下! 继续跟方法,另一个账号发送一条信息,然后全局搜insert,定位到了一个数据库插入的方法!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不会直接跟这个bt.f类,因为参数一样,而且执行插入操作肯定是不止调用一个方法的,跟下该方法的父方法,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继续跟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以,参数不一样,说明信息是从这里构造的,然后也调用了好几个方法,打开源码查看这个类: com.tencent.mm.storage.be 还有这个b方法,从左侧的类结构可以看到,b方法有好几个,但是第一个参数都是一样的(bd bdVa) 进去这个bd类看看 com.tencent.mm.storage.bd

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好复杂的类,加上混淆,看死个人,上面讲了,搬运,而不是对信息做处理,我们要做的只是找到这个信息里和msgId一样的标记而已。全局搜msgId

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

恩,就是这个field_msgId了,我们通过Xposed拿到这个变量的值,然后做下对比,验证下我们的猜想! 然后写出这样的程序:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怀着忐忑的心情重启手机,发信息,撤回信息,看下日志

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

卧槽,屌,猜对了,接下来我们整个Map来存键值对,然后试试在触发撤回操作的时候,根据msgId取出 对应的信息然后调用插入数据的方法,所以上面的代码改一下,我们要拿到调用b方法的那个对象。 然后就有了这样的代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行下看看效果~

正常的微信里撤回

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Hook了的微信

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以,尽管提示XX撤回了一条消息,但是信息并没有真的被撤回,所以说Hook成功了~ 接着我们进行一些细节的优化,还有改下撤回的信息。把能打印的都打印出来吧,把Content内容修改下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打印下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

呃,我的微信好像有点不对劲,卧槽,变成头像发信息了?:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感觉是type类型的问题,改改,改成撤回信息那个type?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

嗯,信息是看到了,但是不应该是这样的啊,后面排查了一下是updateWithOnConflict方法返回值是0, 才这样,把返回值设置为1,就可以了(param.result = 1)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

嗯,正常是正常了,不过这顺序有点不对劲啊,撤回的提示信息比我们插入的信息快了一些,那就加点吧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行看看:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

想着大概差不多的时候,今早老同学发的一个链接,然后撤回,撤回信息提示变成这样了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

后来想想还是拼接成这样的提示信息就算了,不要再在提示信息里显示具体内容:

小猪拦截到 XXX 撤回的信息

最终效果如下,可以,很赞:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


3.胡乱分析第三波

图4

在我以为一切大功告成,膨胀得沾沾自喜的时候,测试小哥发现了意外的发现了一个Bug, 发语音,图片,视频,虽然没撤回,但是打开失败,估计就是文件被删除了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

而Android里删除文件调用的是File类的delete方法,跟一波方法,直接搜File.delete看下是否真的有调用:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好吧,直接Hook掉File类的delete方法,看看微信删除对应类型文件的路径,观察一波这些路径的规律,然后如果delete方法被调用了,过滤一波,不删除文件,直接返回结果true,欺骗微信文件删除成功,以此瞒天过海~ 代码如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

依次发送语音,图片,视频,然后撤回,对应的删除记录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

观察下路径规则,不难发现对应的文件夹是 voice2,image2,video,so过滤一波路径,如果路径包含这三个 直接过滤设置返回值为True,另外公众号,外链,都是属于文本信息,只是微信做了特别的解析,比如上面那个 百度贴吧的,所以和普通信息一样处理就好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后发现只有语音能够正常打开,图片和视频都无法正常打开,跟了下路径,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用ES浏览器来到这个路径下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就很奇怪了,明明图片存在,但是就是不能正确加载,而且每次点开都会执行一次删除的操作, 就是说数据库里还保存着这个记录,撤销信息无非 删数据库记录+删文件,删文件肯定是没问题的, 那么问题肯定就出在删数据库记录那里了。跟踪一下SQLiteDatabase里的delete()方法,把参数和返回值打印下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

依次做:发送语音,发送图片,发送视频然后撤回的日志跟踪。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结合delete方法一起看:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结合上面的日志和delete方法的代码,可以得这样的结论:

  • 1.音频相关放在voiceinfo表里,图片相关放在ImgInfo2表里,而视频相关则放在videoinfo2表里。
  • 2.还有个WxFileIndex2表,从删除语句可以知道就是根据msgId去删除对应的文件记录,但是返回值却有1,6,2,0?

跟下返回值的代码:executeUpdateDelete()方法,在SQLiteStatement类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改变的行的数目?一般来说删除一条数据,正确执行完,受影响的行数会是1。 而只有语音能正常播放,难道是这个原因?hook下这个方法,如果第一个参数是这四个表, 直接把返回值设置成1试试~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发下信息然后撤回下试试~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行吧,视频和图片都能打开了,到此总算完美解决的,真的是一波三折。 接着改下UI页面,补上上次下厨房Hook Xposed检测的开光和防撤回开关。 最后的界面如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


小结

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
这就是我不喜欢折腾Xposed的原因,太多未知,总要去猜测,去验证自己的猜测,不断安装重启, 当你以为可以了,然后又出新的问题,如果不是 设计小姐姐的原因,真不想去碰这个东西。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


附:因为代码比较长,而且改动了下厨房,还有王者荣耀相关的代码,所以就不贴代码了,
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!!!!

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!

*(怎么能少了一份全面的面试题总结呢~)

[外链图片转存中…(img-94AmrLDn-1711294991361)]

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-SW4EjVFz-1711294991361)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值