工具
1、jadx
2、frida
网络请求框架分析请求协议
通过查看app源码,可以清楚看到okhttp3的包名,使用okhttp3就很香。
okhttp3分析
1、打印网络请求
通过他的sign或者sig3算法位置打印即可
frida 是真的香
var s = Java.use("j.a.*.*.s");
s.a.overload('okhttp3.Request', 'java.util.Map', 'java.util.Map').implementation = function (a1, a2, a3) {
console.log(a1)
return this.a(a1, a2, a3)
}
可以清楚的看到请求的url还有get的参数,不过发现没有打印出来协议相关的信息。2、打印网络响应
打印一下第一步的调用栈
var exc = Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new());
console.log(exc)
这里的就可以去打印响应数据了。这就好了,app使用的协议是quic,这也就是为什么通过Charles抓不到包的原因了。
okhttp3本身是支持quic的,但是app这里没有用到。
从这篇文章就能发现蛛丝马迹
https://cloud.tencent.com/developer/news/666059
客户端、网络库统一设计
对 QUIC 协议的支持需要客户端、服务端统一设计,kQUIC 也做了相应的工作。
客户端网络库项目代号是库 Aegon,目标是代替原 OKHTTP/AFNetworking 和进行 API 请求和短视频下载,提供了 QUIC 协议的支持、完善的上报信息,并基于对数据指标的分析和对协议的深入理解,对网络库中持续进行了多项协议相关的优化,包括预建连、SSL Session 复用优化、客户端 BBR、POST 请求 0RTT 优化等等。
一般 APP 使用的开源的网络库包括 OKHTTP 和 AFNetwork,都不支持跨平台,OKHTTP 是 Android 端,AFNetwork 是 iOS 端。**网络库在设计之初就把跨平台作为一个重要的目标,为**的双端提供统一的网络优化解决方案。
所以Aegon是客户端代号,全部的包名是aegon.chrome
,剩下的就好办了。
解决问题
通过上面类似步骤的hook和打印调用栈,发现app本身有一个类似开关的地方。"enable_quic": true
把这个开关利用hook改成"enable_quic": false
,那就可以抓包了。
看看hook修改后的请求协议吧。
看看Charles是否能抓到包。
小结
frida Hook在app启动的时候,不要attach,建议使用xposed进行Hook
本文始发于微信公众号(网络侦查研究院):抓包quick手
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论