Charles 手機抓包


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完成數據抓包和解密。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM