在对某音国际版的APP抓包分析数据过程中,发现该APP使用了自定义的SSL框架,这就大大提高直接利用现有的框架抓包分析的成本。
现成的Xposed框架的JustTrustMe模块、frida框架的r0capture脚本均无法正常抓包。因为在于这些模块脚本,主要针对的是系统原生的SSL框架,而该APP采用自定义了自己的SSL框架。那么如果我们需要对APP进行抓包的话,就需要过掉该APP的检测机制从而实现抓包数据分析。
下面从SSL框架原理,以及通过两个方式实现对APP正常抓取数据包功能。
SSL全称是Secure Scoket Layer安全套接层,它是一个安全协议,它提供使用 TCP/IP的通信应用程序间的隐私与完整性,它是一种为网络通信提供安全以及数据完整性的安全协议,再传输层对网络进行加密,因特网的超文本传输协议(HTTP)使用 SSL 来实现安全的通信。
SSL记录协议:为高层协议提供安全封装,压缩,加密等基本功能
SSL握手协议:用与再数据传输开始前进行通信双方的身份验证、加密算法协商、交换秘钥。
在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 R**)进行加密的。公用密钥算法(通常为 RSA)是用来获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书中的公用密钥。有了服务器的SSL数字证书,客户端也可以验证服务器的身份。
SSL协议的 1和2版本 ,它只提供服务器认证,而第3版本添加了客户端认证,此认证同时需要客户端和服务器的数字证书。
该APP防止抓包主要通过自定义SSL校验来实现,那么我们只要将APP中检验的最终结果修改成校验通过就可以正常的抓包。
通过对APP组成结构和代码的分析,该APP中自定义SSL校验是在libsscronet.so的文件中,那我们就可以直接将APP重命名为zip后缀,然后直接解压。解压后得到很多文件,这些so文件都是存在lib目录。
接下来就需要通过利用IDA静态分析工具分析和Hex_Editor工具结合进行对so文件做修改。
在IDA中通过字符串窗口中搜索关键词verifycert,通过上图可以搜索到该关键词相关的,那么接下来就是通过代码交互引用然后跳转到代码调用的地方。
上图的伪代码中,可以看到该函数中的调用关键字符串的地方,那么在这个调用的地方return 0的时候就表示校验成功,
那么我们只需要把图中的return 1修改为0即可。
通过借助Hex_Editor工具,将刚才IDA工具分析到到return1改成return0,那么重新保存下就可以了。
最后将修改后的SO文件替换到APP安装的原目录下那么就可以开始抓包分析了。
上图是通过Fiddler抓包工具进行抓包分析的,Fiddler抓包还得进行证书安装才能正常抓包。
直接将APP拖进jadx反编译工具,从代码中发现APP使用的网络请求框架是Retrofit,而Retrofit网络请求框架底层使用依旧是Okhttp,那么Hook的切入点可以从拦截器或者初始化时传入的OkClient入手。
通过jadx反编译,从代码中确认了APP初始化Retrofit的位置
是com.bytedance.ies.ugc.aweme.network.RetrofitFactory。
Hook代码的方式目前常见的就是用frida和xposed这两个框架进行hook功能
这边主要以frida框架进行hook功能,经过对这个类多次代码逻辑梳理及Hook,找到了X.MBJ的类,该类中的LIZ方法的返回值c内有请求的所有数据,猜测可能是response。
下面开始基于frida进行编写python和js脚本
上图是python脚本
上图是javascript脚本
通过启动frida运行后的效果如下图
从下面数据中以及可以看到解析到通信数据了,这样的hook功能效果就达到,接下来就可以开始用抓包工具进行抓包分析了。
参考借鉴
https://www.jianshu.com/p/efd56ad78499
https://juejin.cn/post/7122723176387346469
结束
本文作者:编码安全
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/184703.html