Android抓包 - Okhttp混淆导致Hook工具失效
Android抓包 - Okhttp混淆導(dǎo)致Hook工具失效
本文部分內(nèi)容參考 loco 大佬的文章,同時(shí)借用loco大佬文章中的2個(gè)APP(有無混淆)。
微信公眾號(hào): yeshengit
這篇文章的主要目的是介紹使用Frida來處理APP沒使用Android自帶的HTTP客戶端進(jìn)行請(qǐng)求,且對(duì)HTTP客戶端進(jìn)行了混淆,導(dǎo)致JustTrustMe失效的問題。
首先,我們先看下該樣例應(yīng)用的源碼,該應(yīng)用做的事情就是訪問百度,我們看到下圖第41行,我們這邊配置的證書哈希是隨機(jī)的,因此無論我們?nèi)绾卧L問,請(qǐng)求都是會(huì)失效的。
開始前,我先說下測(cè)試機(jī)的環(huán)境:
雷電模擬器3.76,Android 5.1.1,開啟Root,安裝且激活了Xposed,同時(shí)激活了TrustMePlus
讓我們運(yùn)行一下,沒有開混淆的APP,點(diǎn)擊發(fā)送請(qǐng)求。這邊提示請(qǐng)求成功
那么我們?cè)賮碓囋囬_了混淆的應(yīng)用。提示證書驗(yàn)證失敗
為什么會(huì)出現(xiàn)這種情況呢,我們可以將這2個(gè)應(yīng)用使用jadx反編譯,我們可以看看區(qū)別
可以看到,左為無混淆,右為混淆,插件還是十分明顯的,此時(shí)我們?cè)偃タ纯碕ustTrustMe的源碼。
下面我給JustTrustMe的幾個(gè)關(guān)鍵點(diǎn)進(jìn)行了標(biāo)注,同時(shí)加了點(diǎn)注釋。其實(shí)它主要的操作就是替換了check方法.
Okhttp 2.5 check 方法返回 True
Okhttp 3.x check 方法返回 null
分析到這里,我們可以使用Frida來寫點(diǎn)代碼來測(cè)試測(cè)試
jsscript.js文件代碼:
if(Java.available){Java.perform(function(){var Pinner = Java.use("okhttp3.CertificatePinner");send("okHTTP 3.x Found");Pinner.check.overload('java.lang.String', 'java.util.List').implementation = function(a,b){send("Hook CertificatePinner.check success!")return null;};}); }Hook.py代碼:
import frida, sys jsCode = "" with open("jsscript.js","r",encoding='utf-8') as f:jsCode = f.read() def message(message, data):if message["type"] == 'send':print(u"[*] {0}".format(message['payload']))else:print(message) process = frida.get_remote_device().attach("com.loco.example.OkHttp3SSLPinning") script= process.create_script(jsCode) script.on("message", message) script.load() sys.stdin.read()注意:Frida在模擬器上運(yùn)行不太穩(wěn)定,現(xiàn)在測(cè)試環(huán)境為 nexus5 (6.0.1),Root,未安全Xposed模塊
運(yùn)行下Frida腳本,看看
至此,無混淆的版本已經(jīng)搞定了抓包問題,那么我們?cè)賮碓囋嚮煜姹尽?/p>
混淆后的jsscript.js:
if(Java.available){Java.perform(function(){var Pinner = Java.use("d.k");send("okHTTP 3.x Found");Pinner.a.overload('java.lang.String', 'java.util.List').implementation = function(a,b){send("Hook CertificatePinner.check")return null;};}); }于是乎
至此,全篇終!!!
SSL ping APK下載地址:
鏈接:https://pan.baidu.com/s/1vIw40alQG7K1wNkmzmAkgw
提取碼:as7g
參考
DroidSSLUnpinning: https://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js
JustTrustMe: https://github.com/Fuzion24/JustTrustMe
tps://github.com/WooyunDota/DroidSSLUnpinning/blob/master/ObjectionUnpinningPlus/hooks.js
JustTrustMe: https://github.com/Fuzion24/JustTrustMe
總結(jié)
以上是生活随笔為你收集整理的Android抓包 - Okhttp混淆导致Hook工具失效的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。