前言:确实好久没有更新文章了,最近有些懒了,逆向确实水特别深啊, 这次发个库存吧, 不过大家注意不要用作非法用途,仅供参考学习,所以不发成品。 还谅解。
分析某Q版本:8.0.7.4085
这里只说明以一系列的分析思路和技巧,想直接看结果可以去文章末尾直接看。
⦁ 用另一个聊天账号撤回一条消息,然后用模拟器上的qq观察。 Ddms工具捕捉时间段内的栈心思,猜测捕捉msg关键词
⦁ 找到mqq.app. MSFServlet. onReceive() 方法![](https://img.haomeiwen.com/i5981775/3e06f312b53c1480.png)
,
这里发现了remove关键词,猜测为删除这条信息,那我们不让这条信息发出去
⦁ 然后把这个方法直接重写
⦁ 测试之后不行,发现这个方法是处理消息的最上层。 这里的remove是处理一个Map的、
那这个response是什么,我hook到把它打印了出来。
![](https://img.haomeiwen.com/i5981775/78b4c8738090a539.png)
⦁ 继续向下走。。
![](https://img.haomeiwen.com/i5981775/04c505c8dd5150a5.png)
![](https://img.haomeiwen.com/i5981775/03fa8365b7848b58.png)
那些乱七八糟的类,都在这个包下
追到这个类,我的眼睛已经快不行了。 不过我想继续向下找
![](https://img.haomeiwen.com/i5981775/6f1ae12cb3e23df1.png)
WupBuffer 这个字段很敏感
![](https://img.haomeiwen.com/i5981775/d8a6560fe6a1f0f0.png)
继续往后,看哪里还有处理这个的。
![](https://img.haomeiwen.com/i5981775/7661ab5903447a18.png)
这里处理了一下,然后重新put了一次。像个解密的地方。
看看怎么解密的
减去了4个长度,并且调用了这个方法
![](https://img.haomeiwen.com/i5981775/e7034e175c38e0c8.png)
然后回到 atca看到,又把这个对象给发走了
![](https://img.haomeiwen.com/i5981775/974cce6daa1745e6.png)
点过去一看还是个抽象方法,那就去看他的实现类。实现类也看不到。在Hook里已经拿到了 wupBuffer的数组,我们按照他的处理完之后,重新转String看看能不能得到更多的信息。
![](https://img.haomeiwen.com/i5981775/40e2fafb8263582d.png)
线索中断,更换思路
线索中断,jadx内存吃不消了,用killer找撤回的关键词,找到撤回的部分
![](https://img.haomeiwen.com/i5981775/546bcdd6e502a063.png)
name_APKTOOL_DUPLICATENAME_0x7f0c2a24
全局搜
![](https://img.haomeiwen.com/i5981775/1933e2c08f7da04c.png)
继续搜 0x7f0c2a24
三处
![](https://img.haomeiwen.com/i5981775/a23049c8dfdf3cfb.png)
Killer卡死了。。。 换jadx看代码吧(手动哭泣) 上战场,枪很重要啊!!!
从上到先先记录一下这些类中使用的方法
Aidx—aj(ToServiceMsg,FromServiceMsg,Object) --没用
Aiji—a(ArrayList)
Aiji—b(ArrayList)---在这里有个意外收获,发现了D方法,就是当自己撤回的时候。看下面
Atdx—a(QQAppInterface,Submsgtype0x8a$ReqBody,JZ) ---信息量太大,看看上面的先(但是这里是最有可能的暂时看来)
Aiji—b
![](https://img.haomeiwen.com/i5981775/e2f2a0b98826548a.png)
热门都走了这个东西。 然后我们去看看 andk.a
我决定hook这个 andk.a 方法,我不管。我看的头大了。。。 先试试再说!
然后,没走。。。
然后hook atdx的a方法,一直报错找不到那个方法,然后
![](https://img.haomeiwen.com/i5981775/a0d1b8016f35ec69.png)
然后我决定打印他的所有a方法,并且拿到他的所有a方法的参数类型
![](https://img.haomeiwen.com/i5981775/4749502f46a1e51d.png)
![](https://img.haomeiwen.com/i5981775/65af37401f677e62.png)
我们需要找一个
![](https://img.haomeiwen.com/i5981775/1e30484712638d02.png)
类似这样的列表看看
![](https://img.haomeiwen.com/i5981775/94c100692828018c.png)
应该是这个了,跟我们的核对一下看看哪里有问题
com.tencent.mobileqq.app.QQAppInterface、tencent.im.msgsync.cmd0x100.Submsgtype0x8a$ReqBody、(暂时看来是这里错了)
long、
boolean、
先把上面的方法日志注释掉,然后看下面的hook能不能拿到参数
![](https://img.haomeiwen.com/i5981775/afb85427b286ec08.png)
这里打出来的就是 ReqBody的内容。 (记录重启了无数次。。。。。。模拟器。。要崩溃)
然后,hook不报错了,但是方法好像并没有走到这里!!!
我…. 接近崩溃,我要上AndroidStudio调试了!!!!
机器属实吃不消了,,毕竟这个内存不是无限大啊,i58代cpu也该退休了
⦁ 项目导入AndroidStudio
![](https://img.haomeiwen.com/i5981775/48b585dcd35cb44f.png)
![](https://img.haomeiwen.com/i5981775/ae9b17c3899e44cb.png)
![](https://img.haomeiwen.com/i5981775/059ae8024796e397.png)
![](https://img.haomeiwen.com/i5981775/b64db24139fe102e.png)
我选择8700你随意
⦁ 然后,看下qq的
![](https://img.haomeiwen.com/i5981775/a1b4c3b763ddf5ac.png)
2301
⦁ 输入adb命令 adb forward tcp:8700 jdwp:2301
![](https://img.haomeiwen.com/i5981775/311086063067acc4.png)
⦁ 我要在每个有撤回文字的地方打上断点! 分别为:
![](https://img.haomeiwen.com/i5981775/23e98c4f000dd288.png)
![](https://img.haomeiwen.com/i5981775/71c0b434cc474581.png)
.
![](https://img.haomeiwen.com/i5981775/14d26e56ed1ac89c.png)
![](https://img.haomeiwen.com/i5981775/0bdbff6fad98d079.png)
![](https://img.haomeiwen.com/i5981775/974bd1e83f277712.png)
(AndroidStudio一点好处就是不用滚轮,光标放到目录里,直接输入类名即可)
![](https://img.haomeiwen.com/i5981775/90355e74e039a5d4.png)
⦁ 开始打断点
⦁ 好了,调试失败
![](https://img.haomeiwen.com/i5981775/049a2c05a2739936.png)
我没了。。。
⦁ 解决各种问题卡顿之后, 断点走到了 aiji.b 方法
⦁ 来hook这个方法
⦁ 最后。。。我成功了!
分析不易,一键三连。
网友评论