Charles和Fiddler一樣不但能截獲各種瀏覽器發出的 HTTP 請求,也可以截獲各種智慧手機發出的HTTP/ HTTPS 請求。
Charles也能截獲 Android 和 Windows Phone 等裝置發出的 HTTP/HTTPS 請求。
今天宏哥講解和分享Charles如何截獲安卓行動端發出的 HTTP/HTTPS 請求。
Charles如果想要實現手機抓包,需要先滿足下面 3 個條件:
(1)電腦上安裝有Charles抓包工具。
(2)安裝有Charles的電腦必須跟手機處在同一個網路里,並且手機網路代理必須設定為Charles,當我們的手機傳送資料時必須經過Charles這一層服務。
(3)在Charles中設定好捕獲 HTTPS。
1.宏哥的環境是Windows 10版本 64位元系統。如下圖所示:
1.電腦本地安裝charles證書
2.檢視電腦charles的IP和埠號
3.手機連線charles,抓取簡單的http
4.charles設定ssl proxy setting
5.手機安裝charles證書
1)先理清一些概念的東西:
a)簡單來說,https是http的安全版本,超文字傳輸協定http是以明文傳送資料,而https是具有安全性的ssl加密傳輸協定,可以這麼認為https=http+ssl。
b)採用https的伺服器必須從CA申請一個用於證明伺服器用途型別的證書,證書是唯一性,只用於對應的伺服器。使用者端要認可這個伺服器是否是安全的,可以進行存取或者交易等操作,則需要進行對伺服器端的驗證。
下圖是使用者端對伺服器的驗證過程:
c)ssl證書,遵循了ssl協定,在使用者端和伺服器之間建立了一條ssl安全通道,一般ssl證書都是在驗證伺服器身份後頒發給使用者端。
d)由於ssl技術已建立在所有主要的瀏覽器和web伺服器程式中,因此,僅需安裝伺服器證書就可以啟用ssl協定,所以使用者端通過信任該證書,就相當於信任了該主機(伺服器)。
下圖是使用者端和伺服器端加密通訊的流程:
2)通過以上一個簡單的理順之後,這也就為什麼當我們在使用Charles進行抓包的時候需要安裝證書,可以通過ssl數位憑證中的私用金鑰來解譯加密的資訊,展示在Charles中,但是Charles有一個特殊的地方,就是實際上使用者端安裝的是Charles的CA證書,然後Charles安裝伺服器的CA證書,實際上流程還是一樣的。
http是預設設定好的,要是預設安裝完沒設定好,我們就自己設定一下,預設的埠號是「8888」我們後面設定手機代理的的時候也要注意這個埠要保持一致。
Charles的設定:這是要開啟代理功能,具體操作步驟如下:
1.啟動Charles,點選「Proxy-->Proxy Settings」,然後在Proxy Settings中填好埠(8888),並且勾選上「Enable transparent HTTP proxying」,最後點選「OK」。如下圖所示:
2.檢視執行Charles的電腦的IP地址,可以在命令列中執行ipconfig或者直接檢視網路設定,如下圖所示:
3.可以對照一下當前所安裝的Charles中的ip地址是否一致,你可以直接在Charles上可以直接檢視Charles的IP和埠,點選「Help-->SSL Proxying」,然後點選「Install Charles Root Certificate on a Mobile Device or Remote Browser」,如下圖所示:
無論電腦端還是手機端進行抓取Https的包,都需要先安裝對應證書才能使用。具體操作步驟如下:
1.開啟charles,點選help-->SSL Proxying-->Install Charles root Certificate 安裝證書,如下圖所示:
2.點選完「Install Charles root Certificate」後,然後點選「安裝證書」,如下圖所示:
3.點選「安裝證書」後,選擇儲存位置「本地計算機」,點選「下一步」,如下圖所示:
4.證書儲存位置選擇‘將所有的證書都放入下列儲存’,然後點選證書儲存後的「瀏覽」,證書儲存選擇「受信任的根證書頒發機構」,點選「確定」,如下圖所示:
5.點選「下一步」,如下圖所示:
6.點選「完成」,提示匯入成功。如下圖所示:
7.點選proxy》 SSL Proxyng Settings。如下圖所示:
8.開啟介面如下 弄到跟我一樣就可以 如果沒有*;443自己按add手動添host :*,port:443 。如下圖所示:
這樣就可以抓取PC端的http和https型別的包了,接下來我們就來進行安卓手機端代理的設定。
本節內容適合所有的 Android裝置。下面以夜神模擬器為例進行講解,其他品牌的模擬器和真實的手機操作方法與此差不多。具體操作步驟如下:
1.在確定了手機和Charles在同一區域網下之後, 那麼我們來到Android手機的設定選項下,找到夜神模擬器手機當前連線的WLAN(一些 Android 手機是單擊右邊的箭頭,有的是長按彈出對話方塊),如下圖所示:
2.看到有一個wifi訊號,長按這個訊號,出現修改網路的彈窗。如下圖所示:
3.點選修改網路,選中高階選項,開啟高階選項,將代理設為手動,代理伺服器主機名填寫電腦的IP,埠號填寫為主機抓包工具的監聽埠。如下圖所示:
4.點選儲存,就成功完成代理的設定了。如下圖所示:
5.電腦出現允許代理的提示,點選Allow即可,如下圖所示:
那麼到此Android手機的網路代理設定就到此為止,其他不同型號的Android模擬器和真機設定大同小異,以此類推,實在不會的自己可以百度一下。到此處表示已經可以抓http的手機包了。
1.開啟手機上的瀏覽器,在瀏覽器中輸入連結:http://open.vipexam.org。中科VIPExam考試學習資源資料庫網站用的是 HTTP 協定而不是 HTTPS 協定,檢視 Fiddler 是否捕獲到了 HTTP 封包。如下圖所示:
2.開啟手機上的 APP,在 APP 中進行一些操作,檢視 Fiddler 是否能捕獲到 HTTP 封包。如下圖所示:
如果抓不到 HTTP 的包,很可能是 Windows 防火牆的問題,到控制面板中關閉防火牆後再試試。
1.開啟手機上的瀏覽器,在瀏覽器中輸入HTTPS協定,檢視Charles是否捕獲到了HTTPS封包。一直在報證書安全警告錯誤,無法抓取,因此需要我們安裝證書,原因宏哥在抓取PC端Web頁面包已經說過了,這裡就不做贅述了。如下圖所示:
2.開啟手機上的APP,在APP中進行一些操作,檢視Fiddler是否能捕獲到HTTPS封包。又出現了Unknown,如下圖所示:
到此,我們知道了要想抓取手機端Https的資料,還的設定證書,證書不用問了,還是Charles下發的。
通過前邊宏哥的測試,我們知道在抓取Android手機封包的時候 跟web端也是一樣,都需要設定證書,否則是無法正常進行抓包的。之前已經在我們的android手機上設定好了Charles的代理服務了,那麼現在就可以通過ip+port的方式來存取Charles從而下載對應的證書。具體操作步驟如下:
1.在Android手機上開啟(自帶)的瀏覽器,輸入:http://chls.pro/ssl 來下載證書。如果不出意外的話就會出現如下介面:
2.給證書命名為:CharlesRoot,點選「確定」,如下圖所示:
3.點選「確定」後,需要輸入憑據儲存的密碼。如下圖所示:
4.再次點選「確定」,提示需要設定鎖屏密碼(注:選擇安裝的檔案後,需要輸入手機的鎖屏密碼。Android一定要有鎖屏密碼才能安裝證書),如下圖所示:
5.點選「確定」。按要求設定一個手機密碼,自己設定一個,記住密碼就行,最後不用了去系統-安全-密碼中去掉即可,如下圖所示:
6.完成鎖屏密碼後,提示證書已安裝,證書安裝成功後,如果你的手機系統沒有設定密碼或者鎖屏圖案,則系統會提示你設定鎖屏圖案或者密碼。如下圖所示:
7.證書安裝好後,檢視已信任證書:具體位置在【設定--->安全--->信任的憑據--->使用者】,如下圖所示:
通過前邊的設定,我們現在可以開始抓安卓手機的https的包了。
1.開啟手機上的瀏覽器,在瀏覽器中輸入HTTPS協定的網站,例如:百度。如下圖所示:
Charles和Fiddler一樣,一個手機可以安裝多個證書,但是每安裝的一個證書裡面都設定有IP地址,所以:安裝的證書和電腦IP是一一對應的,當前的這個證書只能針對某一臺電腦使用,更換電腦後,該證書將不能使用,只能重新安裝與更換的電腦的IP相同的證書才能使用。
對了,關於Android7.0的版本在Fiddler那裡已經詳細地介紹了,只不過是工具換了一下,原理都差不多,這裡和後邊就不再做介紹了。而且這裡介紹的和Fiddler抓包安卓手機的設定也基本一致,種種原因這裡又囉嗦水了一遍。湊合看吧。