一、目標(biāo)
某手早就搞過好幾次了,不過人家努力,幾天小版本,幾周大版本,一不留神就看不懂了,這不升級(jí)到 8.x 之后,包都抓不到了。藍(lán)瘦香菇。
TIP: 新鮮熱乎的 8.3.30.17506
二、步驟
先從okhttp3搞起
Charles就不用祭出來了,象征性的抓了幾個(gè)無關(guān)痛癢的數(shù)據(jù)。看不到熱門數(shù)據(jù)包不好玩。我們先從okhttp3入手,從jadx里看okhttp3還是沒有被放棄的。
使用okhttp3發(fā)送一個(gè)請(qǐng)求,大概如下兩步:
Call call = new OkHttpClient().newCall(new Request.Builder().build());
Response response=call.execute();
那我們就先hook newCall
var OkHttpClient = Java.use("okhttp3.OkHttpClient");
OkHttpClient.newCall.implementation = function (request) {
var result = this.newCall(request);
console.log(request.toString());
return result;
};
太棒了,Request數(shù)據(jù)打印出來了, 那Response數(shù)據(jù)我也要,hook execute
Override // okhttp3.Call.Factory
public Call newCall(C16082Request request) {
return RealCall.newRealCall(this, request, false);
}
從jadx的代碼里看 newCall 返回的是 RealCall對(duì)象,所以我們也要hook RealCall的execute
var OkHttpRealCall = Java.use("okhttp3.RealCall");
OkHttpRealCall.execute.implementation = function(){
var result = this.execute();
console.log(result.toString());
return result;
}

通訊協(xié)議是 QUIC,怪不得Charles搞不定。不過這個(gè)抓包結(jié)果怎么看怎么不開心,發(fā)送過去的數(shù)據(jù)也看不到,接收回來的數(shù)據(jù)也看不到。脫了一半讓人更著急。
OkHttpLogger-Frida
開始介紹新朋友了, https://github.com/siyujie/OkHttpLogger-Frida 用了一堆神奇的方法達(dá)到了命令行版的Charles的效果。
首先將 okhttpfind.dex 拷貝到 /data/local/tmp/
然后 frida -U -l okhttp_poker.js -f com.example.demo --no-pause 就可以跑起來了。

這個(gè)效果還不錯(cuò),感覺又回到了Charles的美好時(shí)光。
過濾url
美好的時(shí)光總是短暫的,刷了一會(huì),App就提示網(wǎng)絡(luò)無法訪問。難道還有什么坑?
先把返回值數(shù)據(jù)的打印屏蔽掉。這怎么玩都不會(huì)提示了。奮飛懷疑,在取熱門數(shù)據(jù)數(shù)據(jù)包的時(shí)候,由于數(shù)據(jù)比較大,所以我們打印出來比較費(fèi)時(shí),可能就會(huì)導(dǎo)致訪問超時(shí)。
還好作者提供了一個(gè) filterUrl 函數(shù),可以指定打印你需要分析的url,這樣可以防止再產(chǎn)生超時(shí)的問題。
三、總結(jié)
打工人還是很苦逼呀,升級(jí)這么快,不搞點(diǎn)新花樣都沒法好好抓包了。

不要和我談夢(mèng)想,我打工就是為了錢