寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

今天給大家介紹一下寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決。文章的內(nèi)容小編覺得不錯(cuò),現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對(duì)大家有所幫助,下面跟著小編的思路一起來閱讀吧。

成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)專業(yè)公司,是成都網(wǎng)站建設(shè)公司,為成都餐廳設(shè)計(jì)提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開發(fā)等。成都網(wǎng)站改版熱線:18982081108

下面的內(nèi)容是解決在遇到APP沒有使用Android自帶的HTTP客戶端進(jìn)行請(qǐng)求,并且對(duì)HTTP客戶端的代碼進(jìn)行了混淆,導(dǎo)致通用工具JustTrustMe失效的問題。而中級(jí)篇中除了JustTrustMe以外的所有方法也都會(huì)對(duì)這種情況束手無策,原因是中級(jí)篇中的1、3、4方法本質(zhì)上針對(duì)的是Android 7.0+系統(tǒng)增加的SSL Pinning方案,而無法對(duì)各個(gè)HTTP客戶端自己實(shí)現(xiàn)的檢測方案生效。(聽說有個(gè)叫車速拍的APP就是這種類型呢)

那么應(yīng)該怎么做才能抓到這類APP的包呢?很簡單,依然是使用JustTrustMe之類的Hook工具就好了,只不過我們需要針對(duì)混淆后的名字對(duì)原來Hook的部分進(jìn)行特殊處理。


這里我專門寫了一個(gè)樣例APP來進(jìn)行演示(別抓我,我什么都不知道),這個(gè)APP做的事情就是在你點(diǎn)擊了按鈕之后,對(duì)百度首頁發(fā)起一次請(qǐng)求,但是這個(gè)請(qǐng)求在沒有破解SSL Pinning的正常情況下是不可能成功的,因?yàn)槲以O(shè)置的是一個(gè)隨便輸入的證書哈希,所以在請(qǐng)求的時(shí)候會(huì)因?yàn)檎5淖C書哈希與我隨便輸入的哈希不同導(dǎo)致出現(xiàn)請(qǐng)求失敗的情況。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決cdn.nlark.com/yuque/0/2020/png/97322/1607218800977-f5885f4d-db66-425c-a32d-65b7fc100bcb.png">

樣例APP代碼

這個(gè)APP我已經(jīng)編譯好放到GitHub上了,有兩個(gè)版本,一個(gè)是對(duì)代碼進(jìn)行過混淆的,一個(gè)是沒混淆的,文末會(huì)有下載地址,讀者可以下載下來自己玩玩。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

兩個(gè)編譯好的APK

開始演示之前說一下測試機(jī)的配置吧,這里用的測試機(jī)是Android 8.1.0的,已經(jīng)Root+Xposed,同時(shí)已經(jīng)安裝并激活了JustTrustMe。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

測試機(jī)系統(tǒng)信息

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

Xposed模塊管理界面-JustTrustMe已開啟


我們先來看一下沒混淆過代碼的版本,裝上之后打開它,然后點(diǎn)擊“點(diǎn)擊發(fā)送請(qǐng)求”按鈕。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

樣例APP界面

不出意外的話會(huì)出現(xiàn)請(qǐng)求成功的字樣,如果出現(xiàn)請(qǐng)求失敗的話可能是你網(wǎng)絡(luò)問題,證書問題會(huì)提示“證書驗(yàn)證失敗”。

接下來我們看看混淆過代碼的版本,操作同上。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

證書驗(yàn)證失敗

這次就是證書驗(yàn)證失敗了,JustTrustMe并沒有正常生效。


我們將這兩個(gè)APK都放到Jadx中反編譯一下看看。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決在Jadx中反編譯兩個(gè)樣例APK

可以看到混淆過的版本里,okhttp3下的所有類名已經(jīng)變成了abcd這種名字。

然后我們來看一下JustTrustMe的代碼。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

JustTrustMe代碼中Hook okhttp3的證書驗(yàn)證部分

可以看到它的代碼中是對(duì)okhttp3.CertificatePinner類下的check方法進(jìn)行Hook的,這個(gè)CertificatePinner類和check方法在沒混淆過的APK中可以很清楚地看到。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

反編譯檢測代碼1寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

反編譯檢測代碼2

那么現(xiàn)在JustTrustMe面對(duì)混淆后的版本就失效的原因已經(jīng)很清晰了,因?yàn)樗也坏竭@個(gè)okhttp3.CertificatePinner.check,所以根本就不可能Hook到檢測方法,自然不會(huì)有任何效果。

所以...應(yīng)該怎么辦呢?這里依然是給出多種方法供讀者選擇:

1、修改JustTrustMe代碼中Hook的類名和方法名然后重新編譯

很簡單,找到對(duì)應(yīng)的檢測方法,把JustTrustMe代碼中Hook的className和methodName改成混淆后的名字即可,比如在這個(gè)混淆后的樣例APP里,okhttp3.CertificatePinner.check變成了okhttp3.f.a。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

反編譯檢測代碼-混淆后

我們修改JustTrustMe中的Hook部分,同樣改為f和a。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

JustTrustMe對(duì)okhttp3的證書檢測Hook寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

修改JustTrustMe對(duì)okhttp3的證書檢測Hook

改完之后編譯一下,安裝到手機(jī)上替換原來的就好了。

2、使用Frida進(jìn)行Hook

這個(gè)方法比方法1要更方便、更直接一些,因?yàn)樾枰臅r(shí)候直接修改腳本馬上就能用,不需要重新編譯、重啟手機(jī)或APP,這里直接拿瘦蛟舞大佬寫的解除SSL Pinning腳本修改一下,同樣是修改Hook okhttp3.CertificatePinner.check的部分,改成混淆后的名字即可。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

修改瘦蛟舞的ObjectionUnpinningPlus腳本

3、魔改JustTrustMe,增加一個(gè)可以在運(yùn)行時(shí)根據(jù)情況調(diào)整每種HTTP客戶端的SSL Pinning檢測部分的類名和方法名的功能

這個(gè)我暫時(shí)沒空弄,感興趣的同學(xué)可以自己實(shí)現(xiàn)一下。

4、魔改JustTrustMe,對(duì)Hook部分增加動(dòng)態(tài)適配功能,做到即使開發(fā)者對(duì)代碼進(jìn)行了混淆也能自動(dòng)找到真實(shí)的檢測類和方法

同上,實(shí)現(xiàn)方式可以參考微信巫師框架部分的自動(dòng)適配代碼,實(shí)現(xiàn)以后理論上來講是最方便的辦法之一,因?yàn)槭峭耆詣?dòng)的操作,不需要人工介入。

5、修改反編譯APP得到的代碼再打包回去

我覺得應(yīng)該沒人會(huì)用這么蠢的辦法吧...用Hook的方式做起來要方便太多了。

選擇任意一種方法操作后,再打開混淆版本的APP就可以正常請(qǐng)求了。


這時(shí)候可能會(huì)有同學(xué)要問了,怎么樣知道APP用的是哪個(gè)HTTP客戶端?又怎么樣快速定位混淆后的檢測方法位置呢?

很簡單,我們先關(guān)掉破解工具,連上代理然后抓個(gè)包看看混淆版本APP的請(qǐng)求。

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

抓包查看請(qǐng)求

寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決

User-Agent部分

和平時(shí)遇到SSL Pinning的情況一樣,這里只會(huì)抓到一個(gè)CONNECT請(qǐng)求,注意右邊的headers,從User-Agent中可以看出這個(gè)APP使用的是okhttp3,那么我們?cè)诨煜蟮拇a中定位檢測部分代碼的位置時(shí),就只需要對(duì)照著okhttp3的原始代碼來找就好了(其他HTTP客戶端同理)。當(dāng)然了,也不排除有些APP會(huì)把User-Agent改掉,如果從User-Agent上看不出來的話,那就看一下反編譯出來的源代碼部分結(jié)構(gòu),看看有沒有像okhttp3之類的這種特別明顯的HTTP客戶端的名字,有的話就把它干掉就好了。

以上就是寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決的全部內(nèi)容了,更多與寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決相關(guān)的內(nèi)容可以搜索創(chuàng)新互聯(lián)之前的文章或者瀏覽下面的文章進(jìn)行學(xué)習(xí)哈!相信小編會(huì)給大家增添更多知識(shí),希望大家能夠支持一下創(chuàng)新互聯(lián)!

新聞標(biāo)題:寫爬蟲抓不到APP請(qǐng)求包的時(shí)候該怎么解決
鏈接URL:http://muchs.cn/article42/ijdcec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、ChatGPT、小程序開發(fā)、全網(wǎng)營銷推廣、云服務(wù)器、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司