Charles 手機抓包
請求抓包對於程式設計師除錯程式碼必不可少,Charles是一個用於抓包的好工具(也可以使用Fiddler),Charles抓包是通過中間人代理實現,在客戶端和服務端通訊時,Charles會擷取客戶端傳送給服務端的請求,然後偽裝成客戶端與服務端進行通訊,服務端返回資料時,Charles會擷取資料偽裝成服務端將資料傳送給客戶端。
Charles的安裝和配置
Charles的安裝比較簡單,根據應用安裝過程的提示,安裝即可,不再贅述。主要講一下Charles手機抓包的配置。
-
首先保證需要抓包的手機和安裝Charles的電腦在同一個區域網之中(比如,使用同一個WiFi)。
-
開啟Charles,點選
Proxy-Proxy Settings
,設定埠,Charles會佔用該埠啟動一個服務。勾選Support HTTP/2
-
配置手機代理,點開手機連線wifi的高階選項,代理設定為手動,填寫IP和埠,埠即為上一步驟中設定的埠,如8888. IP地址為安裝Charles電腦的地址,可通過
ipconfig
命令查詢。 -
給電腦安裝Charles證書,否則開啟Charles後電腦瀏覽器不能正常上網。(原因是Charles偽裝成中間人,瀏覽器不信任Charles的證書,報錯“您的連線不是私密連線”)
開啟Charles,
Help-SSL Proxying-Install Charles Root Certificate
具體安裝過程可參考Charles根證書安裝
-
手機安裝Charles根證書
如果需要抓包HTTPS請求並解密,需要在手機上安裝Charles根證書,以讓手機信任Charles。
- 開啟手機瀏覽器,輸入
http://chls.pro/ssl
下載charles證書。 - 開啟手機設定-安全與隱私-加密與憑據-從儲存裝置安裝,選擇下載的證書檔案安裝即可。
- 開啟手機瀏覽器,輸入
Charles手機證書配置
一般按照上述小節配置就可以實現對HTTPS請求的抓包和資料解密。但是Android 7版本及以上的系統,不再信任使用者級的證書,只信任系統級的證書。即便是按照上述操作安裝了Charles的根證書,發現HTTPS請求也無法正常解析,會有Unknown
報錯,Charles的Note會提示You may need to configure your browser or application to trust the Ch
.
此類場景,需要給Android7及以上的手機安裝系統級證書,來實現HTTPS的抓包。
準備工作
-
需要抓包的手機已完成Root。
-
需要安裝好Openssl工具(可以在Linux伺服器上完成,或者是通過win10的WSL來操作)
-
adb工具(下載地址)
生成證書
-
將通過
http://chls.pro/ssl
下載的證書(一般字尾為.pem
)上傳到安裝有openssl
的機器上。 -
執行
openssl
命令重新命名證書名稱openssl x509 -inform PEM -subject_hash -in xxx.pem # 此處xxx替換為具體的名稱
該命令會輸出一個簽名,找到其中的hash值進行復制。如下文中的
2598f6a3
。2598f6a3 -----BEGIN CERTIFICATE----- MIIFRjCCBC6gAwIBAgIGAX2jljHLMA0GCSqGSIb3DQEBCwUAMIGnMTgwNgYDVQQD DC9DaGFybGVzIFByb3h5IENBICgxMCBEZWMgMjAyMSwgTEFQVE9QLU1CNFIyUTJF KTElMCMGA1UECwwcaHR0cHM6Ly9jaGFybGVzcHJveHkuY29tL3NzbDERMA8GA1UE CgwIWEs3MiBMdGQxETAPBgNVBAcMCEF1Y2tsYW5kMREwDwYDVQQIDAhBdWNrbGFu ZDELMAkGA1UEBhMCTlowHhcNMjExMjA5MDkwNDI5WhcNMjIxMjA5MDkwNDI5WjCB pzE4MDYGA1UEAwwvQ2hhcmxlcyBQcm94eSBDQSAoMTAgRGVjIDIwMjEsIExBUFRP UC1NQjRSMlEyRSkxJTAjBgNVBAsMHGh0dHBzOi8vY2hhcmxlc3Byb3h5LmNvbS9z c2wxETAPBgNVBAoMCFhLNzIgTHRkMREwDwYDVQQHDAhBdWNrbGFuZDERMA8GA1UE CAwIQXVja2xhbmQxCzAJBgNVBAYTAk5aMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEArcxNxm3EhvWl7Jk8H5otzU/ElTJivzMfALft45ghGam6Ds0utF0S AgRvfmC7/KtxWnTzokc9ewA440CBe23QvfmJcRVqaJBjvS40MT3y2fWS8BNNgZlS QE4bnUexIdfVWzYXoo80P/mKDSxfTbc+3PPYfUDXDR99GDZKLcZfgMeRkAAEReaj qzjjeDDGj/DEVRZZQeXfESTs/tGaruupzqIENqToLMSQSwTDpIaApEz76Lf5qAP3 XAUnpTnz5E+5n1WRV9oRxBKYVILDrTyejzwh9Koh25gij31knDCGioHqXVbwfg81 3cSlVj79BMjcuGRPwo5rpfzyYV9w5YVaEQIDAQABo4IBdDCCAXAwDwYDVR0TAQH/ BAUwAwEB/zCCASwGCWCGSAGG+EIBDQSCAR0TggEZVGhpcyBSb290IGNlcnRpZmlj YXRlIHdhcyBnZW5lcmF0ZWQgYnkgQ2hhcmxlcyBQcm94eSBmb3IgU1NMIFByb3h5 aW5nLiBJZiB0aGlzIGNlcnRpZmljYXRlIGlzIHBhcnQgb2YgYSBjZXJ0aWZpY2F0 ZSBjaGFpbiwgdGhpcyBtZWFucyB0aGF0IHlvdSdyZSBicm93c2luZyB0aHJvdWdo IENoYXJsZXMgUHJveHkgd2l0aCBTU0wgUHJveHlpbmcgZW5hYmxlZCBmb3IgdGhp cyB3ZWJzaXRlLiBQbGVhc2Ugc2VlIGh0dHA6Ly9jaGFybGVzcHJveHkuY29tL3Nz bCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4wDgYDVR0PAQH/BAQDAgIEMB0GA1UdDgQW BBQa42h5Cgu4cdr8ij3pnqk8RuHt7DANBgkqhkiG9w0BAQsFAAOCAQEAEvocaQrm ZxTnSGueTjmsMlDppnfi84pOma9+IY0cKALJOtSCG01WvEzoxd6rXDrMNGRVG6Zd SrkpJTnKp/9L3NAcwX/S1Gt5a18gI0wMCMGfoFYcAA2xvIbOF0UTCi17tTPK4ltQ Bb0IPDUmLzP7yvHspCT+UEE/2B2wgmFiB4RIA01O8eQpSMAlzEfLdpwJwGfFIaWn GpcVotgQRvmOJRBV/fN3AfjOI5sGjSx2/ExW+vbUu98u6PHs1HleVslNDY1o+rE+ qxkQCLIhIoCD1rp8AE1L7OS8iGTju9oT99F/YV21QvtKWJ9YpsgWM14qzv9MzLQ6 N+oMxISSpEr47Q== -----END CERTIFICATE-----
重新命名證書檔案。
mv xxx.pem 2598f6a3.0 # 2598f6a3為上步中的hash值
-
使用Adb工具將字尾為0的證書上傳到手機
/system/etc/security/cacerts/
目錄下。通過資料線將手機連線到電腦上,並開啟開發者除錯。
將上述字尾為0的證書檔案放在
adb
工具的安裝目錄下,開啟windows終端(windows+R 輸入 cmd)執行
# 將證書上傳到手機上 adb push 2598f6a3.0 /sdcard/Download adb shell su # 將證書複製到/system/etc/security/cacerts/ cp /sdcard/Download/2598f6a3.0 /system/etc/security/cacerts/ # 修改證書許可權 chmod 644 /system/etc/security/cacerts/2598f6a3.0
如果執行
cp
命令時出現Read-only file system
錯誤,需要將system
掛載為可讀寫。執行命令:mount -o rw,remount /system
如果執行該命令報錯
mount -o rw,remount /system /system’ not in /proc/mounts
,執行下一條命令,簡單粗暴解決。mount -o rw,remount / chmod 777 /system mount -o rw,remount /system
然後繼續執行
cp
命令 -
重啟手機,即可對HTTPS完成資料抓包和解密。