1. 程式人生 > >Fiddler抓取Android真機上的HTTPS包

Fiddler抓取Android真機上的HTTPS包

現在的Android應用程式幾乎都會和網路打交道,所以在分析一個apk的時候,如果可以抓取出其發出的資料包,將對分析程式的流程和邏輯有極大的幫助。

對於HTTP包來說,已經有很多種分析的方法了,例如用tcpdump,或者將要分析的程式跑在模擬器中然後直接在物理機上用WireShark抓包。但是現在越來越多的應用已經使用HTTPS協議來和伺服器端交換資料了,這無疑給抓包分析增加了難度。

幸好有一個工具Fiddler可以用來解決這個問題。Fiddler是一個非常強大的Web除錯工具,它的原理不同於WireShark。WireShark是讓網絡卡工作在混雜模式下,擷取所有網路上的資料包進行分析,而Fiddler本質上是一個HTTP/HTTPS代理伺服器。


既然是代理伺服器,那當然可以拿到所有的包了。

Fiddler可以從這裡下載到:http://www.telerik.com/download/fiddler,如果你的Windows機上能安裝.NET 4及以上的版本,儘量選擇Fiddler4來安裝。

好了,廢話不多說了,馬上動手開始抓包。這裡我以Google Play為例,來演示如何操作,步驟如下:

1)請確保你的Android裝置和你安裝Fiddler的電腦都連線到一個WiFi AP上,兩臺機器在一個區域網段裡,網路拓撲結構如下:


2)配置Fiddler抓取並解密HTTPS包

Fiddler預設是不抓取HTTPS包的,需要進行相應的配置。

開啟Fiddler,選擇“Tools->Fiddler Options...”


在彈出的對話方塊中選擇“HTTPS”選項卡:


勾選“Capture HTTPS CONNECTs”,接著勾選“Decrypt HTTPS traffic”。同時,由於我們是通過WiFi遠端連過來,所以在下面的選項框中選擇“...from remote clients only”。

如果你要監聽的程式訪問的HTTPS站點使用的是不可信的證書,則請接著把下面的“Ignore server certificate errors”勾選上。

接著切換到"Connections"選項卡:


監聽埠預設是8888,當然你可以把它設定成任何你想要的埠。請一定要勾選上“Allow remote computers to connect”。

為了減少干擾,可以去掉“Act as system proxy on startup”。

最後點“OK”退出,Fiddler就算是設定好了。

還有一點提醒大家注意,請一定記住將你本機上的防火牆關閉,筆者在這上面浪費了不少時間。

3)設定Android裝置,新增上代理伺服器

先檢視一下安裝Fiddler的電腦的IP地址是多少,在cmd裡使用ipconfig命令就好了。


可以看到,筆者電腦分配到的IP地址是192.168.11.8。這就是要在Android裝置上設定的代理伺服器地址,至於埠嘛,就是在前面設定的監聽埠,預設是8888。

好了,一切準備就緒,下面來設定Android裝置上的代理伺服器。

開啟WiFi設定頁面,選擇要連線的AP,並且長按,在彈出的對話方塊中,選擇“修改網路”。


在接下來彈出的對話方塊中,勾選“顯示高階選項”。在接下來顯示的頁面中,點選“代理”,選擇“手動”。

在“代理伺服器主機名”和“代理伺服器埠”中寫上前面得到的地址和埠,最後點“儲存”。


最後,連線上這個無線AP就可以了。

4)導證書到Android裝置

Fiddler本質上是一個HTTPS代理伺服器,其自己帶的證書顯然不會在Android裝置的受信任證書列表裡。

有些應用程式會檢視伺服器端的證書是否是由受信任的根證書籤名的,如果不是就直接跳出。

所以,為了保險起見,我們要將Fiddler代理伺服器的證書導到Android裝置上。

匯入的過程非常簡單,開啟裝置自帶的瀏覽器,在位址列中輸入代理伺服器的IP和埠,例如本例中我們會輸入192.169.11.8:8888,進入之後會看到一個Fiddler提供的頁面:


點選頁面中的“FiddlerRoot certificate”連結,接著系統會彈出對話方塊:


輸入一個證書名稱,然後直接點“確定”就好了。

一切都設定完成了,我們來抓包看看效果吧,開啟Android裝置上的“Google Play”,看看能拿到什麼:



看到了沒有,全都能拿出來,再結合其它的一些動態或靜態的分析方法,破解協議將變得容易一些。

最後,不得不提這種方法的一些優點和缺點。

首先來談優點,有以下幾點:

1)手機不需要root就可以抓包;

2)可以用真機抓包,有些程式是抗動態分析的,能夠判斷自己執行在模擬器中。

缺點嘛,當然也有:

1)必須要用WiFi連線(這個很容易滿足);

2)要抓包分析的應用程式必須自己支援代理伺服器的設定。