提示:由於高級篇之後的APP將沒法使用很通用的方式處理,每種類型甚至是每一個APP的反抓包處理方式都會有差異,因此這個系列之後會以【高級篇-具體類型】的形式來寫。git
這篇文章的主要內容是解決在遇到APP沒有使用Android自帶的HTTP客戶端進行請求,而且對HTTP客戶端的代碼進行了混淆,致使通用工具JustTrustMe失效的問題。而中級篇中除了JustTrustMe之外的全部方法也都會對這種狀況一籌莫展,緣由是中級篇中的一、三、4方法本質上針對的是Android 7.0+系統增長的SSL Pinning方案,而沒法對各個HTTP客戶端本身實現的檢測方案生效。(據說有個叫車速拍的APP就是這種類型呢)github
那麼應該怎麼作才能抓到這類APP的包呢?很簡單,依然是使用JustTrustMe之類的Hook工具就行了,只不過咱們須要針對混淆後的名字對原來Hook的部分進行特殊處理。web
這裏我專門寫了一個樣例APP來進行演示(別抓我,我什麼都不知道),這個APP作的事情就是在你點擊了按鈕以後,對百度首頁發起一次請求,可是這個請求在沒有破解SSL Pinning的正常狀況下是不可能成功的,由於我設置的是一個隨便輸入的證書哈希,因此在請求的時候會由於正常的證書哈希與我隨便輸入的哈希不一樣致使出現請求失敗的狀況。微信
這個APP我已經編譯好放到GitHub上了,有兩個版本,一個是對代碼進行過混淆的,一個是沒混淆的,文末會有下載地址,讀者能夠下載下來本身玩玩。網絡
開始演示以前說一下測試機的配置吧,這裏用的測試機是Android 8.1.0的,已經Root+Xposed,同時已經安裝並激活了JustTrustMe。框架
咱們先來看一下沒混淆過代碼的版本,裝上以後打開它,而後點擊「點擊發送請求」按鈕。ide
不出意外的話會出現請求成功的字樣,若是出現請求失敗的話多是你網絡問題,證書問題會提示「證書驗證失敗」。工具
接下來咱們看看混淆過代碼的版本,操做同上。測試
此次就是證書驗證失敗了,JustTrustMe並無正常生效。3d
咱們將這兩個APK都放到Jadx中反編譯一下看看。
能夠看到混淆過的版本里,okhttp3下的全部類名已經變成了abcd這種名字。
而後咱們來看一下JustTrustMe的代碼。
能夠看到它的代碼中是對okhttp3.CertificatePinner類下的check方法進行Hook的,這個CertificatePinner類和check方法在沒混淆過的APK中能夠很清楚地看到。
那麼如今JustTrustMe面對混淆後的版本就失效的緣由已經很清晰了,由於它找不到這個okhttp3.CertificatePinner.check,因此根本就不可能Hook到檢測方法,天然不會有任何效果。
因此...應該怎麼辦呢?這裏依然是給出多種方法供讀者選擇:
很簡單,找到對應的檢測方法,把JustTrustMe代碼中Hook的className和methodName改爲混淆後的名字便可,好比在這個混淆後的樣例APP裏,okhttp3.CertificatePinner.check變成了okhttp3.f.a。
咱們修改JustTrustMe中的Hook部分,一樣改成f和a。
改完以後編譯一下,安裝到手機上替換原來的就行了。
這個方法比方法1要更方便、更直接一些,由於須要的時候直接修改腳本立刻就能用,不須要從新編譯、重啓手機或APP,這裏直接拿瘦蛟舞大佬寫的解除SSL Pinning腳本修改一下,一樣是修改Hook okhttp3.CertificatePinner.check的部分,改爲混淆後的名字便可。
這個我暫時沒空弄,感興趣的同窗能夠本身實現一下。
同上,實現方式能夠參考微信巫師框架部分的自動適配代碼,實現之後理論上來說是最方便的辦法之一,由於是徹底自動的操做,不須要人工介入。
我以爲應該沒人會用這麼蠢的辦法吧...用Hook的方式作起來要方便太多了。
選擇任意一種方法操做後,再打開混淆版本的APP就能夠正常請求了。
這時候可能會有同窗要問了,怎麼樣知道APP用的是哪一個HTTP客戶端?又怎麼樣快速定位混淆後的檢測方法位置呢?
很簡單,咱們先關掉破解工具,連上代理而後抓個包看看混淆版本APP的請求。
和平時遇到SSL Pinning的狀況同樣,這裏只會抓到一個CONNECT請求,注意右邊的headers,從User-Agent中能夠看出這個APP使用的是okhttp3,那麼咱們在混淆後的代碼中定位檢測部分代碼的位置時,就只須要對照着okhttp3的原始代碼來找就行了(其餘HTTP客戶端同理)。固然了,也不排除有些APP會把User-Agent改掉,若是從User-Agent上看不出來的話,那就看一下反編譯出來的源代碼部分結構,看看有沒有像okhttp3之類的這種特別明顯的HTTP客戶端的名字,有的話就把它幹掉就行了。
歡迎提供更多高級篇的素材,在評論或私信裏告知我均可以。
若是這篇文章有幫到你,請大力點贊,謝謝~~ 歡迎關注個人知乎帳號loco_z和個人知乎專欄《手把手教你寫爬蟲》,我會時不時地發一些爬蟲相關的乾貨和黑科技,說不定能讓你有所啓發。