分析移動端APP的網路請求

發表於2016-05-13

為了方便,本文以 iOS 系統來進行演示。

使用代理

移動作業系統中都有可以設定系統代理的設定,比如在 iOS 中可以通過 Settings->WLAN 看到很多 Networks,通過點選它們後面的 Info 圖示來設定代理:

分析移動端APP的網路請求
點選 Info 圖示
分析移動端APP的網路請求
設定代理

這樣的話,所有的請求就會先到我們設定的代理伺服器,然後才有代理轉發給目標伺服器。於是我們就有機會在代理伺服器上獲取到請求的內容。

這裡我使用的代理伺服器是 Charles,在安裝並開啟了 Charles 之後,Charles 就已經在後臺建立了一個代理服務了。我們可以通過 ifconfig 命令找到自己的區域網 IP,Charles 預設的代理埠是 8888。現在像上面的截圖那樣,在移動端中進行配置以使用我們的 Charles 代理。

現在你可以在移動端發起一些網路請求,當然最好是 HTTP 的,因為我不清楚 Charles 是否支援其他的協議型別。為了方便,我們可以使用 Safari 開啟一段網址,比如 http://news.baidu.com (注意目前只是 HTTP 的,關於如何操作 HTTPS 下面會講到)。題外話,正如你所見的,百度的最常用的功能就是檢查網路服務的連通情況,比如 ping baidu.com,哈。

如果不出意外,那麼你會在 Charles 左邊欄中看到類似下圖的情況:

分析移動端APP的網路請求

那麼說明我們的配置已經工作了,如果你點選它們中的一個,右邊的介面中就會顯示對應的請求內容:

分析移動端APP的網路請求

很好,Charles 已經為我們做了很多事,現在我們可以輕鬆的知道發生了哪些請求以及請求的內容了。

HTTPS

現在我們試一試在 safari 中輸入 www.baidu.com,我們知道百度在 www 子域中使用了 HTTPS,並且當發現使用者使用的不是 HTTPS 訪問此子域時,會自動的 redirect,於是我們到了 https://www.baidu.com

現在再來看看 Charles 中的情況,我們發現 https://www.baidu.com 前面多了一把小鎖:

分析移動端APP的網路請求

並且右邊沒有給出請求的內容,但是有一條提示 – 對於 SSL 代理需要進行額外的設定。

下面我就簡單解釋一下為什麼對於 HTTPS 而言 Charles 就暫時罷工了。更加具體的內容,可以見我的這篇文章 非對稱加密和數字證書

HTTPS 就是 HTTP over TLS,就是在原本的 HTTP 請求之前,客戶端和伺服器先進行 TLS 握手並建立一個 TLS 連結,然後在此連結之上進行 HTTP 協議的內容。這樣就使得我們的明文請求變成加密的。但是這裡還是有一個缺陷,就是 TLS 握手階段是明文的,那麼為了解決這種雞生蛋蛋生雞的問題,出現了證書 (Certificate) 和證書頒發機構 (Certificate Authority)。

於是在 TLS 握手階段,多了一個校驗證書的步驟,服務端會返回 CA 頒發給其的證書,而客戶端對證書的真實性進行校驗。由於現在的請求內容已經被加密,所以作為代理的 Charles 無法知道其中的內容,於是為了使得 Charles 可以解析 HTTPS 的內容,我們就必須協助其完成 Man-in-the-middle 攻擊,攻擊的物件就是我們自己。

攻擊的方式很簡單,在手機上安裝上 Charles 的 CA 證書即可,所謂 CA 證書就是 CA 機構的證書,來證明 CA 機構的真實性,一些權威的 CA 機構的證書都是內建在我們的作業系統中的。現在我們在移動端上安裝了 Charles 的 CA 證書之後,Charles 就變成了 CA 了,於是它就可以頒發一個偽造的證書來欺騙移動端中的應用。

如果你不想了解其中的原理的話,要實現這個攻擊還是很簡單的,Charles 也提供了很多的便利,按照下面的步驟就行了。

我們在 Charles 的選單中找到 :

分析移動端APP的網路請求

點選一下就會看到:

分析移動端APP的網路請求

在移動端的 safari 中輸入地址 http://charlesproxy.com/getssl 後,跟著下面的截圖來將 Charles 製作的 CA 證書安裝到移動端中:

分析移動端APP的網路請求
分析移動端APP的網路請求
分析移動端APP的網路請求
分析移動端APP的網路請求
分析移動端APP的網路請求

到目前為止,Charles 製作的 CA 證書已經安裝到了你的移動端,如果你希望刪除它的話,可以通過 Settings->General->Profile 來找到它並刪除,另外如果你不信任 Charles 自制的 CA 證書的話,它也是支援你使用自己的 CA 證書的。

再回到 Charles 進行一些設定,新增一下 SSL 規則:

分析移動端APP的網路請求
分析移動端APP的網路請求
Paste_Image.png
分析移動端APP的網路請求

現在,再回到移動端,在 safari 中訪問 www.baidu.com,然後再看看 Charles 中的結果,你會發現:

分析移動端APP的網路請求

現在我們已經可以解析來自移動端的 HTTPS 請求了。

暫時就先寫這麼多吧

相關文章