使用fiddler抓取手機上的HTTPS包
最近想抓取手機上app的資料包,在電腦上抓包可選的工具有很多, 比如 wireshark ,Linux命令列下有 tcpdump 等等工具。可是在這些工具在手機上都沒法使用,這怎麼搞

後來想了想能不能用網路代理抓包呢,說幹就幹。從網上查到,用fiddler可以代理手機的網路。
第一步下載fiddler
去下載一個fiddler,建議去官網下載 ofollow,noindex">傳送門 。

fiddler
勾選協議,填寫郵箱,然後下載就可以
第二步安裝fiddler
雙擊下載的.exe檔案,然後選擇目錄,next,next,完成安裝
第三步安裝CertMaker外掛
fiddler預設生成的證書不能滿足Android和iOS系統的要求,需要使用這個外掛 傳送門 往下找,找到圖片的地方,點選下載,下載後,雙擊安裝

CertMaker
第四步配置fiddler代理
想要抓HTTPS的資料包,必須安裝證書,

fiddler
點選tools->options,然後出現這個介面,按照我標註的1,2,3,4都勾選,中間會出現一些提示,都點 yes



ca2.png

ca_ok.png
最後出現這個對話方塊說明證書已經安裝成功。
第五步配置代理(手機和電腦在同一個網路中)
重啟fiddler,開始手機的配置。檢視電腦的IP地址,我的是192.168.31.56然後開啟手機的瀏覽器(蘋果手機一定要用Safari),輸入 IP地址:埠號 我的是 192.168.31.56:8888 這個根據具體情況設定

iPhone
下載證書,點選允許,安裝證書.
重點、重點、重點
這時候一定要把安裝的證書設定為信任的證書
去手機的設定->通用->關於本機->證書新人設定,把剛才安裝的證書設定為信任的證書。再去網路設定中,給WiFi設定代理(電腦和手機一定在同一個網路中)

iPhone
然後開啟手機上的app,在fiddler中就可以看到,http的資料了,開啟一個HTTPS的連線,可以看到,資料是沒有加密的

fiddler
這時候如果沒有抓到資料包,或者錯誤,應該是證書配置有問題,把之前的證書清除,按照步驟重新配置一遍.重啟fiddler,重新在手機安裝證書.

清除證書
總結
fiddler代理可以抓到大多數的資料包,但不是所有的資料包都能抓到。fiddler並不支援全部協議,目前已知的有http2、tcp、udp、websocket等,如果應用走了以上協議,那麼fiddler肯定是抓不到的。因為fiddler是基於.net framework實現的,因為.net framework不支援http2,所以fiddler無法抓取http2。
還有一種情況,app使用自帶的證書,我們給手機安裝的證書,app不信任.這樣也是無法抓到的。fiddler抓包的原理是中間人攻擊,也就是說,兩頭瞞,欺騙客戶端&&欺騙伺服器端,如果https證書寫死在app裡,app只信任自己的證書,fiddler沒法瞞客戶端了,因此fiddler也就抓取不到包了。