分析移動(dòng)端APP的網(wǎng)絡(luò)請求

為了方便,本文以 iOS 系統(tǒng)來進(jìn)行演示。

使用代理

移動(dòng)操作系統(tǒng)中都有可以設(shè)定系統(tǒng)代理的設(shè)置,比如在 iOS 中可以通過 Settings->WLAN 看到很多 Networks,通過點(diǎn)擊它們后面的 Info 圖標(biāo)來設(shè)置代理:

點(diǎn)擊 Info 圖標(biāo)
設(shè)置代理

這樣的話,所有的請求就會(huì)先到我們設(shè)置的代理服務(wù)器,然后才有代理轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器。于是我們就有機(jī)會(huì)在代理服務(wù)器上獲取到請求的內(nèi)容。

這里我使用的代理服務(wù)器是 Charles,在安裝并打開了 Charles 之后,Charles 就已經(jīng)在后臺建立了一個(gè)代理服務(wù)了。我們可以通過 ifconfig 命令找到自己的局域網(wǎng) IP,Charles 默認(rèn)的代理端口是 8888。現(xiàn)在像上面的截圖那樣,在移動(dòng)端中進(jìn)行配置以使用我們的 Charles 代理。

現(xiàn)在你可以在移動(dòng)端發(fā)起一些網(wǎng)絡(luò)請求,當(dāng)然最好是 HTTP 的,因?yàn)槲也磺宄?Charles 是否支持其他的協(xié)議類型。為了方便,我們可以使用 Safari 打開一段網(wǎng)址,比如 http://news.baidu.com (注意目前只是 HTTP 的,關(guān)于如何操作 HTTPS 下面會(huì)講到)。題外話,正如你所見的,百度的最常用的功能就是檢查網(wǎng)絡(luò)服務(wù)的連通情況,比如 ping baidu.com,哈。

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

那么說明我們的配置已經(jīng)工作了,如果你點(diǎn)擊它們中的一個(gè),右邊的界面中就會(huì)顯示對應(yīng)的請求內(nèi)容:

很好,Charles 已經(jīng)為我們做了很多事,現(xiàn)在我們可以輕松的知道發(fā)生了哪些請求以及請求的內(nèi)容了。

HTTPS

現(xiàn)在我們試一試在 safari 中輸入 www.baidu.com,我們知道百度在 www 子域中使用了 HTTPS,并且當(dāng)發(fā)現(xiàn)用戶使用的不是 HTTPS 訪問此子域時(shí),會(huì)自動(dòng)的 redirect,于是我們到了 https://www.baidu.com。

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

并且右邊沒有給出請求的內(nèi)容,但是有一條提示 - 對于 SSL 代理需要進(jìn)行額外的設(shè)置。

下面我就簡單解釋一下為什么對于 HTTPS 而言 Charles 就暫時(shí)罷工了。更加具體的內(nèi)容,可以見我的這篇文章 非對稱加密和數(shù)字證書。

HTTPS 就是 HTTP over TLS,就是在原本的 HTTP 請求之前,客戶端和服務(wù)器先進(jìn)行 TLS 握手并建立一個(gè) TLS 鏈接,然后在此鏈接之上進(jìn)行 HTTP 協(xié)議的內(nèi)容。這樣就使得我們的明文請求變成加密的。但是這里還是有一個(gè)缺陷,就是 TLS 握手階段是明文的,那么為了解決這種雞生蛋蛋生雞的問題,出現(xiàn)了證書 (Certificate) 和證書頒發(fā)機(jī)構(gòu) (Certificate Authority)。

于是在 TLS 握手階段,多了一個(gè)校驗(yàn)證書的步驟,服務(wù)端會(huì)返回 CA 頒發(fā)給其的證書,而客戶端對證書的真實(shí)性進(jìn)行校驗(yàn)。由于現(xiàn)在的請求內(nèi)容已經(jīng)被加密,所以作為代理的 Charles 無法知道其中的內(nèi)容,于是為了使得 Charles 可以解析 HTTPS 的內(nèi)容,我們就必須協(xié)助其完成 Man-in-the-middle 攻擊,攻擊的對象就是我們自己。

攻擊的方式很簡單,在手機(jī)上安裝上 Charles 的 CA 證書即可,所謂 CA 證書就是 CA 機(jī)構(gòu)的證書,來證明 CA 機(jī)構(gòu)的真實(shí)性,一些權(quán)威的 CA 機(jī)構(gòu)的證書都是內(nèi)置在我們的操作系統(tǒng)中的?,F(xiàn)在我們在移動(dòng)端上安裝了 Charles 的 CA 證書之后,Charles 就變成了 CA 了,于是它就可以頒發(fā)一個(gè)偽造的證書來欺騙移動(dòng)端中的應(yīng)用。

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

我們在 Charles 的菜單中找到 :

點(diǎn)擊一下就會(huì)看到:

在移動(dòng)端的 safari 中輸入地址 http://charlesproxy.com/getssl 后,跟著下面的截圖來將 Charles 制作的 CA 證書安裝到移動(dòng)端中:

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

再回到 Charles 進(jìn)行一些設(shè)置,添加一下 SSL 規(guī)則:

Paste_Image.png

現(xiàn)在,再回到移動(dòng)端,在 safari 中訪問 www.baidu.com,然后再看看 Charles 中的結(jié)果,你會(huì)發(fā)現(xiàn):

現(xiàn)在我們已經(jīng)可以解析來自移動(dòng)端的 HTTPS 請求了。

暫時(shí)就先寫這么多吧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容