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