解决k手8.0抓包
最近某手更新了8.0版本,这让我们的爬虫小伙伴可难受了。
某手更新8.0之后,最直接的问题就是抓不到包。
我们需要逆向分析一下8.0的网络协议,看看到底使用了什么技术,才让我们抓不到包呢。
分析借助的技术&工具
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,主要app会在开机的自启动,以上只用学习交流,请勿用于非法研究。
自己搞了一个知识星球,主要是用来分享在工作的的一些实际经验,更偏向与实践和干货,和某些知识理论相比更实际一点,现在加入还有50元优惠。
欢迎大佬们加入,互相学习,主要是干货满满。
)
本文系作者 @吾爱小白 原创发布在 我的编程学习之路。未经许可,禁止转载。