您好,登錄后才能下訂單哦!
今天給大家介紹一下寫爬蟲抓不到APP請求包的時候該怎么解決。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
下面的內容是解決在遇到APP沒有使用Android自帶的HTTP客戶端進行請求,并且對HTTP客戶端的代碼進行了混淆,導致通用工具JustTrustMe失效的問題。而中級篇中除了JustTrustMe以外的所有方法也都會對這種情況束手無策,原因是中級篇中的1、3、4方法本質上針對的是Android 7.0+系統增加的SSL Pinning方案,而無法對各個HTTP客戶端自己實現的檢測方案生效。(聽說有個叫車速拍的APP就是這種類型呢)
那么應該怎么做才能抓到這類APP的包呢?很簡單,依然是使用JustTrustMe之類的Hook工具就好了,只不過我們需要針對混淆后的名字對原來Hook的部分進行特殊處理。
這里我專門寫了一個樣例APP來進行演示(別抓我,我什么都不知道),這個APP做的事情就是在你點擊了按鈕之后,對百度首頁發起一次請求,但是這個請求在沒有破解SSL Pinning的正常情況下是不可能成功的,因為我設置的是一個隨便輸入的證書哈希,所以在請求的時候會因為正常的證書哈希與我隨便輸入的哈希不同導致出現請求失敗的情況。
cdn.nlark.com/yuque/0/2020/png/97322/1607218800977-f5885f4d-db66-425c-a32d-65b7fc100bcb.png">
樣例APP代碼
這個APP我已經編譯好放到GitHub上了,有兩個版本,一個是對代碼進行過混淆的,一個是沒混淆的,文末會有下載地址,讀者可以下載下來自己玩玩。
兩個編譯好的APK
開始演示之前說一下測試機的配置吧,這里用的測試機是Android 8.1.0的,已經Root+Xposed,同時已經安裝并激活了JustTrustMe。
測試機系統信息
Xposed模塊管理界面-JustTrustMe已開啟
我們先來看一下沒混淆過代碼的版本,裝上之后打開它,然后點擊“點擊發送請求”按鈕。
樣例APP界面
不出意外的話會出現請求成功的字樣,如果出現請求失敗的話可能是你網絡問題,證書問題會提示“證書驗證失敗”。
接下來我們看看混淆過代碼的版本,操作同上。
證書驗證失敗
這次就是證書驗證失敗了,JustTrustMe并沒有正常生效。
我們將這兩個APK都放到Jadx中反編譯一下看看。
在Jadx中反編譯兩個樣例APK
可以看到混淆過的版本里,okhttp3下的所有類名已經變成了abcd這種名字。
然后我們來看一下JustTrustMe的代碼。
JustTrustMe代碼中Hook okhttp3的證書驗證部分
可以看到它的代碼中是對okhttp3.CertificatePinner類下的check方法進行Hook的,這個CertificatePinner類和check方法在沒混淆過的APK中可以很清楚地看到。
反編譯檢測代碼1
反編譯檢測代碼2
那么現在JustTrustMe面對混淆后的版本就失效的原因已經很清晰了,因為它找不到這個okhttp3.CertificatePinner.check,所以根本就不可能Hook到檢測方法,自然不會有任何效果。
所以...應該怎么辦呢?這里依然是給出多種方法供讀者選擇:
1、修改JustTrustMe代碼中Hook的類名和方法名然后重新編譯
很簡單,找到對應的檢測方法,把JustTrustMe代碼中Hook的className和methodName改成混淆后的名字即可,比如在這個混淆后的樣例APP里,okhttp3.CertificatePinner.check變成了okhttp3.f.a。
反編譯檢測代碼-混淆后
我們修改JustTrustMe中的Hook部分,同樣改為f和a。
JustTrustMe對okhttp3的證書檢測Hook
修改JustTrustMe對okhttp3的證書檢測Hook
改完之后編譯一下,安裝到手機上替換原來的就好了。
2、使用Frida進行Hook
這個方法比方法1要更方便、更直接一些,因為需要的時候直接修改腳本馬上就能用,不需要重新編譯、重啟手機或APP,這里直接拿瘦蛟舞大佬寫的解除SSL Pinning腳本修改一下,同樣是修改Hook okhttp3.CertificatePinner.check的部分,改成混淆后的名字即可。
修改瘦蛟舞的ObjectionUnpinningPlus腳本
3、魔改JustTrustMe,增加一個可以在運行時根據情況調整每種HTTP客戶端的SSL Pinning檢測部分的類名和方法名的功能
這個我暫時沒空弄,感興趣的同學可以自己實現一下。
4、魔改JustTrustMe,對Hook部分增加動態適配功能,做到即使開發者對代碼進行了混淆也能自動找到真實的檢測類和方法
同上,實現方式可以參考微信巫師框架部分的自動適配代碼,實現以后理論上來講是最方便的辦法之一,因為是完全自動的操作,不需要人工介入。
5、修改反編譯APP得到的代碼再打包回去
我覺得應該沒人會用這么蠢的辦法吧...用Hook的方式做起來要方便太多了。
選擇任意一種方法操作后,再打開混淆版本的APP就可以正常請求了。
這時候可能會有同學要問了,怎么樣知道APP用的是哪個HTTP客戶端?又怎么樣快速定位混淆后的檢測方法位置呢?
很簡單,我們先關掉破解工具,連上代理然后抓個包看看混淆版本APP的請求。
抓包查看請求
User-Agent部分
和平時遇到SSL Pinning的情況一樣,這里只會抓到一個CONNECT請求,注意右邊的headers,從User-Agent中可以看出這個APP使用的是okhttp3,那么我們在混淆后的代碼中定位檢測部分代碼的位置時,就只需要對照著okhttp3的原始代碼來找就好了(其他HTTP客戶端同理)。當然了,也不排除有些APP會把User-Agent改掉,如果從User-Agent上看不出來的話,那就看一下反編譯出來的源代碼部分結構,看看有沒有像okhttp3之類的這種特別明顯的HTTP客戶端的名字,有的話就把它干掉就好了。
以上就是寫爬蟲抓不到APP請求包的時候該怎么解決的全部內容了,更多與寫爬蟲抓不到APP請求包的時候該怎么解決相關的內容可以搜索億速云之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。