Charles 手機抓包

H東邪發表於2021-12-13

Charles 手機抓包

請求抓包對於程式設計師除錯程式碼必不可少,Charles是一個用於抓包的好工具(也可以使用Fiddler),Charles抓包是通過中間人代理實現,在客戶端和服務端通訊時,Charles會擷取客戶端傳送給服務端的請求,然後偽裝成客戶端與服務端進行通訊,服務端返回資料時,Charles會擷取資料偽裝成服務端將資料傳送給客戶端。

Charles的安裝和配置

Charles的安裝比較簡單,根據應用安裝過程的提示,安裝即可,不再贅述。主要講一下Charles手機抓包的配置。

  1. 首先保證需要抓包的手機和安裝Charles的電腦在同一個區域網之中(比如,使用同一個WiFi)。

  2. 開啟Charles,點選Proxy-Proxy Settings,設定埠,Charles會佔用該埠啟動一個服務。勾選Support HTTP/2

  3. 配置手機代理,點開手機連線wifi的高階選項,代理設定為手動,填寫IP和埠,埠即為上一步驟中設定的埠,如8888. IP地址為安裝Charles電腦的地址,可通過ipconfig命令查詢。

  4. 給電腦安裝Charles證書,否則開啟Charles後電腦瀏覽器不能正常上網。(原因是Charles偽裝成中間人,瀏覽器不信任Charles的證書,報錯“您的連線不是私密連線”)

    開啟Charles,Help-SSL Proxying-Install Charles Root Certificate

    具體安裝過程可參考Charles根證書安裝

  5. 手機安裝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工具(下載地址

生成證書

  1. 將通過http://chls.pro/ssl下載的證書(一般字尾為.pem)上傳到安裝有openssl的機器上。

  2. 執行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值
    
  3. 使用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命令

  4. 重啟手機,即可對HTTPS完成資料抓包和解密。

參考

相關文章