逆向分析某App其Frida、Xposed、Root检测及protobuf数据解析

3,505 阅读3分钟

1.前言

接到客户需求需要分析某海外语音社交App其房间数据和榜单数据,该app除了部分hook检测外,还有个protobuf挺有意思的,现将该项目的整个流程还原

需要的工具如下:

一个app:链接:pan.baidu.com/s/1vK_CQ4Jm… 提取码:6666 hook工具:Frida、magisk、一部Android9.0的真机

备注:如果你有海外App数据需求可以联系我,微信公众号关注后可以在菜单栏直接加我微信

欢迎关注"python网络爬虫大数据与逆向工程"公众号,一起学习更多关于网络爬虫和逆向工程方面的知识

在这里插入图片描述

2.Frida和Xposed检测

一开始肯定是抓包,如果包都抓不到那还搞个锤子,打开httpcanary 它让我们去安装JustTrustMe,好的那我们就给他装上

在这里插入图片描述

这里用的是magisk安装的LSposed模块(LSposed需要基于Riru模块),然后在此模块上安装JustTrustMe,然后我们再次抓包

在这里插入图片描述

结果就翻车了,然后我们就会考虑是否有SSL双向验证,果断打开ProxyDroid

在这里插入图片描述 在这里插入图片描述

结果是依旧抓不到包,这包都抓不到还爬个锤子的数据,于是我们果断选择放弃。放弃当然是不可能放弃的。不是还有伟大的Frida吗,我们开启来看一下直接hook Java的请求库,这里抓包用到的是肉丝大佬的r0capture
github.com/r0ysue/r0ca… 结果还是翻车了,这里的意思就是app被囚禁起来了,然后作者提供了一个更为牛逼的持久化Frida的结果方案,将gadget.so注入到app的运行内存中,这样就可以完美的解决frida服务注入的问题 如果逆向手把手亲自尝试该过程可以参看下面这篇文章 fadeevab.com/frida-gadge…

在这里插入图片描述

这里的话我们用的是一个已经做好的magisk模块去解决该问题,就不自己去造轮子了(因为不会) github.com/qiang/Riru-…

在这里插入图片描述

走到这里那么我们肯定会好奇到底是哪里检测了Frida使得其无法持久化 jdax打开后搜索frida然后映入眼帘的就是这个东西,这里枚举了需要检测的是Xposed和Frida

在这里插入图片描述

2.抓包分析

好了,那么我们现在去看一下能不能抓包,开启JustTrustMe后仍然无法用HttpCanary抓包,既然JustTrustMe无效,我们先把Root特征和magisk给隐藏一下

2-1.隐藏root

用这个脚本把root特征隐藏一下 codeshare.frida.re/@dzonerzy/f…

2-2.过sslpinning

codeshare.frida.re/@akabe1/fri…

于是我们挂上fiddler后就可以享受丝滑般的抓包了

在这里插入图片描述

3.protobuf数据解析

抓包是抓到了,但是数据很头痛,请求体和响应体是乱码,但后我们仔细看看请求头会发现一个有意思的东西Content-Type: application/proto,这个东西表示的是服务器和客户端预定以protobuf的形式去传输数据

在这里插入图片描述

3-1.什么是protobuf

网上很多教程,其实总结起来就一句话,他们用来protobuf后你就看不到键值对中的key了只能看到value,也就是说对接数据时不管你发过来的key是啥,只要value对上了就行

这里我们用blackboxprotobuf去解决该问题,这样就不需要自己手动去构造对象了,这个库可以自动帮我们构建

在这里插入图片描述 我们现在先将fiddler的请求头复制下来,这里注意有ctrl+c和Ctrl+v的习惯会导致你这一步很难受,然后拿不到请求体,你应该要像下图那样去复制该请求头,用ctrl+c去复制会有毒。在hexView下,save selected Bytes,保存为二进制文件 在这里插入图片描述 然后就可以解析出该数据,这个数据解析出来后,就要靠自己去猜哪一个value对应的是页面上的哪些数据 在这里插入图片描述

数据抓取

把这一切都搞定后有几个简单的加密参数,自己跟踪一下就出来了,最后看一下效果,数据抓取起来非常的丝滑 在这里插入图片描述