Fiddler iOS https抓包加爬蟲

Fiddler iOS https抓包加爬蟲

在爬取B2B網站企業聯絡方式之後,老闆又突發奇想要抓取競爭對手手機APP中顯示的客戶資訊,於是乎,對於手機抓包、APP爬蟲一無所知的我開始了艱難的探(百)索(度)之路,最終成功拿到兩家競爭對手APP中的客戶列表。如果你也想爬取某個APP,這篇文章或許能幫到你。

各類問答平臺、部落格網站的前輩們分享的經驗固然豐富,卻不一定是在同樣的環境(譬如系統版本)下做出來的,因此借鑑的意義也比較有限,總之大家都是摸著石頭過河。

 

系統:Win10

Fiddler:V4.6

手機:iOS 10.3.3

第一步:設定Fiddler與手機

關於Fiddler的下載,安裝,與手機端HTTP代理的設定,隨便百度“手機APP抓包”就能出來一堆非常相似的文章。譬如這篇講得很詳細:使用Fiddler進行iOS
APP的HTTP/HTTPS抓包

不過其中可能遇到的最大困難就是HTTPS的擷取,作為新手的我,真是吃盡了苦頭。在百度過N篇文章後,我總結了以下幾個步驟(這裡假設你已經按照上述部落格指導流程走了一遍):

1、開啟Fiddler,點選工具欄中Tools,選擇Options,選擇其中HTTPS一欄,右上角Actions點開有一個選項叫做Reset All Certificates,點選就相當於將所有fiddler的證書刪除並重新下載,其間會有很多視窗彈出,基本上都是選擇Yes或者Trust就可以搞定了。

這時嘗試在瀏覽器中開啟百度,由於百度首頁也是HTTPS協議,因此可以檢驗我們是否設定好PC端的證書。如果你看到的是如下圖,說明OK了:

2、如果你開啟手機上的Safari,進入百度主頁,頁面卻沒有載入,反而給出錯誤提示:瀏覽器無法建立與伺服器的安全連線,那就說明手機端的證書沒有搞定了。這時簡單粗暴的方法就是刪除手機上的Fiddler證書,按照上述部落格中的方法再下載安裝一次。注意:在iOS 10.3.3 中即使安裝證書也不會預設啟用,需要在“設定 –> 通用 –> 關於本機 –> 證書資訊設定”中開啟Fiddler證書。如下圖:

感謝在這個問題下的答主:連結

這時嘗試在微信中開啟公眾號文章,如果能正常載入並擷取HTTPS說明手機端的證書也搞定了。如下圖:

3、如果PC或者手機剛剛升級,或者Fiddler版本更新,這時出現HTTPS無法正常抓包情況,可以簡單粗暴將1、2再做一次。

如果有些APP依然無法正常載入,譬如餓了麼,大概是因為APP開發者本身運用證書鎖定技術,防止類似Fiddler這樣的中間人代理。

第二步:擷取,檢視,分析請求

設定好之後開啟你想爬取的APP,進入包含你所需要的資訊的介面(對我而言,所有客戶的列表頁),由於客戶端要向伺服器請求資訊,會產生GET或者POST請求,而伺服器也會有相應的Response。如下圖:

右下角是Response的區域,可以看到我們想要的客戶資訊就在伺服器傳回來的JSON檔案中,companyName很明顯就是公司名稱,而industry就是客戶公司所在的行業。

接下來的任務就是用指令碼模擬這條請求,產生一系列的請求獲取所有公司的資訊。於是我操作APP下拉選單,試圖擷取第二條類似的請求,以尋找規律。

結果發現,第二次請求返回的公司列表與第一次不同(廢話),但是它們的請求頭(包括url)幾乎完全一樣。這種情況與網頁版百度地圖搜尋請求一模一樣,因為請求除了頭,還帶上了一個表格,這個表格中的內容告訴伺服器應該給什麼Response。點選Inspectors下面的WebForms,如下圖:

第三部:用Python request 庫批量傳送請求,解析JSON檔案

觀察到第一頁請求skip的值為0,第二頁請求skip的值為1,以此類推,將WebForms中的表格內容以Python資料型別的“字典”形式,傳給requests函式中的data引數。

 

彩蛋:對於有些安全措施不嚴密的APP,Fiddler甚至可以擷取到伺服器傳送給客戶端的正確驗證碼的明文,若這個APP只需手機驗證碼正確即可登入,則攻擊者一旦知道某一使用者的註冊手機號,就可以登入他/她的賬號為所欲為。