最近在做APP上的活動(dòng)頁面的調(diào)試工作,在調(diào)試的過程中遇到了一些麻煩,比如線上報(bào)bug,本地很難在瀏覽器上模擬真機(jī)復(fù)現(xiàn),頻繁改動(dòng)代碼,頻繁上線很麻煩,于是調(diào)研了一下抓包工具,charles,一下是使用教程及遇到的一些問題和解決方法:
一.需要的工具
1.下載charles并安裝
2.需要一臺(tái)有root權(quán)限的手機(jī)
注意:
小米手機(jī)自帶root為不完整root,需要進(jìn)行完整root(即解鎖system)。方法如下:
安裝adb工具 :brew install Caskroom/cask/android-platform-tools# 沒有安裝homebrew的先安裝homebrew
root? :? adb devices# 測試adb是否安裝成功,成功了會(huì)出現(xiàn)設(shè)備的hash值
? ? ? ? ? ?adb root
? ? ? ? ? ?adb disable-verity# 禁用系統(tǒng)驗(yàn)證
二.配置http代理
proxy -> proxy settings -> proxies

選擇監(jiān)聽8888端口,并勾選Enable SOCKS proxy這樣也可以監(jiān)聽瀏覽器的http請求

三.配置SSL代理
proxy -> SSL Proxy Settings
點(diǎn)add添加需要監(jiān)視的域名,支持 *號(hào)通配符,端口一般都是443

四.為手機(jī)配置http代理
以小米手機(jī)為例
設(shè)置 -> wlan -> 選擇一個(gè)網(wǎng)絡(luò)并鏈接 -> 點(diǎn)擊此網(wǎng)絡(luò)的詳情(右邊的箭頭icon)-> 設(shè)置代理為手動(dòng) -> 主機(jī)名為你的電腦ip -> 端口號(hào)8888 -> 點(diǎn)擊右上角對號(hào)設(shè)置成功?

這時(shí)候charles會(huì)出現(xiàn)是否允許此設(shè)備鏈接的提示,點(diǎn)擊allow就行啦
五.為手機(jī)安裝根證書
Charles的根證書下載網(wǎng)址: chls.pro/ssl?
以小米手機(jī)為例:
1.需要下載一個(gè)第三方瀏覽器
在瀏覽器中輸入?chls.pro/ssl 下載證書
更改證書后綴為.crt :?
? ? ? 系統(tǒng)工具-文件管理-手機(jī)-QQBrowser-其他(證書的文件路徑),找到charles-proxy-ssl-proxying-certificate.pem,更改后綴
設(shè)置-> wlan -> 下滑到高級設(shè)置 -> 安裝證書 -> 找到剛剛修改過的文件點(diǎn)擊并安裝 -> 系統(tǒng)提示安裝成功
六.為電腦安裝根證書
Help -> SSL Proxy -> install charles root certicate
進(jìn)入鑰匙串信任此證書





七.訪問需要代理的地址

找到需要代理的地址,右鍵map local?

設(shè)置local path,點(diǎn)擊choose可以選擇本地文件,確認(rèn)
這樣就代理成功啦
八.可能會(huì)出現(xiàn)的問題
當(dāng)你訪問https的資源時(shí),出現(xiàn)以下情況

查看Help -> SSL Proxying?


說明根證書沒有安裝成功,在Android 7.0及以上版本會(huì)出現(xiàn)這樣的問題
解決方法:將證書安裝到系統(tǒng)證書中(需要root)
系統(tǒng)證書的目錄是:/system/etc/security/cacerts/
每個(gè)證書的命名規(guī)則為:<Certificate_Hash>.<Number>
Certificate_Hash表示證書文件的hash值,Number是為了防止證書文件的hash值一致而增加的后綴
證書的hash值可以由命令計(jì)算出來,在終端輸入openssl x509 -subject_hash_old -in <Certificate_File>,其中Certificate_File為證書路徑,將證書重命名為hash.0放入系統(tǒng)證書目錄,之后你就可以正常抓包了。
